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