В последнее время ко мне часто обращались за советом, что можно почитать, чтобы научиться создавать архитектуры и гибкие решения.
Для тех, кто не хочет читать всю статью, отвечу кратко — никакие. В этом плане нужно пропустить через себя большое количество разных проектов, чтобы выработать ощущение подходящих решений и архитектур, а это только насмотренность. И вообще, а что значит «гибкие системы»? 🤔
Для тех же, кто решил читать дальше — продолжу.
Введение
Для начала, немного отвлечемся, чтобы более понятным образом описать ключевую мысль.
Какие книги нужно прочитать, чтобы стать хорошим автомехаником? Хм... очевидно, есть книги про устройства автомобилей и основных агрегатах. Их стоит прочитать. Но сделают они из вас хорошего механика? Очевидно, что нет!
Нужно разобрать и собрать большое количество самых разных машин, в разном состоянии, чтобы стать «хорошим».
А еще, в книгах вам будут писать про динамо-ключи и моменты затяжек гаек. А на практике придется высверливать прикипевшие болты и выбивать «приспособами» заевшие элементы. Моменты затяжки тоже будут на практике, конечно. По крайней мере, хочется, чтобы были.
Это я к чему. К тому, что практика преподносит нам много насущных уроков, которые и требуются для успешной работы. И большую часть из них вы не найдете в книгах.
Поэтому, не зацикливайтесь на книгах, а больше практикуйте. При прочтении книги у вас должна возникать мысль: «А, вот как можно было сделать тот мой фрагмент кода. Пойду перепишу.». Такой кейс наиболее полезен и эффективен. Это маркер верно подобранной в данный момент литературы.
Книги должны проявлять ваш опыт, а не создавать. Они и не смогут его сформировать. Кроме того, после прочтения вы запомните немного, если содержимое не подкреплено практикой.
К слову, поэтому книги имеет смысл перечитывать. Ваш опыт будет расти, стало быть и в книгах будете замечать больше.
Я уже ответил, что никакие книги не помогут научиться архитектуре, но раз уж в названии статьи есть слова «книги» и «какие», то что-то посоветую.
На моем канале уже есть статья на тему Архитектуры. Прочитайте, чтобы понять, что я вкладываю в это понятие и как отличаю хорошую архитектуру от не очень хорошей.
Обратите внимание, возможно здесь вы не найдете каких-то популярных книг. Во-первых, скорее всего вы их уже знаете — их рекомендуют все. А во-вторых, я считаю, что часто хорошие решения и подсказки могут приходить из смежных, релевантных областей.
А вот и рекомендации
1. Экстремальное программирование — Кент Бек.
Она не про архитектуру напрямую, но про эволюцию кода. А большую часть времени мы и занимаемся тем, чтобы обеспечить хорошую эволюцию кода. От этого зависит успешность поддержки любого проекта. Неопределенностей и функциональных требований будет поступать очень много при работе с проектом, а качественная эволюция кода и будет маркером хорошо подобранной архитектуры.
2. Паттерны проектирования — Эрик Фриман.
И хотя книга больше предназначена для начинающих, на мой взгляд очень хороша для любого возраста. Либо посмотреть и понять, либо вспомнить как оно вообще. И опять же, про эволюцию там тоже есть.
3. Язык шаблонов — Кристофер Александер.
Эта книга вообще не про код и разработку, но про мышление и закономерности. И, к слову, банда четырех вдохновилась ей, в том числе, в своем труде Паттерны проектирования.
Книга весьма объемная, поэтому подходите основательно в решении ее прочесть.
4. Чистая архитектура — Роберт Мартин.
Конечно, не могу не посоветовать эту книгу. Хотя для новичков может быть весьма тяжелой. По крайнем мере по моим ощущениям.
Здесь вы узнаете и краткую профессиональную биографию автора и про SOLID и про главную ось зависимостей.
5. Чистый код — Роберт Мартин.
Сразу еще одна книга дядюшки Боба. Просто кладезь полезных советов по работе с программным кодом. Настоятельно рекомендую с самых малых профессиональных лет.
6. Проектирование веб-API — Арно Лоре.
Название говорит само за себя. Здесь про проектирование различных АПИ. Достаточно легко читается и точно будет полезна.
7. Документация Laravel — https://laravel.com/
Очень часть фронтенд-разработчикам я показываю части документации, чтобы дать понять, как устроно бекенд-отображение проекта. И почему нужно ориентироваться на стандарты нейминга, например. Там можно отметить много всего полезного.
8. Устройства операционных систем — Таненбаун
Когда-то давным давно я хотел сделать свою операционную систему, но «зачем»? Так и оставил эту идею. Ведь есть линукс и все такое. Кто же знал, что через десяток, другой лет так сложится, что отечественная операционная система могла бы занять свое место. А за это время можно было бы сделать вполне хорошую заготовку. Но да ладно.
Все программы работают на компьютерах, а эта книга как раз о том, как работают системы, которые работают на этих компьютерах. А еще, в названии книги есть слово «система», а система — это, знаете ли, своего рода тоже Архитектура.
9. Дизайн привычных вещей — Норман Дональд
Великолепная книга. Не про разработку, но обратит ваше внимание на то, что вы могли не замечать, но что замечать имеет смысл. Про дизайн и эргономику. А не это ли требуется в хорошем программном интерфейсе?
10. Domain Driven Design — Eric Martin
Завершу список этой книгой. Отмечу, что к прочтению весьма тяжелая и примеров кода в ней не так много, как хотелось бы, однако она однозначно привнесет в ваше мировоззрение что-то новое. Попробуйте начать читать — зайдет — хорошо, нет — попробуйте спустя год повторить попытку.
Что вне книг
Конечно, книг хороших, которые нужно прочесть гораздо больше, какие-то я еще сам не прочел, а какие-то не упомянул.
Но для начала этих книг вам хватить с головой. Причем они разноплановые, что поможет взглянуть на код и разработку с самых разных сторон. Вы точно подчерпнете много полезного.
Как я указывал в самом начале, чтение книг из вас не сделают хорошего архитектора. Практика здесь сильно превалирует. Так что создавайте свои проекты, смотрите, как устроены другие, разбирайтесь в том почему и зачем устроен тот, проект, в котором вы сейчас работаете. Не оставайтесь безразличными. Хотя, если вы безразличны, то вряд ли дочитаете до этого места.
Попробуйте написать свой простенький движок админки или движок рендеринга простых страниц с простыми компонентами. Многократные попытки создания проектов и разных движков, с повышением сложности даст вам очень много в понимании устройств программных систем. Подкрепите этот опыт хорошими книгами — и вот вы уже кое-что понимаете.
На этом завершу. Делайте хорошо и немного больше. Берегите себя и свои коллег.
Напишите в комментариях, какие книги порекомендовали бы вы и почему?
Хайлайты
- «А, вот как можно было сделать тот мой фрагмент кода. Пойду перепишу.»
- Книги должны проявлять ваш опыт, а не создавать.
- Не будьте безразличны к проекту, с которым работаете.
---
Читай релевантные статьи: Архитектура.
Изучай основы создания приложения в открытом курсе: Анатомия приложения.
Подписывайся на мой канал в Telegram: @cantfailcode.