Начинающим программистам требуется нечто большее, чем навыки программирования. Столкнувшись с реальной работой, вы моментально понимаете, что самым нужным вещам, имеющим критическое значение для карьеры, не обучают ни в университетах, ни на курсах. Книга «README. Суровые реалии разработчиков» призвана восполнить этот пробел.
Познакомьтесь с важнейшими практиками инжиниринга, которым обучают разработчиков в ведущих компаниях.
Вы узнаете о том, что вас ждет при устройстве на работу, затем познакомитесь с особенностями кода промышленного уровня, эффективным тестированием, ревью кода, непрерывной интеграцией и развертыванием, созданием проектной документации и лучшими практиками архитектуры ПО. В последних главах описываются навыки гибкого планирования и даются советы по построению карьеры.
Ключевые концепции и лучшие практики для начинающих разработчиков — то, чему вас не учили в университете!
Author(s): Крис Риккомини, Дмитрий Рябой
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2023
Language: Russian
Commentary: Publisher's PDF
Pages: 304
City: СПб.
Tags: Learning; Software Engineering; Psychology; Cognitive Psychology; Logging; Deployment; Best Practices; Agile; API Design; Incident Response; Refactoring; Scrum; Defensive Programming; Testing; Legacy Code; Complexity; Team Management; Productivity; Career; Version Control Systems; Technical Debt; Code Review; Configuration as Code; Evolutionary Architecture; Rollouts; Design Thinking; Technical Writing; Metrics; Dependency Management; Impostor Syndrome; Dunning–Kruger Effect; On-Call
Об авторах
Благодарности
Предисловие
От издательства
1. Предстоящее путешествие
Пункт назначения
Карта путешествия
Пик Новичка
Река Интенсивной работы
Мыс Активного участника
Операционный океан
Бухта Компетентности
В путь!
2. Достижение осознанной компетентности
Научитесь учиться
Пройдите предварительное обучение
Учитесь на практике
Экспериментируйте с кодом
Читайте
Смотрите презентации
Посещайте митапы и конференции (иногда)
Попробуйте шедоуинг и парное программирование
Экспериментируйте со сторонними проектами
Научитесь задавать вопросы
Проведите исследование
Установите временные рамки
Продемонстрируйте результаты проделанной работы
Не отрывайте коллег от работы
Выбирайте многоадресную асинхронную коммуникацию
Группируйте синхронные запросы
Преодолевайте препятствия на пути роста
Синдром самозванца
Эффект Даннинга — Крюгера
Что следует и чего не следует делать
Повышение уровня
3. Работа с кодом
Энтропия программного обеспечения
Технический долг
Выплата технического долга
Изменение кода
Используйте алгоритм изменения унаследованного кода
Оставляйте код более чистым, чем он был до вас
Вносите изменения постепенно
Относитесь к рефакторингу прагматично
Используйте IDE
Используйте передовые методы управления версиями
Избегайте ловушек
Используйте скучные технологии
Не самовольничайте
Не делайте форк, если не собираетесь обновлять исходный репозиторий
Сопротивляйтесь искушению переписать код
Что следует и чего не следует делать
Повышение уровня
4. Написание работоспособного кода
Защитное программирование
Избегайте значений null
Делайте переменные неизменяемыми
Используйте подсказки типа и средства статической проверки типа
Проверяйте входные данные
Используйте исключения
Конкретизируйте исключения
Генерируйте исключения как можно раньше, а перехватывайте как можно позже
Выполняйте повторные попытки с умом
Создавайте идемпотентные системы
Очищайте ресурсы
Логирование
Используйте уровни логирования
Обеспечьте атомарность логов
Ускорьте процесс логирования
Не регистрируйте конфиденциальные данные
Метрики
Используйте стандартные библиотеки метрик
Измеряйте все
Трассировки
Конфигурация
При настройке конфигурации не стремитесь к излишней креативности
Регистрируйте и проверяйте все параметры конфигурации
Предусмотрите значения по умолчанию
Группируйте связанные параметры конфигурации
Относитесь к конфигурации как к коду
Поддерживайте чистоту файлов конфигурации
Не редактируйте развернутую конфигурацию
Инструменты
Что следует и чего не следует делать
Повышение уровня
5. Управление зависимостями
Основы управления зависимостями
Семантическое управление версиями
Транзитивные зависимости
Ад зависимостей
Избегание ада зависимостей
Изолирование зависимостей
Намеренное добавление зависимостей
Закрепление версии
Сужение области действия зависимостей
Защитите себя от циклических зависимостей
Что следует и чего не следует делать
Повышение уровня
6. Тестирование
Широкое применение тестов
Виды тестирований
Инструменты тестирования
Библиотеки заглушек
Платформы тестирования
Инструменты проверки качества кода
Пишем собственные тесты
Пишите чистые тесты
Не переусердствуйте с тестированием
Детерминизм в тестировании
Начальное значение генератора случайных чисел
Не вызывайте удаленные системы в юнит-тестах
Внедрение часов
Избегайте остановок потока и тайм-аутов
Закрывайте сетевые сокеты и дескрипторы файлов
Привязка к порту 0
Создание уникальных путей к файлам и базам данных
Изолируйте и очищайте сохранившееся состояние теста
Не полагайтесь на порядок тестов
Что следует и чего не следует делать
Повышение уровня
7. Обзор кода
Зачем нужны обзоры кода
Принятие обзора кода
Подготовьте свой обзор
Снижение рисков с помощью черновика обзора
Не отправляйте обзор кода для запуска тестирования
Прогон больших изменений
Не ассоциируйте себя с кодом
Развивайте эмпатию, но не терпите грубости
Проявляйте инициативу
Выполнение обзора кода
Рассмотрение запроса на обзор
Выделите время для обзора
Вникайте в изменения
Давайте исчерпывающую обратную связь
Отмечайте положительные стороны
Разница между проблемами, предложениями и придирками
Не штампуйте обзоры
Не ограничивайте себя веб-инструментами рецензирования
Не забывайте выполнять обзор тестов
Делайте выводы
Что следует и чего не следует делать
Повышение уровня
8. Доставка программного обеспечения
Этапы доставки ПО
Стратегии ветвления
Этап сборки
Версии пакетов
Упаковывайте разные ресурсы по отдельности
Этап выпуска
Несите ответственность за выпуски
Публикуйте пакеты в репозитории выпусков
Оставляйте выпуски неизменными
Публикуйте выпуски часто
Относитесь к планированию выпусков серьезно
Публикуйте журнал изменений и примечаний к выпуску
Этап развертывания
Автоматизируйте развертывание
Делайте развертывания атомарными
Проводите независимое развертывание приложений
Этап выгрузки
Контролируйте выгрузки
Увеличивайте темпы с флагами функций
Защитите код с помощью автоматического выключателя
Проводите развертывание версий параллельно
Запуск в тайном режиме
Что следует и чего не следует делать
Повышение уровня
9. Дежурство
Схема работы дежурного
Важные навыки дежурного
Будьте доступны
Будьте внимательны
Расставляйте приоритеты
Общайтесь четко и по делу
Фиксируйте свою работу
Обработка инцидентов
Сортировка
Координация
Снижение рисков
Решение проблемы
Дальнейшие действия
Проблема: из хранилища данных пропали данные
Предоставление поддержки
Не пытайтесь быть героем
Что следует и чего не следует делать
Повышение уровня
10. Процесс технического проектирования
Конус процесса технического проектирования
Размышляем о проекте
Определите проблему
Проводите собственные исследования
Проводите эксперименты
Не торопитесь
Написание проектных документов
Последующие изменения документов
Знайте, зачем вы пишете
Учимся писать
Поддерживайте актуальность проектной документации
Использование шаблонов проектной документации
Введение
Текущее состояние и контекст
Мотивация для изменений
Требования
Возможные решения
Выбранное решение
Проектирование и архитектура
План тестирования
План выпуска
Нерешенные вопросы
Приложение
Совместная работа над проектом
Понимайте процесс обзора проекта в вашей команде
Не удивляйте коллег
Мозговой штурм с обсуждением проекта
Вносите вклад в проект
Что следует и чего не следует делать
Повышение уровня
11. Создание эволюционной архитектуры
Понимание сложности
Проектирование с учетом эволюционности
Вам это не понадобится
Принцип наименьшего удивления
Инкапсулируйте знания предметной области
Эволюционные API
Не увеличивайте размеры API
Предоставляйте строго определенные сервисные API
Изменения API должны быть совместимыми
Версии API
Эволюция данных
Изолируйте базы данных
Используйте схемы
Автоматизация миграции схем
Поддерживайте совместимость схем
Что следует и чего не следует делать
Повышение уровня
12. Гибкое планирование
Манифест Agile
Фреймворки планирования в гибкой разработке
Скрам
Пользовательские истории
Задачи
Story point
Обработка бэклога
Планирование спринта
Стендапы
Обзоры
Ретроспективы
Дорожные карты
Что следует и чего не следует делать
Повышение уровня
13. Работа с менеджерами
Что делают менеджеры
Коммуникация, цели и процессы роста
Один на один (1:1)
PPP
Стратегия OKR
Оценка производительности
Концепция управления вверх
Получайте обратную связь
Давайте обратную связь
Обсуждайте ваши цели
Примите меры, когда что-то идет не так
Что следует и чего не следует делать
Повышение уровня
14. Навигация по карьерной лестнице
Путь к сеньору и дальше
Советы по карьере
Становитесь Т-shape специалистами
Участвуйте в программах для инженеров
Направляйте свое продвижение
Меняйте место работы обдуманно
Правильно распределяйте силы
В заключение