«Залишатися все життя на одному інструменті — це погано для мізків». Навіщо знати багато мов програмування

Навіщо знати більше однієї мови програмування? А понад чотири? Чи всім потрібна така «багатомовність», які переваги вона дає і чи є недоліки від знання багатьох мов? Ми поговорили з чотирма айтівцями про те, що спонукало їх стати програмними поліглотами та як краще вчити нові мови.

«С++ не знає досконально ніхто. Java — майже ніхто»

Валентин Нечаєв, Senior Software Developer у Ciklum

Я увійшов в IT спадково: мій батько був науковим співробітником, а на практиці програмістом у КНУ імені Шевченка. У дитинстві він забирав мене на роботу до ЕС-1022 (розміром з велику квартиру), СМ-4 і схожих «монстрів». Я допомагав йому і якось швидко втягнувся в тему. Перше серйозне завдання було ще в школі. Потім КНУ за спеціальністю «Прикладна математика», куди я вступав ще за часів СРСР, а закінчив у незалежній Україні. Потім була аспірантура, яку не закінчив, бо годувати сімʼю стало важливіше, робота програмістом, потім адміном в інтернет-провайдері, з часткою програмування внутрішньої автоматизації. Потім знову програмістом, коли це стало вигідніше. Якщо рахувати повні роки в IT, вийде 25.

Щодо мов програмування, щільно та багато років працюю з C, C++, Python, Bash, Erlang. Зараз на проєкті головна C++, до того багато років була Python. Можу читати та писати, не вдаючись у супертонкощі, на Java, Perl, Fortran, Pascal (головні діалекти), LISP, кілька асемблерів (x86, SystemZ, ARM, PDP-11). Щось памʼятаю з окремих робіт і розумію головне: C#, Basic, Go, Prolog, Rust, Ada.

Що стало причиною оволодіння багатьма мовами програмування? Здебільшого працював принцип «що дають — на тому й пишеш» :) Особливо у 1990-х: набір засобів був зовсім бідним — і вибирали той, що краще підходив, наприклад, до конкретної бібліотеки, а вона — до завдання при дуже обмежених ресурсах. Різниця між IBM/ЕС мейнфреймами, DOS/Windows і Unix світами теж була принциповою — спільного майже нічого не було. Тому треба писати на Pascal — буде Pascal. На Basic — буде Basic. Писати обробку текстів на Fortran — стискаємо зуби та пишемо. Суцільний «клей» на асемблері — що робити, вчимо асемблер. Особливості діалекту C-компілятора — перевчимось на нього.

І нині нічого принципово не змінилося: так, домени та мови зазнали змін, зручність підвищилась у рази, але не факт розділення. Веброзробка? Хочеш не хочеш, але знай JavaScript і особливості кожного браузера. Великі корпоративні системи — Java, C#, головне — фреймворки на кшталт Spring, які краще вже вважати за мови. Голос, відео, реалтайм — C, C++, асемблер. Розподілені системи з апгрейдом без зупинки — Erlang, якщо це не IBM, у яких усе своє.

Взагалі вважаю, що, маючи хоча б 2–3 роки досвіду, домен значить значно більше, ніж мова. Як вебпрограмісту світ драйверів буде чужим, так і автору драйверів будуть незрозумілими та нецікавими тонкощі рекурсивних CSS. Поверхово знати корисно, але ні інтенсивної практики, ні зацікавленості не буде. А ось під мову адаптуватися легше, якщо вона має конкретне призначення.

Які переваги від знання багатьох мов програмування:

  • Більше варіантів під час пошуку роботи (але, як я вже казав, домен тут важливіший).
  • Глибше розуміння процесів всередині компʼютера (якщо для когось це важливо).
  • Більша швидкість засвоєння нової мови завдяки наявним знанням.
  • Застосування типових прийомів з практики іншої мови — це значно розширює можливості, порівняно з тими, хто знає 1–2 мови.
  • Починаючи з деякого рівня, вмикається інтуїція на можливі проблеми.
  • Є змога виступати Full Stack у своїх межах: бракує швидкості Python? Не треба шукати когось на стороні, можете самі оцінити, чи допоможе тут C, і написати реалізацію та перехідний «клей», виміряти прискорення. Веброзробник, знаючи мову бекенду, сам підкаже, чому його JSON читається не так, як треба.

Чи стає багатомовність конкурентною перевагою? У мене було тільки два найми не по знайомству, тому власний досвід тут не підказує. Але найбільш цікаві роботи я отримував саме від тих, хто знав і цим аргументував, що у мене дуже широкий досвід і за мовами, і за застосуванням. Але тут складно відрізнити «беремо його, він знає ще й асемблер» від «беремо його, він завжди зрозуміє, чому TCP затикається».

Щодо недоліків «багатомовності». Перший — хибні допущення про деталі реалізації, коли вони інші. В Java volatile змінні — це барʼєри памʼяті, в C — ні, хоча звуться так само. Десь операція «+» перевіряє на переповнення, десь — ні. Звик, що при помилці буде виняток, а функція з тим же іменем і параметрами тобі повертає порожній рядок. Звично заклався на дешеву передачу контексту, а вона тут дуже дорога. І так далі.

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

Другий недолік — нерви від того, що щось має тут бути, і ти знаєш, що у схожій мові воно є, ти його використовував, ввести легко, але замість цього змушений будувати «палац із милиць» чи просто вживати утричі більше знаків — і потім це читати складніше, ніж в аналогу. Щоб навчитись не непокоїтись через це, теж потрібен час.

Головне, що розумієш з правильного вивчення хоча б одної мови: компʼютер — це тупа залізяка, яка розуміє тільки чіткі описи своєю мовою. Це універсально. Але далі починаються нюанси в усьому, від базової арифметики до специфіки засобів тестування. Той, хто знає тільки процедурні мови, не зрозуміє функціональні, йому буде треба частково переучуватися, починаючи з азів.

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

Програмування, як і все IT, безмежне. Зупинятись не можна.

Найбільш корисні мови неможливо знати досконально. С++ не знає досконально ніхто. Java — майже ніхто. Асемблер, якщо додавати особливості шедулінгу інструкцій і налаштування процесора, — 200 осіб на всю планету. Але якщо говорити про навички рівня «добре з плюсом» з ревʼю, тестами та регулярним застосуванням аналізаторів, то три мови зможе вивчити майже кожен, п’ять — велика частина людей, десять — дехто.

Щодо вивчення нових мов, я б порадив насамперед зʼясувати, чому і куди рухатись, поставити власні цілі. Краще помилитись у виборі мети, ніж метушитись між кількома. Визначтесь, що найбільше до вподоби, і там уже шукайте, що вчити. Мова — не єдина можлива ціль. Можна опановувати і домени, і фреймворки, і супутні засоби. Стежте за трендами, дізнавайтесь нове зі своїх сфер. Читайте Reddit, HackerNews, журнали ACM...

Коли ви обрали домен, намагайтесь вивчити ще 2–3 найбільш популярні мови, що використовуються в ньому. Обовʼязково трапляться випадки, коли ця інша мова буде затребувана в проєкті, до якого ви захочете долучитись. І навіть якщо не буде такої ситуації, ви все одно зможете подивитись на свою роботу під іншим кутом.

Головна небезпека знання багатьох мов — через деякий час намагатиметесь написати свою :) І тут памʼятайте про «тепер 15 конкуруючих стандартів».

«Що більше різного ти вже бачив, то менше в тобі шовінізму й упереджень»

Олександр Соловйов, CTO Kasta.ua

Я почав працювати в IT ще під час навчання в КПІ. Якщо рахувати від першої роботи, з того моменту минуло вже 19 років. Спочатку був юніксовим адміном, але швидко перемкнувся на програмування. І після того встиг попрацювати і в аутсорсі, і в продукті, і в стартапах — було багато різного, але останні сім років провів у Kasta.

Я регулярно користуюся Clojure, JavaScript, Python. На Clojure в нас основний продукт, і це моя професійна мова останні шість років, а до того ще роки чотири це була основна мова для рекреаційного програмування :) Python — моя перша професійна мова, у нас на ній адмінки та деякі внутрішні продукти, тож вона не дає себе забути.

З JavaScript цікава історія. На першій програмістській роботі вона мені взагалі не «заходила». Згодом я трошки навчився користуватися, але особливої любові не було. А потім трапився проєкт, де треба було зробити дешборд Protovis’ом (це попередник D3, від того самого автора). І щось мені так зайшло, що за кілька років я пішов працювати фронтендером. Це привело мене до Clojure у 2012 році і доповіді про CLJS у 2013-му.

Ще в моєму житті багато SQL — я думаю, це можна вважати мовою, навіть враховуючи, що функцій нею я написав всього з десяток за 10 років. На Shell можу написати щось відносно велике — найбільше, що доводилося підтримувати, містило тисячі рядків, але прагну такого не робити. З невеличкого ще варто згадати AWK? Він факультативний, але для своїх завдань дуже виразний і кльовий.

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

Уже трохи заржавіли навички Perl та ELisp. До першого не звертався років 15, нещодавно зрозумів, що навіть непоганий код важкувато читати. З Emacs Lisp — схожа історія, ще й ідіоми за останні 10 років змінилися, тому я вже не дуже добре розумію, як нею правильно писати. А колись «перепилював» собі emacs-jabber доволі серйозно.

Трохи була в житті Objective-C, але мої проєкти вже давно присипало пилом — валяються на GitHub заради історії. Це я згадую тільки те, на чому довелося зробити щось значуще. Невеликі виправлення коду на Java чи C або іграшкові програми на Rust чи Zig сюди не зараховую — на жодній з цих мов я не сяду та не напишу робочу програму без умовного етапу «вивчення мови».

Авжеж, причини вчити це все були. Десь бажання щось зробити під платформу (JavaScript, ELisp та Objective-C), десь прагнення до ергономічності (типу автоматизації у командлайні — з Perl, Shell та AWK), інколи хотілося покращити життя (Python vs Perl та CLJS vs JS) чи причиною була просто природна цікавість. Напевно, вона найголовніша, а все інше — то трохи раціоналізація.

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

Ясна річ, коли людина знає Python, Ruby й JS, йдеться лише про локальні різниці у підходах. Але зі PHP, Haskell і Prolog — це явно дасть значно більший діапазон рішень у голові.

Щодо недоліків «багатомовності»... Мені не здається, що можна говорити про мінуси додаткових знань. Питання, звісно, глибини тих знань. Вивчити 10 мов за рік — що ж там залишиться в голові при такій швидкості? І знання накопичуються з часом.

Люди, які навчилися програмувати, а потім почали розуміти «сусідню» мову, реально вважають, що всі мови схожі. Типу після Java відкрив C#, а вони взагалі мінімально відрізняються, тільки остання ергономічніша в певних моментах. Це, звичайно, від браку знань. Дайте цій людині APL, Common Lisp, Haskell, Prolog, — що завгодно з іншої парадигми, — і їй буде боляче. Так, певні знання переносяться і навчитися нового способу програмувати розробнику легше, ніж людині не з цієї індустрії навчитися програмувати з нуля. Але одна мова взагалі не дає розуміння, які речі в програмуванні спільні для всього, а які — це властивість саме цієї мови. Як і зі звичайними мовами, якими ми спілкуємось з людьми, а не з комп’ютерами.

Щодо «досконалого» знання будь-чого — думаю, воно в моменті. Умовно кажучи, не писав на Python кілька років — і в новому проєкті отак просто сісти і зрозуміти, чому SQLAlchemy робить не зовсім те, що хочеш, вже займає багато часу. Я маю 2–3 основних інструменти, а все інше відходить на другий план. Коли умови змінюються, змінюються й самі інструменти.

Я цілковито впевнений, що залишатися все життя на одному інструменті — це погано як для мізків (немає збуджувачів і розвитку), так і для кар’єри під час тектонічних зсувів. Що більше різного ти вже бачив, то менше в тобі шовінізму й упереджень до незнайомого і то простіше буде розібратися.

Тож мені здається, що є сенс, окрім професійної мови, мати хоча б одну рекреаційну, бажано з іншої парадигми. Можливо, не варто одразу кидатися вчити J чи Factor, а є сенс розібратися у чомусь більш практичному — скажімо, Clojure :)

«Реально досконально знати, мабуть, одну мову, — і то якщо ви її автор»

Сергій Гуленок, Software Development Engineer у Amazon EU

Я закінчив факультет кібернетики КНУ імені Шевченка, з 2006 року працював розробником. Спочатку лише C++, потім C++/C# і трохи JavaScript. Роки чотири пропрацював менеджером проєктів, але повернувся в розробку та перейшов на фриланс на кілька років. Там займався веброзробкою багато на чому, у тому числі на Python і PHP. Зараз працюю в люксембурзькому Amazon, тут теж використовують кілька мов одночасно, бо я залучений на різних проєктах.

Якщо говорити про кількість мов, які я знаю, то відповідь залежатиме від того, що розуміти під словом «знаю». З одного боку, я ніби знаю C++, але не писав нею з 2015 року. Після паузи будь-які знання доводиться відновлювати. Звісно, це простіше, ніж вчити з нуля, але теж займає час. Загалом я використовував десяток мов: C++, C#, F#, Perl, Python, PHP, JavaScript, TypeScript, Java, Clojure. Останнім часом регулярно пишу на Python, TypeScript, трохи Java на основній роботі та Clojure на пет-проєктах для душі.

Так склалося само собою. Коли ти не просто пишеш код, а розвʼязуєш задачу, то є питання вибору правильного інструмента. Коли треба було зробити щось «на колінці», то було тупо писати це на C++, якщо є Python. Коли вперше змінив роботу, то виявилося, що більша частина коду написана на C#, а не C++, тож довелося вчити (хоча я на той момент і був певним C++ снобом, але це швидко вилікувалось). Також я познайомився з крутими розробниками, і вони мали досвід у функціональному програмуванні, тож мені теж стало цікаво. Потім почався бум Web 2.0, і потрібно було писати на JavaScript. Ну й закрутилось :)

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

Основна перевага від знання кількох мов — збільшується арсенал засобів розвʼязання задач, що часто дає змогу зробити це простіше, швидше і більш елегантно. Наприклад, на мене свого часу великий вплив справив F# та доповідь Scott Wlaschin «Railway Oriented Programming». Зараз мені складно уявити програму інакше як послідовність перетворень, і тому в C# коді використовую багато LINQ, а JavaScript я не уявляю без бібліотеки Lodash. Особливо тепер, коли в Amazon доводиться працювати з купою фінансових даних, цей підхід виявляється особливо ефективним.

Крім того, знання JavaScript з боку веброзробки років 10 тому було дуже помічним під час створення desktop-застосунків на C++ з QML (своєрідний діалект JavaScript): можна було використовувати типові бібліотеки, які робили код чистішим й економили купу часу, плюс були відомі потенційні проблеми, що теж економить час на відлагодженні.

Недоліки знання кількох мов теж очевидні: вузький експерт, ймовірно, розвʼяже ту саму проблему швидше. Плюс можна впертися в неочевидну специфіку мови і витратити купу часу на пошук рішення, яке для вузькопрофільних спеціалістів буде очевидним. Тому мені здається, що ефективна команда мусить мати розробників обох типів. Вузькопрофільний експерт зможе принаймні допомагати розвʼязувати нетривіальні проблеми, з якими стикатимуться інші розробники. І хоча усім не потрібна «багатомовність», але вважаю, що трохи розширити світогляд і прищепити собі абстрактне мислення все ж варто.

Щодо твердження: «Якщо знаєш одну мову програмування, то знаєш всі», думаю, «одну» — навряд чи. Як на мене, варто ознайомитися принаймні з кількома мовами, які сповідують певні парадигми. Тоді — так. Я не вважаю, що знання C++ допоможе розуміти умовний Haskell чи LISP, і навпаки. З іншого боку, після ознайомлення з кількома мовами вчити нові стає легше: ти знаєш, що хочеш від мови. Банально легше вбити в Google пошуку правильне запитання та знайти потрібну інформацію.

Думаю, що реально досконально знати, мабуть, одну мову, — і то якщо ви її автор. Для розвʼязання прикладних задач з мінімумом оверхеду можна і варто знати 3–4 мови.

Щоб я порадив з вивчення нових мов? Основне — спробувати застосовувати все, що вчиш на практиці, оскільки суто на книжках і Hello, world! важко розуміти певні тонкощі або труднощі. Стартувати великий новий проєкт на абсолютно новому стеку без попереднього досвіду ризиково. Краще спочатку застосувати його обмежено, можливо, для внутрішніх некритичних інструментів, понабивати синці — і потім уже вирішувати: варто чи ні.

«На практиці не всім потрібна «багатомовність»

Ярослав Пелеш, фрилансер, Full Stack Developer, OpentText Products Consultant

Я зацікавився програмуванням ще зі старших класів школи. На той момент це був Pascal на PC і Basic на ZX-Spectrum, потім вивчив Assembler для кращого розуміння, як працює комп’ютер. Це були мої перші кроки. Вищу освіту здобув за спеціальністю «Економічна кібернетика», яка має опосередкований стосунок до програмування. Деякий час працював фрилансером, займався HTML-версткою як підробітком (це були часи IE, чистого JS та CSS, а такі бібліотеки, як Prototype та jQuery, лише з’являлися та набували популярності), здобув досвід на Delphi, як і велика кількість інших студентів.

Професійно працюю в сфері ІТ 14 років: системне адміністрування, веб і десктопне програмування, рішення для ентерпрайзу. Найбільше практичного досвіду маю у веброзробці та OpenText Exstream (це ентерпрайз-продукт, до якого часто потрібно писати кастомні рішення). Як хобі займаюся електронікою та програмуванням мікроконтролерів.

Мов програмування знаю кілька, проте, звісно, не можу твердити, що в кожній з них я — експерт. Також з часом мови дещо забуваються, якщо тривалий час їх не використовувати. І більшість мов постійно вдосконалюються та розвиваються, тож підтримувати знання у всіх в актуальному стані практично неможливо. Зазвичай недостатньо вивчити лише мову програмування, потрібно ще знати хоча б один-два фреймворки, ORM, бібліотеки. Наразі я виокремлю такі популярні мови, якими так чи інакше користуюся: JS, TS, Python, Java, C++. Мови, які я хотів би виділити, але зараз на практиці використовую рідко: Assembler, Go, PHP, Ruby. Нині розбираюся в Solidity, у планах вивчити Rust.

Для мене основною мотивацією бути «мовним поліглотом», звісно, є любов до програмування. Є прагнення постійно розвиватися, вивчати щось нове, стежити за трендами. Кілька разів змінював сферу діяльності, часто доводиться розробляти комплексні рішення.

Переваги від знання багатьох мов програмування:

  • гарне розуміння того, як усе працює (алгоритми, підходи, архітектура);
  • простіше комунікувати з членами команди, які працюють над іншою частиною проєкту (яскравий приклад — це веброзробка, де є класичний поділ на фронтенд і бекенд);
  • здатність підбирати мову для конкретного завдання;
  • за потреби можна легко вивчити ще одну мову або ж щонайменше швидко розібратися в її основах;
  • це дає конкурентну перевагу через універсальність і можливість створювати комплексні рішення, проєктувати архітектуру, швидко адаптуватись до нових реалій і трендів.

Недоліки знання багатьох мов програмування:

  • оскільки мови розвиваються, то важко підтримувати знання кожної з них в актуальному стані;
  • при переході з однієї мови на іншу можна припуститися помилок. Цей мінус відносний, адже IDE підкаже, що не так ще до компіляції/інтерпретації;
  • може нашкодити під час проходження співбесід. Наприклад, інструкція volatile в C++ і в Java має дещо дотичну, але водночас різну суть.

З огляду на ці недоліки, на мою думку, досконало можна знати три, можливо, чотири мови — не більше.

На практиці не всім потрібна «багатомовність». Можна знайти роботу та розвиватися лише в одній мові програмування. Ба більше, знаючи JS/TS, можна писати як фронтенд, так і бекенд, і ще й мобільні та десктопні застосунки. Звісно, фреймворки та технології використовуватимуться різні, як-от Express, React, React Native, Electron, потрібно знати HTML/CSS і як це все збілдити, але мова програмування — одна й та сама.

Щодо вислову: «Якщо знаєш одну мову програмування, то знаєш всі», вважаю, що треба розібратися хоча б у трьох-чотирьох максимально різних мовах, щоб наблизитися до цього твердження. Адже мови бувають типізованими, нетипізованими, об’єктно-орієнтованими, функціональними, імперативними, низького та високого рівнів, з різними синтаксисами (як-от C-подібний) тощо. Плюс кожна з них має свої особливості. Так, ваш код може працювати, але те, що це буде в дусі й ідейних рамках мови — не факт. Я б радше стверджував, що варто знати алгоритми, типи даних, патерни мов програмування як універсальні базові речі.

Важко давати поради щодо вивчення мов, адже в кожної людини свої підходи до опанування нових знань. Мабуть, варто добре знати ту саму базу (алгоритми, типи даних, патерни). Раджу не зупинятися на теорії і одразу пробувати вивчене на практиці. Наприклад, для інтерпретованих мов часто є інтерактивні консолі для експериментів, які дають швидку відповідь на питання: «А що буде, якщо я напишу так, а не так?».

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось7
До обраногоВ обраному2
LinkedIn

Схожі статті




7 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.
Уже трохи заржавіли навички Perl та ELisp.

У цьому й проблема. Я колись добре знав Visual Basic. Потім перейшов на C# та Java. І що я знав три мови програмування? Ні, тому що дуже скоро забув Visual Basic, а потім зробив вибір із C# та Java на користь Java. Сама мова забувається довго, але бібліотеки та фрейморки — набагато швидше. Тому й у резюме їх не пишу.

Там трохи інша логіка. Грає роль не лише операційне знання мови, а й отриманий досвід (причому не лише позитивний, а і негативний).
Я, наприклад, ніколи не писав на Prolog на рівні достатньому аби вказащувати в резюме. Але навіть невеликий досвід з ним підказує, коли можливо варто подивитись в сторону логічного програмування чи щось на кшталт CLPR і пошукати відовідні бібліотеки під поточну мову на проекті. Без цього досвіду подібна думка навіть не прийшла б в голову, бо звідки їй взятися?

«Залишатися все життя на одному інструменті — це погано для мізків». Навіщо знати багато мов програмування

По-перше, навіть якщо розробник все життя використовує один «інструмент» (мова програмування), все одно він знає кілька додаткових мов — JavaScript, SQL. Інакше йому буде дуже складно працювати у ІТ.
А по суті, я згоден про багатомовність, але тільки якщо ваша основна мова померла/перестала розвиватися (Cobol, Objective-C, Algol). Якщо взяти Java, наприклад, то раніше релізи виходили кожні 3-4 роки, зараз кожні півроку. Java розвивається як мова, і як платформа, вбираючи у собі фітчі з інших мов (Optional, lambda, pattern matching).

По-перше, навіть якщо розробник все життя використовує один «інструмент» (мова програмування), все одно він знає кілька додаткових мов — JavaScript, SQL. Інакше йому буде дуже складно працювати у ІТ.

Embedded C developer теж знає Javascript та SQL?

«Реально досконально знати, мабуть, одну мову, — і то якщо ви її автор»

Людина, яка пройшла 1000 співбесід з однієї й тієї ж мови програмування, знає її краще, ніж автор

Нічого надзвичайного в тому нема. Змінюються проекти, завдання, відповідно приходять (і йдуть) мови програмування. При цьому реально радикальна зміна парадигми це доволі рідке явище. І більше часу йде не на мову як таку, а на вивчення екосистеми: бібліотеки/фреймворки, тулзи.

В школі був Pascal, в університеті потроху C++, Haskell, Java. Надкусивши то там, то сям, я для себе обрав Python і TypeScript як основні мови програмування. Вже базуючись на цьому досвіді, мені легко взяти будь-яку іншу популярну мову і почати писати на ній з першого ж дня. Щось буде відзрізнятися, щось ні, але за декілька тижнів знання підтягуються. Звісно, що мій код на новій мові не буде ідеальним, але гарне код рев’ю мого коду перший місяць і вже через місяць не відрзіниш від середнього мідла. Коли ж працюєш над власним проектом, то там ще простіше — нікому немає діла до того як твій код буде виглядати.

Додатковий бонус, що я кайфую від того стану, коли вивчаю щось нове. Останні пару тижнів пишу на Swift додаток на MacOS і відчуття наче знову повернувся в університет

Підписатись на коментарі