Чистая архитектура. Искусство разработки программного обеспечения - Роберт Мартин

- Автор: Роберт Мартин
- Серия: Библиотека программиста (Питер)
- Жанр: зарубежная компьютерная литература, программирование
- Размещение: фрагмент
- Теги: архитектура информационных систем, искусство программирования, разработка программного обеспечения, технологии разработки программного обеспечения, технология программирования
- Год: 2018
Чистая архитектура. Искусство разработки программного обеспечения
Так же как Заяц был излишне уверен в своей скорости, многие разработчики излишне уверены в своей способности оставаться продуктивными. Но ползучий беспорядок в коде, иссушающий их продуктивность, никогда не спит и не никогда бездействует. Если впустить его, он уменьшит производительность до нуля за считаные месяцы.
Самая большая ложь, в которую верят многие разработчики, – что грязный код поможет им быстро выйти на рынок, но в действительности он затормозит их движение в долгосрочной перспективе. Разработчики, уверовавшие в эту ложь, проявляют самонадеянность Зайца, полагая, что в будущем смогут перейти от создания беспорядка к наведению порядка, но они допускают простую ошибку. Дело в том, что создание беспорядка всегда оказывается медленнее, чем неуклонное соблюдение чистоты, независимо от выбранного масштаба времени.
Рассмотрим на рис. 1. 6 результаты показательного эксперимента, проводившегося Джейсоном Горманом в течение шести дней. Каждый день он писал от начала до конца простую программу преобразования целых чисел из десятичной системы счисления в римскую. Работа считалась законченной, когда программа успешно проходила предопределенный комплект приемочных тестов. Каждый день на решение поставленной задачи затрачивалось чуть меньше 30 минут. В первый, второй и третий дни Джейсон использовал
Рис. 1. 6. Время на выполнение итерации с использованием и без использования методики TDD
хорошо известную методику разработки через тестирование (Test-Driven Development; TDD). В остальные дни он писал код, не ограничивая себя рамками этой методики.
Прежде всего обратите внимание на кривую обучения, заметную на рис. 1. 6. Каждый раз на решение задачи затрачивалось меньше времени. Отметьте также, что в дни, когда применялась методика TDD, упражнение выполнялось примерно на 10 % быстрее, чем в дни без применения TDD, и что даже худший результат, полученный с TDD, оказался лучше самого лучшего результата, полученного без TDD.
Кто-то, взглянув на этот результат, может посчитать его удивительным. Но для тех, кто не поддался обману самонадеянности Зайца, результат будет вполне ожидаемым, потому что они знают простую истину разработки программного обеспечения:
Поспешай не торопясь.
И она же является ответом на дилемму, стоящую перед руководством. Единственный способ обратить вспять снижение продуктивности и увеличение стоимости – заставить разработчиков перестать думать как самонадеянный Заяц и начать нести ответственность за беспорядок, который они учинили.
Разработчики могут подумать, что проблему можно исправить, только начав все с самого начала и перепроектировав всю систему целиком, – но это в них говорит все тот же Заяц. Та же самонадеянность, которая прежде уже привела к беспорядку, теперь снова говорит им, что они смогут построить лучшую систему, если только вновь вступят в гонку. Однако в действительности все не так радужно:
Самонадеянность, управляющая перепроектированием, приведет к тому же беспорядку, что и прежде.
Заключение
Любой организации, занимающейся разработкой, лучше всего избегать самонадеянных решений и с самого начала со всей серьезностью отнестись к качеству архитектуры ее продукта.
Серьезное отношение к архитектуре программного обеспечения подразумевает знание о том, что такое хорошая архитектура. Чтобы создать систему, дизайн и архитектура которой способствуют уменьшению трудозатрат и увеличению продуктивности, нужно знать, какие элементы архитектуры ведут к этому.
Именно об этом рассказывается в данной книге. В ней рассказывается, как выглядит добротная, чистая архитектура и дизайн, чтобы разработчики могли создавать системы, способные приносить прибыль долгое время.
2. История о двух ценностях
Всякая программная система имеет две разные ценности: поведение и структуру. Разработчики отвечают за высокий уровень обеих этих ценностей. Но, к сожалению, они часто сосредоточиваются на чем-то одном, забывая про другое. Хуже того, они нередко сосредоточиваются на меньшей из двух ценностей, что в конечном итоге обесценивает систему.
Поведение
Первая ценность программного обеспечения – его поведение. Программистов нанимают на работу, чтобы они заставили компьютеры экономить деньги или приносить прибыль заинтересованной стороне. Для этого мы помогаем заинтересованным сторонам разработать функциональную спецификацию или документ с требованиями. Затем пишем код, заставляющий компьютеры заинтересованных сторон удовлетворять этим требованиям.
Когда компьютер нарушает требования, программисты вынимают свои отладчики и исправляют проблему.
Многие программисты полагают, что этим их работа ограничивается. Они уверены, что их задача – заставлять компьютеры соответствовать требованиям и исправлять ошибки. Они жестоко ошибаются.
Архитектура
Вторая ценность программного обеспечения заключена в самом названии «программное обеспечение». Слово «обеспечение» означает «продукт»; а слово «программное»… Как раз в нем и заключается вторая ценность.
Идея программного обеспечения состоит в том, чтобы дать простую возможность изменять поведение компьютеров. Поведение компьютеров в некоторых пределах можно также изменять посредством аппаратного обеспечения, но этот путь намного сложнее.
Для достижения этой цели программное обеспечение должно быть податливым – то есть должна быть возможность легко изменить его. Когда заинтересованные стороны меняют свое мнение о некоторой особенности, приведение ее в соответствие с пожеланиями заинтересованной стороны должно быть простой задачей. Сложность в таких случаях должна быть пропорциональна лишь масштабу изменения, но никак не его форме.
Именно эта разница между масштабом и формой часто является причиной роста стоимости разработки программного обеспечения. Именно по этой причине стоимость растет пропорционально объему требуемых изменений. Именно поэтому стоимость разработки в первый год существенно ниже, чем во второй, а во второй год ниже, чем в третий.
С точки зрения заинтересованных сторон они просто формируют поток изменений примерно одинакового масштаба. С точки зрения разработчиков, заинтересованные стороны формируют поток фрагментов, которые они должны встраивать в мозаику со все возрастающей сложностью. Каждый новый запрос сложнее предыдущего, потому что форма системы не соответствует форме запроса.
Я использовал здесь слово «форма» не в традиционном его понимании, но, как мне кажется, такая метафора вполне уместна. У разработчиков программного обеспечения часто складывается ощущение, что их заставляют затыкать круглые отверстия квадратными пробками.
Проблема, конечно же, кроется в архитектуре системы. Чем чаще архитектура отдает предпочтение какой-то одной форме, тем выше вероятность, что встраивание новых особенностей в эту структуру будет даваться все сложнее и сложнее. Поэтому архитектуры должны быть максимально независимыми от формы.
Наибольшая ценность
Функциональность или архитектура? Что более ценно? Что важнее – правильная работа системы или простота ее изменения?
Если задать этот вопрос руководителю предприятия, он наверняка ответит, что важнее правильная работа. Разработчики часто соглашаются с этим мнением. Но оно ошибочно. Я могу доказать ошибочность этого взгляда простым логическим инструментом исследования экстремумов.
Читать похожие на «Чистая архитектура. Искусство разработки программного обеспечения» книги

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

В книге описывается около 100 объектов самой неоцененной эпохи советской архитектуры. Это первый путеводитель по Москве, который рассматривает как целостное явление архитектуру тридцатилетия от Хрущёва до Горбачёва – от наивного модернизма оттепели до постмодернизма, включая Дворец пионеров, Останкинскую телебашню, кинотеатр «Россия», здание ТАСС, «золотые мозги» Академии наук, а также менее известные проекты, например, «Дом нового быта» или музей АЗЛК. Авторы предлагают увидеть эти

Задумались ли вы, как много можно узнать о европейской истории и развитии архитектуры, просто прогуливаясь по улицам Парижа? Перестроенный с нуля, сегодняшний Париж – результат масштабного эксперимента второй половины XIX века. Лучше всех об этом сможет поведать архитектурный гид и автор телеграм-канала «А как там в Париже?», специалист по творчеству Ле Корбюзье, Мария Троицкая. Прочитав эту книгу, вы не только начнете разбираться в архитектурных стилях, но и узнаете, какие процессы в обществе

В этом путеводителе нет ни Эрмитажа, ни Петергофа – авторы приглашают вас в Ленинград. Но Петербург в этой книге тоже есть, потому что именно он определил характер ленинградского модернизма. Модернизм был здесь не отторжением традиции, а рефлексией по ее поводу. Это модернизм традиционализма – не «воинственный», но диалогичный – чем и интересен. В эпоху космоса и джаза ленинградские зодчие продолжали мыслить ансамблями, а не отдельными объектами, что тогда казалось архаикой, но именно такой

Книга историков архитектуры Елены Овсянниковой и Николая Васильева посвящена жилому комплексу, широко известному как Дом Наркомфина, примечательному своим архитектурным решением.

Это саммари – сокращенная версия книги «Ловушка разработки. Как эффективный продакт-менеджмент создает реальную ценность» Мелиссы Перри. Только самые ценные мысли, идеи, кейсы, примеры. Эффективный продакт-менеджер – человек, который руководит командой, создающей продукты – инновационные, сложные, поражающие воображение пользователей. Он придумывает функционал, ставит задачи перед дизайнерами и разработчиками. Это так… но не совсем. Потому что с таким подходом продуктовые команды часто попадают

Архитектуру называют музыкой, застывшей в камне. Сколько же архитектурных «жанров» накопила цивилизация? Архитектура Древней Греции, готика, рококо, хай-тек: изучая архитектуру, мы узнаем историю. Эта книга поможет читателю разобраться в архитектурных стилях от ранних цивилизаций до современного периода. Издание призвано рассказать простым языком о точной и красивой науке, восполнить возможные пробелы в знаниях и побудить читателя на более глубокое изучение предмета.

«В этой книге я возьму вас в путешествие по мозгу в хронологическом порядке его развития. Путешествие, которое начинается в момент, когда женщина беременеет. Что происходит у нее в голове? Действительно ли во время беременности глупеют или это просто миф? Проявляют ли новорожденные склонность к социальному взаимодействию? Отцы тоже испытывают симптомы беременности? И если да, то как это работает? Станет ли ребенок умнее от прослушивания классической музыки? Почему по-прежнему важно уметь писать

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

Из-за глупого стечения обстоятельств я, Кира Иванова, студентка 4 курса, осталась без практики в крупной компании и подработки одновременно. Остро нуждаясь в деньгах, я согласилась пусть и на сомнительное, но все же выгодное предложение стать уборщицей в доме богатого человека. По правилам я бы никогда не встретила владельца квартиры, в которой усердно начищала до блеска полы, если бы вновь не случайность, перевернувшая не только мою жизнь, но и изменившая чужую судьбу. Но обо всем по порядку.