Какие навыки определяют человека, который способен легко отлаживать код? Некоторое время назад мой друг провел интервью с относительно хорошим программистом. Программист был нанят. Он мог писать хороший код, понимать основы и шаблоны проектирования. Чего ему не хватало - отладочных навыков. Он вообще не мог отлаживать, и обнаружение проблем с его или чужим кодом было для него огромной болью.
С тех пор мы думаем о том, как мы можем оценить или оценить навыки отладки человека.
Итак, первый вопрос: какие навыки определяют, может ли человек эффективно отлаживать программное обеспечение?
И второе: как проверить эти навыки во время интервью?
Ответы:
Если первое, что человек хочет сделать, - это посмотреть на код и пройтись по нему с помощью отладчика, этот человек не является хорошим помощником в устранении неполадок.
Если у вас еще нет плана действий, и вы погружаетесь в слепой отладчик, то вы, по сути, пасхальное копание. Это верно для ЛЮБОГО вида устранения неисправностей.
В ситуации собеседования человек, который спрашивает, как работает система и спрашивает об истории системы, будет человеком, который может быть хорошим специалистом по устранению неполадок. Человек, который думает, что сначала система, а потом механика, может быть хорошим помощником в решении проблем.
Это верно для любой сложной системы.
источник
Я бы сказал, что лучшая мера хорошего разработчика программного обеспечения на определенном языке или среде - это способность критически анализировать сложные проблемы и иметь хорошие навыки отладки на языке или среде. Они должны быть в состоянии продемонстрировать низкоуровневую отладку, а также умение отладки высокого уровня с помощью общих инструментов отладки.
Это означает создание сценария для них, который демонстрирует высокую способность средств отладки в выбранной ими среде IDE. Вы должны искать такие вещи, как:
Запуск изолированного приложения или сервера в режиме отладки или создание приложения с символами для отладки
Обеспечение доступности и демонстрация портов удаленной отладки или отладки приложения без песочницы, созданного с помощью символов (если применимо к языку)
Стратегическое использование точек останова
Пользовательские свойства точек останова, условные выражения для точек останова (если применимо к языку)
Использование выражений или отслеживаний переменных для мониторинга значений переменных или ссылок
Использование значения переменной ad-hoc или обращения с указателем или указателем в режиме реального времени
Продемонстрировать способность входить, выходить за пределы потока приложений
Критическая оценка стека вызовов
Отладка многопоточных приложений и понимание этого.
Также должны быть продемонстрированы другие стратегии отладки без инструментов, такие как анализ журналов и исходного кода, а также способность выполнять некоторую низкоуровневую отладку без использования IDE.
источник
Я бы сказал, расскажите об ошибке, которая была у вас в вашей системе, о чем-то, что можно обсудить в контексте интервью. Запустите отладчик и дайте ему на это.
источник
Задайте ему такие вопросы:
Как вы решаете проблему?
Каков один из сложных проектов, которые вы сделали, и как вы его достигли?
Какие инструменты отладки вы использовали?
Есть ли у вас какие-либо предпочтения для определенных инструментов?
Приведите пример своего сценария и спросите его, как он справится с этим?
Как бы вы оценили свою способность проникать в чужой код?
Вы можете решить свои проблемы, задавая вопросы. Всегда есть риск, что он может или не может быть хорошим в определенных навыках. Но если он хороший ученик, это очень поможет.
источник
Если вы хотите увидеть, может ли программист отлаживать, предоставьте им код для исправления. Это тот же подход, если вы хотите посмотреть, смогут ли они написать код. Дайте им проблему и попросите их написать код.
Теперь я запутался из-за этого программиста, у которого нет проблем с написанием кода, но он ошибается, когда его просят отладить. Этот человек извергает примеры кода или просто придерживается тех областей, в которых у него есть опыт, таких как чтение и запись в базу данных? Если они не получат правильный код с первого раза, они не смогут это исправить?
Может быть, человек просто не любит отладку и не прикладывает усилий? Я не очень хорош в этом, поэтому перестань просить меня сделать это - научился беспомощности.
Работа над существующей кодовой базой требует просмотра кода, документации и, возможно, создания собственных заметок и комментариев.
Я знаю, что мы считаем отладку исправлением производственного кода, который не удался, но мне нужно отлаживать код во время его написания. Либо этот человек не очень хороший программист, либо он просто предпочитает писать новый код. Не мы все.
источник
Точно так же вы бы определили чью-то способность к кодированию, задавайте им вопросы об отладке.
Спросите их, «как» они бы отследили ошибку в данной ситуации.
Сделайте еще один шаг вперед, усадите их перед компьютером и посмотрите, как они решают проблему.
источник
Я часто приводил кандидатам гипотетические ситуации ... например, производственная система перестала отвечать. Чем ты занимаешься? Они могут ответить «проверь логи», а я скажу: «логи не показывают ничего ненормального, кроме того, что в них ничего не написано, так как проблема начала происходить». И так продолжается до тех пор, пока я не буду удовлетворен тем, что оценил способность кандидатов решать задачи.
источник
Обычно люди с хорошими способностями - также те, у кого хорошие навыки отладки.
Во время собеседования (в зависимости от их стажа) вы можете дать им задание, похожее на головоломку, например, какой-нибудь алгоритм или около того. Это простой способ.
Если вы можете, вы можете распечатать код из какой-то работы, спросите человека, если что-то здесь не так, и если да, то как это исправить.
Я не совсем предпочитаю задавать запутанные вопросы на собеседовании, которые направлены на умение людей читать и исправлять синтаксис.
источник
Во время интервью попросите их рассказать вам об ошибке, которую они исправили в прошлом, и об этапах, которые они использовали для ее устранения.
Пусть они расскажут вам о том, что они сделали на своей последней работе, домашнем задании и т. Д. И что они прошли, чтобы найти проблему.
источник
Я поделюсь опытом вместе с перспективой новобранцев о проверке навыков кандидата в отладке. Я получил интервью, которое состояло из трех этапов. Второй этап был «практическим делом». Я не знал больше в тот момент. В то время как там мне сообщили, что есть система, которая перестала работать, и они не знают. Некоторые ошибки лежат позади.
Он был организован как удаленный рабочий стол для старой среды тестирования. Вероятно, в неподключенном или изолированном окружении. Проект представлял собой несколько веб-форм с некоторыми элементами управления 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. Конечно, есть кандидаты, которые действительно хорошо выглядят на бумаге, но на практике могут застрять в таких задачах.
источник
Я выбираю реальную проблему, с которой столкнулся, которая имеет отношение к должности, и я представляю ее кандидату так же, как и мне. Конечно, я предлагаю им некоторые общие сведения и небольшое количество соответствующей документации, такой как фрагмент кода или схематическая диаграмма.
Я говорю им, что их задача - решить проблему, и предлагаю ответить на любые технические вопросы, которые у них есть, и сообщить им результаты любых экспериментов, которые они хотят выполнить. Если они скажут: «Я бы поставил здесь зонд области», я нарисую им след того, что они могут найти. Если они захотят вставить
printf
в цикл, я скажу им, что он никогда не выходит (!) Или сначала выдает «7», а затем повторно «5». Если они окажутся так далеко от сорняков, что я не смогу дать значимых ответов, я признаю, что мы на неправильном пути и вернемся куда-то еще. Если они застрянут, я буду задавать наводящие вопросы или давать подсказки, пока мы не сможем двигаться дальше.Я хочу видеть упорядоченные мыслительные процессы, решимость найти решение, продуманные вопросы и эксперименты, а в идеале - успешное определение проблемы. Иногда я выбираю проблемы, которые слишком сложны для того, чтобы кто-то полностью отладил их за одночасовое интервью, и в конце я даю им реальный ответ. В этот момент я ищу реакцию, которая показывает, что они были вовлечены в проблему и испытали этот «ага» момент и удовлетворение в достижении причины. В этот момент лучшие кандидаты будут спонтанно задавать дополнительные вопросы, пытаясь связать свою ментальную карту проблемы с тем, что на самом деле происходит.
источник
Сядьте за компьютер с какими-то простыми двоичными (с отладочными) символами, которые сегрегируются с нулевой ссылкой на указатель или такими + исходный код + gdb, и посмотрите, смогут ли они найти причину сбоя?
источник
Если ваши кандидаты проходят предварительные тесты кода, попросите их изменить код во время собеседования, чтобы либо устранить ошибку, либо добавить новую функцию, либо еще лучше обе. Если вы сделаете спецификации тестов кода довольно расплывчатыми, это упростит создание тестовых случаев с «ошибками».
источник
Поиск «ошибки» в небольшом фрагменте кода - очень искусственная ситуация. Я полагаю, это может быть полезно так же, как головоломки и головоломки.
Более всеобъемлющий подход будет задавать поведенческие вопросы о том, как кандидат выполнял отладку в прошлом, ссылаясь на конкретные инциденты, а затем следуя вопросам.
Кто-то, кто хорош в устранении неполадок, сможет рассказать не только об отладочных средствах в IDE. Как насчет ... инструментов сообщения об ошибках, взаимодействия с конечным пользователем, воспроизведения ошибки, анализа файла журнала, проверки?
Отладка НАМНОГО БОЛЬШЕ, чем трассировка через блок кода, и любая оценка чьего-либо навыка в отладке должна отражать это.
источник
Дайте кому-нибудь какой-нибудь потрясающий код, который ваша компания запускает в производство. Попросите их представить небольшую ошибку. Спросите их, почему они выбрали это. Спросите их, как они будут находить и исправлять это.
Бонус, если они найдут ошибку в оригинальном коде.
Двойной бонус, если они могут исправить ошибку в исходном коде.
источник
Я склонен просить людей описать мне самую трудную ошибку, которую им когда-либо приходилось выслеживать и исправлять, и что они сделали, чтобы найти и исправить ее. Я также знаю, что если самой трудной ошибкой было то, что трудно ожидать только начинающему, то, вероятно, они не являются хорошими специалистами по устранению неполадок (если это не интервью для начального уровня). Если это что-то действительно сложное и они описывают свой мыслительный процесс, пытаясь отследить его, тогда я могу почувствовать, каков их уровень мастерства. Что меня всегда удивляло, так это огромное количество людей, которые выглядят как «олень в фарах» и не могут вспомнить ни одного примера того, что они сделали, что было сложно. Извините, кто-то, кто оставляет трудные проблемы для решения другого, не тот, кого я интересую ни для чего, кроме школьного обучения,
источник
Я хотел бы задать пару вопросов, не связанных с технологиями, таких как следующие:
Это очень хорошо работает, особенно в телефонных интервью, так как вам нужен только тот человек, который даст вам убедительный ответ, который покажет, как он на самом деле поступает при устранении проблемы.
источник