Выучить второй язык программирования


В определенный момент времени ты понимаешь, что владеть единственным языком программирования становится недостаточно, и приходит осознание, что приша пора добавить что-то в свой репертуар.

Остановился на Elixir - функциональный язык для разработки параллельных систем на основе виртуальной машины Erlang. Подходит для того, чем сейчас занимаюсь, из всей функциональщины хоть сколько нибудь популярный (ладно, еще Scala есть) и это тема в целом интересна.

Нет, естественно, кроме моего первого языка – Python, я встречался с многими другими, многие из которых я могу читать / понимать / писать что-то простое (Julia, F#, C, Java, …). Но, по аналогии с естественными языками – есть большая разница между “свободно владеть” и уметь “неловко спросить дорогу у прохожего”.

Новый язык открывает перспективу для новых технологий, концепций и техник программирования, которые дают больше инструментов для решения проблем. Однако для этого нужно крепкое понимание языка. Что я подразумеваю под этим?

  1. Решать несложные задачи с leetcode, не напрягаясь вспонминая синтаксис и не заглядывая всё время в гугл.
  2. Уметь сделать простой проект, вроде змейки, http-сервера, и т.д.
  3. Понимать и применять концепции, специфичные для этого ЯП.

Всё это здорово, но как добиться всего этого? Для меня всегда было соблазнитально просто найти Udemy-курс (заблокирован для оплаты россиянам) или ролик на Youtube (скоро будет заблокирован :)), но это почти всегда работает плохо.

Большим вдохновением здесь мне послужил Зед Шоу и его книга Learn Python 3 the Hard Way. Во-первых, это именно учебник, а не просто справочный материал. Во-вторых, её подход прямо противоположный большинству того, что я видел в онлайн курсах и Youtube-роликах: там мы обычно читаем/смотрим “а вот так делается функция, повторяйте за мной”, выполняем (хорошо если) 1-2 упражнения и едем дальше. После 4-х часового ролика голова остаётся почти такой же пустой, как и до, хорошо если запомнили что вообще есть в языке.

В Книгах Шоу много внимания уделено зубрёжке базовых вещей - зубрим основные ключевые слова, затем основные конструкции языка. Даже если понимания нет сейчас, оно придёт потом, зато мы можем сразу читать весь синтаксис. Если рассмотрели словари - повторяем пока руки сами не смогут написать словарь без напряжения мозга. Если изучаем функцию, нужно найти 5 способов сломать её, починить обратно и понять, почему так устроено.

  1. Синтаксис:
  • Ключевые слова (хотя бы основные).
  1. Второй уровень:
  • Как присвоить значение переменной?
  • Как создать функцию?
  • Как написать if-else конструкцию (а если она не используется в языке, что её заменяет)?
  1. Концепции, специфичные для языка:
  • У Elixir это будут, например, атомы, что-то более сложное, вроде акторной модели лучше оставить на потом.
  • (Если кто-то впервые пробует функцональный язык, то тут здорово прибавится вещей, например, pattern-matching)

Все эти вещи легко можно найти в документации языка. И никакие курсы не нужны.

Затем, когда мы чувствуем себя чуть увереннее, можно начать решать задачки и сделать пару простых проектов для закрепления результата.

Еще хороший ролик на тему:

С таким планом я надеюсь не застрять в этот раз в освоении нового и уверенно использовать новые инструменты в работе.