Skip to content

Files

856 lines (641 loc) · 73.1 KB

23-sources.md

File metadata and controls

856 lines (641 loc) · 73.1 KB

Список литературы

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

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

Материалы могут повторяться, если относятся к нескольким темам. Я решил, что важнее собрать полный список для каждой темы, чем избавиться от дублей. Надеюсь, это окажется вам полезным.

Понятие рефакторинга и качества кода

О том, что такое рефакторинг вообще, зачем он нужен. К чему приводит неуправляемо растущая сложность проекта. Как определять «плохой» и «хороший» код.

Книги

Видео

Статьи и исследования

Связанные понятия

Инструменты

Прежде, чем начать

На что обратить внимание до начала рефакторинга. Как подготовить код к изменениям, чтобы упростить работу. Как обезопасить работу с будущими изменениями.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Во время рефакторинга

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

Книги

Видео

Статьи

Связанные понятия

Инструменты

Форматирование, линтинг и возможности языка

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

Книги

Видео

Статьи и исследования

Инструменты

Именование сущностей

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

Книги

Видео

Статьи и исследования

Связанные понятия

Инструменты

Дублирование кода

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

Книги

Видео

Статьи

Связанные понятия

Инструменты

Абстракция и разделение ответственности

Как и зачем использовать абстракцию. Зачем делить намерение и реализацию. Чем мешает ограничение рабочей памяти человеческого мозга. Как выдавать информацию о системе дозировано и контролируемо. Что помогает декомпозировать сложные задачи на более простые. Как удостовериться, что данные в корректном состоянии.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Функциональный пайплайн и линейное выполнение

Как и зачем выделять состояния данных в бизнес-процессах. В чём польза линейного выполнения кода. Как «запретить» передачу невалидных данных и обособить валидацию. В чём польза принципов функционального программирования.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Условия и сложность

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

Книги

Видео

Статьи и исследования

Связанные понятия

Инструменты

Работа с сайд-эффектами

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

Книги

Видео

Статьи

Связанные понятия

Обработка ошибок

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

Книги

Видео

Статьи

Связанные понятия

Инструменты

Интеграция модулей

Что такое зацепление и связность. Как делить приложение на модули и потом компоновать эти модули друг с другом. Зачем и по какому принципу декомпозировать задачи. В чём польза контрактов и гарантий между модулями. Как максимально расцепить модули друг от друга, но при этом оставить возможность для их общения. В чём разница между объектной и функциональной композицией. Как работать с зависимостями. Как добиться целостности и согласованности данных.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Обобщения и иерархии

Как понять, когда нужен обобщённый алгоритм или тип. Почему в большей части случаев композиция предпочтительнее наследования. Как использовать принцип подстановки Лисков в качестве интеграционного линтера.

Видео

Статьи

Связанные понятия

Архитектура и ограничения

Чем может мешать слабая архитектура при рефакторинге. Как использовать повсеместный язык для улучшения архитектуры. Как строить взаимодействие с внешним миром и работу с зависимостями. В чём польза портов и адаптеров. Зачем разделять UI-логику от бизнес-логики. Как архитектура влияет на тестируемость.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Декларативность

В чём польза декларативного стиля кода по сравнению с императивным. В каких ситуациях наоборот предпочесть императивный стиль. Зачем могут пригодиться конечные автоматы во фронтенд-разработке.

Книги

Видео

Статьи

Связанные понятия

Инструменты

Статическая типизация

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

Книги

Видео

Статьи

Связанные понятия

Инструменты

Рефакторинг тестового кода

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

Книги

Видео

Статьи

Инструменты

Комментарии, документация и процессы

Как синхронизировать источники правды в проекте и предотвратить их рассинхронизацию. Как и зачем делать комментарии информационно насыщеннее. Как увеличить пользу документации, не увеличив затраты на её ведение. Чему в проекте уделять внимание «кроме кода».

Книги

Статьи и исследования

Инструменты

Частота, процессы и метрики

Как понять, рефакторить или переписывать код. Какую информацию о проекте собрать перед началом работы. Чем руководствоваться при расчёте времени на задачу. Какими метриками измерять влияние рефакторинга на код.

Книги

Видео

Статьи

Инструменты