|
Алан.Дж.Перлис
|
|
Афоризмы программирования |
|
от редактора перевода. |
|
Предлагаемый перевод - скорее подстрочник,
чем отшлифованное |
произведение. В тех случаях, когда не удалось
найти подходящего |
эквивалента, оставлен английский текст. |
|
|
|
|
|
|
|
|
|
|
|
|
* * * |
|
Связанные с программированием разнообразные
феномены являются удивительно богатой питательной средой для создания метафор
индивидуальной и групповой деятельности, и наоборот, созданные человеческим
гением творения служат неисчерапемым источником метафор для тех, кто работает
в области вычислительной техники. Такая взаимосвязь общества и вычислительных
машин не нова, а невероятный рост влияния эвм (прямого и косвенного) придает
жизненность этому симбиозу, подобно вырастающему из своей одежды долговязому
подростку. |
Приведенные ниже афоризмы предстваляют собой
попытку выделить основные направления этого роста, который заостряет, сосредотачивает,
уточняет, расширяет и затуманивает наше представление о самом удивительном
из всех созданных человеком творений - об эвм. |
|
|
1. То, что для одного человека константа, для другого - переменная.
|
2. Функции задерживают связь, структуры данных стимулируют связь.
|
Мораль: Структурируйте данные как можно позднее в процессе программирования.
|
3. Синтаксический сахар вызывает рак точек с запятой.
|
4. Каждая программа является частью другой программы и редко соответствует ей.
|
5. Если программа манипулирует большим количеством данных, она делает это лишь несколькими способами.
|
6. Симметрия представляет собой концепцию, сокращающую сложность
|
(сопрограммы содержат подпрограммы); ищите ее повсюду.
|
7. Проще написать неправильную программу, чем понять правильную.
|
8. Язык программирования имеет низкий уровень, если в программах приходится уделять внимание несущественному.
|
9. Лучше, чтобы в 100 функциях использовалась одна структура данных, чем в 10 функциях - 10 структур.
|
10. Как можно раньше вступайте на проторенную стезю: Не изменяйте своим привычкам. Накапливайте идиомы. Стандартизируйте. Единственная разница (!) Между шекспиром и вами состоит не в об'еме словаря, а в количестве идиом.
|
11. Если в вашей процедуре 10 параметров, вероятно, какой-нибудь пропущен.
|
12. Рекурсия - основа программирования, поскольку она сокращает время написания программы.
|
13. Если двое пишут в точности одну и ту же программу, нужно преобразовать каждую в микрокод, и тогда они, конечно, не будут одинаковыми.
|
14. В конечном счете каждая программа устаревает, как и рококо, а потом и вовсе умирает.
|
15. Все нужно проектировать сверху вниз, за исключением фундамента, с которого нужно начинать.
|
16. У каждой программы (по крайней мере) два назначения: Что она должна делать и чего не должна.
|
17. Если при об'яснении вашей программы слушатель начинает кивать головой, его пора будить.
|
18. Не стоит писать программу без цикла и структурированной переменной.
|
19. Не стоит изучать язык, который не меняет вашего представления о программировании.
|
20. Там, где есть модульность, возможно непонимание: Сокрытие информации предполагает необходимость проверки связи.
|
21. Оптимизация препятствует эволюции.
|
22. В хорошей системе не может быть слабого языка команд.
|
23. Чтобы понять программу, необходимо отождествить себя и с машиной, и с программой.
|
24. Если бы мы писали программы с детства, то с годами, возможно, научились бы их читать.
|
25. Мысленно человек может только воспроизвести сложную информацию.
|
Движение, или течение, или изменение перспективы важнее, чем статическое изображение, каким бы красивым оно не было.
|
26. Мы всегда хотим сказать в своих программах что-то такое, что на всех известных языках можно сказать только плохо.
|
27. Как только вы поняли, как писать программу, заставьте сделать это кого-нибудь другого.
|
28. В программировании трудно найти правильную единицу времени для измерения прогресса. Некоторые соборы строились веками. Можно ли вообразить грандиозность и размер программы, на которую затратили столько времени?
|
29. Для систем аналогом пластической операции является введение в управляюший граф ребра, которое создает цикл, а не просто еще одну вершину.
|
30. Все, что мы делаем в программировании - это частный случай чего-то более общего, и зачастую мы осознаем это чересчур быстро.
|
31. Простота не предшествует сложности, а вытекает из нее.
|
32. Работу программистов следует оценивать не по их изобретательности и логике, а по полноте анализа каждой ситуации.
|
33. Одиннадцатая заповедь гласит: "Вычисляй" или "не вычисляй" - я уже не помню.
|
34. Строка - это застывшая структура данных, и повсюду, куда она передается, происходит значительное дублирование процесса. Это идеальное средство для сокрытия информации.
|
|
35. Ваять можно научить каждого, но тогда пришлось бы учить
|
микеланджело, как не делать этого. То же самое - с великими
|
программистами.
|
36. Использование программы для доказательства теоремы о четырех красках не изменит математики. Оно просто покажет, что задача, которая оставалась нерешенной в течении столетия, возможно, не так уж важна для математики.
|
37. Самая важная машина та, что "бушует" у нас в голове и все время ищет нужный ей внешний эмулятор. Стандартизация существующих машин была бы катастрофой, и потому она, вероятно, не произойдет.
|
38. Структурированное программирование потверждает закон исключенного третьего.
|
39. Реальная графика: Для описания картинки необходимо 10к слов. Но едва ли можно описать какое-либо множество из 10к слов с помощью картинок.
|
40. Программы без ошибок можно написать двумя способами, но работает
|
* третий.
|
41. Некоторые языки программирования допускают изменения, но сопротивляются прогрессу.
|
42. Перспективность программиста можно оценить, узнав его мнение о жизнеспособности фортрана.
|
43. В программных системах зачастую "кто рано встает, того удача ждет".
|
44. Иногда мне кажется, что единственным универсумом в программировании является цикл.
|
45. Цель Fетсн-ехесUте вычислений - эмуляция наших синтетических способностей, а не понимание аналитических.
|
46. Как и каламбур, программирование - это игра слов
|
47. Как сказал бы уилл роджерс: "В природе нет такой вещи, как свободная переменная".
|
48. Для дилетанта лучшим пособием по программированию служит "алиса в стране чудес" - только потому, что для него это лучшее пособие по любому предмету.
|
49. Отказ от языка ассемблера был яблоком раздора в наших садах эдема: Языки, использование которых приводит к растранжированию машинного времени, греховны. Лиспмашина сегодня позволяет своим программистам отказаться от фигового листка.
|
50. Когда мы поймем машинные системы баз знаний, все будет, как и прежде, с той лишь разницей, что кончики пальцев будут обожжены.
|
51. Появление эвм в домах не изменит ни один из них, но может возродить салуны.
|
52. Системы состоят из подсистем, подсистемы - из подподсистем и так до бесконечности - именно поэтому мы проектируем снизу вверх.
|
53. Так много хороших идей исчезает бесследно, попав в пучину семантики.
|
54. Остерегайтесь бочки меда с ложкой дегтя тьюринга, где все возможно, но все интересное слишком сложно.
|
55. Лисп-программисту известна ценность всего, но неизвестна цена чего бы то ни было.
|
|
56. Софтвер находится в постоянном напряжении. Поскольку он
|
символичен, его можно постоянно совершенствовать, но и произвольно
|
изменять.
|
57. Легче изменить спецификацию, чтобы она соответствовала программе, но не наоборот.
|
58. Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые моугт избегать ее. Гении ее устраняют.
|
59. В английском языке любое слово может быть глаголом. Разве могло бы такое быть в языках программирования?
|
60. DаNа Sсотт IS тне снURсн оF LаттIсе-WаY SаINтS.
|
61. В программировании, как и везде, ошибаться - значит рождаться заново.
|
62. В программировании инварианты эфемерны.
|
63. Когда мы пишем программы, которые "обучают", мы - обучаем, а они
|
* нет.
|
64. Часто средства оправдывают цели: Цели порождают метод, а метод выживает, даже когда разрушаются структуры, бывшие ранее целью.
|
65. Не путайте: Машины обрабатывают числа, а не символы. Мы измеряем свое понимание (и контроль) степенью арифметизации деятельности.
|
66. Легко сделать что-то переменным. Хитрость в том, чтобы измерять продолжительность постоянства.
|
67. Подумайте, сколько психических сил потрачено на поиски коренного различия между "алгоритмом" и "программой".
|
68. Если мы верим в структуры данных, мы должны верить и в независимую (и потому одновременную) обработку. Зачем же еще собирать элементы в структуру? Почему мы терпим языки, которые дают нам одно, но не дают другое?
|
69. Через пять лет у нас будет один суперязык программирования, только мы не можем установить начало этого пятилетнего периода.
|
70. Веками индейцы создавали язык знаков, чтобы сообщить друг другу самое интересное. Программисты из разных племен (фортрана, лиспа, алгола, снобола и т.Д.) Могли бы воспользоваться таким языком, который понятен и без классной доски.
|
71. Документация подобна страхованию на неопределенный срок: Она удовлетворяет всех, поскольку почти никто из подписавшихся на нее не зависит от ее преимуществ.
|
72. Адекватная самораскрутка - явное противоречие.
|
73. Не слабости, а достоинтсва языка определяют направления его изменений. Увы, язык никогда не сможет избавиться от своего эмбрионального мешка.
|
74. Возможно ли, что программное обеспечение не похоже ни на что другое; что оно создано для того, чтобы от него отказались со временем; что все дело в том, чтобы оно всегда оставалось для нас мыльным пузырем?
|
75. Благодаря своей жизненности программирование всегда испытывает отчаянную потребность в новых штампах: Банальность успокаивает нервы.
|
76. Не создатели, а пользователи должны параметризовать процедуры.
|
77. Кибернетический обмен между человеком, машиной и алгоритмом подобен игре в "музыкальные стулья": Неистовый поиск равновесия всегда оставляет одного из трех неловко стоять.
|
78. Если ваша машина говорит по-английски, ее, вероятно, сделали в японии.
|
79. Года работы над искусственным интеллектом достаточно, чтобы заставить поверить в бога.
|
80. Продолжительный контакт с машиной превращает математиков в клерков, и наоборот.
|
81. В программировании превращение очевидного в полезное - это точное определение слова "разочарование".
|
82. Мы вот-вот сможем сказать: "Сегодня наша программа доказала теорему ферма".
|
83. Какая разница между машиной тьюринга и современной эвм? Такая же, как между восхождением хиллари на эверест и открытием отеля "хилтон" на его вершине.
|
84. Девиз исследовательской лаборатории: "О том, над чем мы работаем сегодня, другие подумают только завтра".
|
85. Хотя китайцы должны были бы обожать арL, они вкладывают деньги в фортран.
|
86. Мы обманываем себя, думая, что отношение процедур к данным в активной системе базы данных можно сделать произвольно малым или даже сохранить малым.
|
87. У нас есть мини- и микро-эвм. В какую семантическую нишу попала бы пико-эвм?
|
88. Машина не виновата в том, что уравнения максвелла не подходят для проектирования электромотора.
|
89. Нельзя научиться программированию с помощью ручного калькулятора, но можно забыть арифметику.
|
90. Программирование заставило дерево зацвести.
|
91. Эвм напоминает лона чени[#] - это машина с тысячью лиц. [#] лон чени написал детектив "человек с тысячью лиц".
|
92. Эвм - это загрязнитель в его чистейшем проявлении: Ее отходы неотличимы от пищи, которую она производит.
|
93. Когда кто-то говорит: "Мне нужен язык программирования, в котором достаточно только сказать, что мне нужно сделать", - дайте ему леденец.
|
94. Интерфейсы сохраняют порядок вещей, но не ускоряют рост - функции же ускоряют.
|
95. Не имейте хороших идей, если не хотите отвечать за них.
|
96. Машины скорее обнаруживают наличие беспорядка, чем наводят порядок.
|
97. Если преподаватель настаивает на том, что вычислительная наука - это х, а не Y, посочувствуйте его ученикам.
|
98. В программировании средняя наработка на отказ постоянно уменьшается.
|
99. В симбиозе человек-машина приспосабливаться должен человек; машины этого не могут.
|
100. Никогда не кончатся об'екты программирования, пока у нас под рукой есть хотя бы одна программа.
|
101. Обработать ошибку легко: Постарайтесь исправить программу.
|
Удачный запуск тоже легко обработать: Вы решили не ту задачу. Постарайтесь исправить и эту ошибку.
|
102. Нельзя перейти от неформального к формальному с помощью формальных средств.
|
103. Чисто прикладные языки плохо применимы. (Игра слов аррLIсатIVе и аррLIсавLе).
|
104. Доказательство ценности системы - в ее существовании.
|
105. Нельзя передать сложность, а только знание о ней.
|
106. Трудно выделить смысл из строк, но это единственная "монета" связи, на которую мы можем рассчитывать.
|
107. Споры бушуют вокруг того, что такое рL/1 - двугорбый или одногорбый верблюд.
|
108. Всякий раз, когда два программиста встречаются для критического анализа своих программ, они оба молчат.
|
109. Подумать только! С помощью сверхбольших интегральных схем мы можем упаковать 100 "эниаков" в 1 кв.См.
|
110. Редактирование - это выражение того же, но другими словами.
|
111. Почему распалась римская империя? Как по-латыни автоматизация конторских работ?
|
112. Эвм приводит в замешательство вычислительную науку.
|
113. Единственная конструктивная теория, связывающая неврологию и психологию, возникает из исследований софтвера.
|
114. Для машин естественные языки не естественны.
|
115. Большинство людей находят концепцию программирования очевидной, но само программирование невозможным.
|
116. Когда изучаешь какой-либо вопрос, считаешь, что знаешь его; когда можешь писать о нем, становишься уверенней в своих знаниях; уверенность возрастает, когда можешь научить этому кого-нибудь другого; и совершенно уверен, когда начинаешь программировать.
|
117. Обучение детей программированию противоречит современной теории обучения. Разве интересно составлять планы, овладевать дисциплиной в организациии мышления, уделять внимание деталям и учиться быть самокритичным?
|
118. Если вы можете представить себе общество, где лакеями будут роботы, вы можете представить все, что угодно.
|
119. Программирование - это неестественный процесс.
|
120. Адаптировать старые программы к новым машинам обычно означает заставить новые машины работать по-старому.
|
121. Простота только мешает поиску недостижимого. Если существуют афоризмы, должны быть и метаафоризмы.
|
122. Афоризмы - это интерфейсы, по которым передается оценка и понимание.
|
123. Афоризмы параметризуют нимбы святости.
|
124. Афоризмы - это макросы, поскольку они выполняются в ходе чтения.
|
125. Афоризмы кристаллизуют несоответствия.
|
126. Афоризмы возвращают глубокое семантической значение из базы данных, которая представляет собой процедуру.
|
127. Афоризмы пропускют подробности и выделяют главное: Это превосходная документация высокого уровня.
|
128. Афоризмы скорее подобны витаминам, чем белку.
|
129. У афоризмов черезвычайно низкая энтропия.
|
130. Последний афоризм? Афоризмы нельзя ни есть, ни пить - их нужно вдыхать.
|