Як перевірити або оцінити навички налагодження людини? [зачинено]


48

Які вміння визначають людину, яка здатна легко налагоджувати код? Деякий час тому мій друг провів співбесіду з відносно хорошим програмістом. Програміста прийняли на роботу. Він міг написати хороший код, зрозумів рамки та схеми дизайну. Що йому бракувало - навички налагодження. Він взагалі не міг налагоджувати помилки, і пошук проблем зі своїм чи чиїсь кодом був для нього великим болем.

Відтоді ми думаємо про те, як можна оцінити або оцінити навички налагодження людини.

Тож перше питання: які навички визначають, чи може людина ефективно налагоджувати програмне забезпечення?

І друге: як перевірити ці вміння під час співбесіди?


14
Мені фактично дали код налагодження, на комп’ютері, на одному інтерв'ю. Вони змінили вихідний код на tar або gzip або щось подібне, і хотіли подивитися, як я його налагоджую.
wkl

4
Єдиний спосіб бути впевненим - це дозволити йому чи їй це "жити". Нехай він зазначає заздалегідь знати, що таке ваше середовище розробки, і що буде простий тест кодування та налагодження.

Це навіть не повинно бути в прямому ефірі, @ ThorbjørnRavnAndersen. Я взяв інтерв'ю в декількох місцях, які передали мені роздруківку малої функції, а також уточнення того, що ця функція виконує, а потім попросили "знайти помилку".
кількість

@quanticle Там же моя компанія видає тест програмування на 5 запитань (приблизно половина є налагодженням), перш ніж вас розглядати на співбесіді. Мабуть, це
викорчує

Дайте йому простежити стек :-)
JustMe

Відповіді:


24

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

Якщо у вас ще немає плану дій, і ви занурилися в сліпу для налагодження, ви, як правило, великодні яйця. Це справедливо для будь-якого виду усунення несправностей.

У ситуації співбесіди людина, яка запитує, як функціонує система, і запитує про історію системи, хтось може стати непоганим засобом усунення несправностей. Людина, яка думає, що система по-перше, а механіка по-друге, може стати непоганим засобом вирішення проблем.

Це стосується будь-якої складної системи.


1
+1 - хороший погляд на це. Я погоджуюся, але коли вони думають, що механіки займають друге місце, то їм тепер краще, як можна використовувати інструменти. Як і в автомобілях, інженер, який не розуміє або не може використовувати інструменти механіки, зовсім не кваліфікований інженер.
maple_shaft

16
Ця відповідь не залишає місця для інстинктивної налагодження. Хтось, хто працював з достатньою кількістю систем, типів коду чи мов, часто зможе «понюхати» свій шлях до того, що відбувається фанкі. Іноді вам не потрібно знати входи та виходи системи, щоб мати змогу знайти її вади.
Йорданія

По-перше, немає такого поняття, як "інстинктивна налагодження". Існують евристики (також "розбиті ноги про ноги"), якими користуватимуться експерти. Так точно. Якщо є евристика, то експерти використовуватимуть їх ефективно. Але ті евристики можуть вкусити цих експертів у зад. Почитайте про твори роботи експертів когнітивної психології, і ви побачите. Тож хороший експерт може мати хороші ідеї, з чого почати, але вони ніколи не повинні повністю покладатися на ці відчуття кишки. І вони повинні бути здатні пояснити хоча б певною мірою ці відчуття кишки.
ElGringoGrande

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

5
@ElGringoGrande він пропонував протилежне тому, що я читаю. Справа в тому, що люди стають природно кращими при налагодженні, коли вони стають більш досвідченими. Інструменти чи методологія не так важливі, наскільки ефективні. Ось чому ваша відповідь неповна. Існує багато дійсних способів налагодження, включаючи підтягування стільця та перебіг коду, задавання питань та ін. Я ефективно налагодив великі програми PHP з друком. Мені не подобається це робити, але насправді це не стільки інструмент, скільки знання про те, як працюють системи взагалі.
Йордан

15

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

Це означає створити для них сценарій, який демонструє високу здатність інструментів налагодження у вибраному IDE. Вам слід шукати такі речі, як:

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

  • Зробити доступними та демонструвати порти віддаленої налагодження або налагодження програми без пісочного програмного забезпечення, побудованого з символами (якщо застосовно до мови)

  • Стратегічне використання точок прориву

  • Спеціальні властивості точок перерви, умовні вирази на точках перерви (якщо застосовно до мови)

  • Використання виразів або змінних годин для моніторингу змінних значень або посилань

  • Використання спеціального змінного значення або маніпуляції з посиланням чи покажчиком у режимі реального часу

  • Продемонструвати здатність переходити, надходити та виходити з програми

  • Критична оцінка стека викликів

  • Налагодження багатопотокових програм та розуміння цього.

Слід також продемонструвати інші стратегії налагодження без інструментів, такі як аналіз журналів та вихідного коду, а також можливість виконувати деякі налагодження на низькому рівні без використання 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
я дивлюся на головоломку, і я схожа на ewwwwwwww. у вас дійсно немає нічого кращого, ніж речі "gotcha"? і як "старшинство" входить у картину? чи повинні старші ppl вирішувати складніші головоломки? чи всі хороші програмісти (або налагоджувачі) шанують судоку? ви, можливо, роздратуєте деяких справді хороших програмістів і поганих виламувань вас у всьому місті. Питання gotcha - це образа <періоду>, будь ласка, придумайте щось краще чоловіків.
Чані

@Scrooge я мав на увазі це лише як головоломки програмування - я ніколи не грав в судоку із сотнями інтерв'ю, які я взяв.
Діпан Мехта

2

Під час інтерв'ю попросіть їх розповісти про помилку, яку вони виправили в минулому, та кроки, якими вони користувалися при її налагодженні.

Запропонуйте їм розповісти про те, що вони зробили в останній роботі, домашньому завданні тощо. І що вони пройшли в пошуку проблеми.


2

Я поділюсь досвідом разом з перспективою новобранців щодо тестування навичок кандидата в налагодженні. Я взяв участь у співбесіді, яке пройшло три етапи. Другий етап був "практичним випадком". Я в той момент більше не знав. Поки там мені повідомили, що існує система, яка перестала працювати, і вони не знають. Деякі клопи лежать позаду.

Він був організований як віддалений робочий стіл до старого тестувального середовища. Ймовірно, до непідключеного або ізольованого середовища. У проекті було кілька веб-форм з деякими елементами керування ASP.NET та відповідним кодом коду-файлу. Файл коду стосувався свого роду бізнес-рівня, для якого у мене просто є dll, відсутність вихідного коду та описи методів. Webforms виконував функції CRUD, на які можна розраховувати. Також невелика функція пошуку. Бізнес-шар, у свою чергу, спілкувався з Views та SP на сервері sql.

Вони перебрали деякі частини на різних рівнях. Мені видали папір із симптомами. "Не вдається здійснити пошук" "Поле" регіон "зникло після останнього оновлення" тощо. Такі, які ви можете отримувати від своїх користувачів.

Я не пам'ятаю всіх деталей, але принаймні поле таблиці було перейменовано, що призводить до розбитого SP, який використовувався функцією пошуку. Це означає, що немає помилки у VS та відсутній вихідний код BL для відстеження імен полів. Параметр SELECT щодо Sqlcommand був неправильно написаний і спричинив несправність веб-форми. Також було пропущено поле, яке було відсутнім полем у GridView (Автогенерація стовпців). Кнопка ASP.NET посилалася на те, що повинно означати дублювання, вдосконалення, метод і "забуло" вказати кнопку на новий метод.

Також така незначна річ, що використовує заголовок у тезі html, який не дозволяє. Також протилежний тег ALT був опущений у елементі управління, який цього вимагав. Були також деякі помилки з неправильними закритими тегами html, але вони не працювали. Не впевнений, чи все це було чистим ігровим проектом-помилкою чи, можливо, тим самим проектом для різного набору. Я ніколи не питав. Рівень складності, звичайно, повинен відповідати потребам рекруту.

Такий тест, ймовірно, повинен бути перевірений (не дотримуватися його), щоб побачити після інтерв'ю, як робиться налагодження. Для себе на тому етапі я вважав тест трохи смішним, але це теж було б великим сенсом. Якщо це було чи ні, варто багато чого мати кандидата в потрібному місці.

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

Але також і більш очевидні речі, такі як обробка середовища для розробників, знайдіть і зрозумійте інструмент управління сервером Db. Звичайно, є кандидати, які виглядають дуже добре на папері, але, на практиці, вони можуть дотримуватися таких завдань.


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.