Чому інженерні інтерв'ю SW непропорційно складні (порівняно з дослідницькими інтерв'ю)? [зачинено]


39

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

Моє зауваження: співбесіди з інженерами SW - це спосіб, непропорційно складніше, ніж співбесіди з дослідником CS, але робота дослідника є більш оплачуваною, більш конкурентоспроможною, більш корисною, цікавішою та має більший перелом.

Ось типовий цикл інтерв'ю для дослідника:

  • Інтерв'ю по телефону, щоб дізнатись, чи відповідає моє дослідження дослідженню лабораторії
  • Особисто: викладіть презентацію про моє нещодавнє дослідження за одну годину (що, можливо, коштує 9 місяців роботи) та дайте відповіді на запитання аудиторії
  • Інтерв'ю особистого інтерв'ю з близько 5 дослідниками, де вони задають мені дуже розумні запитання щодо моєї роботи / публікацій / патентів, включаючи: технічні питання, де моя робота вписується в суміжну роботу і як я можу поширити свою роботу на нові області

Ось типовий цикл інтерв'ю для інженера SW:

  • Інтерв'ю по телефону, де мені задають питання щодо алгоритму і, можливо, я кодую. Досить стандартний.
  • Інтерв'ю особистості на дошці, де вони висвердлюють F *** у вас на езотеричних C ++ дрібницях (наприклад, як працює поліморфна віртуальна функція виклику), алгоритми (змушуйте алгоритм "усі пари" із найкоротшим шляхом працювати для вершин 1B) , проектування системи (проектування балансира завантаження бази даних) тощо. Це триває протягом шести-семи інтерв'ю. Смішно.

Чому хтось буде готовий миритися з цим? Який сенс запитати про дрібниці C ++ або писати код, щоб довести себе? Чому б не зробити інтерв'ю SE більше схожим на інтерв'ю дослідника, де ви говорите про те, що зробили?

Як проводяться технічні співбесіди в інших сферах, таких як фізика, хімія, цивільне будівництво, машинобудування?


12
Я зроблю дику здогадку і скажу, що ви брали інтерв'ю в Google?
Пемдас

2
@ Ethel: Якщо ви подивитесь на glassdoor.com, де люди розміщують свої зарплати анонімно, ви можете побачити, що посада дослідника платить приблизно $ 10K до $ 20K / рік більше, ніж порівняний інженер SW (те саме місце розташування, те саме поле). Анекдотично, я знаю, що моя зарплата приблизно на 25 000 доларів США / рік більша, ніж інші мої друзі, які закінчили ступінь CS MS в моїй школі приблизно в той же час. І це не лише зарплата; Я бачив, що кандидати наук мають більш високі траєкторії кар'єри, ніж ті, хто не має. Я не маю прямих доказів, але я бачив, що докторантури легше приймаються на рівні CTO / VP.
stackoverflowuser2010

3
Це божевільно, але, мабуть, не поширюється на "справжні" інженерні професії. Я знаю тону інженерів-будівельників, і вони шоковані тим, що я їм розповідав про деякі мої минулі інтерв'ю ... багато хто сказав саме те, що ти зробив: "навіщо ти з цим постраждаєш?"
red-dirt

3
@el fuser - Це залежить від роботодавця. Інтерв'ю з електротехніки, яке я проводив, або просив мене подивитися код PLC, написати код PLC та / або зробити щось з електричними діаграмами. По одному, перше питання було: "Що таке закон Ома?" Це було еквівалентом тесту на fizzbuzz ... якщо ти щойно взяв 4 роки електротехніки і не зможеш отримати це право, співбесіда закінчена.
Скотт Вітлок

1
Скотт: "Якщо ви просто взяли 4 роки електротехніки і не можете цього зрозуміти, інтерв'ю закінчено". Я боюся, що я, можливо, заграв пару таких, тому що я сміявся або був ображений. Напевно, виходячи з наукового середовища, ви приймаєте базову компетенцію як належне.
Омега Кентаврі

Відповіді:


45

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

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


2
на щастя, такі речі, як github та bitbucket, полегшують зрозуміти, що зробила ця людина. це може полегшити (або значно зменшити) необхідність задавати питання належної ретельності.
привіт

3
точно по пункту. дуже важко відокремити добро від програмістів wannabe. навіть з кодом, який потрібно показати, знадобиться багато часу, щоб прочитати та зрозуміти його до рівня спроможності судити про автора. Дослідницькі праці OTOH написані для читачів, для того щоб зрозуміти один, потрібно максимум кілька годин, як правило, поганий розпізнається за кілька хвилин.
Хав'єр

3
Код для показу - хитрість - як ти знаєш, що Джо Інтерв'юе насправді написав цей код, не змусивши його насправді написати код?
Wyatt Barnett

У мене опублікована стаття та дорога книга. Зазвичай технічні екрани отримують закоротити , тому що мої знання добре задокументовані, вони хочуть , щоб переконатися , що я , що Майк Браун
Майкл Браун

1
Існує також справжній страх з боку технічних менеджерів при наймі справді розумних та досвідчених професіоналів - тих, хто може знати щось краще, ніж вони, отже, може заперечити і проти рішення, а не просто робота з написанням коду. Зрештою, найняти когось, хто може змінити пов'язаний список за хвилину замість того, щоб найняти справді розумних інженерів, це втрата всіх, хто отримує фінансовий прибуток від продукту. Як зазначив Б'ярн Струструп, "Організація, яка ставиться до своїх програмістів як до дебілів, незабаром матиме програмістів, які бажають і можуть діяти лише як дебіли".
Лев Хайнсаар

30

Виходив сюди на кінцівку.

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

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


17

Подумайте про це на мить.

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

Мої запитання такі: "Чому так важко отримати докторську ступінь?" І "навіщо мені потрібен доктор наук, щоб бути дослідником CS?" "Чому так багато бар'єрів і перешкод?"

Чому хтось буде готовий миритися з цим?

Який сенс робити всю цю курсову роботу та надрукувати дослідження в журналах та на конференціях? Чому я не можу просто провести дослідження та отримати плату більше, ніж я за інженерні роботи?

Навіщо покладатися на аспірантури та видання для створення облікових даних? Чому б не зробити інтерв'ю для дослідження більше подібним до інтерв'ю SE, де все залежить від того, про що ви можете згадати зараз під час інтерв'ю?


Я якось отримую те, що ти кажеш. Правильний вид співбесіди повинен відповідати правильному виду роботи? Це правильне тлумачення?
stackoverflowuser2010

5
@ stackoverflowuser2010: Ні. Я просто скаржусь, що в академічному світі далеко, набагато важче пробитися, ніж у світі інженерії програмного забезпечення. Ви отримали співбесіду як SE. Я навіть не міг залізти в двері в академічних колах. Ваша перспектива настільки сильно перекошена, що ви не бачите відмінностей. Академія набагато, набагато жорсткіша.
S.Lott

6

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

З іншого боку, успіх чи невдача існуючих продуктів лежить на плечах щоденних розробників. Особливо, якщо ви займаєтесь розробкою продуктів, ви є центром прибутку для компанії. Хороші чи погані розробники мають величезний вплив, що набагато перевищує вартість їхньої зарплати. Поганий розробник фактично завдає шкоди. Вони можуть налаштувати команду, запустити продукт тощо. Наслідки найму поганого інженера SW значно вищі.


4
+1 Насправді грошові кошти, витрачені на дослідження, виправдані опублікованими статтями, тому, якщо кандидат має хороший список тих, хто минув, шанси (і) він може створити ще трохи, що, швидше за все, задовольнить кожного, хто трапиться перевірка, на що витрачено дослідницький грант.
Péter Török

@ Péter Török: Так !!! Потім кошти, які надають гранти, вимагають подати звіт, і головне, на що вони дивляться, - кількість опублікованих робіт.
гострий зуб

5

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

Натомість нам все одно, адже нам потрібно знати, наскільки швидко ви можете дізнатися основні речі. Ви претендуєте на X-річний досвід роботи? Гаразд, ми поставимо складні запитання, щоб дізнатися, чи володієте ви ґрунтовними знаннями.

Ви не знаєте, як здійснюється виклик віртуальної функції під кришкою, але ви знаєте все про профілювання та оптимізацію? Чудово, ми, швидше за все, наймемо вас - ви здобули ґрунтовні знання в одній галузі, і тому ви неодмінно отримаєте ґрунтовні знання в іншій.

Ви стверджуєте, що має багаторічний досвід "розробки, налагодження та виправлення коду C ++" і не можеш пояснити простими словами, як вказівник вказує на об'єкт? Вибачте, ми не можемо вас найняти - якщо ви не можете цього зробити, як ви поясніть більш складні проблеми, коли нам потрібно приймати складні технічні рішення?


Це справедливо, але чи кидаєте ви досить широку сітку, роблячи технічну складову чи орієнтуючись на певну область?
rjzii

@Rob Z: Ми намагаємось задавати дуже прості запитання щодо C ++ - переважно щодо покажчиків та рекурсії, ми надаємо фрагменти, що містять приблизно п’ять рядків добре відформатованого коду, і запитуємо деталі, що і як вони роблять. Звичайно , ми не завжди питати про декілька віртуальних спадкуванні та порядку базових класів ініціалізації в разі віртуального успадкування.
гострий зуб

Чому питання віртуальних функцій настільки популярні? Здається, іноді це все, що потрібно було б вивчити ...
Jé Queue

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

Я думаю, що мені пощастило в кар’єрі. Рідко я коли-небудь бачив вирізати та вставити кодер. Я знав кодери поганої практики (я включав в себе), але принаймні це було їх власного дизайну :)
Jé Queue,

5

Коротка відповідь: на ринку є багато людей, які заявляють, що знають програмування, але не можуть програмувати.

Побічне зауваження: Мені приємно, що ніхто не опублікував посилання на нарис FizzBuzz .


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

3

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

Я брав інтерв'ю в досить широкому діапазоні секторів (наприклад, стартап-компанія, невелика компанія, велика компанія, внутрішній відділ ІТ, програмне забезпечення, дослідницька організація), і всі вони мають інший спосіб співбесіди, який, як я виявив, зазвичай схильний дотримуйтесь наступної схеми:

  • Стартапів, як правило, турбує знання того, що ви можете почати писати код прямо зараз і може працювати з швидким темпом середовища. Як таке, вони, як правило, переймаються тим, скільки ви знаєте вгорі голови, оскільки вони, схоже, не хочуть бачити, щоб ви витратили багато часу на пошук того, що вони вважають "основними" знаннями. Якщо визнати, що ви не знаєте чогось, це може бути не такою хорошою справою в цьому середовищі, якщо це те, що вони очікують, що ви знаєте.
  • Невеликі компанії, як правило, шукають те саме, що і стартапи, щодо того, наскільки ви знаєте, але вони не переймаються тим, наскільки добре ви поводитесь із швидкими темпами (залежно від роботи) та іншим з тими м'якими навичками принесіть і як добре ви впишетеся в кмітливість компанії.
  • Великі компанії та внутрішні відділи ІТ, здається, більше стурбовані тим, що ти володієш заданим рівнем технічних знань, але вони не такі стурбовані, якщо ти не знаєш все вгорі голови, оскільки вони передбачають, що будуть якісь час, пов’язаний з тим, щоб ви пройшли навчання того, що очікує компанія. Таким чином, це середовище, коли визнання, що ти щось не знаєш, але готовий вчитися та вчитися, може сприйматись як користь.
  • У дослідницькому середовищі (тобто підтримка розробки програмного забезпечення для вчених, на мій досвід) вони, як правило, переймаються питанням, якщо ви можете написати програмне забезпечення, але тим більше, якщо ви готові робити те, що потрібно для того, щоб ви могли дізнатися, що вони роблять так їм не потрібно тримати руку, поки ви намагаєтеся вирішити проблему. Оскільки це також дослідницьке середовище, вони також здаються зацікавленими у тому, наскільки ви зацікавлені у вивченні нових речей.

Тепер я нехтував згадуванням програмних компаній (наприклад, Google, Microsoft), оскільки вони, як правило, займаються своїми справами, і залежно від того, наскільки зріла компанія та з якою групою ви опитуєтесь, вони шукають різні речі.

Зрештою, хоча і як і у більшості речей у житті, все залежить. Особисто я виявив, що деякі компанії дуже зосереджуються на «книжкових знаннях», які можуть виникнути за рахунок того, щоб реально вирішити проблеми вищого рівня, коли, як видається, інші компанії дуже стурбовані тим, наскільки добре ви справляєтеся з проблемами вищого рівня (тобто чи можете ви створити схему для x ) і діяти за умови, що вони готові вкласти три-шість місяців, щоб ви повністю зробили швидкість, перш ніж ви будете повністю продуктивними.


2

Знову ж таки, інтерв'ю з технікою є довільним і примхливим.

Існує велика різниця між гриль-людиною на деталях та побаченням, чи знає їх КС. Як я вже говорив вище, я маю понад десятиліття досвіду роботи з C ++, але я схильний бомбардувати питання щодо OOP / спадщини. Чому? Оскільки колись додано підтримку шаблонів, я використовував C ++ майже виключно для загального програмування .

Я взяв інтерв'ю з кількома компаніями BigHouseHoldNameTech у районі Бей та Сіетл, і одне з найкращих інтерв'ю стосувалось справжніх питань, з якими вони мали вирішити цю роботу, включаючи структури даних та алгоритми [тобто: у вас є 300 мільярдів точок даних що складається з XYZ. Як ви ефективно зберігаєте та шукаєте? ].

Це в значній мірі дозволяє вам знати, як кандидат міг би вступити та допомогти вирішити реальні проблеми, з якими ви стикаєтесь. Абсолютно гірше було і з іншою компанією BigHouseHoldNameTech, але вони задавали години, що стоять неймовірно затаємничих питань, на які вам справді слід було б просто переглянути в посібнику [ тобто описати основні відмінності між друкованою платою у Windows проти Linux - і це не було " t для положення рівня ядра ]

Хедж - фонди є химерними з їхнім наміром катувати ... очікувати 8 годин рішення ранця проблем типу на дошці.


2

Я розробник програмного забезпечення (c / c ++) з більш ніж 20 роками в цій галузі. Типи інтерв'ю, які ми зазвичай бачимо зараз (тизер мозку, реалізація структур даних, алгоритми пошуку тощо на дошці), раніше не було часто, окрім новинок. Якщо людина працювала в поважній компанії протягом розумної кількості часу, це вважалося доказом своєї здатності писати код. Зараз це стало дуже шкільним, і я не знаю чому. Дійсно, типові речі, які вони просять вас кодувати, МОЖЕ запам'ятовуватися, тому робити це на дошці насправді нічого не доводить. У робочому проекті ви користуєтесь Інтернетом, щоб щось досліджувати, і не писали бтрей або пов’язані списки з нуля.

Я думаю, що його чергова прихильність до управління - як і scrum - з цим, ймовірно, розпочали роботи Google, Amazon та Microsoft. Всі інші скопіювали так само, як це зробили з чином Джека Уелча та потягнули ... пам'ятаєте GE?

Якщо ви менеджер з найму, читаючи мої коментарі, то, про що ви МОЖЕТЕ запитати кандидатів, - ЯК вони б пішли на вирішення певних проблем. Замість того, щоб просити їх кодувати хеш-таблицю, задайте їм проблему, пов’язану з хеш-таблицею, і запитайте, як вони її вирішили.

Я також погоджуюся з розробником над цим постом, який сказав "дайте їм справжню світову проблему, яку довелося вирішити компанії"!

"але я схильний бити питаннями OOP / Inheritance. Чому? Тому що, як тільки була додана підтримка шаблонів, я використовував C ++ майже виключно для загального програмування."

Я також згоден з вищесказаним. Працюючи в компанії, ви пишете код ЇХ чином. Я все ще намагаюся іноді згадувати виклик C ++ за синтаксисом посилання вгорі голови, тому що старший архітектор компанії, в якій я працював 15 років, вважав за краще використовувати вказівники, а не посилання. Він був старим програмістом на С, який ви бачите. Так ось, що ми всі використали.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.