Эпиграммы о Программировании
перевод

Недавно мы с
killnicole (вся вычитка и коррекция),
nlugovoi,
d9k,
cleg и
ruguevara (все плюсы — этим товарищам, я всего лишь предложил текст) закончили перевод легендарного, самого цитируемого в программистском сообществе, не устаревающего эссе
«Epigrams on Programming». С результатом перевода можно ознакомиться под катом.
Феномены, окружающие компьютеры, разнообразны, и дают удивительно богатую базу метафор об индивидуальных и групповых действиях. С другой стороны, обычный человек предоставляет неиссякаемый источник метафор для тех из нас, кто тесно связан с рассчетами. Такие взаимоотношения между обществом и устройством не новы, но невероятный рост влияния компьютеров (как реальный, так и предполагаемый) предоставляет этой симбиотической зависимости жизнеспособность, как хулиганистая молодежь вырастающая из одежды во время бесконечного созревания.Эти эпиграммы следуют попытке охватить некоторые измерения этого потока воображения, заостряют, фокусируют, очищают, расширяют и проясняют наш взгляд на наиболее примечательное из всех человеческих изобретений — компьютер.
- Что для одного константа, для другого — переменная.
- Функции откладывают связывание, структуры данных к нему приводят. Мораль: в процессе программирования структурируйте данные попозже.
- Синтаксический сахар вызывает рак точек с запятой.
- Каждая программа — это часть другой программы, обычно — неподходящая часть.
- Если программа манипулирует большими объёмами данных, она делает это малым количеством способов.
- Симметрия уменьшает сложность (надпрограммы включают подпрограммы). Ищите её везде.
- Проще написать неправильную программу, чем понять правильную.
- Язык программирования является низкоуровневым, когда написание программы на нём требует внимания к незначительному.
- Лучше 100 функций, оперирующих одной структурой данных, чем 10 функций, оперирующих десятью структурами.
- Возьмите следующий совет за привычку как можно скорее: делайте одинаковые процессы одинаково. Аккумулируйте идиомы. Стандартизируйте. Единственное различие (!) между Шекспиром и вами в том, что размер его списка идиом не равнялся размеру его словарного запаса.
- Если у вас есть функция, принимающая 10 параметров, — возможно, вы что-то упустили.
- Рекурсия есть корень компьютерной науки, поскольку она жертвует описанием ради времени.
- Если два человека напишут абсолютно одинаковые программы, после компиляции они таковыми не будут.
- В процессе длительной разработки любая программа сначала становится пышной и вычурной, а потом обращается в руины.
- Всё должно строиться сверху-вниз, кроме построек «на первое время».
- У каждой программы есть (как минимум) два назначения: первое — для чего она пишется и второе — для чего нет.
- Если слушатель кивает головой, когда вы ему объясняете свою программу, разбудите его.
- Программа без циклов и структурированных переменных не стоит написания.
- Язык, который не изменит то, как вы размышляете о программировании, не стоит знания.
- Везде, где есть модульность, есть потенциальная возможность неверного понимания: сокрытие информации вызывает необходимость проверять взаимодействие.
- Оптимизация затрудняет развитие.
- У хорошей системы не может быть слабого скриптового языка.
- Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Возможно, если бы мы писали программы с детства, то взрослыми были бы способны их читать.
- Сложную информацию можно представить только в уме. Подобно зрению, движение или течение или изменение взгляда важнее, чем неподвижная картинка, не важно, насколько она красива.
- Всегда найдутся вещи, которые бы мы хотели «сказать» в своих программах, но которые на всех известных языках выглядели бы бедно.
- Поняв однажды как писать программу, найди другого, чтобы он её написал.
- При разработке тяжело найти адекватный отрезок времени для измерения прогресса. Некоторые соборы строились столетиями. Можете ли вы представить себе грандиозность и возможности программы, разработка которой заняла бы столько времени?
- Для систем аналогом подтяжки лица будет добавление в управляющий граф ребра, которое создаёт цикл, а не просто дополнительного узла.
- В программировании всё, что мы делаем, — это особый случай чего-то более общего, и зачастую мы узнаём это слишком быстро.
- Простота не предшествует сложности, а следует за ней.
- О программистах стоит судить не по их изобретательности и логике, а по полноте их анализа прецедентов.
- Одиннадцатой заповедью было «Вычисляй!» или «Не вычисляй!» — я забыл, что из двух.
- Строка — это застывшая структура данных, и везде, где она передаётся, много дупликации процесса. Это превосходное средство для сокрытия информации.
- Каждого можно научить ваянию: Микеланджело нужно было бы учить, как этого не делать. Так и с великими программистами.
- Использование программы для доказательства проблемы 4 красок не изменит математику, а просто показывает, что теорема, вызов века, вероятно, не важна для математики.
- Наиболее важный компьютер — это тот, который безумствует в нашем черепе, и всегда ищет тот удовлетворительный внешний эмулятор. Стандартизация реальных («биологических» — прим переводчиков) компьютеров была бы катастрофой — и поэтому, вероятно, не произойдёт.
- Структурное программирование поддерживает закон исключенной путаницы.
- О графике: изображение стоит 10К слов — но только тех, которые его описывают. Вряд ли какой-либо набор 10К слов может быть адекватно описан изображениями.
- Есть только два способа писать безошибочные программы; из них работает только третий.
- Некоторые языки программирования умудряются впитывать изменения, но противостоять прогрессу.
- Вы можете измерять перспективность программиста, следя за его отношением к долгоживучести ФОРТРАНА.
- В программных системах зачастую именно ранняя пташка и создаёт червяка.
- Иногда мне кажется, что единственная универсальная вещь в области компьютеризации — это цикл «получить-выполнить».
- Цель компьютеризации — эмуляция наших способностей к синтезу, а не понимание наших способностей к анализу.
- Подобно каламбуру, программирование — это игра слов.
- Как сказал бы Вилл Роджерс, «Нет такой вещи, как свободная переменная»
- Лучшая книга по программированию для неспециалиста — это «Алиса в Стране Чудес»; но только потому, что она вообще самая лучшая книга о чем-либо для неспециалиста.
- Отказ от ассемблера был яблоком в нашем Эдемском Саду: языки, которые расточительно используют циклы машинного времени — греховны. ЛИСП-машина теперь позволяет программистам отказаться от лифчиков и фиговых листков.
- Когда мы поймём системы, основанные на знаниях, всё будет как и прежде, за исключением того, что теперь наши отпечатки пальцев будут подписаны.
- Появление компьютеров в домах не изменит ни то, ни другое, но может возродить бар на углу.
- Системы состоят из подсистем, и подсистемы состоят из подсистем, и так далее до бесконечности, и именно поэтому мы всегда начинаем сначала.
- Столь многие идеи канули в безвестность с тех пор, как они погрузились в плавание по заливу семантики.
- Берегитесь Тьюринговой трясины, где всё возможно, но ничто полезное нельзя сделать легко.
- ЛИСП-программист знает значение всего, но не знает стоимости вызова чего-либо.
- Программное обеспечение находится под постоянным давлением. Будучи символичным, оно сколь угодно способно к совершенствованию, но так же оно и сколь угодно изменчиво.
- Проще подогнать спецификацию под программу, чем наоборот.
- Дураки игнорируют сложность. Прагматики страдают от сложности. Кому-то удаётся избежать сложности. Гении от сложности избавляются.
- В английском из любого слова можно сделать глагол. Если бы так было и в наших языках программирования.
- Дана Скотт — это Церковь Святых Тернистого Пути.
- В программировании, как и во всём другом, совершить ошибку значит переродиться.
- В вычислительной технике инварианты эфемерны.
- Когда мы пишем программы, которые «учатся», оказывается, что учимся мы, а не они.
- Часто это значит, что оправдания заканчиваются: цели продвигают технику, а техника выживает, даже если структура целей терпит крах.
- Не заблуждайтесь: компьютеры оперируют числами, не символами. Мы можем измерить наше понимание (и контроль) только в той мере, в которой мы можем подсчитать активность.
- Сделать что-то изменяемым легко. Фокус в том, чтобы управлять длительностью постоянства.
- Подумайте о всей той психической энергии, потраченной на поиски фундаментального различия между «алгоритмом» и «программой».
- Если мы верим в структуры данных, мы должны верить и в независимую (следовательно, одновременную) обработку. Для чего же ещё тогда мы собираем объекты в структуры? Почему мы терпимы к языкам, которые дают нам одно без другого?
- За период в 5 лет мы получаем один великолепный язык программирования. Вот только мы не можем управлять тем, когда этот пятилетний период начнётся.
- Веками индейцы разрабатывали знаковое письмо для общения об интересующих феноменах. Программисты из разных племён (ФОРТРАН, ЛИСП, АЛГОЛ, СНОБОЛ и т.д.) могли бы использовать такой, который не требовал бы от них перевозить настенные доски на своих пони.
- Документация — как срочное страхование: она удовлетворяет всех, потому что практически никто из подписавшихся на нее, не зависит от её выгод.
- Адекватная самозагрузка содержит противоречие в самом названии.
- Градиентом изменения языка управляют не его слабости, а его сильные стороны: увы, язык никогда не сбежит из своего зародышевого мешка.
- Возможно ли, что программное обеспечение — это что-то совершенно иное, и оно рано или поздно должно быть отбраковано? Если так, тогда нет никакого смысла видеть в нем что-то большее, чем мыльный пузырь.
- Из-за своей живучести область вычислительной техники всегда в безнадёжном поиске новых клише: банальности успокаивают наши нервы.
- Именно пользователи должны определять параметры процедур, а не их создатели.
- Кибернетический обмен между человеком, компьютером и алгоритмом похож на игру в стулья с музыкой: неистовый поиск баланса всегда с простотой оставляет одного из трёх стоять больным.
- Если ваш компьютер говорит по-английски, то, скорее всего, он сделан в Японии.
- Года, потраченного на разработку искусственного интеллекта, хватит любому, чтобы поверить в Бога.
- Продолжительный контакт с компьютером делает математиков клерками, и наоборот.
- В компьютеризации превращение очевидного в полезное — это живое определение слова «расстройство».
- Мы на краю: сегодня наша программа доказала следующую после последней теорем Ферма!
- Какая разница между машиной Тьюринга и современным компьютером? Такая же, как между восхождением Хиллари на Эверест и размещением отеля «Хилтон» на его вершине.
- Девиз исследовательской лаборатории: «Мы работаем сегодня над тем, о чем другие впервые подумают только завтра».
- Хоть китайцы должны бы боготворить АПЛ, но деньги они вкладывают в ФОРТРАН.
- Мы обманываем сами себя, если думаем, что отношение процедур к данным в активной базе данных может быть сколь угодно малым, и удерживаться малым.
- У нас есть мини- и микрокомпьютеры. В какую семантическую нишу попадает пикокомпьютер?
- Компьютер невиновен в том, что уравнения Максвелла неадекватны для проектирования электрического двигателя.
- Нельзя научиться вычислениям, используя калькулятор, но можно забыть арифметику.
- Вычисление сделало дерево цветком.
- Компьютер напоминает Лона Чейни — это машина с тысячей лиц.
- Компьютер — это предельный источник загрязнения. Его испражнения неотличимы от еды, которую он производит.
- Когда кто-то говорит «Мне нужен язык программирования, в котором я просто должен сказать что я хочу чтобы он это сделал», дайте ему чупа-чупс.
- Интерфейсы поддерживают порядок, но не ускоряют рост — этим занимаются функции.
- Не предлагайте хороших идей, если не хотите за них отвечать.
- Компьютеры привносят порядок далеко не настолько, насколько открывают возможности.
- Когда профессор настаивает, что компьютерные науки это X, но не Y, посочувствуйте его выпускникам.
- В вычислительное технике среднее время до сбоя становится всё короче.
- В человеко-машинном симбиозе приспосабливаться должен человек: машины не могут.
- У нас никогда не будет нехватки задач для программирования, пока будет существовать хоть одна программа.
- Разобраться со сбоем просто: упорно работайте над улучшением. Успех столь же прост: вы решили не ту проблему. Упорно работайте над улучшением.
- Нельзя перейти от неформального к формальному формальными средствами.
- Чисто прикладные языки плохо приложимы.
- Доказательство ценности системы есть её существование.
- Вы не можете совладать со сложностью, вы можете только знать о ней.
- Трудно извлечь смысл из строк, но это единственное средство общения, на которое мы можем рассчитывать.
- Яростные споры продолжаются: PL/I — это двугорбый или одногорбый верблюд?
- Когда два программиста встречаются покритиковать свои программы, оба молчат.
- Только подумайте! Используя СБИС, мы можем упаковать 100 ЭНИАКов на 1кв.см.
- Редактирование — это акт перефразирования.
- Почему рухнула Римская Империя? А какая роль латыни в автоматизации офиса?
- Компьютерные науки приведены в замешательство компьютером.
- Единственная конструктивная теория, соединяющая нейробиологию и психологию, возникнет из изучения программного обеспечения.
- В компьютере естественные языки неестественны.
- Большинство считает концепцию программирования очевидной, но исполнение невозможным.
- Вы предполагаете, что знаете, когда учитесь, уверены в этом — когда пишете, более уверены — когда преподаете, но убеждены в этом на 100%, только когда программируете.
- Это противоречит современной системе обучения — учить детей программировать. Разве это весело планировать, быть дисциплинированным при организации мышления, целиком уделять внимание деталям и учиться быть самокритичным?
- Если вы можете вообразить общество, в котором компьютерные роботы — единственные рабы, то вы можете вообразить всё что угодно.
- Программирование — это противоестественное действие.
- Адаптация старых программ к новым машинам обычно значит адаптацию новых машин, чтобы они вели себя как старые.
- В поисках недостижимого простота только мешает.
Если есть эпиграммы, должны быть метаэпиграммы:
- Эпиграммы — это своеобразный интерфейс, с помощью которого передается признательность и проницательность.
- Эпиграммы параметризируют ауры.
- Эпиграммы — это макросы, потому что выполняются во время чтения.
- Эпиграммы кристаллизируют несоответствия.
- Эпиграммы извлекают глубокий смысл из базы данных, которая состоит только из процедур.
- Эпиграммы презирают детали и извлекают суть: они являются великолепной высокоуровневой документацией.
- Эпиграммы больше витамины, чем белки.
- У эпиграмм крайне низкая энтропия.
- Последняя эпиграмма? Не ешьте и не пейте их, вдохните эпиграммы.
Переведено толпой.
_________
Текст подготовлен в
ХабраРедакторе
16 сентября 2009, 13:37
113
комментарии (36)