Як вивчитися на програміста: основна таємниця айтішної освіти
[Про автора: Юрій Савка — має 8+ років досвіду роботи в ІТ, наразі працює на посаді Senior PHP developer в компанії Rocket Internet в Берліні, веде блог]
Свій перший сайт я написав на третьому курсі. Нашому «мистецькому об’єднанню» потрібно було своє представництво в інтернеті, де ми мали викладати вірші, відео з перфоменсів і маніфести постмодернізму, який помер. В нашому об’єднанні були поети, режисери, оператори і актори, а програмістом був чомусь я один. Тож вибору особливого не було: я сів і почав писати сайт.
На той момент я не знав PHP, не уявляв собі, «що відбувається між тим, як натиснути кнопку Ентер, і тим, як гугл покаже тобі форму пошуку». Не знав патернів програмування, різниці між SOLID і GRASP, абстрактним класом та інтерфейсом. Я був жахливим програмістом і прекрасно це розумів, але діватись було нікуди — я сів і почав писати код.
Сайт у мене також вийшов жахливий. На щастя, початкового коду не збереглося — після чергового «апгрейду» з AJAX чатом на сервер проліз вірус і заразив, окрім нашого, ще з десяток сусідніх площадок. Після інциденту з вірусом із безкоштовного сервера нас погнали, а код (його єдину існуючу копію) витерли під нуль. Часом я мрію, щоб таке ж сталося з усіма іншими моїми старими проектами.
Код був написаний на Смарті та грішив усіма можливими помилками початківця. Тим не менше, один з моїх колег по «об’єднанню» зумів здати його чи то як лабораторну, чи то навіть як курсову роботу. Інший знайомий попросив мій код як основу для свого «стартапу», мовляв, його теперішня версія трохи поступається у функціоналі. Після двох літрів пива я вмовив показати, що в нього було на той момент. Він відкрив єдиний файл проекту. Верхнім рядком там стояв class Articles і дві фігурні дужки, більше у файлі не було взагалі нічого. «Ух ти», — сказав я йому, — «в тебе на один клас більше, ніж в мене!»
Перший комерційний проект
Після написання мого першого сайту я так само не знав програмування і так само не вмів писати код. Але, на щастя, про це ніхто не здогадувався. І мій сусід по кімнаті, коли йому пощастило десь вихопити проект за 100 баксів, пішов з ним напряму до мене.
«Проект» включав у себе правки до інтернет-магазину. Власник купив у когось флеш-рулетку, яка мала видавати знижку перед замовленням. Наша задача була в тому числі і в тому, щоб рулетка завжди видавала мінімально можливий варіант: знижку в один відсоток. Як ви розумієте, щедрістю замовник не вирізнявся, але, на щастя, сусід по кімнаті мені трапився настирний і свою половину платні відпрацював чесно — гроші ми таки отримали. Сто баксів — це було дві моїх стипендії. Половина з них — якраз одна. Досі пам’ятаю той неземний звук, яким ВебМані повідомляли про те, що на рахунок прийшли гроші. Потім я його чув ще не раз.
В той же час мій знайомий, назвемо його Ромою, підійшов до справи серйозніше. Він не хотів, як я, писати бидлокод, а натомість вирішив повчитися. На Петрівці за шалені гроші він купив три талмуди по С#. Кожного дня після пар він сідав за ці талмуди, уважно читав, підкреслював важливі моменти олівцем, час від часу піднімав погляд від книжки і тихенько шепотів — так краще запам’ятовується.
Зусилля не минули дарма. Через півроку Рома знайшов свою першу роботу. Щоправда, його зарплату я на той момент вже міг заробити за три хороші вечори, з тією лише різницею, що мені її справді платили. Коли я дізнався про затримку зарплати в півроку, я здивовано запитав: «Якого біса ти ще там?». Рома мені відповів, опустивши голову: «А хто мене ще візьме? Програміст-то я хріновий».
— Ти що, — запитав я, — не тягнеш задач, які тобі дають?
— Та задачі я тягну, — відповів мені Рома, — з цим проблем нема. Але я так і не зміг вивчити навіть третини з моїх книжок. Кому я такий потрібен?
Від фейспалму мій лоб ледь не тріснув. Я довго і нудно намагався щось йому пояснити, але марно: на всі мої питання він відповідав «ти не розумієш» і продовжував у тому ж дусі. Останнє, що я про нього чув, — були його плани перекваліфікуватися в порноактори. Надіюся, хоч до цієї професії він знайде інший підхід.
Шлях фрілансом
Після проекту з магазином я підсів на біржі праці рунету. Тоді ще можна було лишати необмежену кількість відгуків безкоштовно. Цим я і займався. Завдання я, в основному, не читав. Вихоплював з опису ключові слова і залишав коментар: «Я, досвідчений програміст, експерт з ХХХ, маю досвід впровадження YYY, готовий виконати ваше замовлення за десять баксів». Звучало дивно і смішно, але навколо бушували нульові, ми виживали як могли, і проекти мені таки час від часу перепадали.
Я рівняв верстку каталогу тракторів, завантажував прайси в магазин ювелірки, писав парсери для погодних сайтів і схеми маршрутизації для порнотрафіку. Одного разу мені навіть замовили пофіксити цілий вірус. Не знаючи, що таке згадана клієнтом «віртуалка», я запустив черв’яка прямо в себе на машині, звідки потім довго і нудно його виколупував. Клієнт, до речі, більше на зв’язок так і не вийшов.
Більшість моїх однокурсників на той час теж працювали. Хтось — так само, як я, на фрілансі, хтось — в шарагах на півробочого дня, де їхні перші проби клавіатури продавали, як роботу «сіньйорів». Дехто зависав цілими днями на топкодері, заробляв гроші на платних контестах і деколи навіть писав туди статті. Нас об’єднувало одне — ми були поганими програмістами. Але робили все, щоб стати хорошими.
Інший мій знайомий приблизно в той самий час пішов на роботу в кабельну компанію, міняти людям роутери і прибивати до стінки спеціальні кріплення. Професія програміста його досі приваблювала, тому вечорами він час від часу відкривав підручник по HTML+CSS, вчитуючись у кострубатий, наповнений канцеляритами текст. Кожного разу він зітхав і закривав його, адже 500 сторінок — не штука, одним махом не освоїш. Чи пробував він щось писати сам? Не знаю, напевне — ні, було «ще рано».
Він мене допитувався, як я зміг стати настільки крутим програмістом (мірилом крутості були зароблені гроші), і які книжки я читав, щоб досягнути того, що маю зараз. Я вигадував якісь відмазки, цитував Ейнштейна з його «найкраща практика — це теорія», але основної своєї таємниці я тоді так і не видав.
Синдром самозванця
Мій секрет був у тому, що ніяким крутим програмістом я насправді не був. Адже про системи, в які безстрашно ліз у пошуках багів, я не знав практично нічого. Пересувався наосліп в нагромадженні модулів, копіював шматки коду з одного місця в інше і міняв їх випадковим чином, аж поки вони не починали працювати. Ми ще жартома називали це генетичним програмуванням: так само працює еволюція.
Ця таємниця переслідувала мене добрий десяток років. Я страждав синдромом самозванця, чекаючи, що ось-ось усі навколо зрозуміють, що насправді я ні бельмеса не петраю в тих матеріях, про які впевнено говорю на співбесідах, недостатньо знаю про технології, які використовую в продакшні і не зможу напам’ять розповісти про 7 рівнів мережі. Часто мені снилося, як строгий вчитель викликає мене до дошки і примушує написати потрібний формат дати. А я не можу, бо я гуглю його кожен бісовий раз!
А потім я заспокоївся. Не тому, що став раптом супер-експертом і «вивчив» нарешті програмування. Натомість я зрозумів, що всі навколо такі самі телепні, як і я. Не тому, що не хочуть вчитися і спали на уроках. Просто вгледіти за всіма змінами в технології і «навчитися» чомусь перед тим, як братися за роботу, просто абсолютно неможливо. Спочатку я думав, що щось не так в айті. Але потім зрозумів: проблема набагато глибше.
Як стати кращим в сучасному світі
Все життя нам розповідали, що школа, університет чи ПТУ є необхідною ланкою в кар’єрі кожного. Там нам повинні дати сакральний набір інструкцій, як виживати в жорстокому навколишньому світі. Так звані Знання.
Насправді, колись так все і було. Світ, підскакуючи на поворотах, сонно плівся вперед. «Революції» займали сотні років і протягом одного короткого людського життя знань, отриманих у школі, було більш ніж достатньо. Покоління за поколінням селяни всипали в ту саму землю те саме насіння і тими самими серпами косили в жнива урожай. Династії працівників заводів стояли біля одного і того ж станка, на якому мінялася хіба що фарба. Ось тобі набір погодних прикмет та інструкцію до станка. Більше тобі в житті не знадобиться нічого.
Сучасний світ мчить уперед з реактивною швидкістю. Все міняється не те, що в масштабах покоління — навіть декади розділяє прірва. Мобільні телефони, інтернет, соцмережі, віртуальна реальність, автопілот автомобіля. Кожних кілька років світ підкидає вгору від чергового відкриття і тих, що не змогли втриматися, відразу відкидає на узбіччя.
Тим не менше, в суспільстві чомусь досі вважається, що школа з університетом дають якісь міфічні «знання», володіючи якими можна піти і відразу працювати. Тільки от роботодавці, паскуди, постійно вимагають цей бісовий «досвід». Або навіть не так. Проблема університетів, мовляв, у тому, що вони дають знання, але «не ті».
Насправді ж єдиний спосіб стати в чомусь кращим включає всього два простих кроки.
— Робити те, в чому ти хочеш стати кращим;
— Дивитися, як це роблять ті, хто вже кращий.
Все, більше ніяких таємниць нема.
Діти, яких готують до футбольної кар’єри, просто ганяють на стадіоні цілими днями. Часом ще тренують конкретні удари, вже знаючи напевне, коли і при яких обставинах вони їм знадобляться. А ще прикипають поглядом до екрану, коли на поле виходить їхній кумир. Навряд чи Зідан читав багато книжок з теорії футболу. Хоч їх, я підозрюю, написано чимало.
Навчання: майстер vs книжки
Мало хто розуміє, що книжка, насправді, — це сурогат. У всі часи єдиним дієвим способом справді чогось навчитися була практика в Майстра. Чаклун ти, столяр, чи коп, тебе приставляють в пару до досвідченого і вправного. Ти дивишся, як працює він. Повторюєш за ним. Профіт.
В епоху інформатизації Майстер став зовсім поруч. Його код — в публічних репозиторіях, його технічні статті в блогах, його лекції — на Ютубі та Курсері. Якщо дуже припече, можна навіть написати йому листа з питанням — і він відповість. Тепер не потрібні недолугі посередники в заляпаних крейдою старих радянських костюмах і навчальні програми, застарілі вже на етапі затвердження. Тепер не потрібні його священні послання — книжки.
Підручники з програмування — це окрема історія. Зазвичай, вони застарілі вже на момент виходу. Адже текст потрібно написати, вичитати, потім дочекатися друку, розповсюдити. Якщо ви з якоїсь незрозумілої мені причини вирішили читати не в оригіналі, про будь-яку актуальність можете забути відразу. Адже за час, витрачений на купівлю прав, власне переклад і подальшу публікацію з розповсюдженням, технологія вже встигла просунутися на кілька кроків уперед. Часто — велетенських кроків. І частина «хороших практик» вже давно перетворилися в ознаки поганого тону.
У наш час технічні книжки гарно виглядають лише на полицях. Натомість на їхнє місце прийшла документація, технічні блоги, всілякого роду конференції, онлайн-курси та інші ресурси з чітко вираженою інтеракцією. Короткі, актуальні довідники О’Рейлі, бажано з сайтом, який постійно оновлюється, дозволять швиденько вникнути в невідому раніше область, але далі доведеться тільки копати самому.
Вміння вчитись
І навіть при цьому більшість часу ти будеш працювати з тим, в чому анітрохи не розбираєшся. В цьому і є той міфічний досвід, який усі вимагають замість ваших сакральних «знань»: вміти швидко вникнути в те, що бачиш перший раз у житті.
Тому кожного разу, коли мене питають «де можна вивчитися на програміста» і «які книжки можна прочитати, щоб ним стати», я відповідаю: «ніде» і «ніякі». Програмістом неможливо «стати». Ним треба «залишатися» кожного бісового дня, читаючи чергову технічну статтю про Кубернетес і закочуючи очі, в той же час розуміючи, що завтра на цьому таки доведеться писати новий проект.
Тому що інакше ніяк, і ті, хто забариться хоч ненадовго, застрягнувши в такому знайомому легасі коді, мають всі шанси стрімко вилетіти з індустрії під напливом молодих і голодних, які за потреби розберуться в усій вашій системі за кілька днів, а ще за місяць перепишуть її на Ноді. Або на Го. Або на Котліні. Головне, що вам в Новому Дивному Світі місця вже не буде.
А в порноактори, починаючи з певного віку, перекваліфіковуватися буде не так вже і легко.