За эти 7,5 лет, что я занимался работой по созданию крупного программного обеспечения, мне еще довелось провести для высших руководящих работников серию семинаров, посвященных основным вопросам программирования. Из 7,5 лет руководства группой программистов я вынес мучительный опыт. Преподавательская деятельность научила меня преподносить идеи другим, но, что более важно, я понял, какие из концепций вычислительной техники и программирования кажутся наиболее странными непосвященным, т. е. администраторам. Этот второй мой опыт очень ценен. Вещи, которые я считал заведомо ясными и простыми, на самом деле не были таковыми.
В течение последних 4 лет я был председателем консультационной фирмы по разработке и использованию программного обеспечения. Мои коллеги и я разрабатывали планы, давали советы, проводили ревизии и вырабатывали требования и для небольших систем, и для самых крупных из когда-либо созданных. Мы проделывали это и для министерства обороны США и некоторых его подразделений, и для больших коммерческих фирм. Выводы, сделанные из подобной деятельности, собраны в тексте книги.
Только некоторые из идей, встречающихся в книге, принадлежат лично мне; я мог привлечь к работам наилучших специалистов в данной области за последние двадцать пять лет.
В частности, я хочу признать огромный вклад Эндрью Ферентино, моего коллеги по работе в IBM, а теперь также по фирме Software Architecture and Engineering, Inc. Интуиция Энди, его глубокое понимание программного обеспечения, его определения помогли сформироваться многим идеям этой книги. Многие цифры и понятия принадлежат ему.
По мнению многих, выражение: «May you live in interesting times» [2] «Желаю вам жить в интересное время» (англ.)
считается проклятием. Проклятие это или благое пожелание — это вопрос философский, и мы не будем его здесь рассматривать, но я уверен, что последнюю четверть века, а также последующий десяток лет человечество запомнит как время захватывающих перемен в области автоматизации интеллекта. Мы должны быть счастливы, что нам довелось жить в это время открытий и достижений.
Я хочу также поблагодарить Лауру-Анну Чарлз и Жанет Далчер за помощь, оказанную в подготовке книги к печати.
Вашингтон, Джозеф М. Фокс
Глава 1
Что такое программное обеспечение?
Необыкновенные достижения вычислительной техники привели к тому, что термин «программное обеспечение» стал толковаться чрезвычайно широко. Столь разнообразна эта область, что утверждения, кажущиеся противоречащими другим, безусловно верным утверждениям, также могут оказаться верными.
Программное обеспечение становится все более значительным, сложным и опасным. Программное обеспечение все время упрощается, уменьшается в размерах и все легче поддается управлению. Оба утверждения верны, поскольку развитие программного обеспечения идет одновременно по двум совершенно разным направлениям. Прежде чем говорить о программном обеспечении нетривиальные вещи, следует выяснить, на какие категории оно подразделяется. Ключом к пониманию проблемы должен стать терминологический словарь.
Важные для себя вещи или абстрактные понятия люди всегда обозначали особыми словами.
Снег |
У эскимосов в словаре 20 слов; у ацтеков — ни одного |
Коровья шкура |
У гаучо (южноамериканские ковбои) — 30 слов |
То, что летает |
В языке хапи одно слово служит одновременно для обозначения комара и самолета |
В этом отношении область программного обеспечения находится в печальном положении. Слова, которые в нем используются, расплывчаты и неоднозначны.
Определение программы
Программа — это последовательность команд или операторов, которая после декодирования ее вычислительной машиной либо вычислительной машиной и транслирующей программой может заставить эту машину выполнить некоторую работу.
В этом определении, которое мы не раз будем исследовать и в дальнейшем, много коварства. Слова команда и оператор подразумевают наличие точного языка в отличие от приказа пользователя. Приказы пользователя, казалось бы, нигде не запоминаются, по крайней мере до поры до времени, а операторы и команды остаются в рабочей программе, которую можно многократно использовать.
В гл. 8 мы будем исследовать это различие между пользователем и программистом, ведь это одна из тех областей, которая может в будущем повлиять на повышение производительности труда при разработке программного обеспечения.
Читать дальше