Книга Джона Оустерхаута Философия дизайна программного обеспечения, 2-е издание (APoSD) — это увлекательное чтение, в котором содержится ряд моментов для размышлений, которые следует учитывать при разработке и создании программного обеспечения. Это краткий и хорошо построенный текст, написанный в легком для восприятия разговорном стиле.
Как указывает Джон: Эта книга об одном: сложности. Прочитав книгу вскоре после прочтения Разработка программного обеспечения в Google (SWE@Google), я почувствовал, что книга Джона очень хорошо исследует концепцию интегрированного во времени программирования на уровне кода. В то время как SWE@Google исследовал многочисленные аспекты разработки программного обеспечения, APoSD предлагает отличный набор практик, предназначенных для индивидуальных участников (IC), стремящихся обеспечить, чтобы их код был разработан и реализован таким образом, чтобы сделать его читабельным и, надеюсь, более простым.
В своих разделах APoSD исследует подходы к постоянному снижению сложности кода. Как указывает Джон, со временем сложность возрастает и создает скрытые издержки для организаций, желающих двигаться быстрее. Таким образом, он выступает за то, чтобы тратить 10-20% времени разработки на устранение сложности в кодовой базе — например, при исправлении ошибки вы замечаете, что часть кода трудно читается или неуклюжа, поэтому потратьте некоторое время на добавление комментариев или рефакторинг. . Этот подход плавно переходит от тактического мышления к стратегическому, с той целью, что это обеспечит отдачу с точки зрения общего прогресса. Мне очень понравилось описание «тактического торнадо», и большинство читателей уже видели коллегу, соответствующего профилю.
Раздел 19 включает обсуждение (среди прочего) гибкой разработки, модульных тестов и разработки через тестирование. Они меня очень заинтересовали, подчеркнув, что итеративный подход, ориентированный на функции, может привести к сложности, если сосредоточиться на уровне функций, а не на общем дизайне. Этот раздел дает полезную «материну на мельницу» с точки зрения подхода к гибкой разработке и хорошо связан с разделом 11 «Дизайн дважды» как подход к поиску простоты и абстракции.
Пять или около того разделов посвящены стилистическим аспектам кода, и мне очень понравилось внимание к роли комментариев в коде. Многие считают, что хорошо сформированный код является самодокументируемым, но я считаю, что синтаксис кода — это ограниченный холст для записи повествования, которое происходит вокруг кодовой базы. Простой пример может заключаться в том, почему используется конкретный процесс — возможно, тот, что указан в коде, был выбран из нескольких вариантов — и будущим читателям кода будет полезно знать об этом. Такие читатели также могут сэкономить время, не переходя к касательной «наверняка алгоритм x будет работать здесь лучше», если эта тема уже пройдена. Хорошо продуманные комментарии улучшают читаемость базы кода и помогают тем, кто придет после нас, а Джон вникает как в обоснование комментариев, так и в подходы к их написанию.
Хотя в книге используются краткие примеры кода, они служат скорее для иллюстрации описываемого подхода, чем для исчерпывающего описания. Это обеспечивает основу для представленной философии, а сопутствующие «красные флажки» выделяют ключевые элементы, на которые следует обратить внимание в кодовой базе. В этом смысле красные флажки, возможно, могли бы стать частью общего словаря для проверки кода, упрощая классификацию проблемы — например, мне нравится красный флажок «Неочевидный код», чтобы выделить, где программисту может потребоваться добавить некоторые комментарии или, возможно, несколько сломать процесс.
Различные принципы дизайна красиво собраны в список в конце книги и сопровождаются кратким изложением красных флажков.
«Философия дизайна программного обеспечения» — это небольшая книга, которая не перегружает читателя встроенными шаблонами и огромными блоками кода для проверки и интерпретации. Вместо этого основное внимание уделяется подходу к разработке программного обеспечения с целью снижения сложности. Хотя слово «философия» может наводить на мысль, что это абстрактный текст, на самом деле это практический текст. Любой разработчик должен найти текст доступным и сразу же начать использовать принципы дизайна.
Джон обсуждал книгу на нескольких форумах, в том числе: