Не забудьте поширити ❤️
Попри загальний досвід в програмуванні, вивчення кожної нової мови подібно сходженню на нову гору. Це нові виклики, незнайомі сфери та ціла екосистема, з якою треба познайомитися. Ділимося статтею з DEV, в якій автор дає поради зі свого власного досвіду.
Люди вивчають мови програмування з багатьох причин. Наприклад, коли:
- починають свій шлях в програмуванні;
- цікавляться якоюсь конкретною мовою;
- є необхідність вивчити нову мову для роботи;
- хочуть створити щось за допомогою нової технології, а вона найкраще підтримується в незнайомій мові.
Сьогодні ми розглянемо кілька уроків, які я отримав, безперервно вивчаючи нові мови.
Чому я вважаю, що можу давати поради?
Я безумовно не вважаю себе експертом в цій сфері. Також не можу сказати, що володію всіма відомими мені мовами на однаково високому рівні (скажімо, досить хорошому, щоб випускати на них готові продукти). Мені просто за роки кар’єри доводилося вивчити дуже багато мов з різних причин.
Зараз мій шлях в «мовознавстві» виглядає так:
- Ще в університеті я вивчив Java, Python, C, C #, C ++, R, Assembly і Haskell (на різних рівнях). Всі ці мови я не вибирав: мені довелося їх вивчити.
- Моя перша робота (ще за часів навчання) була пов’язана з iOS-розробкою. Для цього спочатку довелося вивчити Objective-C, а пізніше – Swift.
- Моя перша робота після закінчення університету була пов’язана з веброзробкою. У цей період я додав до свого арсеналу JavaScript і PHP.
- В даний час я працюю в Culture Amp. Коли я починав тут працювати, мені часом доводилося писати код на Ruby, Elixir, Elm, ReasonML і Kotlin. Ймовірно, тут варто відзначити, що я не сильний ні в одній з цих мов, але їх знання потрібно для роботи.
- Сам я цікавився Golang і Rust, тому що (будемо відверті) Rust прекрасний, а Golang доступний і відмінно підходив для роботи з вебсерверами, якими я займався у вільний час.
Я не включаю в список споріднені мови (наприклад, TypeScript), які теж вивчав попутно.
Мені б не хотілося пробудити в комусь синдром самозванця, тому скажу ще дещо.
Я не якийсь там геній програмування. Різні мови я знаю на дуже різних рівнях. Деякі, як мені здається, знаю взагалі дуже погано: я вивчав їх тільки тою мірою, яка була необхідна для виконання конкретного завдання.
20 мов програмування, які варто вивчити у 2020 році
Я переконаний, що добре знати можна тільки те, чим користуєшся постійно. Наприклад, я досить довго працював з Objective-C, але це було давно. Якщо ви прямо зараз попросите мене написати «Hello, World» на цій мові, мені доведеться гуглити або ритися в записах. Так, те, що ви знали і забули, можна швидко відновити в пам’яті. Але ніхто не займається щоденним повторенням мов, якими більше не користується: в житті є цікавіші речі.
Спочатку, коли мені доводилося вивчати нову мову, я намагався робити це з наскоку. Тепер я дотримуюся певного шаблону. Сподіваюся, кроки, про які я розповім, допоможуть і вам у вивченні нових мов.
1. Дотримання принципу Парето
Закон говорить, що 20% зусиль дають 80% результату, а інші 80% зусиль – лише 20% результату.
Стосовно вивчення мов програмування це формулювання можна перефразувати наступним чином: «Знання 20% мови дозволить вам впоратися з 80% роботи, для якої ця мова вам потрібна».
Тобто, не обов’язково намагатися опанувати нову мову повністю. Якщо ви хочете стати експертом в ній, тоді, звичайно, варто вивчати все прискіпливо. Я, наприклад, знайомий з декількома такими експертами в різних сферах.
Але особисто мені подобається приказка «Jack of all trades, master of none, oftentimes better than a master of one» (приблизно можна перевести як «фахівець широкого профілю, який не має вузької спеціалізації, часто буває кориснішим, ніж вузький спеціаліст»).
За час своєї кар’єри ви поступово прийдете до розуміння, що жодна мова не є універсальною, відповідною для всіх випадків життя (хоча JavaScript і Python наближаються до цього), тлму все одно доведеться вчити кілька.
2. Не випускайте з уваги принципи програмування
Ми не будемо розглядати тут ці принципи, лише перерахуємо основні. Вивчаючи нову мову програмування, намагайтеся зрозуміти, як ці принципи вплинули на її дизайн. Ми говоримо зараз про такі принципи (в числі інших):
- SOLID (принцип єдиної відповідальності, принцип відкритості/закритості, принцип підстановки Барбари Лісков, принцип поділу інтерфейсу, принцип інверсії залежностей).
- KISS ( «Дотримуйся простоти»).
- YAGNI ( «Тобі це не знадобиться»).
- DRY ( «Не повторюйте»).
- Композиція важливіше наслідування.
- Поділ відповідальності.
- Уникай передчасної оптимізації.
- Рефакторинг, рефакторинг, рефакторинг.
- Чистий код кращий, ніж хитромудрий код.
- Бритва Оккама (Переваги переважують недоліки?)
- Принцип найменшого подиву (При виборі імен треба стежити за тим, щоб вони відображали суть об’єктів).
- Закон Деметри (Поділ відповідальності між класами).
Хоча ми не зупиняємося на кожному докладніше, про ці принципи безперечно варто почитати окремо. І, звичайно, слід застосовувати їх у своїй роботі.
3. Ознайомтеся з документацією мови
«Якщо у мене буде 6 годин на те, щоб зрубати дерево, перші 4 я витрачу на заточку сокири».
Ці слова сказав Авраам Лінкольн, і це дійсно хороша порада. Перш ніж заглибитися в мову, познайомтеся з офіційними джерелами з цій мові.
Не чіпляйтеся за кількість годин в цитаті: я зовсім не маю на увазі, що над документацією потрібно просидіти саме чотири години. Суть в тому, що вам потрібно дізнатися, де саме шукати інформацію про стандартну бібліотеку і методи для таких речей як робота з рядками і масивами.
Все це вам буде дуже в пригоді на наступному етапі, коли ви почнете застосовувати свої знання на практиці.
Якщо у вас Mac, подумайте про те, щоб інвестувати в Dash. Це мій улюблений ресурс, зокрема, коли справа стосується вивчення нової мови. А ще там відмінні інтеграції з деякими IDE, наприклад, з VSCode.
4. Вивчіть основи і практикуйтеся, практикуйтеся, практикуйтеся
Під «основами» я маю на увазі деякі основні ідеї, присутні в кожній мові:
- оголошення змінних і констант;
- типи даних;
- функції;
- коментарі;
- контроль потоків;
- структури даних;
- методи і функції для роботи з рядками (масивами, об’єктами), що часто застосовуються;
- регулярні вирази.
У міру накопичення досвіду ви почнете бачити загальні патерни і на цьому заспокоїтеся. А ось цього не треба! Хоча else/if та варіанти switch можуть бути легкими для розуміння, навчитися використовувати їх на практиці з урахуванням всіх дрібних відмінностей може бути не так просто.
Останні три пункти списку я виділив особливо. Пункти 6 і 7 дуже важливі для роботи. Можливо, ви це і так знаєте, але практично все зберігається в будь-яких структурах даних. Вивчити, як зберігаються дані і які методи є в мові для маніпуляцій з даними – істотна частина освоєння мови. Тут вам допоможе вивчення документації, про яку ми говорили в попередньому пункті.
Що стосується регулярних виразів, це, мабуть, один з найбільш недооцінених інструментів розробника. Особливо в тому, що стосується ідентифікації рядків або заміни. RegExp – просто неймовірний інструмент, тому обов’язково почитайте статті про регулярні вирази в вашій мові.
Щоб вивчити основи мови швидше, я застосовую REPL, а для практики в алгоритмах звертаюся до онлайн-ресурсів.
Використання REPL
(З Вікіпедії: «REPL – форма організації простого інтерактивного середовища програмування в рамках коштів інтерфейсу командного рядка. У такому середовищі користувач може вводити вирази, які середовище тут же буде обчислювати, а результат обчислення відображати користувачеві»).
Використання REPL відповідної мови – відмінний спосіб познайомитися з типами даних і простими операціями. Я завжди користуюся цим інструментом, якщо мені потрібно швидко освіжити щось в пам’яті або оцінити короткий приклад перед тим як реалізувати щось подібне у своєму коді.
REPL – ваш кращий друг, коли потрібно швидко почати розбиратися в типах даних і простих коротких методах.
Онлайн-ресурси для практики в алгоритмах
Є цілий ряд сайтів з завданнями, на яких можна попрактикуватися в темах алгоритмів, структур даних і регулярних виразів. Наприклад:
5. Якомога раніше вчіться тестувати свій код і тестуйте його частіше
Уміння писати ефективні тести це універсальна навичка, який стане в пригоді вам при вивченні будь-якої мови. Як тільки освоїте основи, вивчіть, як пишуться юніт-тести для цієї мови.
Це також відмінний спосіб перевірити свої нещодавно отримані знання. Обробка помилок допоможе вам переконатися, що ви дійсно розумієте типи даних і обмеження, пов’язані з ними.
Крім усього іншого написання тестів змушує вас більш ретельно обміркувати, чого саме ви хочете досягти в своєму коді. В результаті ви зможете по-справжньому розібратися в дивацтва мови, яку вивчаєте, і коли в майбутньому щось «впаде», ви будете раді, що колись витратили час на навчання і тепер точно знаєте, що сталося.
І – так, коли навчитеся писати юніт-тести, пишіть їх частіше. Ви здивуєтеся, скільки базової інформації про мову вам вдасться засвоїти завдяки їх написанню.
6. Вивчіть, як в вашій мові працює менеджмент пакетів
Bundler, Cargo, Yarn, NPM, Cocoapods, PipEnv, NuGet, Gradle, Hex. Що у них спільного? Все це – інструменти, які відіграють ключову роль в управлінні пакетами в екосистемах різних мов програмування.
Якщо вам доводилося користуватися хоч одним з них, ви повинні розуміти, наскільки це важливо.
Дізнайтеся, які інструменти для управління пакетами є в вашій мові. Як мінімум потрібно навчитися встановлювати залежності і керувати ними, але я також раджу заодно навчитися публікувати і поширювати власні пакети.
Крім того, дуже рекомендую пошукати ресурси, які приведуть вас до найпопулярніших проєктів і пакетів для вашої мови. Йдеться про такі речі як популярні утиліти, сервери, бібліотеки для парсинга.
7. Пошукайте Awesome-репозиторії на GitHub, пов’язані з вашою мовою
Оригінальний репозиторій awesome – це неймовірний ресурс для пошуку пов’язаних репозиторіїв для окремих мов і технологій. Розділ Programming Languages - справжня скарбниця з посиланнями на приголомшливі ресурси за мовою.
Там можуть бути посилання на додатки, інструменти розробки, бібліотеки, блоги, ресурси, подкасти, людей, на яких варто підписатися.
Це відмінний спосіб знайти ресурси, про існування яких ви навіть не підозрювали і, як наслідок, самі не шукали б. Таким чином ви зможете познайомитися, наприклад, з проєктами, з яких переймете кращі практики і які надихнуть вас на створення власних проєктів.
8. Практика. Build your own X
Пора почати застосовувати всі отримані знання на практиці і взятися за якісь проєкти.
Репозиторій Build your own X це справжній скарб, коли справа стосується пошуку ідей проєктів. Дуже раджу переглядати цей репозиторій, хоча б просто для інтересу. Ви можете знайти там приклади створення таких речей як власний блокчейн для вашої власної бази даних.
Приклади можуть бути тісно пов’язані з якою-небудь мовою, але це в будь-якому випадку відмінний ресурс.
Особисто я, коли вивчаю нову мову, намагаюся завершити два-три проєкти. Кожен з них може бути або причиною, з якою я взагалі взявся за вивчення мови, або ключовим фактором на рев’ю продуктивності. І при цьому я не беру якісь неймовірно складні проєкти.
Створіть інструмент командного рядка
Люди часто недооцінюють вміння передавати аргументи і прапори в скрипт потрібною мовою. Написання простих CLI-інструментів, що полегшують роботу розробників у команді, це, мабуть, найкраще з усього, що я робив.
Серед створених мною CLI-інструментів були:
- боти для вебскрейпінгу,
- інструменти для PDF-рендерингу,
- генератори рахунків,
- генератори коду,
- інтерактивні новини в командному рядку.
Уміння створювати ефективні інструменти командного рядка це суперсила, якою часто нехтують.
Створіть вебсервер
Можливо, ви взагалі саме для цього вивчаєте мову, але навіть якщо це не так, все одно цей проєкт варто створити.
Уміння написати простий RPC дасть вам можливість віддалено запускати скрипти і автоматизувати багато речей на віддалених машинах, а це зніме великий вантаж з ваших плечей.
9. Навчіться читання файлів і запису в файли
Це безперечно найнедооціненіша навичка моїх університетських часів. Їй приділили навряд чи п’ять хвилин у вступному курсі з програмування, а приклади були просто смішними – щось на зразок запису в простий .txt файл.
Я навіть не підозрював, що через роки це стане основою практично кожного мого підвищення в кар’єрі. Уміння парсити файли, маніпулювати ними, перезаписувати їх відкриває перед вами широкі можливості в частині рішень, не пов’язаних з написанням коду. Та й просто змушує всіх дивитися на вас з повагою.
7 речей, які слід обміркувати та зробити перед тим, як записатися на курси програмування
Це, звичайно, не вичерпний список кроків, які потрібно зробити при освоєнні нової мови програмування. Це лише шаблон, якому я слідую вже багато років і за допомогою якого успішно вивчив не одну мову.
Є й інші важливі речі, про які я не сказав: пошук найкращих книг, використання онлайн-ресурсів, рекомендованих співтовариством тощо. Я просто думаю, що важливість цих речей і так всі розуміють, тому не зупинявся на них окремо.
Ми у соцмережах: