# Программирование - это дизайн

(В оригинале - Code Is Design)

Представьте, что вы проснетесь завтра и обнаружит, что строительная индустрия непостижимым образом совершила скачок вперед. Миллионы дешевых и быстрых роботов могут изготавливать материалы из воздуха, не требуют внешнего источника энергии для работы и могут сами себя ремонтировать. Если им выдать непротиворечивый план строительства, эти роботы могут выполнить работу самостоятельно, без участия человека, с весьма незначительной себестоимостью.

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

Возможность прогнозировать сроки практически исчезнет. Стоимость строительства гораздо проще расчитать, чем стоимость дизайна. Мы примерно знаем, сколько стоит один кирпич, и сколько кирпичей нам понадобится. Если же предсказуемая часть задачи будет стремиться к нулю, на первый план выйдет непредсказуемая – дизайн. Результаты будут получаться быстрее, но за практически непредсказуемое время.

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

Отдельные жизненно важные проекты будут делаться более основательно, но в большинстве случаев заказчикам придется научиться жить с незаконченным дизайном. Компании ведь всегда смогут послать своих роботов «подлатать» покосившееся строение. Все говорит о том, что (как бы это не выглядело нелогичным) серьезное снижение стоимости строительства повлечет за собой столь же серьезное снижение качества.

Думаю, не будет сюрпризом, если вы найдете аналогию с программированием. Если мы допустим, что программирование – это дизайн (креативный процесс, а не рутинная работа), то это хорошо объяснит кризис в отрасли. У нас кризис дизайна: требования к качеству дизайна превосходят наши возможности. Принуждение использовать незавершенный дизайн слишком высоко.

К счастью, эта модель также дает подсказку, что делать. Физическая модель – это автоматизированное тестирование. Программа не завершена до тех пор пока не будет протестирована. Усовершенствованные языки и практики дизайна также дают надежду. И наконец, один неизбежный факт: отличный дизайн делается отличными дизайнерами, посвятившими себя этой профессии. И программирование не является исключением.

Автор оригинала - [Ryan Brush](http://programmer.97things.oreilly.com/wiki/index.php/Ryan_Brush)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_69.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
