1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо

1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо

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

Мнение о "замысловатой и красивой сложности" является почти оксюмороном. Unix-программисты соперничают друг с другом за "простоту и красоту". Эта мысль неявно присутствует в данных правилах, но ее стоит сделать очевидной.

Дуг Макилрой.

Еще чаще (по крайней мере, в мире коммерческого программного обеспечения) излишняя сложность исходит от проектных требований, которые скорее основаны на маркетинговой причуде месяца, а не на реальных пожеланиях заказчика или фактических возможностях программы. Множество хороших конструкций были раздавлены маркетинговым нагромождением "статей контрольного перечня" — функций, которые часто вообще не востребованы заказчиком. Круг замыкается; соперники полагают, что должны соревноваться с чужими "украшательствами" путем добавления собственных. Довольно скоро "массивная опухоль" становится индустриальным стандартом, и все используют большие, переполненные ошибками программы, которые не способны удовлетворить даже их создателей.

В любом случае, в конечном результате проигрывают все.

Единственным способом избежать этих ловушек является поощрение культуры программного обеспечения, представители которой знают, что компактность красива, и активно сопротивляются "раздуванию" и сложности кода. Речь идет об инженерной традиции, высоко оценивающей простые решения и ищущей способы разделения программных систем на небольшие взаимодействующие блоки, традиции, которая борется с попытками создания программ с большим количеством "украшательств" (или даже хуже — проектирования программ вокруг "украшательств").

Таковой была бы культура, во многом похожая на культуру Unix.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.5. Какой компьютер необходимо иметь для нормальной работы XP?

Из книги WinXP FAQ (Часто задаваемые вопросы по ОС Windows XP) автора Шашков Алексей

1.5. Какой компьютер необходимо иметь для нормальной работы XP? Microsoft утверждает, что для успешной инсталляции XP необходим процессор не менее 233 мегагерц, 64 мегабайта оперативной памяти и 1.5 гигабайта свободного места на диске. Однако, для более-менее комфортной работы,


1.6.6. Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

1.6.6. Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается Под "большими программами" в здесь подразумеваются программы с большим объемом кода и значительной внутренней сложностью. Разрешая


19.2.2.2. По возможности необходимо придерживаться локальных соглашений

Из книги Wi-Fi. Беспроводная сеть автора Росс Джон

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


Глава 2. Что необходимо для беспроводной связи

Из книги Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ автора Мейерс Скотт

Глава 2. Что необходимо для беспроводной связи Беспроволная локальная сеть требует несколько иного набора компонентов оборудования, чем традиционная проводная сеть. Очевидно, что наибольшим отличием является отсутствие проводов между сетевым сервером, компьютерами


Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах Предположим, что нам нужно написать программу, которая будет посылать сообщения нескольким компаниям. Сообщения должны отправляться как в зашифрованной форме, так и в форме открытого


1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо Многие факторы приводят к усложнению программ (а следовательно, делают их более дорогими и более уязвимыми относительно ошибок). Программисты — это


1.6.6 Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается

Из книги Внедрение SAP R/3: Руководство для менеджеров и инженеров автора Кале Вивек

1.6.6 Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается Под "большими программами" в здесь подразумеваются программы с большим объемом кода и значительной внутренней сложностью. Разрешая


19.2.2.2. По возможности необходимо придерживаться локальных соглашений

Из книги Яндекс для всех автора Абрамзон М. Г.

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


Для чего необходимо явное создание объектов?

Из книги Хакинг и антихакинг автора Данилов Павел Петрович

Для чего необходимо явное создание объектов? Объекты создаются явным образом. Объявление сущностиb: BOOK3не влечет за собой создание объекта во время выполнения, это происходит, когда некий элемент системы выполнит операциюcreate bЭто может показаться удивительным. Разве


Что необходимо учитывать при оценке ERP-системы

Из книги Защита от хакеров корпоративных сетей автора Автор неизвестен

Что необходимо учитывать при оценке ERP-системы В этом разделе описываются различные ситуации, имеющие значение при оценке той или иной ERP-системы.Функциональность и возможности ERP-продуктаПри оценке поставляемых программных ERP-продуктов могут применяться те же критерии,


8.5.1. Что необходимо для игры

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

8.5.1. Что необходимо для игры Яндекс предлагает отдохнуть за онлайновыми играми. Это значит, что для игры вам потребуется браузер. Использовать можно любой из доступных, в том числе Microsoft Internet Explorer, Opera, Mozilla. Игры созданы по технологиям Macromedia Flash и Macromedia Shockwave, поэтому вам


Глава 3. Что необходимо знать для понимания хакинга

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Глава 3. Что необходимо знать для понимания хакинга В этой главе я постараюсь очень кратко наметить то, что нужно знать хакеру и грамотному системному администратору, на которого легла задача по обеспечению безопасности сети. В рамках данного руководства невозможно


Почему необходимо сообщать о проблемах безопасности

Из книги Разработка ядра Linux автора Лав Роберт

Почему необходимо сообщать о проблемах безопасности Прежде всего: почему нужно сообщать о проблемах безопасности? В конце концов, разве сами производители не тестируют свою продукцию, перед тем как предложить ее потребителям? Они обязаны гарантировать отсутствие


4.2.3. Когда необходимо отменять поток

Из книги автора

4.2.3. Когда необходимо отменять поток В общем случае не рекомендуется отменять поток, если его можно просто завершить. Лучше всего каким-то образом просигнализировать потоку о том, что он должен прекратить работу, а затем дождаться его завершения. Подробнее о способах


Необходимо наличие закрывающего тега

Из книги автора

Необходимо наличие закрывающего тега В стандарте языка HTML 4.01 допускается пропуск закрывающего тега, если программа, которая будет обрабатывать соответствующий документ, сможет «догадаться» о его наличии. Поэтому вполне допустимо опускать закрывающие теги </p> между


С чего необходимо начать

Из книги автора

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