📚 Прочитала в 2018
1) Designing Data-Intensive Apps, Martin Kleppmann
На русском книга называется «Высоконагруженные приложения. Программирование, масштабирование, поддержка». На самом деле они не просто высоконагруженные, а нагруженные именно работой с данными.
Книга рассматривает общие принципы проектирования и работы с распределёнными системами. Очень много примеров разных технологий, баз данных, программ, но настройка конкретных инструментов не рассматривается, это придётся изучать отдельно.
В книге 3 части:
1) Первая часть начинается с объяснения, что такое надёжность, масштабируемость, удобство поддержки(maintainability). Дальше — информация про историю развития баз данных и языков запросов, форматов хранения и передачи данных.
Мне особенно понравилось читать про старые базы данных, как они работали и как повлияли на развитие современных. Также интересно сравнение реляционных, документоориентированных и графовых бд, и то, как они развиваются сейчас.
2) Вторая часть рассматривает работу с распределёнными системами: репликацию, партиционирование, транзакции, консистентность данных и способы достижения консенсуса; можно узнать про миллион проблем, возникающих при работе с распределёнными системами, и способы их решения.
3) Третья часть расскажет про пакетную и потоковую обработку данных, и будущее информационных систем.
В последней части понравилось объяснение event sourcing и информация о системах обмена сообщениями (messaging systems). Сразу стало понятно, зачем они нужны, и в каких случаях их можно применить.
Знания, полученные из книги, помогут лучше понимать не только работу распределённых систем, но и вещей, с которыми вы работаете ежедневно: например, баз и форматов данных.
Могу с уверенностью рекомендовать эту книгу к прочтению.
2) Domain-Driven Rails, Arkency
Книга о том, как использовать DDD в рельсах. Мне показалась поверхностной, плюс явно пожалели денег на редактора. В книге много грамматических ошибок, читать не очень приятно.
Посмотреть можно, но для нормального понимания придётся изучать другие источники. Из небольших книг на тему можно взять «DDD Distilled» Вернона или «Domain Driven Design Quickly» от InfoQ.
3) Exceptional Ruby, Avdy Grimm
Небольшая книга про исключения. Будничная тема, но полезной информации достаточно. Можно узнать, какие подходы существуют при работе с исключениями, какие могут быть подводные камни, как избежать катастроф, например, каскадного падения.
4-6) Трилогия Джесси Сторимера
Эти книги помогут поглубже вникнуть в unix-системы. Можно читать не порядку.
Working with Unix Processes
Всё про процессы: родители и дети, зомби, демоны, общение процессов между собой и т.п. Также рассматривается, как работают с процессами resque и unicorn.
Working with TCP Sockets
Книга расскажет, как работает передача данных между сервером и клиентом, как устроены разные типы серверов. Есть глава про паттерн «Реактор», с помощью которого можно достигнуть конкурентности в одном потоке и одном процессе. Он используется в EventMachine, nodejs, Nginx.
Тема затрагивалась на RubyRussia в докладах High performance Ruby services. Maciej Mensfeld и Threads are evil. Async Ruby in action. Юлиан Кулеш
Working with Ruby Threads
Расскажет о том, что такое потоки, как с ними работать в руби, чем отличается конкуретность от паралеллизма, как решить проблемы синхронизации потоков, как писать потокобезопасный код, и когда это нужно.
Серия поможет немного приблизиться к системному программированию и понять, как работают используемые нами программы и библиотеки «под капотом». Некоторые моменты устарели, всё-таки книги были написаны в 2011-13 годах. Но в процессе чтения это легко заметить и изучить дополнительно. Например, посмотреть, что изменилось в новой версии ruby.
7) Exploding Rails, Ryan Bigg
Автор критикует традиционный Rails Way, а именно возникающие проблемы: разрастание моделей и контроллеров, смешивание бизнес-логики и логики работы с бд, нарушение Single Responsibility Principle. В книге он предлагает решить их с помощью rom-rb и dry-стека.
По ходу книги мы разрабатываем простое rails-приложение. В качестве orm вместо active_record используем rom, а для организации логики используются гемы из dry-стека (dry-transaction
, dry-container
, dry_auto_inject
, dry-validation
).
Книга не содержит каких-то фундаметальных знаний, но хорошо подходит в качестве примера использования той или иной dry-библиотеки.
Чтобы использовать знания, полученные из книги, не обязательно полностью копировать подход автора. Можно просто использовать отдельные гемы по возможности и необходимости.
8) Professor Frisby’s Mostly Adequate Guide to Functional Programming
Эта книга поможет познакомиться с функциональной парадигмой программирования.
В качестве языка для примеров используется js. Автор выбрал его из-за популярности и удобства объяснения концепций функционального программирования на его примере.
Из книги вы узнаете про чистые функции, каррирование, композицию функций, функторы. На мой взгляд, информацию из книги хорошо дополнить прочтением статей на тему, особенно с примерами на руби.
В конце каждой главы есть упражнения, которые помогут сразу начать практиковаться.
Не очень понравилось то, что автор часто использует «вычурные» выражения, которые не улучшают понимание, по крайней мере на английском.
Тем не менее, основные вещи после прочтения стали понятными, захотелось изучать тему дальше.
Есть и перевод книги на русский, но неполный.
Дальше планирую читать The Complete Guide to Rails Performance.