Вивчення нової мови програмування: що я зробив по-іншому, коли вивчав Go?

pic

Фото: Iñaki del Olmo на Unsplash

Вступ

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

Однак, коли я почав свою першу роботу після університету, мені довелося вивчати Ruby самостійно, і для цього я змушений був створити свою власну “структуру навчання”. Оперуючи своїм шкільним досвідом, я звернувся до інтерактивних уроків з Ruby, які розбивали такі концепції, як хеші, цикли та функції lambda на розділи, кожен з яких завершувався тестом для закріплення матеріалу.

Пройшло 3 роки, і я вирішив знову взятися за вивчення нової мови! Цього разу це Go. У цій статті я поділюся тим, що я зробив інакше цього разу, розмірковуючи над тим, що спрацювало (і що не спрацювало) при вивченні Ruby.

Що я дізнався з моїх помилок у Ruby

Коли я тільки почав вивчати Ruby, я припускав, що всі мови програмування мають однакову основу. Я вірив, що як тільки я освою синтаксис, я зможу швидко писати код і ефективно працювати в команді. Я не міг помилятися більше.

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

Ось 2 помилки, які я зробив:

Помилка №1: Надмірно фокусувався на знайомстві з синтаксисом Ruby

Так, я став знайомий із синтаксисом Ruby через уроки, але все ж я мав труднощі з написанням коду, який був би “читабельним” і “підтримуваним” досвідченими розробниками Ruby. Наприклад, існують деякі ідіоматичні конструкції, які вважаються більш читабельними та виразними. Тому вони більше відповідають практикам Ruby.

pic

Помилка №2: Не читав достатньо коду для розуміння практик Ruby

Замість того, щоб витратити час на читання та вивчення існуючих кодових баз Ruby, я одразу почав писати код. Хоча мій код працював, він не відповідав стандартам для того, щоб бути “готовим до виробництва”. Ця недбалість призвела до довгих перевірок коду, оскільки я намагався привести свої внески до загальноприйнятих практик Ruby. Як результат, мені знадобилося більше часу, щоб підготувати “готовий до виробництва” код і отримати його в продакшн.

Ключовий висновок для мене був у тому, що розуміння синтаксису мови не повинно бути пріоритетом для ефективного внеску. Я повинен був витратити час на розуміння принципів і філософії, які стоять за цими практиками, щоб допомогти мені краще відповідати конвенціям та практикам мови. Розмірковуючи про ці помилки, я зрозумів, що мені потрібно вдосконалити свій процес навчання.

Вдосконалення мого процесу навчання для Go

З Go я вдосконалив свій процес навчання та застосував ці 5 методів, щоб краще вивчити Go за останні 2 тижні. Більш детально я розповім про них у цій частині:

  1. Метод №1: Візьміть книгу для читання
  2. Метод №2: Підкріпіть навчання відео на YouTube та іншими матеріалами
  3. Метод №3: Створіть простий додаток і візьміться за практику
  4. Метод №4: Читайте більше коду
  5. Метод №5: Рефакторинг коду

Примітка: Хоча приклади в цій частині більше стосуються Ruby і Go, ці методи можуть бути корисними для вивчення будь-якої мови (або навіть фреймворків)

Метод №1: Візьміть книгу для читання

Протягом цих 3 років роботи інженером я зрозумів, що книги містять цілу гаму знань, яку лише треба відкрити.
Я обрав Pro Go від Адама Фрімена з наступними двома цілями:

  1. Зрозуміти основні концепції Go — розуміння того, коли, чому та як їх застосовують у реальних сценаріях.
  2. Отримати уявлення про принципи та філософії, необхідні для написання додатку на Go.

Ось короткий огляд того, що я дізнався, використовуючи книгу як ресурс для навчання порівняно з інтерактивною платформою для кодування:

Читання книги

  • В Go немає концепції наслідування (це було найбільше 🤯 для мене). Натомість, заохочується композиція через використання конкретних типів.
  • В Go немає концепції класів, замість цього використовуються функції, типи та інтерфейси, оскільки Go має інший підхід до об'єктно-орієнтованого програмування (OOP).
  • Використання вказівників для управління виділенням пам'яті.
  • ...багато іншого.

Інтерактивна платформа для кодування

  • Написання циклу for в Ruby.
  • Поширені методи пошуку, використовувані в Ruby, наприклад .one?, .any?.
  • Синтаксис хешів в Ruby, наприклад, хеші з символізованими або строковими ключами.

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

Примітка: Якщо ви новачок у програмуванні, почати з інтерактивної платформи може бути більш корисно. Однак, якщо ви вже досвідчений розробник, я знайшов, що книга може дати кращий старт.

Метод №2: Підкріплення навчання відео на YouTube та іншими матеріалами

На цьому етапі стало зрозуміло, що Go фундаментально відрізняється від мов, до яких я звик, оскільки в ньому немає концепції класів та наслідування. Це означає, що мій підхід до написання коду на Go потребує деяких змін. Саме тоді я натрапив на добре пояснене відео від Ентоні про як потрібно по-іншому мислити, пишучи Go, особливо якщо ви приходите з іншого фону програмування.

Розуміння принципів та філософії написання коду на Go також було важливим для мене, щоб виправити помилку, яку я згадував у Помилці №1 в попередньому розділі. Я знайшов документ від Дейва Чені, де він поділився про написання підтримуваних додатків на Go, що стало дуже корисним посиланням, до якого я планую повертатися, поки освоюю Go.

Метод №3: Створення простого CRUD додатку і практика

Цей підхід дуже схожий на “проектну” частину шкільної програми, оскільки я вважаю, що це був один з найкращих способів перевірити свої знання, застосувавши те, що я навчився в Методах №1 та №2.

Основна мета тут — почати з малого і простого, створивши CRUD додаток. Тримати проект маленьким і простим допомагає мені краще зосередитися на тому, щоб спочатку змусити працювати функціональність, не турбуючись занадто сильно про написання ідеально чистого та підтримуваного коду — ці покращення можуть бути пізніше. Великі методи? Повторювані реалізації? Не хвилюйтеся, завжди можна повернутися і вдосконалити їх пізніше.

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

Конвенції великих та малих літер

  • Малі літери для приватних полів і великі для публічних полів.
  • Методи з великими літерами можуть бути експортовані та використовувані іншими пакетами.

Нульові значення вказівників

Хоча структури не мають “порожнього” значення, вказівники на структури мають, і порожнє значення — це null. Наприклад, додавання вказівника * до PercentageDiscount має інше значення порівняно з Price, коли поля не ініціалізовані.
Price повертає 0, оскільки це нульове значення для типу float64, а PercentageDiscount повертає null, оскільки це нульове значення для вказівників.

pic

Метод №4: Читайте більше коду

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

Читання більшої кількості коду допомогло мені кількома способами:

  1. Навчитися краще орієнтуватися в кодовій базі.
  2. Перевіряти своє розуміння того, що робить код (на щастя, ми зараз живемо в еру, де є ChatGPT, тому завжди можна звернутися за допомогою!)
  3. Ідентифікувати деякі загальні шаблони проєктування, які я можу прийняти для покращення підтримуваності коду.

Можливо, ви запитаєте, де можна знайти більше коду для читання? На мою думку, найкращий спосіб почати — це переглядати відкритий код популярних бібліотек/пакетів. Наприклад, я вибрав пакет mux, оскільки я вже використовував його для обробки HTTP маршрутизації у моєму CRUD додатку.

Метод №5: Рефакторинг коду

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

Висновок

Підсумовуючи, вивчення нової мови програмування — це набагато більше, ніж просто знання синтаксису. Також важливо розуміти “коли” і “чому” концепції застосовуються, що можна дізнатися через читання книг, практичну роботу та вивчення більших кодових баз.

Ключовий висновок: навчання ніколи не закінчується — завжди є більше, що можна дізнатися, і кожна помилка — це можливість для росту ✨

Перекладено з: Learning a new programming language: What I did differently when picking up Go?

Leave a Reply

Your email address will not be published. Required fields are marked *