Классическая история от Usenet, о настоящем программировании Моцарта.
Настоящие программисты пишут на Фортране.
Может быть, они делают сейчас, в этом декадентском
эра лайт пива, ручных калькуляторов и
«удобное» программное обеспечение, но обратно
старые добрые времена, когда термин
«софт» звучал смешно и реально
Компьютеры были сделаны из барабанов и
настоящие программисты
в машинном коде. Не Фортран. Не
RatFor. Даже не на ассемблере.
Машинный код. Сырой, без украшений,
непостижимые шестнадцатеричные числа.
Непосредственно.
Чтобы не было целого нового поколения
программисты растут в неведении
это славное прошлое, я чувствую себя обязанным
описать, как я могу через
разрыв поколений, как настоящий программист
написал код. Я назову его Мел, потому что
это было его имя.
Я впервые встретил Мела, когда пошел на работу
для Royal McBee Computer Corp.,
ныне несуществующий филиал
Пишущая машинка компании. Фирма
изготовлен LGP-30, маленький,
дешево (по меркам дня)
барабан памяти компьютера, и просто
начал производство RPC-4000,
гораздо лучше, больше, лучше, быстрее
- барабан памяти компьютера. Ядра стоят слишком дорого, и мы не останемся здесь,
тем не мение. (Вот почему вы не слышали
компании или компьютера.)
Меня наняли написать Фортран
Компилятор для этого нового чуда и Мел
был моим гидом к его чудесам. Мел
не одобрил компиляторы.
"Если программа не может переписать свою собственную
код, "спросил он," что хорошего в этом? "
Мел написал в шестнадцатеричном виде
самая популярная компьютерная программа
Компания принадлежит. Он работал на LGP-30
и играл в блэкджек с потенциалом
клиенты на компьютерных выставках. это
эффект всегда был драматичным. LGP-30
стенд был упакован на каждом шоу, и
продавцы IBM стояли и разговаривали
друг другу. Будь это или нет
на самом деле продал компьютеры был вопрос
мы никогда не обсуждали.
Работа Мела состояла в том, чтобы переписать
Блэкджек программа для RPC-4000.
(Порт? Что это значит?) Новый
компьютер имел адресацию один плюс один
схема, по которой каждая машина
инструкция, в дополнение к
код операции и адрес
нужен операнд, был второй адрес
где указано, на что вращается
барабан, следующая инструкция была
расположен. На современном языке каждый
одна инструкция сопровождалась
ИДТИ К! Поместите , что в трубу Паскаля и
кури это.
Мел любил RPC-4000, потому что он
мог бы оптимизировать свой код: то есть
найти инструкции на барабане так
что, как только кто-то закончил свою работу,
Следующим будет просто прибытие на
"читать голову" и доступно для
немедленное исполнение. Был
Программа для выполнения этой работы, "оптимизация
ассемблер ", но Мел отказался его использовать.
"Вы никогда не знаете, куда это пойдет
положить вещи ", объяснил он," чтобы вы
должны использовать отдельные константы ".
Прошло много времени, прежде чем я понял
это замечание Так как Мел знал
числовое значение каждой операции
код, и назначил свой собственный барабан
адреса, каждую инструкцию он написал
можно также считать численным
постоянная. Он мог забрать раньше
«добавить» инструкцию, скажем, и умножить
им, если бы он имел правильное числовое
значение. Его код был нелегким для
кто-то еще, чтобы изменить.
Я сравнил ручную оптимизацию Мела
программы с одинаковым массажем
оптимизирующей ассемблерной программой,
и Мел всегда бегал быстрее. Это было
потому что «сверху вниз» метод
дизайн программы не был изобретен
пока и Мел бы не использовал его
тем не мение. Он написал самые сокровенные части
его программы вначале зацикливается, поэтому они
получит первый выбор оптимального
адреса мест на барабане.
оптимизирующий ассемблер не был умным
достаточно, чтобы сделать это таким образом.
Мел никогда не писал петли с задержкой,
либо, даже когда балкиFlexowriter требуется задержка между
вывод символов для правильной работы. Он
только что расположенные инструкции на барабане
поэтому каждый последующий был просто мимо
прочитанная голова, когда это было необходимо;
барабан должен был исполнить еще один полный
революция, чтобы найти следующий
инструкция. Он придумал
незабываемый срок для этой процедуры.
Хотя «оптимальный» является абсолютным
термин, как «уникальный», стал общепринятым
словесная практика, чтобы сделать его относительным:
«не совсем оптимальный» или «менее оптимальный»
или "не очень оптимальный". Мел назвал
Максимальная задержка местоположения "наиболее
пессимум».
После того, как он закончил блэкджек
программа и заставить ее работать, ("Даже
инициализатор оптимизирован ", сказал он
гордо) он получил запрос на изменение
отдел продаж. Программа использовала
элегантное (оптимизированное) случайное число
генератор, чтобы перемешать "карты" и
сделка из "колоды", а некоторые из
продавцы чувствовали, что это было слишком справедливо, так как
иногда клиенты теряются. Oни
хотел Мел, чтобы изменить программу так,
при настройке смысла включить
консоль, они могли бы изменить
и пусть клиент выиграет.
Мел отказался. Он чувствовал, что это явно
нечестно, что это было, и что это
посягнул на его личную неприкосновенность как
программист, который это сделал, поэтому он
отказался это сделать. Главный продавец
разговаривал с Мелом, как и Большой Босс
и, по настоянию босса, несколько
Товарищи программисты Мел наконец дал
и написал код, но он получил
тест в обратном направлении, и, когда смысл
переключатель был включен, программа
будет обманывать, выигрывая каждый раз. Мел
был в восторге от этого, требуя его
подсознание было неуправляемо
этично, и категорически отказался исправить
это.
После того, как Мел покинул компанию для
более зеленая цена, спросил Большой Босс
мне посмотреть на код и посмотреть, если я
мог найти тест и полностью изменить его.
С некоторой неохотой я согласился
смотреть. Отслеживание кода Мела было настоящим
приключение.
Я часто чувствовал, что программирование
вид искусства, чья реальная ценность может только
быть оцененным другим разбирающимся в
то же самое тайное искусство; Есть прекрасные
драгоценные камни и блестящие перевороты скрыты от
человеческий взгляд и восхищение, иногда
навсегда, по самой природе
процесс. Вы можете многое узнать о
человек просто прочитав его
код, даже в шестнадцатеричном. Мел был, я
думаю, невоспетый гений.
Возможно, мой величайший шок наступил, когда я
нашел невинную петлю, которая не имела
проверить в нем. Нет теста нет . общий
смысл сказал, что это должен быть замкнутый контур,
где программа будет кружить,
навсегда, бесконечно. Управление программой
прошел через это, однако, и
благополучно с другой стороны. Мне потребовалось
две недели, чтобы понять это.
Компьютер RPC-4000 имел действительно
современное средство под названием индекс
регистр. Это позволило программисту
написать цикл программы, который использовал
индексированная инструкция внутри; каждый раз
через номер в индексе
реестр был добавлен по адресу
эта инструкция, так что это будет относиться к
следующий материал в серии. У него было
только чтобы увеличить индексный регистр
каждый раз до конца. Мел никогда не использовал это.
Вместо этого он вытащил инструкцию
в реестр машины, добавьте один к
его адрес и сохранить его обратно. Он
затем выполнить измененный
Инструкция прямо из реестра.
Цикл был написан так
дополнительное время выполнения
во внимание - так же, как это
инструкция закончена, следующий был
прямо под читающей головкой барабана,
готов идти. Но у цикла не было теста
в нем.
Жизненная подсказка появилась, когда я заметил
бит регистра индекса, бит, который лежит
между адресом и операцией
код в командном слове, был
включен - но Мел никогда не использовал
индексный регистр, оставляя все ноль
время. Когда свет погас на нем
почти ослепил меня.
Он нашел данные, с которыми работал
на вершине памяти -
самые большие места инструкции
могли бы обратиться - так, после последнего
данные были обработаны, увеличивая
адрес инструкции сделает это
переполнение. Керри добавил бы один к
код операции, изменив его на
следующий в наборе инструкций:
Инструкция по прыжкам. Конечно же,
следующая инструкция программы была в
адрес расположения ноль, а программа
благополучно пошел своим путем.
Я не связывался с Мел, поэтому я
не знаю, сдался ли он когда-либо
поток перемен, который накрыл
методы программирования с тех пор
давно минувшие дни. Мне нравится думать, что он
не сделал. В любом случае, я был впечатлен
Достаточно того, что я бросил искать
оскорбительный тест, рассказывающий Big Boss I
не мог найти это. Он не казался
удивлен.
Когда я покинул компанию, блэкджек
Программа все равно обманет, если вы
включил правый переключатель чувствительности, и
Я думаю, что так и должно быть. я
не чувствовал себя комфортно, взламывая
код настоящего программиста.