Как стать автором
Обновить

Дональд Кнут: про ассемблер, транслятор и грамотное программирование

Время на прочтение9 мин
Количество просмотров24K
Всего голосов 32: ↑29 и ↓3+26
Комментарии7

Комментарии 7

Я писал программы в CWEB — это «потомок» оригинальной веб-системы

Всё же сейчас под веб-сервисами и веб-системами понимают совершенно не то, о чём говорит Кнут. Может, лучше так и писать «WEB-система»?


я создал еще две — одна конвертировалась из языка описания веб-сервисов Паскаль, а другая — из языка описания веб-сервисов в документ

Паскаль — это вовсе не язык описания веб-сервисов. Там идея была в том, чтобы из исходной программы на WEB генерировать код на Паскале и документ с описанием алгоритмов.

Я вот знаете, что подумал… слово «программа» как-то выходит из оборота, что ли. Режет ухо почему-то. Как в Матрице — «программы, которые пишут другие программы», бррр.

Даже не знаю, что приходит на замену этому термину. Системы? Приложения? Сервисы? Все не то.

Это как говорить не «организм», а «клетки» или «набор органов». Вроде по сути все верно, но так не говорят. Хотя, может, неудачная аналогия.
Да, как будто «программа» — это что-то простое, выполняющее ограниченный набор функций. И при этом не являющееся частью большой системы (например, ls, chdir — не программы, а части ОС, — «приложения», что ли). Что-то, что было ещё до текстовых процессоров и электронных таблиц. Но в случае этой статьи, мне кажется, слух не режет — Кнут в те времена писал именно программы.

Я с глаголом «писать/разрабатывать» использую «программный код» или просто «код», если нельзя сказать более точно (сервис, приложение или т. п.)
Появился ассемблер и с тех пор (60 лет) программирование остановилось в развитии и наращивает костыли.

Интересно, что бы он сказал о Scratch, где не надо вводить эти символы, а больше всего работы — мышкой?

Перевод ужасен. Наймите другого переводчика. Видно, что переводчик "не в теме" и переводит текст, не понимая его.


Например, фрагмент про ассемблер:


Одна из программ называлась ассемблер — она позволяла писать программы, используя не машинный язык, а более символический. Это многое упрощало… Я имею ввиду, что, когда я начал писать программы, я все писал в цифрах, и если мне надо было добавить цифру в участок 1 к цифре, расположенной в участке 2, то я должен был записать что-то в роде 20,0,0,1. Мне приходилось выписывать все эти цифры, вбивать их в карты, и только потом использовать в работе — это все, что я знал о программировании на тот момент.

Но та программа была новшеством для того времени, и она позволяла писать программы более простым методом. Вместо того, чтобы выбирать число для каждого участка в программе, я мог дать ему название, и аппарат уже сам определял какое число соотносится с этим названием. Но в те времена, компьютеры не могли хорошо справляться с буквами, они были рассчитаны на работу с цифрами, но можно было использовать заглавные буквы. С этим ассемблером можно было применять до пяти букв на одно слово.

Я точно помню, как я использовал это для своей программы «крестики-нолики», и мне пришлось придумывать, какое слово из пяти букв будет определять определенный участок программы. И я вспоминаю с восторгом, как я играл в крестики-нолики, и как в момент выигрыша программа переходила на участок БИНГО. Я использовал это слово из пяти букв Б, И, Н, Г, О для этого участка программы.

Я какое-то время не мог понять этот фрагмент. Наконец, до меня дошло. Посмотрите, скажем, на фрагмент ассемблера x86:


.model small
.stack 100h

.data
msg db  'Hello world!$'

.code
start:
    mov ah, 09h   ; Display the message
    lea dx, msg
    int 21h
    mov ax, 4C00h  ; Terminate the executable
    int 21h

end start

Выделю здесь два вида "слов": названия инструкций (mov, lea, int и т. д.) и метки (start).


Вместо того, чтобы выбирать число для каждого участка в программе, я мог дать ему название

На этом месте я сперва решил, что речь идёт о названиях инструкций. Т. к. первое, что приходит в голову, когда мы говорим об ассемлере — это то, что там инструкции имеют названия.


Но потом я заметил, что что-то не то. Наконец дошло, что речь идёт о метках. Т. е. ассемблер, попавший Кнуту, позволял использовать метки из пяти букв.


Ну значит, эту мысль надо было куда-то ввернуть, иначе непонятно. Хватило бы одной фразы, засунутой куда-нибудь: "Этот ассемблер позволял использовать метки".


Ещё несколько примеров.


И поскольку я пишу программы, и в некотором роде учитель.

Предложение выглядит составленным некорректно.


об утилите «спутывания» и «сплетения» (Weave and Tangle)

Если бы переводчик владел темой, он бы знал, что есть две утилиты. Одна для спутывания, а другая для распутывания. Далее, если знать, что эти утилиты делают, то становится ясно, что это не спутывание и сплетение. Это спутывание и распутывание. Т. к. одна из утилит делает из кода документ, пригодный для прочтения человеком (распутывает), а другая — превращает его в нечитаемую кашу, скармливаемую компьютеру (спутывает).


Пускай переводчик хотя бы прочитает немного на русском языке разные тексты Кнута, что-нибудь про Кнута в русской Википедии, чтобы знать терминологию вокруг его программ.


И вместо каких-то скрытых файлов

Видимо, имелось в виду "непонятных файлов", "путанных файлов", "загадочных файлов" и т. д. Но не скрытых.


И всё это не говоря об опечатках.


В общем, эти тексты невозможно читать. А дальше по идее их должно быть много. Не портите эти видео с Кнутом, переводите лучше

Спасибо, замечания отличные и ценные.
Буду рад, если в будущем читатели не будут оставаться равнодушными и будут помогать улучшать публикации.
(Или будут сами публиковать отличные материалы)

Интересно, есть книга "неграмотное программирование"?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий