Универсальный план изучения новых технологий
Оказавшись в ситуации, когда необходимо освоить новый инструмент, главное не впадать в две крайности: забивать гвозди микроскопом и/или копаться в слишком далеких от нужных на данный момент деталей.
На основе своих различных попыток я попытался сформулировать следующие разделы, которые, надеюсь, помогут другим. Этот материал подходит как для языков программирования, так и инструментов (например, для изучения кафки), с небольшой оговоркой про логику работы.
Этот список можно скопировать к себе и в каждый раздел добавить, какие материалы и ссылки необходимо изучить. Таким образом, у вас будет план: как подходить к обучению и конечный список тем для освоения.
Основы технологии
В этом разделе только необходимый минимум для понимания, как написать что-то умнее hello-world, но еще не гугл.
- Пакет для разработки и пакет для запуска, как запустить готовое приложение, как запускают в разных окружениях
- Синтаксис и базовые библиотеки, вывод в консоль, потоки ввода/вывода, работа с файлами
- Логика работы: передача значений, управление потоком выполнения (исключения или обработка), циклы, условия
- Интерпретация или компиляция, какой механизм используется, особенности работы рантайма
- Типы данных, особенности их хранения и передачи
- Коллекции, виды и особенности работы, виды коллекций, алгоритмическая сложность операций
- Работа со значениями, передача по ссылке/значению, указатели. Тут можно написать тесты
- Распространение кода, работа на других операционных системах, сборка готового приложения
- Инструменты для работы с кодом, различные ide, пакеты для отладки и тестирования, сборщики
- Отладчик и хитрости, механизмы и утилиты для отладки и вывода промежуточных значений
Продвинутая разработка, детали и особенности
Для погружения необходимо углубиться в детали работы конкретной технологии.
- Многопоточка, готовые решения для типовых задач (параллельный доступ, задача для параллельной работы, singleton), модель памяти, синхронизации и блокировки
- Хитрости конкретной технологии, например happens-before в java или каналы в golang
- Работа с базой данных, запись чтение, ORM, обработка ошибок
- Работа с транзакциями, уровни изоляции, элегантное управление из кода
- Работа с памятью, сборка мусора, управление аллокациями, хитрости и особенности
- Тюнинг перфоманса, как протестировать, измерить и планировать
- Инструменты для программиста, профилировщики, анализаторы и тд
Разработка и доработка масштабируемых решений
В этом разделе стоит рассмотреть основные хитрости промышленной разработка, такие как организация кода, поддержка нового функционала и масштабирование решений. В зависимости о технологий стоит разобрать следующие темы:
- Модульная система, как написать свою библиотеку и/или изолировать свой модуль
- Как управлять зависимостями, добавление уже готовых вещей к себе
- Как разрабатывать бизнес логику, хитрости работы с абстракциями, типами, классами, структурами, интерфейсами, наследование
- Подходы к разработке, обработка ошибок, разработка связанных компонентов
- Поддержка и рефакторинг старого кода, какие актуальные подходы существуют, как разделять проект
- Поддержка запущенного кода, логирование и метрики
- Создание распространяемого пакета, как делать готовые приложения, как сделать докер образ
- Создание непрерывного механизма сборки, как настроить CI/CD для проектов
Тесты для готовых решений
Тестирование – точно такая же важная часть процесса разработки. Научившись правильно их создавать, будет меньше ошибок в коде.
- Инструменты для тестирования, библиотеки, фреймворки, особенность работы и запуска
- Юнит, для единичных файлов или классов
- Интеграционные, для тестирования связанных компонентов
- Контрактные, для релизов библиотек
- Тесты с полным контекстом и эмуляцией работы пользователей, e2e
После того, как вы дополните каждый пункт своими темами — необходимо очень аккуратно спланировать график обучения и тогда, я уверен, у вас все получится. По мере прогресса также можно дополнять план новыми темами и отмечать свои пробелы в знаниях для дальнейшего разбора.