Дорогі стартапи, досить ставити математичні задачки, щоб зрозуміти вмію-я програмувати

Я завжди була сильна в математиці. Не маю на увазі тригонометрію, арифметику і все те, про що люди думають, кажучи: «Так ти мозок, а я ось ненавиджу математику». А ось комбінаторику, теорію графів, докази або прорахувати, як укладеними капелюхи одягти — обожнюю це все. Я вчилася у трьох вищих школах і завжди була в команді математиків. Коли мені було не то десять, одинадцять років і батькам треба було заткнути мені рот на вечірці, вони мене підкуповували задачником математичних головоломок. Я не жартую.


На другому курсі коледжу я зустрічалася зі студентом кафедри прикладної математики і з цікавості вибрала кілька предметів. На мій подив, це нічим не відрізнялася від звичайної математики. Візьмемо, наприклад, курс введення в МП Java. Спочатку в програмі йде всяка абракадабра:
public чогось там void mail щось ще
, але якщо абстрагуватися від цієї нісенітниці, то це все та ж сортування листа, запис у матрицю і обхід дерева. Легко і просто. Ще простіше стало, коли ПМ переключився на Python.
Отже, я з двома спеціалізаціями: математика і програмування, довчився в своїй крихітній гуманітарній школі в Міннесоті до старших курсів і стала шукати роботу. Виявляється, тільки страхові фірми бажають наймати спеців з комбінаторики (все ж не рівня кандидата наук) єдино вміють визначати, як власникам пальто роздати капелюхи, щоб у підсумку у всіх виявилася не своя. Таким чином, мій вибір припав на розробку ПЗ.
Через якийсь час, вивчивши обстановку і проваливши кілька співбесід, відійшовши від пристойної паніки, я знайшла стартап в Сан Франциско, здавалося мрією. На співбесіді я очікувала гіршого, проте інтерв'юер чомусь попросив мене знайти на графі найкоротший шлях між вузлами А і Б. Здається, він щось казав про Кевіна Бейконе. Я розрахувала і тоді він запитав, чи можна поліпшити результат, знаючи про те, що вузли відстоять один від одного на відстані шести ступенів. Ага, пошук в ширину з обох кінців. Стривайте, але ж у будь-якому випадку довелося б його застосовувати, не важливо, відомо-чи нам відстань між вузлами. Просто відмінно. Я прилетіла на співбесіду довжиною в цілий день, мені задавали ще купу питань: сортування, обхід, запам'ятовування об'єктів а в кінці запропонували роботу. Весь цикл співбесід тривав шість днів і за цей час я не написала ні одного рядка коду.
Замість цього, доречно було запитати:
— Наскільки добре Ви розбираєтеся в Unix?
— Я знаю і вмію змінити директорію, видати список файлів і запустити прогу на Python. Ах так, ще перейменувати файл… швидше за все.
— Що таке AJAX, і з чим його їдять?
— Емм… та штука, що використовує GMail? Це щось на зразок оновлення сторінки без оновлення всієї сторінки.
— З якими системами керування версіями працювали
— На останньому курсі ми писали дипломну, в проекті використовували SVN. Я натиснула не туди і виник конфлікт, хтось за мене все полагодив.
— Як можна реалізувати, використовуючи об'єктно-орієнтований ЯП колоду карт, загальну паркування, систему бронювання готелів
— Змінні, скрізь змінні, з лічильниками і рядками.
— Бази даних, ну хоч що-небудь.
— Чого?
Послухайте, найменше я хочу виглядати невдячною. На цій першій роботі я вивчила все вищевикладене і навіть більше, тому що старші колеги терпляче сиділи і виносили мої дурні розпитування, їх це не дратувало, навіть коли я дратувала сама себе. Однак на це у мене пішло більше року, з тих пір я змінила три роботи і пройшла неміряна кількість співбесід, прийшовши до висновку, що спосіб співбесіди в першому з стартапів не був лише дивною флуктуацией. Це загальноприйнята практика. Ці люди задають математичні головоломки, намагаючись встановити навички програмування. Чому?
Кричущий випадок стався під час співбесіди на другу роботу після закінчення коледжу. Мене попросили показати навички морського бою, запропонувати алгоритм затоплення човна з невідомими цілочисельними координатами і швидкістю. Потрібно пронумерувати раціональні числа для того, щоб вирішити проблему. І знову — ні одного рядка коду. Через два тижні мене попросили написати власну програму для iPhone. Зайве говорити, що я ніколи з Objective-C раніше не стикалася. До цього в коледжі я написала, від сили, двадцять рядків на C під час групового завдання на класі програмування і пам'ятаю тільки, що це було жахливо, відсутня збирач сміття, тому треба самому вивільняти пам'ять. Мені дали книгу
The C Programming Language
, показали звідки можна завантажити нову версію
Xcode
і побажали удачі. Через три тижні бос покликав мене на килим і завів таку розмову: «Що-то ти не так швидко осваиваешься, як ми очікували». Я подвоїла свої старання. Такої ж розмова відбулася ще через тиждень, тільки гірше. Потім були канікули а на наступний день мене звільнили.
Я була страшенно засмучена, ще ніхто раніше не скаржився на мою успішність. У мене була купа друзів розробників, які вміли все це робити. Як таке могло статися? Чому ж у мене не виходило?
Я придушила це спогад і нікому про це не розповідала. Влаштувалася на роботу в третій стартап (запитали дещо про марковських ланцюгах) і кожен раз бісилася після розмови наодинці з босом, черговий раз вислухавши про те, що я не виправдовую їх очікувань і взагалі обманом влаштувалася на роботу.
Продовжуючи боротися, я помічала, що навчання дається все легше. Потихеньку, я стала освоювати все нові і нові концепції, які раніше мешкали в моїй голові поза контекстом. Якось зібралися ми в неділю з друзями веселитися і кодити, тут хтось запропонував використовувати
Node.js
, тому що це круто і варто того, щоб вивчити. В одній типовій програмі я виявила безіменну функцію, яка передає значення іншої функції і не врубилась в сенс того, що відбувається. Але всі інші відразу-ж зрозуміли, незважаючи на те, що до цього також не мали працювали з бекенд Javascript-ом! Вони витратили півгодини, чертя для мене діаграми з купою стрілок і в кінці-кінців, спираючись на цілий ряд метафор, я змогла дещо зрозуміти. Потім, коли я спостерігала, як хвацько вони перекидають зворотні дзвінки, все одно для мене це залишалося містикою і я собі самій здавалося такий тугодумшей.
Нещодавно моя подруга стала вчити програмування і попросила мене пояснити їй якусь дурницю — різницю між
статичними змінними
та
об'єктними змінними
а також механізм спадкування. І тут мене осінило, що я вільно сипала слівцями «клас», «об'єкт» або «метод», розуміючи їх значення і не замислюючись про це, тому що я роками використовувала ці поняття. Але кожен раз, коли я використовувала одну з них, я бачила як вона напружується, намагаючись пригадати сенс терміна, його властивості і як це в'яжеться з тим, що було раніше сказано, адже не минуло і двох тижнів як викладач написав ці визначення на дошці. Я усвідомила, що не можна просто так взяти і перекачати в неї (так довго до мене доходило) три роки розробки софта, нарощуючи і збільшуючи знання, на все те, що вже пояснювала раніше. Мізки, на відміну від гитхаба, так не працюють, це очевидно.
Таке відчуття, що ті, хто проводить співбесіду, вважають ніби теорія програмування та вміння розв'язувати задачі — найважче а все інше — дрібниці. Це зрозуміло, адже багато з них навчилися програмувати в дванадцять років, і вони освоїли програмування так само, як я навчилася вирішувати головоломки. А теорію вони підучили вже в коледжі. Але я-то практикувалася в задачках з десяти років і тому маю всі підстави сказати: програмування — охренительно важка штука. Така ж важка, як і рішення головоломок, якщо не важче. І якщо я з ходу справляюся з загальними елементами в несортированном аркуші, циклами пов'язаних листів і найкоротшим шляхом в мережі, то це ще не означає, що я буду знати все, що потрібно для програмування в перші тижні роботи.
Коротше, я вже цілком просунулася і розгубленість початкового етапу залишилася по той бік. На це пішло цілих три роки, але все одно попереду ще довгий і довгий шлях, поки я навчуся програмувати майже так само добре, як я вмію вирішувати головоломки. Отже, повідомляю тим хто буде проводити зі мною співбесіду, наступний раз задавайте мені питання по програмуванню, якщо намагаєтеся зрозуміти наскільки добре я вмію кодити. Я хочу щоб ви зрозуміли — я не намагаюся дурити вас! Так що немає абсолютно ніякої причини, щоб ходити колами.

Примітки
Ця стаття була написана кілька років тому і тепер недоступна за оригінальною посиланням. Її можна витягнути з вэб-архива або онлайн блокнота, куди я скопіював текст. На Хабре був епічність пост про те, що всі знають чому люки круглі, але не вміють відрізнити абстрактний клас від интефейса. Виявляється, стартапи в Америці точно так само люблять вираховувати квадратуру кола кришок люка. Курсив, виділений текст та інші анімації тексту мої, за винятком придуманого діалогу.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.