Как проверить или оценить навыки отладки человека? [закрыто]


48

Какие навыки определяют человека, который способен легко отлаживать код? Некоторое время назад мой друг провел интервью с относительно хорошим программистом. Программист был нанят. Он мог писать хороший код, понимать основы и шаблоны проектирования. Чего ему не хватало - отладочных навыков. Он вообще не мог отлаживать, и обнаружение проблем с его или чужим кодом было для него огромной болью.

С тех пор мы думаем о том, как мы можем оценить или оценить навыки отладки человека.

Итак, первый вопрос: какие навыки определяют, может ли человек эффективно отлаживать программное обеспечение?

И второе: как проверить эти навыки во время интервью?


14
На самом деле мне дали код для отладки на компьютере за одно интервью. Они изменили исходный код на tar или gzip или что-то еще, и хотели посмотреть, как я отлажу его.
WKL

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

Он даже не должен быть живым, @ ThorbjørnRavnAndersen. Я провел собеседование в нескольких местах, которые дали мне распечатку небольшой функции вместе со спецификацией того, что делает эта функция, а затем попросили меня «найти ошибку».
quanticle

@quanticle То же самое и здесь, моя компания выдает 5-вопросный тест по программированию (примерно половина из них отлаживается), прежде чем вы будете приглашены на личное собеседование. Очевидно, это
отсеивает

Дайте ему трассировку стека для анализа :-)
JustMe

Ответы:


24

Если первое, что человек хочет сделать, - это посмотреть на код и пройтись по нему с помощью отладчика, этот человек не является хорошим помощником в устранении неполадок.

Если у вас еще нет плана действий, и вы погружаетесь в слепой отладчик, то вы, по сути, пасхальное копание. Это верно для ЛЮБОГО вида устранения неисправностей.

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

Это верно для любой сложной системы.


1
+1 за хорошую перспективу по этому вопросу. Я согласен, но когда они ДЕЙСТВИТЕЛЬНО думают о механике на втором месте, им лучше понять, как использовать инструменты. Как и в автомобилях, инженер, который не понимает или не может использовать механические инструменты, вовсе не является квалифицированным инженером.
maple_shaft

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

Во-первых, нет такой вещи, как «инстинктивная отладка». Есть эвристика (иначе говоря, «подсказки сломанной ноги»), которые будут использовать эксперты. Так уверен. Если есть эвристики, то специалисты будут эффективно их использовать. Но эти эвристики могут кусать этих экспертов в задницу. Читайте о тоннах работы над экспертами в когнитивной психологии, и вы увидите. Поэтому у хорошего эксперта могут быть хорошие идеи о том, с чего начать, но они никогда не должны полностью полагаться на эти интуитивные чувства. И они должны быть в состоянии объяснить, по крайней мере, до некоторой степени, эти интуитивные чувства.
ElGringoGrande

10
Я должен не согласиться на 100% с вашим черным и белым, если первое, что они сделают, прокомментируют. Я бы сказал, что если человек считает, что запуск отладчика в некоторых случаях не является хорошим первым вариантом, то этот человек также не является хорошим специалистом по устранению неполадок. Если проблема в том, что связь прервана, первое, что я собираюсь сделать, это запустить отладчик и выяснить, какие процессы / потоки / задачи заблокированы или перестали работать. Еще одна причина запуска отладчика - попытаться выяснить, повторяется ли проблема. Как только вы знаете, как сломать систему, найти решение становится намного проще.
Данк

5
@ElGringoGrande он предлагал противоположное тому, что я читаю. Дело в том, что люди становятся естественно лучше в отладке, поскольку они становятся более опытными. Инструменты или методология не так важны, как их эффективность. Вот почему ваш ответ неполон. Существует много способов отладки, в том числе подтягивание стула и прохождение кода, задание вопросов и др. Я эффективно отлаживал большие PHP-программы с печатью. Мне не нравится это делать, но на самом деле это не столько инструмент, сколько знание того, как в целом работают системы.
Джордан

15

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

Это означает создание сценария для них, который демонстрирует высокую способность средств отладки в выбранной ими среде IDE. Вы должны искать такие вещи, как:

  • Запуск изолированного приложения или сервера в режиме отладки или создание приложения с символами для отладки

  • Обеспечение доступности и демонстрация портов удаленной отладки или отладки приложения без песочницы, созданного с помощью символов (если применимо к языку)

  • Стратегическое использование точек останова

  • Пользовательские свойства точек останова, условные выражения для точек останова (если применимо к языку)

  • Использование выражений или отслеживаний переменных для мониторинга значений переменных или ссылок

  • Использование значения переменной ad-hoc или обращения с указателем или указателем в режиме реального времени

  • Продемонстрировать способность входить, выходить за пределы потока приложений

  • Критическая оценка стека вызовов

  • Отладка многопоточных приложений и понимание этого.

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


+1 довольно полезный список. И еще один прикладной.
Дипан Мехта

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

20
@JarrodRoberson Брайан Керниган и Роб Пайк написали в «Практике программирования», что они по-прежнему предпочитают отладчикам операторы печати, потому что они менее временны. Многие люди предпочитают хорошую систему журналирования, которая дает им подробное представление о пути кода, не останавливая программу в середине выполнения. Также легче прочитать файл журнала, а затем отладить дамп ядра. Так что ваш лакмусовый тест может отвергнуть некоторых хороших программистов, потому что не все согласны с тем, что отладчики так же полезны, как альтернативные подходы к отладке (журналы, модульные тесты, утверждения)
MetricSystem

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

8

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


7

Задайте ему такие вопросы:

  1. Как вы решаете проблему?

  2. Каков один из сложных проектов, которые вы сделали, и как вы его достигли?

  3. Какие инструменты отладки вы использовали?

  4. Есть ли у вас какие-либо предпочтения для определенных инструментов?

  5. Приведите пример своего сценария и спросите его, как он справится с этим?

  6. Как бы вы оценили свою способность проникать в чужой код?

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


6

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

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

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

Работа над существующей кодовой базой требует просмотра кода, документации и, возможно, создания собственных заметок и комментариев.

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


2
Мы все отлаживаем наши программы. В начале это легко, потому что программа небольшая и легко иметь все это в голове. Но по мере роста и усложнения отладка становится все труднее. И теперь - некоторые люди все еще могут справиться с этим и найти ошибку в разумное количество времени, а некоторые просто теряются. Они не знают, где сосредоточиться и как сузиться, чтобы найти это ...
Михал Б.

1
@MichalB .: Мы все отлаживаем наши программы, но некоторые люди демонстрируют принципиальный подход, в то время как другие просто случайным образом изменяют ситуацию и видят, что происходит .
Матье М.

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

3

Точно так же вы бы определили чью-то способность к кодированию, задавайте им вопросы об отладке.

Спросите их, «как» они бы отследили ошибку в данной ситуации.

Сделайте еще один шаг вперед, усадите их перед компьютером и посмотрите, как они решают проблему.


3

Я часто приводил кандидатам гипотетические ситуации ... например, производственная система перестала отвечать. Чем ты занимаешься? Они могут ответить «проверь логи», а я скажу: «логи не показывают ничего ненормального, кроме того, что в них ничего не написано, так как проблема начала происходить». И так продолжается до тех пор, пока я не буду удовлетворен тем, что оценил способность кандидатов решать задачи.


2

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

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

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

Я не совсем предпочитаю задавать запутанные вопросы на собеседовании, которые направлены на умение людей читать и исправлять синтаксис.


+1 Отличный ответ! Я согласен, что лучшие разработчики программного обеспечения обладают хорошими навыками отладки, и я также чувствую, что обнаружение синтаксических ошибок не демонстрирует много. Большинство IDE и даже некоторые хорошие текстовые редакторы (Notepad ++) распознают синтаксические ошибки в распространенных языках. Однако я не согласен с тем, что головоломка демонстрирует навыки отладки. Загадки демонстрируют критическое мышление, которое является другим, но связанным навыком.
maple_shaft

@maple_shaft спасибо за (еще один +1). Правда, головоломки напрямую не связаны с отладкой . Но это хорошо, чтобы судить, как люди подходят к проблемам - на самом деле косвенная вещь.
Дипан Мехта

2
Я смотрю на головоломки и я как www.wwwwwwww. Вы действительно не имеете ничего лучше, чем "попался"? и как "старшинство" входит в картину? Должны ли старые люди решать более сложные головоломки? Все ли хорошие программисты (или отладчики) поклонники судоку? Вы можете раздражать некоторых действительно хороших программистов и дурачить вас по всему городу. Гоча вопросы являются оскорблением <период>, пожалуйста, придумайте что-нибудь лучше, мужчины.
Chani

@ Scrooge Я имел в виду только программирование головоломок - я никогда не играл в судоку с сотнями интервью, которые я взял.
Дипан Мехта

2

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

Пусть они расскажут вам о том, что они сделали на своей последней работе, домашнем задании и т. Д. И что они прошли, чтобы найти проблему.


2

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

Он был организован как удаленный рабочий стол для старой среды тестирования. Вероятно, в неподключенном или изолированном окружении. Проект представлял собой несколько веб-форм с некоторыми элементами управления ASP.NET и соответствующим кодом Code-file. Кодовый файл ссылается на своего рода бизнес-уровень, для которого у меня просто есть dll, нет описания исходного кода и методов. Веб-формы сделали функции CRUD, которые вы можете ожидать. Также небольшая функция поиска. Бизнес-уровень, в свою очередь, общался с Views и SP на сервере sql.

Они сломали некоторые части на разных уровнях. Мне дали бумагу с симптомами. «Не удается найти» «Поле« регион »исчезло после последнего обновления» и так далее. Такие, которые вы можете получить от ваших пользователей.

Я не помню всех деталей, но по крайней мере поле таблицы было переименовано, что привело к нарушению SP, который использовался функцией поиска. Это означает отсутствие ошибок в VS и отсутствие исходного кода BL для отслеживания имен полей. Параметр SELECT для команды Sql был введен с ошибкой и вызвал сбой веб-формы. Также было пропущено поле, отсутствующее в GridView (Autogeneratecolumns). Кнопка ASP.NET была названа чем-то, что должно было быть дублированным, улучшенным методом и «забытым», чтобы указывать кнопку на новый метод.

Также такая мелочь, использующая заголовок в теге html, которая не позволяет этого. Также противоположный тег ALT был опущен в элементе управления, который требовал этого. Были также некоторые ошибки с некорректными закрытыми HTML-тегами, но они не работали неправильно. Не уверен, что все это были чисто ошибки проекта проекта или, возможно, один и тот же проект для разных рекрутов. Я никогда не спрашивал. Уровень сложности должен, конечно, соответствовать потребностям новобранца.

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

* Я думаю, что тест был подтвержден кандидатами / моими навыками *
* Анализировать чужую систему
* Использовать минимум информации для поиска ошибок и ошибок
* В условиях стресса и времени, когда кто-то вам не поможет, код предполагает исправления
* Различные уровни знаний;
** sql db и хранимые процедуры,
** использование dll в проекте,
** метод asp.net,
** многоуровневая архитектура
** проблемно-ориентированный аспект

Но также и более очевидные вещи, такие как управление средой разработки, поиск и понимание Db Server Management. Конечно, есть кандидаты, которые действительно хорошо выглядят на бумаге, но на практике могут застрять в таких задачах.


2

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

Я говорю им, что их задача - решить проблему, и предлагаю ответить на любые технические вопросы, которые у них есть, и сообщить им результаты любых экспериментов, которые они хотят выполнить. Если они скажут: «Я бы поставил здесь зонд области», я нарисую им след того, что они могут найти. Если они захотят вставить printfв цикл, я скажу им, что он никогда не выходит (!) Или сначала выдает «7», а затем повторно «5». Если они окажутся так далеко от сорняков, что я не смогу дать значимых ответов, я признаю, что мы на неправильном пути и вернемся куда-то еще. Если они застрянут, я буду задавать наводящие вопросы или давать подсказки, пока мы не сможем двигаться дальше.

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


1

Сядьте за компьютер с какими-то простыми двоичными (с отладочными) символами, которые сегрегируются с нулевой ссылкой на указатель или такими + исходный код + gdb, и посмотрите, смогут ли они найти причину сбоя?


2
Все это говорит вам о том, что человек может анализировать код и двоичные файлы, чтобы найти потенциальную ссылку на нулевой указатель. На самом деле это не демонстрирует умелое использование обычных инструментов отладки.
maple_shaft

1

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


1

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

Более всеобъемлющий подход будет задавать поведенческие вопросы о том, как кандидат выполнял отладку в прошлом, ссылаясь на конкретные инциденты, а затем следуя вопросам.

Кто-то, кто хорош в устранении неполадок, сможет рассказать не только об отладочных средствах в IDE. Как насчет ... инструментов сообщения об ошибках, взаимодействия с конечным пользователем, воспроизведения ошибки, анализа файла журнала, проверки?

Отладка НАМНОГО БОЛЬШЕ, чем трассировка через блок кода, и любая оценка чьего-либо навыка в отладке должна отражать это.


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

1

Дайте кому-нибудь какой-нибудь потрясающий код, который ваша компания запускает в производство. Попросите их представить небольшую ошибку. Спросите их, почему они выбрали это. Спросите их, как они будут находить и исправлять это.

Бонус, если они найдут ошибку в оригинальном коде.

Двойной бонус, если они могут исправить ошибку в исходном коде.


1

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


1

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

  • Проведи меня через все шаги, которые ты предпринимаешь, чтобы определить первопричину и исправить ошибку (дефект)
  • Как бы вы использовали стек вызовов при отладке многопоточного приложения

Это очень хорошо работает, особенно в телефонных интервью, так как вам нужен только тот человек, который даст вам убедительный ответ, который покажет, как он на самом деле поступает при устранении проблемы.

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