Більшість великих технологічних компаній, таких як Microsoft, зосереджуються в основному на структурах даних. Схоже, структури даних - це єдине, чого вони очікують від випускника.
Ні, є більше. Наприклад, ми також очікуємо, що ви будете швидким учнем, який зможе вивчити нові рамки, API або навіть мови програмування за короткий проміжок часу. Це мінімальна планка. Хтось, кому потрібно багато часу, щоб вивчити нові рамки, API чи мову, не буде успішним розробником для більшості команд Microsoft.
І, звичайно, є набагато більше аспектів, на яких ми звертаємо увагу в інтерв'ю, крім простого знання структур даних. Можливість розібратися з неоднозначними специфікаціями, наприклад, або здатність розпізнавати шаблони кодування, що створюють незахищений код, або десяток інших речей. Але здатність розуміти структури даних, безумовно, дуже велика.
Це особливо так , що інтерв'ю зміщена в бік перевірки знань структури даних для випускників CS. Недавні випускники, більшість з яких не мають багато досвіду в реальному світі, не очікують, що вони будуть хорошими в тих самих речах, до яких хтось із п'ятнадцятирічним досвідом роботи в галузі.
Мушу зізнатися, що я не був таким сильним у структурах даних
Добре, що ви про це знаєте. Якщо ви не можете або не бажаєте змінювати це про себе, то моя рекомендація полягає в тому, щоб ви не претендували на роботу, яка вимагає можливості з структурами даних.
Існує така загальна точка зору, що хороший програміст - це обов'язково той, хто добре знає структури даних.
Це тавтологічно, що хороший програміст - це програміст, який добре будує види програм, які потрібно будувати. Багато програмістів працюють над завданнями, які не потребують глибокого знання структур даних. Деякі з них працюють над завданнями, які потребують глибокого знання дизайну інтерфейсу користувача, наприклад. Або нормалізація бази даних. Або що завгодно. Ці люди все ще можуть бути "хорошими програмістами" у своїх областях.
чому все це акцентується на структурах даних?
Я задаю питання інтерв'ю щодо структур даних, тому що в моїй команді розробники розробляють, впроваджують та маніпулюють складними структурами даних щодня. Вчора ми провели чотири години зустрічей, на яких півдесятка розробників сперечалися про плюси і мінуси додавання одного булевого поля до певного вузла дерева. Напевно, в моїй команді немає навичок, важливіших за вміння розуміти структури даних на глибокому рівні. Нерозумно було б не ставити на це запитання інтерв'ю, оскільки саме так ми і робимо.
Невже знання в структурах даних насправді не впливають на кар'єру в галузі програмування?
Ну це, безумовно, завадить вам влаштуватися на роботу в мою команду. Але, як я вже говорив раніше, програмування - це величезне поле. Існує безліч видів комп’ютерного програмування, які не потребують знання структур даних.
чи справді знання з цієї теми є достатньою підставою для розмежування доброго та поганого програміста?
Ні. Але майже завжди достатньо виявити розробників, які навряд чи матимуть успіх у Microsoft. Оскільки саме це мене насамперед цікавить виявлення, знання структур даних є одним із факторів, на які я перевіряю інтерв'ю.