programming mentor

ти живий, поки вчишся

Шлях Джедая

2020-01-14 programming mentorстатті

Привіт, мене звати В’ячеслав Колдовський і я розкажу свою історію.

Я на все життя запам’ятав цей момент у вересні 1986 року. Мені було шість років і я вперше побачив електронний мікрокалькулятор. У своєму віці я вже вмів рахувати і робити прості арифметичні операції, хоча це й давалося непросто. І та швидкість, з якою це робив калькулятор мене просто зачарувала. Я запитав тоді: “Хто працює з калькуляторами?“. І мені сказали - програмісти. Саме тоді я вирішив, що буду програмістом.

Ні комп’ютера, ні калькулятора в мене тоді не було, але це не заважало вчитися, бо була можливість читати книжки та журнали. Для цього я намагався знайти будь-яку можливість - в бібліотеках, в книжкових магазинах, просив батьків виписувати мені журнал “Юний Технік” - то взагалі була особлива подія, коли отримував новий номер, бо той журнал був свого роду “вікно у світ” - крім сугубо рядянських досягнень в ньому регулярно писали про те, що коїться “за бугром” - ніби новини з окремої планети, серед яких було багато на комп’ютерну тематику. Якось у бабусі знайшов погризені мишами випуски журналу, які виписували ще її діти, то цілими тижнями читав їх і перечитував. Власне з журналу я дізнався, що програмувати можна з калькулятором, тільки треба не звичайний, а програмований, то мені його вдалося випросити в батьків, хоча й з другої спроби, бо з першої купили звичайний, по принципу “бери що дають” - звично для тих совкових часів.

Тим не менше, практикувати програмування я почав вже в 10 років на МК-61. Можливо це звучить дещо смішно “програмувати на калькуляторі”, однак для того, щоб мова програмування була повноцінною їй достатньо бути “повною по Т’юрингу” і мова калькулятора цю умову задовольняла. Відповідно можна було робити програми, які щось обчислюють, чи навіть ігри - я старанно записував програми в зошит, а звідти їх набирав. Багато програм знаходив з різних джерел, інші - робив сам, часто без калькулятора, на уроках чи в перервах між ними.

MK-61
MK-61 - саме з нього я почав програмування, він навіть зберігся у мене в робочому стані

Мова програмування на калькуляторі була достатньо складною, він використовував так звану “зворотню польску нотацію” - це коли операнди треба по черзі ввести в стек, а лише потім набрати оператори. І кнопочки “дорівнює” на ньому немає - весело було жартувати з тими, хто попросив тебе “дати калькулятор” щось порахувати, а потім спостерігати за ними як вони намагаються хоч щось на ньому обчислити. Ось можете спробувати самі розважитись, за цим посиланням емулятор калькулятора, почніть з того, щоб обчислити “2+2” :)

Складність програмування на кальуляторі дуже допомагала розвивати пам’ять, уяву та логічне мислення. Однак продуктивність такого “програмування” була вкрай низькою - робота над якоюсь примітивною програмкою, це справа на кілька годин як мінімум. Але мені це подобалося і вже тоді, в 10 років, я зрозумів, що хочу бути не просто програмістом, а людиною, що досліджує цю галузь та навчає цій справі інших, і коли у школі в кінці п’ятого класу робили спільну дошку, в яку треба було вписати “ким ти хочеш бути” - я вписав щось на зразок “вченим програмістом” - оскільки це те, чим я займаюся зараз, то можу стверджувати, що свою професійну мрію мені реалізувати вдалося.

Чим більше я зростав, тим далі ставало зрозуміліше, що калькулятора мені не достатньо, я почав вивчати дорослі мови типу Фортрану та Бейсіку по книжках, складав програмки в зошиті і прокручував їх в голові, одночасно з цим просив батьків допомогти мені з комп’ютером. На початку 90-х персональний комп’ютер був недоступою розкішшю і про нього можна було лише мріяти. Тим не менше, коли мені було 13 років мій батько знайшов можливість роздобути комп’ютер, але на умовах бартеру - за старий списаний з використання комп’ютер на процесорі 80286 в народі “двійка” я мав відпрацювати і зробити комп’ютерну програму - базу даних телефонних номерів. Програму я зробив на QBASIC - варіації бейсику від Microsoft, а кілька тисяч номерів вручну набирав з аркушів А4, на яких вони були написані. Закрив цю “угоду” в 1994, коли мені було 14 років, клієнт залишився задоволений, можна сказати, що отримав свій перший комерційний досвід.

80286 PC
Мій перший ПК був схожий на цей, мав такий же захисний екран, і я на ньому запускав Windows 3.1, шкода фото оригіналу не збереглося

З QBASIC я бавився дуже багато - щось створював своє, щось модифікував існуюче - особливо подобалося робити свої модифікації кількох ігор, що йшли в комплекті з DOS з вихідним кодом. Але QBASIC мені не вистачало, я читав про інші, більш прогресивні мови програмування і мені приглянулася C++. Я жив в невеличкому райцентрі, тоді годі й було мріяти про Інтернет, то щоб “роздобути щось” треба було шукати в кого воно є та копіювати на дискетку. Я попросив свого друга, що мав доступ до різних програм, знайти мені C++. Ми бачилися рідко, він жив у великому місті, то коли наступного разу ми зустрілися, то він мені передав дискетки з такими словами - “це не зовсім C++, але дуже схоже, практично з тими ж можливостями”. Це був Turbo Pascal - дуже популярна в наших краях мова програмування.

Спочатку Turbo Pascal, потім Borland Pascal for Windows і нарешті Delphi - це все були продукти відомої компанії Borland побудовані навколо мови програмування Pascal, розробленої Ніклаусом Віртом сугубо в навчальних цілях. На Pascal і його модифікаціях почалася моя справжня комерційна кар’єра - я робив програми сам, потім з більш досвідченими друзями, у яких я багато вчився. Потім ми зробили власну фірму і поставили програмування на потік. В якийсь момент я вже керував технічними процесами в компанії, рев’ював чужий код, розробив стандарти написання коду на Delphi, які на тривалий час стали найпопулярнішими в СНД, навіть зараз легко гугляться, хоча активно писати на Delphi я перестав років 15 тому :)

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

Було так, що я писав на інших мовах, ніяк не заглиблюючись в їх філософію, знайомство з тим же JavaScript почалося в кінці 90-х, і він тоді залишив на мене далеко не найкраще враження. Assembler нагадав мені мову калькулятора, і одночасно з ностальгією прийшло відчуття надзвичайної неповороткості процесу розробки, трохи побавився і закинув. В якийсь момент стало зрозуміло, що Delphi помирає, то я досить легко “пересів” на C#/.Net, відкриваючи для себе світ більш “серйозного” програмування, яке заохочувало застосування паттернів, побудови багаторівневої архітектури і особливу увагу приділяти підтримці коду, на що дуже часто мало звертали увагу розробники на Delphi.

Я продовжував багато читати і вивчати нового, особливо сильне враження на мене зробила книжка “Досконалий Код” (Code Complete) Стіва Макконелла - другу редакцію якої я придбав десь у 2005 році. Ця книжка давала відповіді на багато запитань, які виникали в процесі написання коду роками до того. Наприклад, саме в тій книжці я знайшов для себе відповіді на питання, коли і як варто оптимізовувати код, як найкраще називати ідентифікатори та наскільки сильно треба дробити фрагменти програми - здавалося б базові речі, які досвідчений розробник мав би передати новачку на початках. Але так трапилося, що у більшості “класичних” книжок з програмування цим речам приділялося мало уваги, а досвідченого наставника в мене в свій час не було, просто пропустив цей етап. Відповідно в мене почало з’являтися розуміння того, як багато часу я витратив, навчаючись самостійно і часто роблячи це неправильно, довго блукаючи хибними шляхами, бо свого чау нікому було підказати правильну дорогу.

Code Complete
Досконалий Код - ця книжка справила на мене велике враження

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

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

Одним зі своїх найбільших досягнень вважаю запуск курсу з вивчення JavaScript - ScriptJedi42. Це особливий курс, він був створений як квінтессенція мого багаторічного досвіду у якості вчителя і наставника. Працюючи з учнями індивідуально, я виявив основну проблему, яка стоїть на перешкоді до професії розробника - це невміння думати як програміст, знаходити рішення завдань у вигляді програмних конструкцій і структур даних - функцій, циклів, масивів, об’єктів і тому подібного. Цьому не можна навчитися просто прочитавши книжку, зрозумівши і запам’ятавши написане. Це буде недостатньо. Потрібно через практику сформувати навик програмування аналогічно тому як спортсмени формують і відточують свої навики і вміння. Саме цим ми займаємося на нашому курсі, саме в цьому і полягає шлях джедая - ти маєш пройти випробовування, сформувавши навик, і це дуже добре, коли є наставник, який тебе може провести, бо без нього ти можеш блукати роками, даремно марнуючи час.

Допомагати людям здійснити свою мрію стати розробником - це те, що мене мотивує, те, що дарує відчуття потрібності цьому світові. Люди народжені, щоб створювати, і професія розробника - одна з тих, яка дає цю можливість. Програмний код - це думка програміста, записана мовою, яка зрозуміла йому і машині, це можливість силою думки створювати чудові речі. Проте цей дар не кожному відкривається - лише тим, хто достатньо попрацював над собою, щоб розкрити його, точно також, як джедаями стають лише ті, хто пройшов шлях навчання і випробувань. Я можу провести вас цим шляхом, спитайте себе, чи хочете ви його пройти? Як так, то вперед, цей шлях повний пригод! І хай прибуде з вами Сила!