Программист может обладать множеством навыков (понимание проблемы, умение задавать хорошие вопросы, хорошие дизайнерские навыки и т. д.).
Я считаю Навык системной отладки невероятно ценным. Это общий навык отладки любой технической системы (от разряда батареек в вашем пульте дистанционного управления до сигнала помех от радиолюбителя вашего соседа).
Вот метод, который я дал студентам, когда преподавал компьютерное программирование:
Что думаете?
Этот вопрос принадлежит какому-то блогу ...

Я думаю, что приверженность важнее.
если вы определяете «устранение неполадок» как «отладку», тогда да, это критично!
Обновлено: на основе ваших правок метод нисходящего процесса исключения, который вы указали, является систематическим и очень ценным.
Другой метод - это рассуждение в обратном направлении:
Это полезно, когда есть много путей / возможностей прямой подачи, которые могли вызвать проблему, но имеет то преимущество, что не требуется отладчик или трассировка для выяснения наиболее вероятной причины.
Другой метод - это метод обычных подозреваемых, когда вы начинаете расследование с той части кода, которая была затронута последней или дала вам больше всего проблем, чтобы увидеть, изменилось ли что-то в нем, чтобы вызвать новую проблему.
Другой способ - просто сесть и подумать о том, какие ситуации могут привести к наблюдаемой ошибке / поведению / значению. Этот метод полезен, когда вы спешите и не хотите систематически сканировать множество мест, но требует, чтобы у вас уже было полное понимание системы. Это полезно, когда рассматриваемая ошибка / поведение вызвано недостатком дизайна или недосмотром, а не ошибкой кодирования.
Спасибо. Хорошее разъяснение. Обновил вопрос.
@ [MrAnalogy]: отредактировано на основе ваших правок
Это важно, но устранение неполадок / отладка для меня - это просто:
Так что да, это важно, но не так уж далеко от других, о которых вы упомянули. Я бы сначала измерил (1). Представьте проблему, если некоторые детали намеренно оставлены неясными. Он должен уметь это понимать. Следующий шаг: (2) он задал правильные вопросы. А затем атакует проблему неслучайно (3).
Зная, как:
Если это и есть устранение неисправностей, то да, это очень важно: D
Устранение неполадок в мире компьютеров обычно подразумевает вашу базовую работу типа «Мой-компьютер-не-работает-вы можете-исправить», которую делают парни за прилавком в Best Buy. Я думаю, что вы имеете в виду отладку, и хотя и то, и другое могут быть ценными (я, конечно, рад, что мне не нужно заниматься поддержкой каждого сбоя, который есть на моем компьютере), отладка, безусловно, является более важным навыком для разработчика. Независимо от языка, знание того, как отслеживать, выявлять и устранять ошибки, является одной из самых сложных и наиболее часто выполняемых задач, которые программист выполняет на протяжении всей своей карьеры.
При этом я бы сказал, что самым важным навыком в моем арсенале я считаю настойчивость. Когда мой менеджер ставит передо мной задачу, он знает, что я ее выполню, несмотря ни на что. Период. Независимо от того, какие препятствия ставят на моем пути, какие сроки, независимо от конечной цели, я сделаю все возможное, чтобы оправдать их ожидания, пока работа не будет выполнена или они не будут удовлетворены результатами. Это, кстати, очень важное различие! Первоначальная цель не всегда достижима, и когда это не так, моя работа заключается в том, чтобы руководство как можно скорее точно знало, почему это не так и какие у них есть альтернативы. И важно предоставить эти альтернативы. Никто не хочет слышать: «Ну, извините. Вы в значительной степени облажались». Предоставление другого решения проблемы - часть этой настойчивости. Вы никогда не бросите курить, если не получите указание.
Короче говоря, возможность довести проект до конца, не отвлекаясь и не сдаваясь, на мой взгляд, единственный наиболее эффективный способ выделиться и стать желанным для работодателей. И поверьте мне, это чертовски сложно! Но это то, что делает его ценным! :)
Умение устранять неполадки имеет решающее значение. Обычно у хорошего специалиста по устранению неполадок больше вопросов, чем ответов. У них также будет методический подход к проверке решений найденных ими проблем. Они не будут бояться того, чего не знают, и не будут стесняться задать «глупый» вопрос. Они быстро учатся. Все хорошие качества для программиста.
Когда я закончил колледж, я думал, что ключ к тому, чтобы стать отличным программистом, - это сделать идеальный (как по функциям, так и по форме) код с первого раза. Любые проблемы возникали из-за того, что я был недостаточно хорош, или потому, что я не был достаточно осторожен, или не мог думать достаточно далеко вперед, или потратил достаточно времени на планирование. Если бы я мог решать все задачи на доске, я был бы отличным программистом.
Я начал свою карьеру в программировании с работы над отладчиком. Спустя пару лет я убедился, что самый важный навык для успешного программиста - это отладка. Я согласился с тем, что не смог написать идеальный код с первого раза, как и никто другой. Все мое время, проведенное за доской, никогда не приводило к появлению рабочего кода, но определенно занимало много времени. Вместо этого я просто написал что-то, что казалось правдоподобным, а затем отладил. Не было возможности написать отличный код, как я хотел, но я мог действительно хорошо исправить сломанный код.
Это сработало. Я смог создать программное обеспечение для доставки, хотя на это у меня ушло в 2 или 3 раза больше времени, чем планировалось. Я смог исправить почти все важные ошибки перед отправкой, не внося слишком много других ошибок по пути. (Я вздрагиваю, когда пишу это!).
Затем я прочитал Рефакторинг Фаулера. Это полностью изменило мое мышление. Он научил меня тому, что, хотя я не мог написать простой, ясный, чистый, поддерживаемый код с первого раза, я смог добраться туда. Причина, по которой я не смог правильно нарисовать свой дизайн на доске в первый раз, заключалась в том, что вы не могли понять, правильный ли он, пока не увидите его в коде. Только тогда вы сможете решить, что не так и как это исправить. Казалось, что ключевым моментом было как можно скорее приступить к написанию кода, сделав при этом как можно более дешевым и безопасным исправление конструкции вашего кода после его написания.
Это привело меня к экстремальному программированию, где я узнал, что, написав хорошо продуманный код, где классы небольшие, простые и легкие для понимания, у меня также может быть простой, легкий для написания и легкий для передачи модуль. тесты. Когда вы пишете подобный код, ошибка модульного теста очень быстро указывает на корень проблемы. Когда я все делаю правильно, отслеживать проблемы так легко, что я редко прикасаюсь к отладчику.
Теперь я не ангел кода. Я редко использую парные программы и не всегда сначала пишу свои модульные тесты. Я виню своих родителей. Да, и тот факт, что мой работодатель и мои инструменты не оказывают такой поддержки, как я бы хотел. И конечно же, я плачу за это. Затем я достаю отладчик и применяю те старые навыки отладки, при этом мне жаль, что я не написал более качественные модульные тесты.
Есть еще одно место, где отладка имеет решающее значение: производство. Когда вы смотрите на проблему в естественных условиях, возможность быстро диагностировать ее с помощью отладчика очень эффективна. Я могу научиться писать программы, которые хороши для самодиагностики, где я могу предсказать слабые места, но для непредсказуемых проблем, я думаю, мне всегда понадобится отладчик.
Мне нравится, как один из моих бывших боссов определил две составляющие как разработчика, что объясняет, почему простого «Да» здесь может быть недостаточно:
1) Программирование - умение разрабатывать и писать код.
2) Устранение неполадок - отладка, исследование проблем, чтобы определить, является ли это проблемой кода, данных или сети, исправить ошибки.
И я полагаю, что моя точка зрения состоит в том, что если вы не можете отлаживать свой собственный код, очень и очень трудно быть продуктивным программистом. (И если вы не можете отлаживать чужой код, тогда будет очень мало отладки даже своего собственного кода.)
В одном предложении «Разделяй и властвуй»