Книга Мартина Клеппмана «Высоконагруженные приложения»

Недавно дочитал книгу Мартина Клеппмана «Высоконагруженные приложения. Программирование, масштабирование, поддержка». В оригинале книга называется «Designing Data-Intensive Applications», а при переводе на русский язык название стало менее конкретным, потому что под высоконагруженными приложениями можно понимать разные виды нагрузки: вычислительную нагрузку на процессор и «высоконагруженные» в том плане, что нужно обрабатывать большой объем данных. Во втором случае основная нагрузка ляжет не на плечи процессора, а узким местом будет сеть или система ввода-вывода. В книге рассматриваются высоконагруженные системы, относящиеся ко второму случаю.

Книга посвящена в основном системам хранения и обработки данных, т.е. базам данных различного типа (SQL и noSQL) и системам, которые анализируют большой поток данных, например, Hadoop. Основная тема книги — это проблемы, которые могут возникнуть в распределенных системах, когда нужно поддерживать согласованное состояние базы данных, сервера которых запущены на машинах, которые могут располагаться даже в разных странах, и не известно, к какому из них будет обращаться пользователь в каждый момент времени. В книге речь идет в основном про архитектурные решения, а не конкретные реализации, хотя в тексте постоянно приводятся ссылки на тот или иной инструмент и говорится, как и насколько хорошо в них решаются описываемые проблемы.

Читать далее ‘Книга Мартина Клеппмана «Высоконагруженные приложения»’ »

Книга Фредерика Брукса «Мифический человеко-месяц»

brooks

Не многие книги, так или иначе связанные с программированием, вспоминают через десяток лет. А уж таке книги, чтобы их переиздавали спустя почти 40 лет, это вообще уникальные. Этот пост как раз и посвящен одной такой книге, первое издание которой вышло аж в 1975 году, но на нее до сих пор ссылаются на форумах и статьях. Это книга Фредерика Брукса «Мифический человеко-месяц».

Автор книги в 60-ых годах прошлого века работал в компании IBM и участвовал в качестве менеджера в создании операционной системы OS/360 для компьютеров System/360 (это те самые компьютеры, которые были клонированы в СССР под названием ЕС ЭВМ). В этой книге автор описывает проблемы и возможные пути решения, возникающие при создании больших программных систем. В первую очередь книга описывает взгляд на разработку с точки зрения менеджера, работающего с группой программистов. Основной посыл книги — это проблема срывов сроков при создании софта, над которым трудится некоторое количество человек, больше одного-двух.

Читать далее ‘Книга Фредерика Брукса «Мифический человеко-месяц»’ »

Книга Р. С. Мартина и М. Мартина «Принципы, паттерны и методики гибкой разработки на языке C#»

Agile_C#_cover.inddНа днях дочитал книгу двух Мартинов (Роберта и Мики) «Принципы, паттерны и методики гибкой разработки на языке C#». Очень стоящая книга, охватывающая все этапы проектирования софта. Несмотря на то, что в названии фигурирует C#, и все примеры действительно написаны на нем, книгу можно (нужно) читать всем, кто занимается программированием и проектированием. К языку C# описание никак не привязано. Более того, в книге открытым текстом сказано, что изначально некоторые примеры были написаны на C++ или Java, а затем для книги переписаны на C#.

В книге описываются все этапы проектирования с учетом того, как эти этапы выполняются при так называемой «гибкой разработке». Честно говоря, я не очень глубоко разбирался в идеологии экстремального программирования (XP), но описываемая в книге гибкая разработка очень ее напоминает (и авторы ссылаются на XP): здесь и парное программирование, когда за одной клавиатурой сидят двое (у нас было такое в школе, когда не хватало на всех компьютеров 🙂 ), и программирование через тесты (сначала пишутся тесты, потом под них пишется код), и частый выпуск промежуточных работающих версий программы, и утверждение о том, что лучшая документация — это код.

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

В книгу включена одна интересная глава, которая в оригинале была оформлена в виде статьи. Эта глава описывает процесс проектирования и кодирования (эти два процесса перемешаны) программы для подсчета очков при игре в боулинг. Эту главу нужно обязательно показывать тем, кто хочет понять что из себя представляет проектирование софта, а особенно стоит показать начальству, чтобы оно прониклось как происходит рождение программы, и что написание программы — это не просто кодирование в императивном стиле (a la Pascal, Fortran и т.п.).

Читать далее ‘Книга Р. С. Мартина и М. Мартина «Принципы, паттерны и методики гибкой разработки на языке C#»’ »

Книга Джошуа Кериевски «Рефакторинг с использованием шаблонов»

Рефакторинг с использованием шаблоновДочитал на днях сабжевую книжку. Вышла она еще в 2008 году, но мне она попалась только недавно. По идее, читать ее надо было бы после книги Фаулера «Рефакторинг. Улучшение существующего кода», на которую Кириевски постоянно ссылается, но до Фаулера я пока не добрался, хотя это и не особо затруднило чтение. Вторая книга, которую лучше всего прочитать заранее, это «Приемы объектно-ориентированного проектирования. Паттерны проектирования» банды четырех.

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

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

Читать далее ‘Книга Джошуа Кериевски «Рефакторинг с использованием шаблонов»’ »