Що таке «поліглот», чуємо ми запитання... ну, за словником, це здатність знати кілька мов! То як стати «поліглотом»? Поговорімо з Еріком Схірбомом і дізнаймося всі подробиці з перших вуст!
Джонатан: Що ж, привіт усім і ласкаво просимо до подкасту, або ж прямої трансляції Exercism. Мене звати Джонатан, і сьогодні я маю честь бути ведучим. Зі мною в ефірі Ерік, який входить до команди Exercism і бере участь у проєкті вже багато років. Якщо за останні кілька років ми хоч трохи були в екосистемі Exercism, то майже напевно десь на цьому шляху натрапляли на Еріка. Але сьогодні Ерік у нас на шоу, і це чудово. Мені не терпиться дізнатися трохи більше про історію Еріка, про те, як він потрапив в IT, і про його погляди на різні речі в IT-індустрії. Але перш ніж ми занадто глибоко зануримося в усе це, хотілося б, щоб Ерік трохи розповів про себе, про свій шлях і про те, як він опинився там, де є зараз.
Ерік: Звісно. Так. Радий бути тут. Отже, я Ерік, як уже, мабуть, прозвучало. Живу в Нідерландах. Там і народився. Тож прожив тут усе своє життя. Я почав згадувати, коли... коли я вперше щось зробив із компʼютером. І, здається, це була приставка NES. Грав у Mario. І саме це мене затягнуло. Так, це було чудово. І водночас дуже дратівливо, бо тоді ігри були нещадними.
Джонатан: не було ні збережень, ні контрольних точок, тільки знову і знову з самого початку.
Ерік: Ну, залежить від того, чи ми жили в США, чи в решті світу, бо насправді було дві різні версії. Але так, здається, відкриваєш щілину спереду й вставляєш диски чи що там, картриджі. І мені це дуже-дуже подобалося. NES у нас не було, але в кількох моїх друзів був. Тож я регулярно ходив до них грати, і там було стільки чудових ігор, у які я грав, і стільки ж дратівливих. Але це було таке чудове, чудове заняття. І саме це мене затягнуло. Гадаю, багато програмістів затягуються саме так: хочуть стати програмістами просто тому, що хочуть зробити гру. Я про це думав. І, спойлер, так і не зробив. Я не розробник ігор. Ок. Ні, ні, ні. Але саме через це мені сподобалися компʼютери. А ще в мого батька трапився нещасний випадок ще до мого народження. Його паралізувало нижче плечей. Тож він пересувався в інвалідному візку. Але він завжди був удома. І це було чудово. У мене був батько, який був удома цілодобово. Тож приходити додому було завжди приємно. І він теж любив компʼютери. Тож у якийсь момент, здається, мені було років десять чи близько того, він придбав отой зовсім не фешенебельний компʼютер. Здається, це був X286. Чорно-білий, з інстальованою MS-DOS. І на ньому можна було грати в ігри. Ігор було так багато, і мені діставалися ігри від друзів, яким доводилося роздруковувати аркуші з паролями, щоб можна було взагалі запустити гру, бо був захист паролем. Це було щось як посібник. Зараз так уже не викрутишся. Але тоді це працювало. І я любив грати в ті ігри, але ще любив намагатися зрозуміти, як воно працює. І я ламав свій компʼютер. Навіть не згадаю, скільки разів. Тож у мене була така служба підтримки: батько одного мого друга, який добре знався на компʼютерах. І щоразу, коли я ламав свою систему, я дзвонив йому, і він дуже любʼязно приходив і допомагав її полагодити. Але досі памʼятаю, як панікував, коли розумів, що сам уже не виберуся із цієї халепи. Але багато чого з цього я навчився.
Джонатан: ця халепа. Але з цього я багато чого навчився. На дискеті, і я памʼятаю, як роками збирав гроші на цю штуку, а потім вставив її, і вона ніяк, ніяк не завантажувалася з тих маленьких дискет. Тож це було одне з моїх великих розчарувань. Не думаю, що я колись подолав той етап, коли намагався зрозуміти, як це виправити. Але хіба ігри тоді виходили на дискетах, і треба було... тобто був маленький картридж, який вставляєш, завантажуєш, і все таке?
Ерік: Ніколи.
Джонатан: Так.
Ерік: Так, іноді було кілька дискет. Тож так, це насправді був чудовий період. І я любив MS-DOS і любив зʼясовувати, що я можу зробити. А потім зʼясовував, чого не можу. Тож так, це було справді круто.
Джонатан: Так, це було справді круто. А вона тоді працювала повний день? І батько був удома?
Ерік: Ні, мама доглядала за батьком повний день. Він потребував багато догляду. Спершу він міг рухатися за допомогою рук, а згодом за допомогою підборіддя, бо руки почали слабшати і контролю ставало менше. Але вона доглядала за ним повний день. Тож мої батьки завжди були вдома. І мені було дуже дивно приходити до інших, де батьки працювали. Уже кінець дня, а батьків усе ще немає. Для мене це було дуже дивно. Але так, це просто інша ситуація.
Джонатан: Для мене це було дуже дивно. Тобто Ерік був у сімʼї сам?
Ерік: Ні, у мене є сестра. Вона на три роки молодша за мене. Ніхто ніколи не сказав би, що ми брат і сестра. Ми такі різні. Раніше я з нею багато сварився, але тепер усе гаразд. Тож усе закінчилося добре. Ок. І їй не подобалися компʼютери, тож вона не зазіхала на мій час за компʼютером.
Джонатан: Але ми часто сварилися через компʼютер. Вона хотіла грати в Sims, а я хотів в SimCity чи щось таке. Тож із цього погляду ми завжди гризлися.
Ерік: Бувай. Мені, безперечно, набагато більше до вподоби вибір SimCity. Але ні, вона насправді ніколи не цікавилася компʼютерами. Єдиний спосіб її зацікавити був, коли в мене зʼявилася SNES, тобто Super Nintendo, і в нас був Mario Kart. Їй справді подобалися Mario Kart, тож ми багато грали в Mario Kart разом. Звісно, я завжди вигравав, бо мав набагато більше практики, але їй усе одно подобалося.
Джонатан: Тож досі подобається возитися з усім цим? Так, MS-DOS, якщо не помиляюся, доволі низькорівнева штука. Так. Тож усе це, мабуть, доволі низький рівень. Так, абсолютно. А скільки років було Еріку, коли він возився з тією системою?
Ерік: Ок. Доволі низький рівень, так. Абсолютно низький рівень. Так, мені було, здається, близько 10. І тоді в мене був друг із футбольної команди, точніше з футбольної секції. Він уже був хорошим програмістом і вмів писати ігри. Робив він це у Visual Basic. І я був просто вражений. Він приходив до мого компʼютера й показував, що щось друкує, а я не розумів анічого. Але за пів години в нього вже щось ходило по екрану, і для мене це було просто чарівно. Я був просто приголомшений. Але тоді я так і не спробував програмувати. Мені все ще здавалося, що це надто складно, щоб навіть пробувати. Тож я цього не робив. Просто возився з чимось та грав в ігри.
Джонатан: Тож я... я просто втручуся.
Ерік: А потім, коли я став трохи старшим.
Джонатан: Як виникло це усвідомлення: о, я можу запрограмувати гру, і я можу займатися цим по-справжньому, якщо це має сенс, або я можу піти цим шляхом більш серйозно?
Ерік: Так, це прийшло пізніше. Коли мені було, здається, 17, довелося вибирати, яким шляхом піти. У мене в голові було два варіанти. Один вивчати історію, другий зайнятися IT. Зрештою вибір був доволі простим, бо мені здавалося, що IT це те, чим хотілося б займатися трохи більше, ніж самою лише історією. В історії можуть бути дуже нудні місця, і я не думав, що в інформатиці будуть нудні місця, але вони, звісно, є. Тож я помилявся. Так, так. Ні, ну, про це можемо поговорити іншим разом. Але так, нудні місця є. Але тоді я зробив вибір. І це був час, коли все бурхливо зростало. Тобто бум доткомів. Коли ми ходили на презентацію до моєї школи... тобто до навчального закладу, куди я збирався вступати, це був університет прикладних наук. Я міг вибирати між університетом прикладних наук і звичайним університетом. Але мені більше до вподоби прикладні науки, бо я хочу щось будувати. Я не великий теоретик. Не знаю, як це краще сказати, але з теорією в мене не дуже. Тож я люблю щось будувати. Я дуже практична людина. Тож я почав із практики. І мені це справді подобалось. І це був період, коли всі ці компанії заробляли купу грошей. І вони казали: щойно закінчиш навчання, отримаєш машину, те, се. А коли я закінчив, стався крах доткомів. Усе було в руїнах, і знайти роботу було насправді доволі важко. І тоді мені здалося, що, можливо, варто просто спробувати університет, бо прикладні науки були дуже цікавими. І саме там я насправді навчився програмувати. Але я подумав: ну, можливо, трохи відкладу трудову карʼєру і подивлюся, чи зможу впоратися з університетом. Тож було добре.
Джонатан: Наскільки я розумію, у європейській системі освіти досить швидко відбувається розподіл: практичні навички проти університету, тобто, можливо, більше академічного шляху. Чи так це в Нідерландах? Чи добре там уміють сказати: слухай, тобі це справді підходить? Я знаю, що у Швейцарії, яка для мене є точкою відліку, можна сказати: гаразд, іди на стажування й опануй фах у такий спосіб. І це насправді так само... це не вважається чимось гіршим чи кращим за університет. Це просто більше відповідає нахилам людини. Чи так само в Нідерландах? І чи був такий процес у дитинстві?
Ерік: Я не сказав би, що це вважалося рівноцінним. Досі побутує думка, що йти до університету, а не до університету прикладних наук, краще, складніше або принаймні престижніше. Можна ще й отримати інший диплом. Але мені це не дуже імпонувало. Це було надто теоретично. Я хотів навчитися програмувати, бо досі цього не вмів. Я знав, що мені це, ймовірно, сподобається. Я бачив якісь уривки HTML, але жодного рядка коду не написав. Але був досить упевнений, що мені це справді сподобається. Коли я почав, то за перший рік фактично не написав жодного рядка коду. Просто їхав за течією разом із кількома однокурсниками в групі, бо один із них був просто фантастичним програмістом, який знав усе. Він робив усе, тож мені навіть не випадало шансу щось зробити. Але на другому курсі я свідомо вирішив: так далі не піде, я ніколи не навчуся програмувати. Тож я занурився з головою і програмував до нестями. Це було глибоке занурення. Я почав із C, жахлива мова для початку. Не буду розповідати, що я думаю про C як про мову взагалі, але для початку це дуже складна мова. Тож зробити звʼязний список десь на другому чи третьому занятті це точно не те, що студент оцінить, якщо в нього немає жодної бази. Але я таки навчився програмувати, і мені це так сподобалося, що я почав багато програмувати у вільний час. Тож спосіб, у який я майже сам навчився програмувати, бо вчили нас дуже й дуже погано, це знайти щось, чим хотілося б користуватися самому, і зробити це, або принаймні спробувати зробити, бо спочатку просто борсаєшся і не дуже багато встигаєш. Це насправді корисно. Але зрештою це просто практика, практика і ще раз практика. Тож я дійшов висновку, що програмування це навичка, яку набуваєш просто роблячи. Можна набратися скільки завгодно теорії й передивитися, не знаю, 10 мільйонів відео. Але якщо не вкладати в це час, то, гадаю, хорошим програмістом не станеш. Просто треба це робити. І це великий крок. Я досі памʼятаю, що вмів читати код, і був тим досить задоволений. Але потім доводилося писати код, і це був такий великий крок.
Джонатан: був тим задоволений, а потім доводилося писати код, і це був такий великий крок. В останніх кількох випусках я питав, коли в людей клацало в голові щодо програмування, і чи був у Еріка такий момент, коли все ніби ставало на місця і він думав: ого, тепер усе зрозуміло? Чи він так само борсався, намагаючись осягнути теорію, а чи був момент, коли: окей, ні, це все просто?
Ерік: Не думаю, що в мене був один-єдиний момент осяяння. Гадаю, їх було кілька. Це приходить етапами. Здається, перша справжня програма, яку я написав, була грою, де треба вгадати слово. Як та дуже популярна гра, де... Ну, це як «Шибениця», скажімо так, «Шибениця». Але написана на C, і я таки змусив її працювати, тож міг грати у власну гру. Тож я трохи почав розуміти, що відбувається, а далі потроху просуваєшся. У мене було щось повʼязане, здається, з мʼютексами. Там були потяги, і вони не повинні були зіткнутися. Тож можна було використати мʼютекс для моменту, коли вони перетинаються. А мʼютекс по суті позначає «стоп» або «рушай». Це було дуже весело. Тож я був досить задоволений. І показав це викладачеві. А він каже: а що, якщо я хочу, скажімо, чотири потяги? І я такий: о, о, о, трясця. Я про це не подумав. Тож це було ніби відкриття очей, і це було лише одне просте речення. І я подумав: о, треба було врахувати, що він може спитати щось таке. Тож я витратив вихідні, намагаючись параметризувати код, щоб потягів могло бути кілька, і мені вдалося. Я вкрутив це туди. Було негарно, але працювало. Тож це був ще один момент, коли я подумав: о, це справді, справді круто. І я вмію робити такі речі.
Джонатан: Круто. Я бачу, що Ерік уміє робити такі речі. Знаю це з власного досвіду спілкування. А ще з навчання програмуванню відомо, що є такий процес: просто напиши щось, змусь це працювати, а потім удоскональ. Чи був у Еріка такий самий досвід? Тобто: просто написати, змусити працювати, а про решту байдуже, а потім удосконалити.
Ерік: Так, так, гадаю, перший рік чи близько того все зводилося до того, що якщо воно запускається, я був дуже-дуже щасливий. Про якусь естетику не йшлося. Головне, щоб працювало. І я страшенно перебрав із коментарями в коді, бо викладач сказав, що код треба коментувати. І співвідношення коду до коментарів було, мабуть, один до десяти чи щось таке, величезне. І... так, мій найстаріший проєкт досі онлайн, це був мій перший проєкт із відкритим кодом. Ну, хто памʼятає MSN Messenger, де можна було надсилати повідомлення?
Джонатан: Окей, щось таке пригадується, але не дуже.
Ерік: А Winamp хто памʼятає?
Джонатан: Так.
Ерік: Так, Winamp був медіаплеєром. Це була епоха Napster. Завантажуєш MP3, а потім слухаєш його через Winamp. І я хотів зробити так, щоб, коли я слухаю пісню, вона автоматично додавалася до мого імені в MSN Messenger. Тоді мені дуже кортіло займатися програмуванням під Windows. Це був Win32. Дуже застарілий підхід, не те, що зараз, але дуже низькорівневий і теж дуже класний. Тож я написав плагін на C++, яка тоді була моєю улюбленою мовою, але я знав лише три мови, тож це мало про що говорило. Але плагін я зробив. Тож якщо Winamp грав, він через хитромудрі Win32 API отримував назву пісні й оновлював імʼя в MSN-вікні. Тож усі бачили, яку пісню я слухаю. І я виклав це в мережу, бо подумав, що, можливо, комусь це сподобається. Здається, це було на SourceForge, який зараз уже ніхто не використовує, бо, здається, там були якісь проблеми з приватністю чи щось таке. Але насправді інші люди у світі цим користувалися, і я був такий вражений. Я бачив завантаження, не знаю, кількасот завантажень, і люди користувалися моєю програмою, яку я написав. Це було найкраще відчуття в житті. І це була моя перша програма з відкритим кодом. У мене ніколи не було синдрому самозванця. Я вважав: це мій код. Якщо комусь він здається поганим, нічого страшного. Він працює, і я ним задоволений. А ще можу вчитися з коментарів інших. Я ніколи не страждав на синдром самозванця, і тих, хто мене знає, це не здивує.
Джонатан: Мене б це теж не здивувало. Щодо досвіду з професорами й викладачами в університеті: чи були якісь конкретні викладачі, які вирізнялися, і те, як вони навчали, прискорювало навчання або мало величезний вплив на те, як Ерік розумів програмування? І що саме вони робили, що дозволило перекинути місток від теорії до практичної реалізації? Це доволі велике питання. Можна розбити його на скільки завгодно частин. Так, так.
Ерік: Так, так. Тож доведеться розділити це на університет прикладних наук і звичайний університет. Почнімо з останнього. В університеті, гадаю, загальний рівень навичок тих, хто мав когось навчати, був дуже-дуже низьким. Планка була дуже низькою. І мені здавалося, що багато хто з тих, хто викладав в університеті, робив це тому, що мусив, а не тому, що хотів. В університеті часто хочеться займатися дослідженнями, але є певна кількість годин, які треба віддати викладанню. Інакше... ну, це частина роботи, але їм це не дуже подобалося. Тож мені хотілося вчитися програмувати далі, вже після того, як я навчився програмувати. Я взяв там спеціалізацію з програмування, але це було так погано. Я майже злився від того, що це той рівень знань із програмування, який хотіли мені дати, і це було так погано, що я насправді перейшов на інформаційну безпеку. А я не дуже захоплююся інформаційною безпекою, але програмування було таке погане. Я завжди кажу, що за всю свою університетську карʼєру єдине, чого я справді навчився, це як правильно писати статті, як правильно працювати з джерелами, щоб знати свої джерела й не приймати будь-яке джерело на віру. Цього я за ті роки таки навчився, але про програмування не навчився нічого.
Джонатан: Це ж дуже перегукується і з історією: як ставити запитання до джерела, як переконуватися, що аргумент узгоджується, і все таке. Як навички та задоволення від історії...
Ерік: ...багато в чому перегукуються.
Джонатан: Як вони проявилися в його програмуванні та навчанні програмуванню, якщо взагалі проявилися? Де були точки дотику?
Ерік: Це складне питання. Ну, і те, і те передбачає багато читання. Історія це про читання. Але й програмування це про читання коду. Кількість разів, коли код справді пишуть, набагато менша за кількість разів, коли його читають. Тож це теж багато в чому схоже на читання. Іноді це трохи як бути археологом: коли приходиш на нову роботу й починаєш із цієї стародавньої legacy-системи, у якій треба розібратися. Відчуття, ніби зазираєш у всі закутки й дивишся, що там сховано. А іноді з шаф випадають скелети. Тож це трохи схоже на дослідження. А що... що в цьому подобалося? Не знаю, чи є щось іще... у чому було задоволення?
Джонатан: Дякую. А в чому Ерік знаходив задоволення в цій галузі?
Ерік: Здебільшого... ну, ті історії, які розповідали вчителі. Про піратів, про те, як їх протягували на мотузці під днищем корабля, і все це дуже докладно. Мені таке подобається. Дуже подобається. І я люблю римлян, їхню культуру, те, як вони поширювалися... а ще політику. Тобто удари в спину і все таке. Це мені дуже подобається. У старшій школі я ще й вивчав латину. Латина мені зовсім не подобалася, але дуже подобалися історії, які... тож мені не подобалося, що доводилося вчити латину, але історії, які ми перекладали, подобалися. Але за два роки я її покинув.
Джонатан: Оці мені подобалися. Ні, я спитав про історію тому, що...
Ерік: Так, я знаю, до чого це.
Джонатан: Я бачив чимало людей, яким подобається щось більш мистецьке чи соціальне... як це сказати? Можливо, у англійському поділі це були б мистецтва та історія, які належать до цієї категорії. Але я дедалі частіше бачу людей, які захоплювалися такою сферою, а потім переходили до навчання програмуванню. І мені це цікаво тому, що тут явно є... перетин, і спроба його окреслити була надзвичайно цікавою частиною моїх розмов із різними людьми. І здається, що якщо є загальна картина і багатодисциплінарний підхід до різних речей, які ми вивчаємо, то перенесення цього в програмування дає величезну користь, бо можна застосувати різні навички в царині програмування. І я думаю, так, це просто... я б це прокоментував. Тож цікаво, що Ерік любив історію, а тепер має досвід із понад 30 різними мовами програмування і підтримує багато з них. Ну, не обовʼязково підтримує, але активно залучений до керування всіма ними на Exercism, що є... Ну, так, так. Тож передаю слово Ерікові.
Ерік: А чия тут заслуга? Можна трохи повернутися до того, що щойно прозвучало? Тож прозвучало, що є багато різних типів людей із різними інтересами, які займаються програмуванням. Але одна з причин, чому, на мою думку, так є, полягає в тому, що програмування приваблює і дуже технічно налаштованих людей, бо там, ну, є суворі правила, мови дуже фіксовані. Є грамматика, є синтаксис. Усе це дуже приваблює людей, які люблять, коли все в певному порядку. Наприклад, якщо людина фізик, їй подобаються правила, закони тощо. І щось таке в програмуванні є, але воно ще й як мистецтво. Іноді його порівнюють із написанням книжки, і я досі вважаю... це, мабуть, один із кращих прикладів. Мені не подобається порівняння з будівництвом будинку, бо жоден, жоден будинок не був би збудований, якби ми будували своє програмне забезпечення так, як будуємо будинки. Але, на мою думку, це справді і наука, і мистецтво водночас. Джеремі нещодавно згадував у матеріалах Dig Deeper, що навіть у дуже простій вправі люди можуть придумати сотні різних рішень, хоча здається: та тут має бути лише один спосіб розвʼязати це. Але способів завжди більше ніж один. І саме це мені подобається в програмуванні: можна мати щось, що працює, а потім дослідити, не знаю, ще 20 варіантів, написати їх і побачити: о, і це теж працює. Це поєднання мистецтва й науки мені дуже до вподоби, бо, гадаю, це також єдиний спосіб, у який я можу бути творчим. Я зовсім не творча людина. У мене є і ліва, і права рука, але якби я взявся щось робити по дому, прибирати, столярувати чи що завгодно, то одразу було б видно, що це не моє. Я в цьому не сильний, ще й тому, що батько не міг мене цього навчити. Це дуже цікаво.
Джонатан: Але мені це теж було зовсім не цікаво. Я в школі займався мистецтвом. Тобто займався музикою, грав на гітарі чи щось таке. І для мене рамки творчості завжди були в малюванні або в музиці. І я ніколи по-справжньому не замислювався про творчий бік коду. А тепер, коли Ерік про це згадав... як це в нього? Він грає на якомусь інструменті? Я знаю, що він любить музику, але я просто намагаюся поєднати ці дві речі.
Ерік: Ну, ем... Так, так. Я намагався вчитися грати на гітарі. Це було дуже важко для моєї дружини, бо ми жили в її студентській квартирі, а це, мабуть, метрів 20 квадратних. Тож я намагався вчитися грати на гітарі, а ми були так близько одне до одного. Я досі дивуюся, що вона це витримала. Але в мене немає...
Джонатан: Це просто...
Ерік: У мене немає жодного вродженого таланту до гри на інструменті. Мені доводилося працювати дуже-дуже-дуже наполегливо, щоб досягти певного рівня, і той рівень усе одно був дуже низьким. Темпи тощо давалися нормально. Але в якийсь момент учитель гітари попросив мене імпровізувати, а потім грати соло, і я був абсолютно розгублений. Хоч убий, не міг цього зробити. У мені просто немає музичної творчості.
Джонатан: Отже, музичної творчості в ньому немає. А програмування? Тут інакше. Коли Ерік береться за код із нуля, скажімо, отримує завдання від Джеремі чи запит на нову можливість в Exercism, і це щось на кшталт «зробимо X, Y або Z», чи це справді надихає його ментально, чи він відчуває: ого, гаразд, класно, варто це дослідити? Чи подобається йому цей процес? Чи саме в ньому він ніби оживає?
Ерік: ...на відміну від музики. Гаразд. Так, так. Тож це... програмування це коли є ідея і вона стає чимось. Це ніби роль маленького бога, так: усе починається з нічого, є ідея, і ось уже щось є. І це просто так чарівно. Я досі відчуваю сильне піднесення, коли маю скрипт. Там купа тексту, рядок за рядком, а потім видно, як воно щось робить. І так приємно бачити, як компʼютер працює на нас, виходячи з того, що ми сказали йому робити. Мені це досі подобається. Тож творчий бік точно є вже в самому дослідженні того, яким шляхом будувати щось. А коли вже збудовано, ми, напевно, чули про цикл рефакторингу, коли є щось, що працює, і потім ми починаємо його покращувати, дивимося, чи можна зробити краще. І я абсолютно обожнюю рефакторинг. Є одна з книжок... де вона? О, не бачу її, вона далеко за кадром. Але це «Refactoring» Мартіна Фаулера. І це один із найкращих моїх досвідів читання про програмне забезпечення. Тож я так люблю рефакторинг. Це просто процес, коли є щось, що працює, але можна зробити це ще краще, гарніше, швидше, за якими завгодно критеріями. І саме тому мені так сподобався Exercism: він саме для цього й створений. Розвʼязуємо тести, потім маємо тестовий каркас і можна робити зі своїм кодом що завгодно. І поки все зелене, воно працює. Тож...
Джонатан: Це мені дуже подобається. Тож я продовжу повертатися до різних часів. Отже, університет уже позаду, програмувати Ерік навчився, він уже сказав собі: гаразд, я відданий цьому навчанню, занурюся в нього з головою. Що було далі від того моменту, коли він насправді присвятив себе цьому, а потім, імовірно, почав думати про карʼєру? А це завжди велика частина університетського життя: чим я займатимуся все життя? Як усе склалося? Що він думав із цього приводу? Що відкрилося перед ним?
Ерік: Звісно. Я ніколи насправді не думав про свою карʼєру. Не думаю, що за все життя цим займався. Єдине, що справді має для мене значення, це робити те, що подобається. І щоб це було близько, щоб не доводилося багато їздити. Бо я не люблю багато їздити. Але ні, я ніколи насправді не думав про карʼєру. І мені ще й неймовірно щастило. Мені фактично ніколи не доводилося шукати роботу, хіба що раз чи два. У мене завжди були друзі або люди, які мене знали. Так само з Exercism. Джеремі мене знав, і мені не довелося подаватися, проходити, не знаю, чотири чи пʼять різних етапів співбесід, як доводилося іншим. Можливо, навіть більше. Але, ем, я. Ні, ні, я знаю. Але в мене нічого такого не було. Так само було, коли я шукав роботу. Я завжди... я завжди працював паралельно з навчанням у школі, навіть у старших класах намагався трохи заробити, бо в батьків не було багато грошей. Тож доводилося заробляти свою частку. Але я люблю працювати. І, здається, я працював близько 20 годин на тиждень на роботі, повʼязаній із програмуванням, поки навчався в університеті, бо фактичного часу в університеті ми мали так мало, що я міг досить непогано заробити й купити на це величезну колекцію DVD.
Джонатан: Не будемо про це.
Ерік: Не будемо про це. Так, вибач, я насправді більшість із них роздарував і залишив ті, з якими повʼязані дуже-дуже теплі спогади, але більшість роздарував. У якийсь момент у мене було 400 чи 500 DVD.
Джонатан: 400-500 DVD у якийсь момент. О, це весело.
Ерік: Було близько до того. Близько до того. Так. Але поки я навчався в університеті, мій друг, той самий, що був програмістом, коли мені було 10 чи близько того, він навчався разом зі мною в університеті. І він працював, і спитав мене: слухай, хочеш долучитися до цієї компанії, щоб трохи підзаробити? Я погодився. І потім, по суті, залишився там: коли я закінчив університет, мені запропонували вступати до аспірантури. Але я сприйняв це як «ми знайшли щось цікаве в цій дисертації», а це була чиста випадковість, до речі, я працював, але це була випадковість. Тобто я сприйняв це як «ми хочемо поставити свої імена на те, що напише здобувач, щоб отримати публікацію». Тож я не був до цього готовий. І не хотів витрачати чотири роки на теоретичні речі. Та й академічний світ загалом мене не приваблював. Мені було набагато комфортніше робити практичні речі в межах компанії. Тож я просто залишився там, де працював. Там був PHP, і в нас була чудова команда. Здається, за винятком хіба нашої теперішньої команди, я ніколи не працював у такій різноманітній і такій сильній команді. Але керівництво в нас було таке погане. Атмосфера в тому IT-середовищі була настільки незадоволена... Просто було недобре, але мені все одно було дуже весело. Але PHP не моя улюблена мова. Мене тягнуло до C#. Я був прихильником C# ще від часів C# 1.0. Тоді вона була досить сира. Я замовляв книжки з Америки, доводилося платити ще й додатковий податок, і зрештою виходило досить дорого, але я цією книжкою все одно дуже-дуже багато користувався. І тоді я сказав, що хочу працювати з C#. Тобто не лише як хобі. І подався. Насправді це теж було в університеті, але не дослідження чи щось таке. Це була, ну, підтримка різних підрозділів університету. І я працював із C# років сім.
Джонатан: І з C# він працював років сім. Хотілося б почути цю історію. Бо Ерік починав як волонтер чи як контрибʼютор, так? А потім поступово виріс.
Ерік: Так. Так, поки я працював в університеті, там дуже ліберально ставилися до того, щоб ми щось вивчали чи їздили на конференції тощо. І в якийсь момент я почув про таке, як функціональне програмування. І подумав: гм, я про це не знаю. Я знав, що в університеті викладали один необовʼязковий урок, але я з ним нічого не робив. І подумав, що, можливо, варто вивчити функціональне програмування, може, буде цікаво. І ще один мій колега захотів долучитися. Тож ми пройшли безкоштовний курс зі Scala на Coursera. Зараз за це треба платити, але тоді не треба було. І викладав його Мартін Одерскі, автор Scala, функціональної мови, яка також є на Exercism. І мені було дуже цікаво вчитися, хоч функціональне програмування часом було справжньою інтелектуальною боротьбою, бо це справді інший спосіб думати про речі. Але я якось витримав, і мені це дуже сподобалося. І там був форум, де можна було обговорювати з іншими студентами, наприклад, вправи, які не вдавалося розвʼязати. Але дехто питав: які матеріали можна використати, якщо хочеться дізнатися більше про Scala? І хтось згадав: радять спробувати Exercism, там є така чудова штука, де можна зробити багато різних вправ, як маленьких головоломок. Я подумав: о, звучить добре. Тож я приєднався і пройшов трек зі Scala. І справді багато чого навчився. Це було моє перше занурення у світ функціонального програмування. І я подумав, що, можливо, варто зануритися глибше. І взявся за Haskell. Це тоді було для мене справді глибоке занурення. Але це був Exercism V1. Тобто люди просто коментували код, жодної формальної системи менторства чи чогось такого не було. Але люди з Haskell були абсолютно фантастичні. Тож Haskell я, по суті, вивчив саме від них. Я багато гуглив, знаходив якісь дивні рішення, сам робив дивні рішення, але вони завжди намагалися скерувати мене до чогось ідіоматичного для Haskell і гарного. І це був такий чудовий досвід, що я подумав: а варто, мабуть, і самому робити це для інших. Може, я теж можу допомогти. Мені завжди подобалося допомагати. Тож я вирішив узяти C# і просто коментувати код інших людей на C#. І мені це сподобалося. А потім я побачив, що в треку C# є, не знаю, 40 вправ, а в Haskell більше. Чому так? І я спробував зʼясувати, чому. І виявилося, що можна надсилати pull request-и до Exercism і додавати нові вправи. Саме це мене й затягнуло. І далі я просто щовихідних додавав вправи. А коли закінчив із C#, подумав: а давай F#. F# функціональна і водночас у екосистемі Microsoft. Тож мені подобається і те, і те. Тож поєднаймо улюблені речі. І я взявся за F# і робив те саме. Тож я був мейнтейнером F# і створював вправи, і мені це дуже-дуже подобалося.
Джонатан: Дуже-дуже подобалось. Ось є мова, і людина каже: гаразд, спробую Scala. Трохи в неї вгризається, а потім занурюється глибше. А чи зменшувався з часом час, потрібний, щоб зрозуміти кожну мову? Бо зараз їх уже чимало. Як це відбувалося?
Ерік: Так, так. Ну, з природними мовами все працює так само. Якщо вивчити французьку й добре нею володіти, то взятися за іспанську буде набагато легше, бо багато спільних знань: спільна лексика, майже діалекти. Так само і з програмуванням. Якщо знати C і переходити на C++, там багато нових концепцій, але й багато всього, що абсолютно однакове. Тож уся C-подібна родина... І це теж одна з речей, які мені подобаються в програмуванні: є ніби родинні дерева. Є гілка Lisp, є гілка ML, є C-подібна гілка. І це майже як в історії, де є така генеалогія, родинне дерево чи щось таке. Я сказав це надто голосно. Так, це Haskell чи Prolog. Але мені подобаються й ці «білі ворони», бо в них є унікальні ідеї. Саме такі зазвичай і хочеться спробувати. Тож знайти мову, яка робить щось інакше. Хоча всі мови програмування мають багато спільних знань. У всіх є булева логіка (англ. Boolean), а булева логіка це щось фіксоване, дане. Вона працює однаково всюди. Може, десь треба написати два амперсанди, а десь є слово and чи щось таке, але основи ті самі. Тож коли ці основи вже добре знаєш, їх легше застосувати до інших мов.
Джонатан: Це майже як в історії, де є така генеалогія, родинне дерево чи щось таке... мови легше. Коли вчишся програмувати й береш до уваги власний досвід. Які бувають моделі поведінки та що роблять люди, щоб навчитися програмувати? І я певен, що тут є перетини з багатьма іншими дисциплінами. Ерік згадував, що просто присвятив себе цьому, занурився з головою і боровся з цим, доки не зрозумів. А чи є інші моделі поведінки чи речі, які роблять люди, які, на думку Еріка, справді ставлять себе в позицію, де можна навчатися? Так, дуже добре.
Ерік: Ем, тож я завжди намагався заохочувати людей створювати щось таке, що їм самим хотілося б створити. Коли я вивчав PHP, я зробив штуку, яка відстежувала, які з 250 найкращих фільмів IMDB я вже подивився. Я дивився багато фільмів і хотів відмічати кожен із них, і так, будуючи щось, що хотілося мати самому, я багато навчився про PHP і MySQL. Бо тоді, коли на шляху виникає перешкода, хочеться не зупинятися, а продовжувати, виправити це, змусити працювати. І я давав цю пораду кільком людям, які почали вчитися програмувати, і їм це добре допомогло. І зараз усе зовсім інакше, ніж коли я вчився мати справу зі Stack Overflow тощо. І в мережі можна знайти стільки знань. Але й знайти правильні ресурси теж важко. І саме тут, я вважаю, Exercism може справді засяяти, бо ми можемо бути ніби охоронцями: у нашій спільноті є люди, які знають, які ресурси правильні. І це одна з речей, із якою, як я бачу, стикаються новачки. А ще є така річ... майже ніколи не буває ресурсів, де справді починають із нуля. Зазвичай аудиторія Exercism уже знає принаймні одну мову. А потім переходить до інших мов або занурюється глибше в цю. Але це не для людей, які... не мають жодного досвіду в програмуванні. Тобто не знають, що таке цикл for. Не знають, що таке змінні. Рядок тексту (англ. string) це щось зовсім інше, ніж те, що спадає на думку. Так, я завжди ловлю дивні погляди, коли дружина бачить, що я говорю про «strings». У Нідерландах це означає зовсім інше.
Джонатан: Так. Тут я зроблю деякі узагальнення. За останні кілька років, імовірно, дедалі більше людей дізналися про кодування й програмування. Раніше, напевно, було менше людей, які вміли орієнтуватися в цій царині. Очевидно, що оскільки галузь зростає і зростає досить швидкими темпами, то, звісно, є багато думок, і люди все ще прокладають собі шлях, намагаючись зрозуміти, як вони ставляться до певних речей і тем. Усе це поняття «пагорба, на якому готовий померти» це по суті про те, якої думки ми дотримуємося настільки, що готові за неї справді боротися або захищати її, звісно ж, у здоровому сенсі. То яка ж та одна річ, яку Ерік готовий захищати й відстоювати, стояти на ній і не рухатися, і що доведеться захищати? Що б це було? Гаразд.
Ерік: У мене багато таких думок, але, гадаю, та, яку хотілося б тут пояснити, це те, що варто вивчати більше мов, ніж уже знаємо. Тож пробувати нові мови, яких не знаємо, і мови, дуже несхожі на ті, які вже знаємо. Це дуже просто. Наприклад, якщо знаємо C#, можна просто залишитися з C#, і це нормально. Але якщо вдається знайти час і бажання спробувати щось інше, наприклад, F# чи, не знаю, Kotlin, просто зробити щось інакше й подивитися, у чому різниця. Програмістом станеш набагато кращим. Я абсолютно на 100 % впевнений, що вивчення F# зробило мене кращим програмістом на C#, хоча це різні мови з різними філософіями. Але зараз між мовами так багато спільного. Коли мови були ще зовсім молодими, наприклад, Lisp анітрохи не схожий на C. Тож функціональні мови дуже відрізнялися від імперативних. Але сучасні мови, як-от C#, Java, Kotlin, Rust, також надихаються іншими мовами, зокрема функціональними. Коли я навчався в університеті, постійно ходив такий жарт: функціональне програмування це чудово, але ніхто його не використовує. Але це вже неправда. Тож навіть якщо робота не повʼязана з функціональною мовою, функціональні мови всюди. У JavaScript багато функціональних концепцій. У C# є розширене зіставлення зі зразком, є LINQ, є стільки всього функціонального. І видно, що мови запозичують концепції одна в одної. Тож уже не так однозначно, яка мова функціональна, а яка просто імперативна. Зараз це радше мішанина. Але я все одно вважаю, що вивчення нової мови дає багато. Дехто казав: вивчай нову мову щороку. Я намагаюся так робити. Уявляю, що для когось це буде дратівливо й когось це перевантажить. Але спробуймо принаймні одну іншу мову, і нехай це буде мова, яка трохи виводить із зони комфорту. І обіцяю: багато чого навчимося, станемо кращими програмістами загалом. І це також допоможе з тією мовою, з якою вже працюємо.
Джонатан: а також із тією, з якою вже працюємо. Очевидно, люди створюють нові мови, щоб задовольнити конкретну потребу. І виходить, що імперативне й функціональне трохи зближуються. Чи може колись статися так, що мови почнуть відпадати і залишиться лише кілька основних? Чи це наївно?
Ерік: Ні, ні, гадаю, люди надто вперті у своїх думках, щоб так сталося. Нові мови будуть завжди. Нові мови зʼявлятимуться щодня, і це нормально. Але деякі дерева будуть труситися, а популярні зрештою, найімовірніше, втримаються. Тож я не бачу, щоб Java чи C# кудись зникали найближчим часом. Хоча, наприклад, C і C++ завжди були масивними мовами. Але тепер ми бачимо Rust, це ніби новий підхід до тих самих проблем, але з більшою безпекою. Тобто вбудованою безпекою. І це фантастична мова, яку мені насправді варто вивчити глибше. Але цікаво спостерігати, як Rust тепер поволі пробиває собі шлях туди ж, і люди починають використовувати його замість C чи C++, що, на мою особисту думку, дуже добре. Наприклад, у Linux тепер можна писати драйвери на Rust. Тобто... завжди буде C++. Але тепер підтримується написання драйверів на Rust. Це був доволі великий крок. Тож, гадаю, мови нікуди не зникнуть, бо не можна створити мову, яка підходить для будь-якої мети. І це також одна з причин, чому, на мою думку, варто вивчати кілька мов: різні ситуації вимагають різних мов. Тож можна спробувати... це як використовувати що? Молоток замість пилки. Не знаю, як це правильно сказати.
Джонатан: Як це висловлюються? Це як: гаразд, треба пилка, а в нас лише молоток. Що робити? Гаразд.
Ерік: Так, так, щось таке. Здається, там ідеться про цвях і молоток, щось таке, але я не дуже добре знаю англійські прислівʼя, тож не буду навантажувати ще й нідерландським варіантом. Але суть у тому, що якщо ми знаємо лише C#, то, можливо, є спокуса використовувати C# для всього. Але для системного програмування чи, не знаю, для штучного інтелекту можуть бути кращі мови, ніж C#. І навіть якщо щось можна зробити на C#, це не означає, що так треба робити. Тож якщо ми знаємо більше мов, то, ймовірно, краще впораємося з вибором, який більше підходить до тієї сфери, у якій працюємо.
Джонатан: Гаразд, тож це цікаво й красиво. Щодо спільноти Exercism: яку пораду можна було б дати спільноті Exercism цього тижня, щоб наполегливо рекомендувати щось спробувати? Це може бути будь-що. Ну, тобто піти на прогулянку. Спробувати стояння на руках. Не знаю. Окей, можна й більше ніж одну, якщо хочеться. Можна... я вже знаю, що скажу, тож може бути три рекомендації.
Ерік: Тож це цікаво й корисно. Я вже знаю, що скажу. Гаразд. Гаразд, перше, що спадає на думку, зазирнути до вкладки «Dig Deeper», яка в нас тепер є. Ми почали... ми додали нову можливість Dig Deeper, де можна, після того як вправу розвʼязано або принаймні опрацьовано, побачити підходи, тобто різні способи, якими можна розвʼязати вправу. І по суті саме так усі навчалися в Exercism V1 разом із додатковими коментарями: дивилися на код інших людей і бачили, як вони це розвʼязали. Так я багато чого навчився в Haskell, окрім власне коментарів. Просто бачив: о, це можна зробити ось так. А потім пробував сам і казав: о, це справді елегантно, і з цим можна зробити більше, а потім застосовував це в інших вправах. Тож можливість знаходити ці різні способи робити речі це майже повернення до мистецтва програмування, до того, як щось можна розвʼязати різними шляхами. Тож є ці різні підходи. Я написав статті й підходи про перевертання рядка тексту. Це одне з базових питань на співбесідах в IT. Як перевернути рядок тексту? У C# є кілька різних ідіоматичних способів, але вони різні й мають різні характеристики швидкодії, і один із них дуже орієнтований на швидкодію, але менш читабельний. Тож мені подобається, що на сайті, коли вправу вже розвʼязано певним способом, можна побачити: є й інші способи. І ось у чому переваги такого підходу. А ось у чому компроміси. І це... це не лише можливість побачити інший підхід, а й те, що ми намагаємося написати вступний документ, який допомагає вибрати між ними. В IT завжди є компроміси. Майже ніколи не буває рішення, яке просто найкраще. Тож завжди можна написати щось інакше. І часто найчитабельніше рішення не завжди найшвидше. Тож ми допомагаємо робити ці компроміси, розуміти їх і вибирати між різними підходами. Це теж те, що ми намагаємося робити з вкладкою Dig Deeper. І я зараз пишу їх у вільний час. Мені так приємно просто писати цю інформацію й ділитися нею з людьми. Тож я дуже заохочую людей або писати їх, або просто читати підходи. Знаю, що не кожна вправа має їх. Ми запустили цю можливість лише тиждень тому. Тож вона буде досить обмежена кількома вправами з C#, але ми значно її розширимо. І ми приймаємо pull request-и від спільноти для таких речей. І я охоче допоможу написати, довести це до кінця, і можна буде поділитися своїми знаннями про свою мову. Гадаю, це те, що людям завжди подобається. Якщо людині подобається мова, їй хочеться, щоб вона подобалася й іншим. Тож підходи це дуже гарний спосіб показати, на що здатна мова. Тож варто зазирнути й подивитися. Так.
Джонатан: Тож варто зазирнути. А чи є ще щось на цей тиждень?
Ерік: Ем, ну, з ризиком прозвучати як людина, для якої Exercism це все, скажу, що мені дуже подобається форум Exercism. Одне, що я зрозумів за свою карʼєру: насправді важко знайти технічно налаштовану спільноту людей, яка була б майже безпечним простором, де можна щось обговорювати без того, щоб інші змушували нас почуватися дурними, без суперечок чи войовничості. Тож мені дуже подобається, як ми намагаємося зробити форум дуже безпечним і приємним місцем для людей, а також місцем, де можна познайомитися з дуже хорошими програмістами. Тобто з людьми, які дуже вправні й мають глибоке розуміння своїх мов чи царини програмування. І мені справді приємно просто читати те, що написали інші. Є тема про улюблені книжки з програмування. І я вже додав кілька книжок до свого списку для читання, бо... так, не натрапиш на кожну книжку сам. Але інші їх читали. Можна скористатися мудрістю натовпу. По суті,
Джонатан: тож ми можемо скористатися мудрістю натовпу в тій темі, і я певен, що звідти можна витягти справжнє золото. Але, ну, це справді круто, Еріку. Гадаю, якщо є ще одна рекомендація, то вона буде доречна, а інакше ми потроху почнемо згортати. Але якщо є ще якісь думки чи коментарі... так, тож продовжуймо ділитися.
Ерік: Мгм. Так, це ж потрапляє у відео. Ні, не зовсім. Я намагався знайти третю.
Джонатан: А я справді, я завжди намагаюся знайти третю. У такому разі вже забагато. Але, Еріку, щиро дякую за цей час. Було справді круто почути історію Еріка, почути, як усе це переплелося з IT. Мені особливо сподобалося почути трохи про історію, і, можливо, про це варто подумати й розповісти докладніше, про те, як історія, кодування й усе це перетинаються. Але щиро дякую. Дуже класно, що Ерік у нашій команді, і я вже багато чого від нього навчився й надалі вчитимуся. Окрема подяка й вітання: Ерік перетнув позначку 100 000 балів репутації на сайті Exercism. Знаю, він скаже, що насправді зробив це, бо шахрував, але все одно вважатимемо це визначним досягненням. Тож щиро дякую. І так, якщо хтось це слухає й ще не натрапляв на Exercism, варто зазирнути на Exercism, і я певен, що десь на цьому шляху там можна буде натрапити на Еріка. Але, Еріку, дякую. Дуже вдячний. Я поставлю запис на паузу, і ми ще трохи поспілкуємося після цього, але дякую за час. І сподіваюся, що це було так само приємно, як і мені. Це було чудово.
Ерік: Не заперечую. Клас. Так, сподобалося. Сподобалося. Щиро дякую.
Слухаймо, навчаймося й надихаймося від учасників нашої спільноти.