воскресенье, 8 ноября 2015 г.

отзыв о "Scrum and XP from the tranches"

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

Во втором издании автор пересматривает изложенное ранее с точки зрения опыта, который он приобрел за 5 лет после первого издания. При чем это сделано не в стиле молчаливого редактирования с исчезающими старыми и появляющимися новыми абзацами, а в стиле диалога с читателем. Т.е. автор не просто меняет контент, а дополняет и корректирует его прямо указывая "вот это ошибка", "а вот здесь вот можно сделать лучше следующим способом". Именно эта манера пересмотра и анализа старого материала выгодно выделяет эту книгу среди остальных книг посвященных Scrum.
Т.е. вместо фразы "надо делать так", читатель получает "надо делать так, потому что", "а ещё можно вот так" и "в целом так вроде бы и надо по стандарту, но не рекомендую, потому что"

Стоит так же отметить, что данная книга сосредоточена на тех вещах, которые изначально закладывались в него Джефом Сазерлендом, а не на вещах которые привносились в него евангелистами от IT. Т.е. книга фокусируется не на процессах Скрама, которые делают его инженерным фреймворком, а на процессах, которые делают его организационным фреймворком. Т.е. на процессах планирования и ретроспективы, сбора требования и наличия готового продукта, а также на коммуникации. А ведь именно эти процессы и позволяют использовать Scrum как в организациях(скрам скрамов), так и личной жизни(вот пример с адаптацией Скрама для управления временем http://s-kalinin.blogspot.com/2015/10/scrum.html)
И именно поэтому, несмотря на наличие в названии XP, собственно XP и его инженерным практикам уделена только небольшая глава.

В целом книга является must-read для тех кто думает о внедрении, внедряет или уже внедрил Scrum на проекте или в компании как опорная книга и пинок для ретроспективы накопленого опыта.

P.S.
А к TDD после накопления опыта автор рекомендует относиться осторожно - ибо не серебрянная пуля.

P.P.S.
Электронная версия доступна бесплатно www.infoq.com/minibooks/scrum-xp-from-the-trenches-2. На русский переведена только старая редакция :(

книга API design for C++

Прочитал в августе API design for C++ by Martin Reddy, книгу которая оставила после себя странное впечатление. Осмысление этого впечатления заставило отложить написание отзыва на 2 месяца.

У книги есть как явные плюсы: например то, что автор опирается на свой опыт работы в различных проекта, так и явные минусы: например то, что книга была написана перед выходом стандарта C++11, слабо учитывает новые решения, которые появились с этим стандартом и судя по всему не получит новой редакции, которая адаптирует её к новым стандартам C++11 и C++14.

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

Глава 1 является чисто вводной и объясняет что такое API, какая специфика его в C++, чем мы платим и за что. Содержит довольно большое количество "воды", но основные моменты выписано чётко, что очень радует.
Глава 2: Качества. Тут автор описывает качества хорошего API почти не останавливаясь на специфике для C++. Встречал я и более краткие и более смысло-плотные раскрытия этой темы, а потому эта глава выглядит больше как дань научной степени полученной автором в своё время. По крайней мере, шаблон подачи материала классический для диссертационной работы и "воды" опять же много...
Глава 3: Паттерны проектирования. А вот эта глава от воды по сути избавлена. Разбираются только шаблоны, которые активно используются в API, и рассматриваются только специфика их C++ применения. Т.е. pimpl, singleton, factory, proxy, и т.п. При этом каждый паттерн разбирается со всех сторон - что получаем, чем платим, возможные варианты применения и альтернативные решения. Для меня эта глава стала основной ценностью этой книги.
Глава 4: Архитектура. Мартин Редди пересказывает принципы проектирования архитектуры программных систем. При чём эти принципы не являются специфичными для C++ или для API design. Странная глава, которая так и не позволила понять зачем она в этой книге... 
Глава 5: Стили. Короткая глава, которая вводит класификацию API и предлагает некоторые неочевидные варианты. По хорошему должна быть в первой тройке глав.
Глава 6: Использование C++ и Глава 7: Производительность. Комбинация style guide'ов и знаний, которыми человек, который взялся за проектирование C++ API уже должен обладать. Главы ни о чем и полезны разве что списком утилит, которые можно использовать для анализа производительности.
Глава 8: Версионирование. А вот эта вот глава довольна неплохая, хотя и содержит сколько-то воды. Раскрывает подходы к построению версий, выделению веток и рассматривает процесс разработки API в течении длительного периода времени, т.е. не только на этапе новой разработки, но и на этапе maintenance. В целом она является одной из опорных глав этой книги.
Глава 9: Документация. Смысл в главе есть, но зачем так много примеров и воды?!
Глава 10: Тестирование. Довольно неплохая глава, которая даёт представление об основных фреймворках, подходах в тестировании API, ограничениях налагаемых языком и методами их обхода. Заодно объясняет зачем это делать надо и даёт обзор связанных областей(coverage, continuous build, bug tracking etc)
Глава 11: Скриптование. Интересная глава, которая внятно объясняет зачем нам поддержка других языков в C++ API, чем мы за это платим, как это получить в C++ различными методами и какие преграды есть на этом пути и способы их обхода.
Глава 12: Расширяемость. Термин этот довольно расплывчатый, и к нему относят многое: расширяемость через внешние модули, расширяемость через архитектуру и т.д. Должен признать, что Мартин Редди не сосредотачивается на каком-то одном толковании, а разбирает большинство возможных толкований, при чем рассматривает их с разных сторон и очень качественно.

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

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