З мого досвіду в моїй компанії, де я робив багато інтерв'ю, є хороший шанс, що людина, яка опитає інтерв'ю, не має поняття, як це зробити правильно. Тож вони підготували набір технічних питань і підрахували їх кількість та зробили це ваше резюме. Однак це має багато недоліків, і цього не слід робити з наступних причин:
Ви запитуєте точкові знання. Якщо програміст ніколи нічого не робив у цій галузі, він / вона може бути відмінним співробітником, але просто не знає, на яку саме цю відповідь. З іншого боку: якщо хтось підготувався до інтерв'ю і знайшов відповідь на це конкретне запитання в мережі, ви отримаєте правильну відповідь, але ця людина може взагалі не мати поняття про актуальну тему.
Люди нервують співбесіди з роботою. Мозок має цю чудову функцію, щоб вимкнути багато областей вищого рівня (наприклад, логіка), якщо в паніці, а це означає: якщо ви нервуєте, ви не можете доставити якість відповідей, які б ви мали у щоденній ситуації. Деякі люди можуть впоратися зі стресовою ситуацією, як інтерв'ю, багато хто не може.
Єдиною правильною відповіддю ви перевіряєте, що люди вміють знаходити саме цю відповідь. Це одна з багатьох навичок, потрібних її колезі, але не одна і потрібна. Тому одного або двох із цих питань має бути достатньо для перевірки цієї галузі знань, а потім слід запитувати інші навички. Інтерв'ю, яке містить лише питання, що вирішують проблеми, перевіряє ту саму майстерність знову і знову.
Які хороші питання програмування?
Ті відомі питання "Чи можете ви написати коротку програму" мають величезну проблему, що більшість програмістів не можуть написати єдиний рядок коду, не допомагаючи їм IDE. Але це в повсякденних робочих ситуаціях взагалі не проблема, оскільки програміст завжди допомагає йому IDE. Отже, запитуючи такі речі, як "Знайти помилку", "Написати 50 рядків коду, які роблять ..." або навіть прості запитання, потрібно враховувати, що заявник не має своїх інструментів (IDE, Google).
Я, наприклад, можу відповісти на будь-яке запитання протягом 1 хвилини, якщо мені допоможе Google, але без підключення до Інтернету я здаюся безпорадним. Я називаю цю аутсорсингову пам’ять, і замість того, щоб перешкоджати мені, це дуже допомагає мені зосередитись на тому, що дійсно важливо - розумінні нижньої механіки - тому що все інше можна шукати вгору. Але не запитуйте мене про деталі з будь-яких випадкових API, тому що я не знаю їх, у мене є Google для цього.
Однак, гарне питання програмування не повинно зосереджуватись на знанні API чи спеціальних навичок кодування, якщо це не є абсолютною вимогою для роботи. Знання можна отримати, тому краще з’ясувати, наскільки хороша людина в отриманні знань, ніж запитувати те, що вона / вона вже знає.
Хороше запитання до завдання програмування повинно бути коротким, простим, здатним кодувати на кожній мові лише кількома рядками коду, і це - особливо - повинно якомога більше розповісти про те, як людина працює і знаходить відповіді. Приклад:
"Напишіть функцію на обраній вами мові, яка приймає масив цілих чисел і переупорядковує їх таким чином, щоб перше ціле число було після останнього, а всі інші зміщувалися відповідно."
Перший запитання, який будь-який заявник повинен запитати в цей момент, це: "Вибачте ... можете пояснити, будь ласка, завдання?" Тому що жодному програмісту не було дано чіткого опису, що робити коли-небудь. Далі йде пояснення, що код у запитаннях повинен зміщувати вміст масиву зліва, при цьому додається переповнення праворуч.
Це завдання настільки просте, що кожен, хто закінчив будь-яку форму рівня програмування, повинен мати можливість відповісти належним чином. При цьому враховується, що програмісту доводиться працювати без своїх інструментів і що нервувати знижує здатність логічно мислити. Однак це все ще говорить вам про те, як люди вирішують проблеми саме з того, як формулюється питання, і від того, як люди підходять до нього, просто тому, що зсув ліворуч суперечить загальному інстинкту «зліва направо» і змушує людей думати про секунда.
На це питання існує багато можливих відповідей, тому важливо уважно ознайомитись із способом розробки коду, а не якщо рішення насправді спрацювало б. Чи перевіряє заявник на нуль? Як зберігається перелив? Чи використовується цикл чи набір мембран? Як заявник перевіряє правильність коду? Це одне просте запитання розповідає вам всю біографію про те, як працює ця людина.
Що таке хороші загальні знання?
На хороші запитання легко відповісти, давати широкий обсяг відповідей (так звані "відкриті запитання") і дозволяти дізнатися якомога більше про заявника, як можна за короткий час.
Приклади:
(Запитуючи програміста на C ++): "Які ще мови крім C ++ ви знаєте?"
Це питання початкового рівня, які дають заявникові неабиякі шанси виграти в цей момент, якщо він нічого не знає про задану тему. "Ні" в цьому пункті краще, ніж мучити його / її ще кількома питаннями, на які він / вона має відповісти: "Вибачте, я нічого про це не знаю".
Я додаю, що це вам в першу чергу розповідає, які ще мови ця людина знає, і, крім того, ви дізнаєтеся, як зацікавити цю людину отримати ширший погляд на світ програмування, або якщо у вас є хтось із єдиною мовою (і, отже, особливості / методи ) перегляд.
(Далі після цього, скажемо, що він знає Java): Які три найкращі відмінності між C ++ та Java на ваш погляд? "
Це відкрите запитання, яке дозволяє отримати багато відповідей, тому заявник має хороші шанси знайти щонайменше три. Прохання про (особисту думку) трійка не тільки обмежує можливі відповіді, але й змушує заявника сортувати за пріоритетом. Однак відповісти на це (або повинно бути) легко.
Це просте запитання, яке перевіряє багато глибоких знань про різні мови програмування. Наскільки насправді знання цих тем насправді? З цих відповідей ви можете багато чого розповісти про знання та власне розуміння основної механіки мов програмування. Скільки ця людина витратила з брудними деталями або якщо вона / вона просто хтось, хто пов'язує різні функції API, не маючи реального поняття, що відбувається під ними.
Ця концепція питань початкового рівня, що супроводжуються простими глибокими питаннями знання, може бути використана і для більшості інших тем. Завжди в цій схемі: питання про відшкодування, питання про перевірку, поглиблене запитання. Інший приклад (з інтерв'ю Java):
- "Як би ви оцінили свій досвід розвитку багатопотокової розробки?"
- "Назвіть, будь ласка, те, що, на вашу думку, є першими трьома найважливішими речами, які слід враховувати при розробці багатопотокової програми."
- "Будь ласка, назвіть три класи Java API, які допоможуть вам розробити ці програми та дайте короткий опис того, для чого вони використовуються."
Ці три запитання дадуть вам більше, ніж будь-яке технічне запитання, про те, що заявник насправді знає про ці теми, при цьому справедливо відповідати, враховуючи точкові знання та рівень стресу.
Тож наступного разу, коли хтось задасть вам 20 питань кодування підряд, ви знаєте, що він або вона в основному не мають уявлення про те, як правильно опитати когось. ;)