|
Афоризмы программирования
От редактора перевода.
Предлагаемый перевод - скорее подстрочник, чем отшлифованное
произведение. В тех случаях, когда не удалось найти подходящего
эквивалента, оставлен английский текст.
* * *
Связанные с программированием разнообразные феномены являются
удивительно богатой питательной средой для создания метафор индивидуальной
и групповой деятельности, и наоборот, созданные человеческим гением
творения служат неисчерапемым источником метафор для тех, кто работает в
области вычислительной техники. Такая взаимосвязь общества и
вычислительных машин не нова, а невероятный рост влияния эвм (прямого и
косвенного) придает жизненность этому симбиозу, подобно вырастающему из
своей одежды долговязому подростку.
Приведенные ниже афоризмы предстваляют собой попытку выделить
основные направления этого роста, который заостряет, сосредотачивает,
уточняет, расширяет и затуманивает наше представление о самом удивительном
из всех созданных человеком творений - об эвм.
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. Последний афоризм? Афоризмы нельзя ни есть, ни пить - их нужно
вдыхать.
|