Contents

Универсальный план изучения новых технологий

Note
Главная идея поста - понять не синтаксис, а инструмент.

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

На основе своих различных попыток я попытался сформулировать следующие разделы, которые, надеюсь, помогут другим. Этот материал подходит как для языков программирования, так и инструментов (например, для изучения кафки), с небольшой оговоркой про логику работы.

Этот список можно скопировать к себе и в каждый раздел добавить, какие материалы и ссылки необходимо изучить. Таким образом, у вас будет план: как подходить к обучению и конечный список тем для освоения.

Основы технологии

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

  • Пакет для разработки и пакет для запуска, как запустить готовое приложение, как запускают в разных окружениях
  • Синтаксис и базовые библиотеки, вывод в консоль, потоки ввода/вывода, работа с файлами
  • Логика работы: передача значений, управление потоком выполнения (исключения или обработка), циклы, условия
  • Интерпретация или компиляция, какой механизм используется, особенности работы рантайма
  • Типы данных, особенности их хранения и передачи
  • Коллекции, виды и особенности работы, виды коллекций, алгоритмическая сложность операций
  • Работа со значениями, передача по ссылке/значению, указатели. Тут можно написать тесты
  • Распространение кода, работа на других операционных системах, сборка готового приложения
  • Инструменты для работы с кодом, различные ide, пакеты для отладки и тестирования, сборщики
  • Отладчик и хитрости, механизмы и утилиты для отладки и вывода промежуточных значений

Продвинутая разработка, детали и особенности

Для погружения необходимо углубиться в детали работы конкретной технологии.

  • Многопоточка, готовые решения для типовых задач (параллельный доступ, задача для параллельной работы, singleton), модель памяти, синхронизации и блокировки
  • Хитрости конкретной технологии, например happens-before в java или каналы в golang
  • Работа с базой данных, запись чтение, ORM, обработка ошибок
  • Работа с транзакциями, уровни изоляции, элегантное управление из кода
  • Работа с памятью, сборка мусора, управление аллокациями, хитрости и особенности
  • Тюнинг перфоманса, как протестировать, измерить и планировать
  • Инструменты для программиста, профилировщики, анализаторы и тд

Разработка и доработка масштабируемых решений

В этом разделе стоит рассмотреть основные хитрости промышленной разработка, такие как организация кода, поддержка нового функционала и масштабирование решений. В зависимости о технологий стоит разобрать следующие темы:

  • Модульная система, как написать свою библиотеку и/или изолировать свой модуль
  • Как управлять зависимостями, добавление уже готовых вещей к себе
  • Как разрабатывать бизнес логику, хитрости работы с абстракциями, типами, классами, структурами, интерфейсами, наследование
  • Подходы к разработке, обработка ошибок, разработка связанных компонентов
  • Поддержка и рефакторинг старого кода, какие актуальные подходы существуют, как разделять проект
  • Поддержка запущенного кода, логирование и метрики
  • Создание распространяемого пакета, как делать готовые приложения, как сделать докер образ
  • Создание непрерывного механизма сборки, как настроить CI/CD для проектов

Тесты для готовых решений

Тестирование – точно такая же важная часть процесса разработки. Научившись правильно их создавать, будет меньше ошибок в коде.

  • Инструменты для тестирования, библиотеки, фреймворки, особенность работы и запуска
  • Юнит, для единичных файлов или классов
  • Интеграционные, для тестирования связанных компонентов
  • Контрактные, для релизов библиотек
  • Тесты с полным контекстом и эмуляцией работы пользователей, e2e

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