Важны ли навыки отладки, чтобы стать хорошим программистом?


24

Наряду с другими качествами программисту нужны хорошие навыки отладки? Если у меня есть заявитель, который не смог найти ошибку в данной программе, но смог решить все головоломки и программы, должен ли я рассмотреть его для работы?

РЕДАКТИРОВАТЬ: - Головоломки нормальные красные, синие и красно-синие шары, как. Программы похожи на поиск непрерывных k нулей в массиве. Программа отладки - это то, что не выполняется из-за условия, которое должно быть> =, но вместо этого>. Все на бумаге.


13
Ему разрешили запустить программу, или он должен был найти ошибку, просматривая код?
Майкл К

9
Вы можете кодировать только так хорошо, как вы можете отлаживать. два идут рука об руку в моей книге.
Демьян Касье

3
некоторые люди лучше в этом, чем другие. часто бывает трудно обнаружить ошибку в фрагменте чужого кода, особенно во время стрессового интервью.
leed25d

6
@Fanatic: Только если вы работаете только со своим собственным кодом. Большая часть отладки, которую я выполняю на работе, - это поиск ошибок других людей.
Мейсон Уилер

3
@Manoj R, вы уверены, что могли бы найти ту же проблему, если бы у вас было столько же времени? Вы уверены, что только из-за того, что заявитель не обнаружит проблемы на бумаге за 20 минут, она не сможет справиться с ней с помощью Google (да, чертовски Google) и пару недель практики?
Работа

Ответы:


37

Да очень важно

Что касается этого конкретного кандидата, возможно, он или она не был достаточно знаком с кодовой базой x, чтобы отладить его.

Хороший решатель проблем должен уметь отлаживать, так как все, что обычно требуется, это иметь очень логичный метод / подход.


1
Отладка более чем любой другой навык в программировании идет с опытом и имеет меньше отношения к таланту.
Питер Б

24

Если вы не можете отлаживать, вы почти не программист, не говоря уже о хорошем.

Отладка - это реальное практическое применение не только технических навыков, но и умений анализа и мыслительных процессов. В результате я бы оценил его как гораздо более полезный и актуальный тест, чем вопросы доски или интервью.

Если ваша работа не связана с тем, чтобы тратить весь день на ответы на теоретические вопросы, вам нужен кто-то, кто сможет применить все свои навыки.

Что вам действительно нужно сделать, так это спросить себя, был ли это честный тест на способность к отладке - могут ли они запустить код, поставить точки останова и т. Д. Так же, как в реальном мире? Что это за ошибка? Это что-то, что компилятор подхватит и пометит (в этом случае это довольно бессмысленный вопрос, поскольку им никогда не понадобится это определять)?

Если бы это было просто написано на бумаге, то это в основном просто подробный тест на чтение, и это еще более отвлеченный навык, чем обычный технический вопрос для собеседования, и я бы сказал, что он довольно бесполезен.


2
+1 за «Спроси себя, был ли это честный тест на способность к отладке» - Похоже, это не так. Тест справедливо включал бы работоспособный код с помощью отладчика, т.е. поместить их в естественной, нормальной рабочей среде (учитывая , что они будут редко работать SANS отладчик).
двойник

11

Главное правило найма - в любом случае, скажи нет.

Если вам нужно реализовать много нового дешевого кода - вы можете получить этого парня, но лично я продолжу поиск.


7
Я нанял много людей в свои годы и сожалел почти о каждом кандидате «Может быть», которого я нанял.
JohnFx

10

Если разработчик не может писать чистый код все время (абсолютно невозможно) и работать только над проектами «зеленого поля» (никогда не будет так), то да, навыки отладки абсолютно необходимы. Абсолютно. У меня был опыт работы с разработчиками, которые просто не любили отлаживать, поэтому они стали ленивыми и бросили код через стену в QA для тестирования. Но эти разработчики не длятся очень долго.

Разработка программного обеспечения - это умение и умение решать проблемы. Эти проблемы включают как проблемы бизнеса, так и проблемы с их (и другим) кодом. Кстати, многие проекты по обслуживанию направлены именно на исправление ошибок, поэтому отладка является абсолютно необходимым навыком.


Еще одна вещь, которую я хочу добавить ... Часть нашего собеседования здесь заключается в том, что мы даем кандидату упражнение как для отладки приложения, так и для добавления к нему нескольких небольших функций. Каждая часть этого процесса одинаково важна.
Марк Фридман

7

Я хотел бы иметь в виду, что существует множество веб-сайтов типа «вопрос для интервью», и вполне возможно изучить множество вопросов и головоломок. Одна вещь, которую вы не можете изучить, это отладка кода, который вы никогда не видели раньше. Либо вы написали достаточно кода, который знаете, как отлаживать, либо нет. Если это позиция начального уровня, я не исключаю кандидата, но если он утверждает, что имеет опыт работы с языком и не может отладить код на нем, это, безусловно, поднимает красный флаг.


5

Основное различие, которое я видел между младшими и старшими программистами, заключается в их умении отлаживать. Умение отлаживать это то, что приходит только с практикой и опытом.

Например, подумайте о странной ошибке, когда Java-программа прекрасно работает на консоли в интерактивном режиме, но не работает, когда вы пытаетесь использовать канал Unix для того же ввода. Если вы сталкивались с этой проблемой раньше, вы можете проверить, что она new Scanner(System.in)вызывается только один раз; ошибка в том, что он потребляет буфер при передаче, но, очевидно, не в интерактивном режиме. Я ожидаю, что более старший программист обнаружит эту ошибку быстрее. Возможно, потому что они испытали это раньше, или потому что у них были другие проблемы с буферизацией в прошлом.

Что касается решения головоломок и написания нового кода, хотя опыт важен, это то, что программист младшего уровня может выполнять так же хорошо, или даже лучше, чем более старший программист. То есть интеллект и умение могут иметь больший эффект, который не зависит от опыта.

Если у вас есть возможность инвестировать в младшего программиста, у которого могут быть новые идеи и который может помочь команде «справиться», и они, кажется, прекрасно пишут новый код, продолжайте и нанимайте их. Если вы ищете программиста старшего уровня, то отсутствие навыков отладки может быть основным предупреждающим признаком: у них может быть десятилетний опыт работы, который равносилен испытанию только первого года в десять раз.

Как примечание, есть способы стать лучше в отладке без 10-летнего опыта. Я рекомендую книгу Андреса Зеллера « Почему программы не работают: руководство по систематической отладке» , чтобы узнать научные принципы и лучше понять, как воспроизвести, найти и исправить ошибки.


Таким образом, отладка - это то, что приходит на практике и может быть изучено, и ей не следует придавать большого значения при выборе кандидатов.
Маной Р

1
Чтобы быть ясным: вы должны весить это сильно для старших разработчиков, но меньше для младших разработчиков. Например, тому, кто только что закончил колледж и начал программировать свой первый год, может потребоваться в 10 раз больше времени для отладки чего-либо. Но есть веские причины инвестировать в младших разработчиков.
Макнейл

5

Это зависит от вашей среды. Если вы играете в содоку и другие головоломки весь день, возможно, это будет хорошим кандидатом.

Однако, если у вас иногда есть ошибки в вашем коде, или он не всегда работает точно так, как ожидалось, я предлагаю вам найти кого-то хорошего в устранении неполадок.

Наймите то, что вам нужно, а не какой-то идеал того, каким должен быть программист.


3

Наряду с другими качествами программисту нужны хорошие навыки отладки?

Да.

Отладка кода является частью решения проблем. Я никогда не сталкивался с разработчиком, который написал идеальный код и ноль ошибок. Разработчик будет либо отлаживать свой код, либо чужой. Это необходимость.

я должен рассмотреть его для работы?

Может быть, это зависит.

Отсутствие возможности отладки программы на собеседовании, вероятно, не должно нарушать договоренности, если заявитель смог завершить все другие головоломки и программы на собеседовании. Это действительно зависит от глубины и глубины интервью.

Сколько отладки влечет за собой эта позиция? Если много, то, возможно, следует уделить больше внимания тому, насколько хорошо кандидат может ответить на вопрос отладки. Но поскольку вы упомянули только один вопрос об отладке, похоже, что это не так.


2
+1 Чтобы повторить отладку необходимо, но не нарушитель соглашения во время интервью.
Гаурав

3

программисту нужны хорошие навыки отладки?

Да. Тем не менее, я бы попросил вас рассмотреть методологию в интервью (то есть викторину / тестовый стиль) менее чем идеально (хорошо, ошибочно), так как многие люди находят код на бумаге странным, незнакомым опытом.

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

Я также выразить сомнения по поводу проблем головоломки во время интервью, в частности , в письменной форме, как если кандидат не имеет правильные предположения рамки ссылки (на прием), головоломка может быть неразрешимой для них. Т.е. многие головоломки на собеседованиях страдают от единственного правильного пути, в то время как жизнь сложна, и наиболее креативными являются те, кто использует неожиданно новые подходы к решению проблемы, которая может не сработать с конкретной заранее приготовленной головоломкой с ожидаемым решением. , Это все равно что ожидать, что все трубачи сыграют джаз. Это можно сделать, задав вопрос в виде неконфронтационной (давление может повлиять на креативность) интерактивной дискуссии. Опять же, для меня ответ вторичен, когда можно увидеть хороший мыслительный процесс. Скорее всего, вам придется попросить их подумать вслух, но в моем опыте это более продуктивно.

Я не читал или оценен Целлер Почему программы не , но я могу рекомендовать отладку по Agans как короткие, быстрой прочитал , что может помочь укрепить Времнный отладочный процесс в более структурированных, бетоне, и организованные усилия, которые могут помочь быть более эффективным при отладке. Также распечатайте копию и повесьте ее в своем кабинете или на обходном пути, на постере «Правила отладки ». Это отличное напоминание о тех плохих днях, когда кажется, что ничего не получается. У меня мало плохих дней, и я трачу меньше времени на активную отладку (читай: почесал голову в замешательстве ), пытаясь следовать им по духу, если не по письму.


Отличный ответ. Я провел буквально дни в поисках простейшего исправления ошибки и буквально наткнулся на исправление хитрой ошибки за считанные минуты. У хорошего разработчика должна быть разумная стратегия. И это сильно зависит от приложения. Скажем, в вашем приложении не возникает проблем, когда вы помещаете кучу операторов print / log или запускаете версию с символами. Что тогда? Заявитель должен, по крайней мере, иметь возможность сформулировать какую-то согласованную стратегию.
SnoopDougieDoug

2

Я бы сказал, что отладка необходима, если программист не настолько хорош, что он никогда не делает ошибок. Я не уверен, что это невозможно, но я не могу представить это с помощью современных популярных языков и инструментов.

Мне не нравится, когда меня ставят на место в интервью. Если кандидат нервничает (а кто нет), он / она может нарисовать пустой текст, как программист, он может быть в состоянии регулярно решать такие проблемы. Затем, если бы это была хорошо известная проблема с собеседованием или тестом по компьютерному тесту, кандидат мог бы знать результат наизусть, но не иметь возможности продумать новую проблему. Также, если кандидат не знаком с языком, ему придется бороться. Многие ошибки трудны, потому что хороший программист знает, что он хотел напечатать, и его мозг быстро реагирует на чтение кода. Я не могу найти использование в стиле C =, где == должен был использоваться при проверке, потому что я знаю, каково было намерение, и мой мозг примет ярлык синтаксического анализа, читая его.


1

Хорошая часть программирования решения проблем, и для решения проблемы вы должны знать основную проблему, а не только симптомы или несоответствия. Отладка - это искусство определения основной проблемы.

  • определить основную проблему
  • лучше в состоянии визуализировать поток

и многое другое.


1

Я бы добавил немного больше к ситуации, указав на ошибку, и посмотрю, как реагирует человек. Они слишком драматичны в отношении типа «Да! Я идиот, это было так глупо ...», слишком апатичны в лагере «Да, какой бы чувак», или там активно слушали то, что было что-то не так с извинениями или замечаниями, которые означают, что они испортили то, что должны были решить? Просто о чем подумать в будущих ситуациях.

Своевременная отладка - отличный навык. Это немного отличается от того, чтобы дать кому-то проблему, когда она исправляется, когда исправляется. Иногда должны быть предприняты агрессивные меры по спасению системы, что следует признать, поскольку я полагаю, что большинству компаний не хотелось бы останавливать продажи на несколько недель, пока кто-то исправляет ошибку в бухгалтерском программном обеспечении, используемом компанией.


1

Отладка является критическим навыком. На самом деле, я бы сказал больше, что устранение неполадок является критическим навыком. Кто-то должен знать, как определить проблему (в том числе, какую информацию пользователя запрашивать и какие журналы просматривать), как ее воспроизвести, какие источники данных он имеет в наличии для диагностики проблемы и как ее отладить, а затем как исправить одну вещь. не ломая что-то еще. Однако определить это во время собеседования сложно.

Я хотел бы дать ему реальную проблему для поиска и возможность использовать доступные инструменты, а затем спросить, какие шаги он предпринял, чтобы найти проблему или что еще он мог бы сделать, если он не смог найти проблему в отведенное время. Вы действительно ищете кого-то, кто решает проблему несколько систематически и у которого в наборе инструментов больше инструментов, чем только отладчик и Google (за исключением младшего уровня, когда он должен как минимум попробовать оба из них (кто-то, кто не может пробовать эти две вещи, вероятно, не компетентно, или, по крайней мере, я бы не стал рисковать с ним), но, вероятно, пока не имеет много продвинутых инструментов для устранения неполадок).

Я бы придавал больший вес навыкам устранения неполадок, чем ответам на головоломки (ну, я бы их вообще не спрашивал) или демоническим навыкам программирования. Я редко видел разработчика, который мог бы хорошо устранять неполадки, который также не может написать хороший код или сделать необходимые исправления. Я видел множество людей, которые могли бы объединить некоторый код, чтобы получить «Работающий» продукт, но не смогли решить проблему, если бы от этого зависела их жизнь. В основном потому, что они на самом деле не понимают, что они делают, или не понимают проблему, которую пытаются решить. Хорошие специалисты по трудоустройству знают, как определить реальную проблему, а не только симптом. Кроме того, они знают, какие вопросы задавать, чтобы определить проблему для новой разработки.


1

В любой работе от 4 до 5 ключевых навыков, и программирование ничем не отличается. На профессиональном уровне вы должны быть хорошими во всех ключевых фундаментальных навыках. Если у вас 4 из 5, он все равно будет вас сдерживать.

Можете ли вы представить продавца, который может представлять, убеждать, формулировать, квалифицировать клиентов, но не может заключить сделку? Они там, и вы не хотите, чтобы они были в вашем отделе продаж.

Отладка, безусловно, является основным навыком, без которого программист не может обойтись.


0

У меня есть такой стиль кодирования, который требует минимальной отладки. Когда я закончу с 3 строками кода, я запускаю его и проверяю, часто распечатывая пару переменных. В тех случаях, когда я получал нежелательный результат или поведение, я помещал много дампов в свой код - вместо отладки. Я использую настоящий отладчик очень редко. Странно, но это правда.


0

Отладка - это фаза в разработке программного обеспечения, которая наступает после того, как на вашем программном обеспечении был проведен определенный тест и обнаружена ошибка. Это поиск и исправление ошибки в вашем программном обеспечении. Во многих случаях для поиска ошибки обычно требуется больше времени, чем для ее исправления.

Это процесс устранения ошибок (уязвимостей), присущих компьютерному приложению / системе. Если это не сделано, то хакеры могут воспользоваться ошибками и могут совершать различные вредоносные действия:

1) Они могут раскрыть уязвимость для общественности, что приведет к потере дохода, бизнеса и репутации для разработчиков и поставщиков.

2) Черви ищут уязвимые системы, которые они могут использовать, и, таким образом, копируют себя на эти серверы. например. В январе 2003 года червь Slammer воспользовался уязвимостью в MS SQL Server.

3) Где были упомянуты черви, как мы можем забыть вирусы. Вирусы также могут потерять свои разработчики, которые используют ошибки, присутствующие в программе, с основной целью неприличного разоблачения ...

4) И если программы не будут отлажены должным образом, потребители никогда не будут продолжать работать, если они не получат ценность своих денег. В этом случае вам даже не нужен хакер для выполнения грязной работы - вы также можете доверять доброй старой публике.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.