Эпилог
Если бы люди могли учиться у истории, какие уроки она
могла бы нам преподать! Но страсть и компания слепят
наши очи, и свет, даваемый опытом, — как кормовой огонь,
освещает только волны позади нас.
Сэмюэль Тейлор Колридж. Воспоминания
Компьютерный мир постоянно изменяется, причем во все возрастающем темпе.
Программисты вынуждены овладевать новым: новыми языками, новыми
инструментами и новыми системами и, конечно, изменениями, не совместимыми со
старым. Программы становятся все объемнее, интерфейсы все сложнее, а сроки все
жестче.
Однако есть некоторые неизменные моменты, позволяющие осмыслить уроки
прошлого, что может помочь в
будущем. Основные вопросы, освещенные в этой
книге, базируются как раз на этих неизменных концепциях.
Простота и ясность — первые и наиболее важные среди этих основ, поскольку все
остальное так или иначе из них следует. Делайте все самым простым способом.
Выбирайте наиболее простой алгоритм, который выглядит достаточно быстрым, и
наиболее простую структуру
данных, позволяющую решить поставленную задачу;
объединяйте их простым, понятным кодом. Не усложняйте ничего до тех пор, пока в
этом не возникнет настоятельной необходимости, — например, пока замеры
производительности не покажут неудовлетворительных результатов. Интерфейсы
должны быть ограничены и лаконичны, по крайней мере до тех пор, пока не станет
совершенно очевидно, что преимущества от
нововведений перевесят недостатки
дополнительного усложнения.
Универсальность нередко идет рука об руку с простотой, поскольку является, по
сути, возможностью решить проблему раз и навсегда (так сказать, "в общем виде"), а
не возвращаться к ней снова и снова для рассмотрения специфических случаев.
Зачастую это является и хорошим подспорьем для обеспечения переносимости:
лучше
найти одно общее решение, которое будет работать во всех системах, чем
разбираться в отличительньгх особенностях каждой системы.
Далее стоит назвать эволюцию. Невозможно написать совершенную трограмму с
первой попытки. Глубокое и всестороннее осознание проН элемы рождается только
из сочетания размышлений и опыта; с помощыо чисто умозрительных заключений не
удастся создать хорошей сиетемы
, как не удастся сделать этого и чистым
хакерством. Очень важна реакция пользователей; наиболее эффективным будет
цикл развития системы, включающий в себя создание прототипа,
экспериментирование, обратную связь с пользователем и дальнейшие
усовершенствования. Программы, которые мы пишем для себя, часто не
развиваются; достаточным образом; большие программы, которые мы покупаем у
других, изменяются
слишком быстро без нужного улучшения.
Интерфейсы являются одним из камней преткновения в программировании, и
аспекты, связанные с ними, проявляются во многих местах. Наиболее очевидный
случай — библиотеки, но существуют еще интерфейсы между программами и между
пользователями и программами. В проектировании интерфейсов идеи простоты и
универсальности имеют особое значение. Делайте интерфейсы как можно
более