К основному содержимому
#Software

Intentional Code - Minimalism in a World of Dogmatic Design - David Whitney - NDC Porto 2023

#Software #Architect #SystemDesign #Philosophy #SoftwareArchitecture #Patterns

Занимательное выступление David Whitney, head of architecture в компании New Day, на тему дизайна и проектирования софта, в котором прикольные иллюстрации и интересные мысли, которые можно обобщить до следующего

  • Шаблоны проектирования (design patterns), бум которых начался с книги "Design Patterns" от банды четырех (Gang of Four). Конкретно в этой книге шаблоны были разложены на категории creational, structural, behavioral и каждый шаблон описывал типовое решение стандартной проблемы, с которыми часто сталкивались авторы книги. Но это не было призывом к стандартизации всего и вся. Скорее это был общий язык и набор идиом программирования, которые могут быть полезны
  • На книгу тему паттернов проектирования в IT большое влияние оказал Кристофер Александер, настоящий архитектор от строительства, а не из IT, который написал знаковые книги "Notes on the Synthesis of Form" и "A Pattern Language: Towns, Buildings, Construction" (стоит у меня на полке и ждет своего часа)
  • Виды архитектур: hexagonal architecture (port& adapters), clean architecture, 12 factor app. Автор обсуждает эти подходы, а потом говорит, что в разработке софта есть есть не только шаблоны и виды архитектур
  • Давид вспоминает книгу Кнута "Literate programming" ("Грамотное программирование"), где программа фактически пишется на естественном языке, а инструкции входит в неё в форме макроподстановок и кода на языках программирования. Эту концепцию предложил Кнут в 1981 году и использовал при создании TeX. В этой концепции подчеркивается важность формы, потока и ритма кода, а также его смысла и цели существования. Причем код должен быть написан с уважением к читателю:)
  • Сложность софта - многие программы чрезмерно сложны, потому что они не формируют правильные абстракции для читателей и им легко потеряться в инфраструктурных моментах и схеме организации кода. Автор выдвигает такой тезис

The complexity of your app should be at most as complex as the problem space it inhabits, and no greater

  • Эти подходы к управлению сложностью стоит использовать при дизайне своего приложения и проектировании качественных API
  • Автор вспоминает "Чистый код" ("Clean code") дядюшки Боба и говорит, что много лет назад - это была полезная и прорывная книга, но с тех пор она устарела, как устарел и догматичный подход Роберта Мартина, который фиксирует количество строк в функции. Честно говоря, я согласен с такой оценкой книг Роберта Мартина:)
  • Дальше автор вспоминает крутую книгу "A philosophy of software design" Джона Остерхута и дальше идет по концепциям из нее. Это крутая книга, которую мы разбирали в рамках клуба Code of Architecture и которую я очень рекомендую к прочтению. И вот какие концепции из этой книги автор освещает -- Сложность софта может иметь накопительный эффект - маленькие уступки на которые мы идем при написании кода приводят к большому техдолгу -- Shallow и deep modules - если мы используем абстракции, то они должны быть глубокими и скрывать сложность, а не поверхностными, которые с этим никак не помогают -- Разработка софта - это компромиссы, что зависят от контекста -- Проектировать софт надо так, чтобы он был готов к изменениям в будущем

В принципе, в выступлении есть еще много умных мыслей, так что я рекомендую посмотреть его в оригинале:)

#Software #Architect #SystemDesign #Philosophy #SoftwareArchitecture #Patterns