Занятие программированием “отвечает глубокой внутренней потребности в творчестве и удовлетворяет чувственные потребности, которые есть у всех у нас”, доставляя пять видов радости:
- Радость, получаемая при создании чего-то своими руками.
- Удовольствие создавать вещи, которые могут быть полезны другим людям.
- Очарование создания сложных головоломных объектов, состоящих из взаимодействующих движущихся частей.
- Радость, получаемая от неизменного узнавания нового, неповторяемости задачи.
- Удовольствие от работы со столь податливым материалом – чистой мыслью, который, тем не менее, существует, движется и работает так, как не могут словесные объекты.
В то же время этому занятию присущи и огорчения:
- При изучении программирования труднее всего привыкнуть к требованию совершенства.
- Постановка задач осуществляется другими людьми и приходится зависеть от вещей (особенно, программ ), которые нельзя контролировать; полномочия не соответствуют ответственности.
- Страшно только на словах: фактическая власть приобретается как следствие успешного выполнения задач.
- Программный проект приближается к окончательному виду тем медленнее, чем ближе окончание, хотя кажется, что к концу сходимость должна быть более быстрой.
- Программному продукту грозит устаревание еще до его завершения. Настоящий тигр – не пара бумажному, если требуется реальное использование.
Исправление одной ошибки с большой вероятностью (от 20 до 50 процентов) вносит другую.
После каждого исправления нужно прогнать весь набор контрольных примеров, по которым система проверялась раньше, чтобы убедиться, что она каким-то непонятным образом не повредилась.
Все исправления имеют тенденцию к разрушению структуры, увеличению энтропии и дезорганизации системы. Даже самое искусное сопровождение программы только отдаляет момент повержения ее в состояние неисправимого хаоса, выходом из которого является повторное проектирование с самого начала.
Концептуальная целостность является важнейшим условием качества продукта. Наличие системного архитектора есть важнейший шаг в направлении концептуальной целостности. Эти принципы ни в коей мере не ограничиваются разработкой программного обеспечения, а справедливы при проектировании любой сложной конструкции, будь то компьютер, самолет, стратегическая оборонная инициатива или система глобальной навигации. После преподавания в более чем 20 лабораториях разработки программного обеспечения я стал настаивать, чтобы группы учащихся, даже из четырех человек, выбирали менеджера и отдельно – архитектора. Разделение функций в таких маленьких группах может показаться несколько чрезмерным требованием, но, по моим наблюдениям, это оправдано и способствует достижению успеха.
“главная задача менеджера программного проекта – создать организационную структуру и рабочий процесс, способствующий творчеству и инициативе, а не подавляющие их”
“В помещениях наиболее продуктивных программистов тише, они более личные, лучше защищены против непрошеного вторжения, и они просто больше …Понимаете ли вы, что покой, пространство и уединенность способствуют лучшей работе ваших теперешних работников или (с другой стороны ) способствует привлечению и сохранению лучших работников?”