Коды спящего разума
Все совпадения с реальными людьми и событиями являются случайными.
Ранним морозным утром 13 января 2009 года техно-патриархальную тишину заснеженного Принстона разорвал нечеловеческий, пронзающий душу крик. Страшный звук, содержащий все частоты слышимого, инфра- и ультразвукового диапазонов, пролетел по улицам Вильсона и Насау, стряхнул снег с готической крыши университетской часовни. Кричавший, немолодой белый американец с окладистой бородой, метался во сне, безуспешно пытаясь очнуться от леденящего сердце кошмара. Он не знал, что его крик, подхваченный западным ветром, пронесся через пять часовых поясов и был услышан в маленьком одноэтажном городе Орегона, недалеко от канадской границы. Еще молодой, довольно полный жизнерадостный человек (кажется финн или швед по происхождению) задрожал, угадав видение кричавшего. Маленький пингвинчик с большими желтыми лапами, который сидел на его плече, сочувственно тронул крылом его волосы. Человек встряхнул головой, но видение не исчезло. Ему оставалось только утонуть в пучине ужаса и лишь пингвин оставался последней нитью связи с реальностью.
Этими двумя были Бриан Керриган и Линукс Трувольд. Им виделось совершенно отчетливо, что один из них изобрел язык Це, и теперь они преподают его в комнате с огромной зеленой доской, розовыми стенами и длинными, расставленными амфитеатром партами. А студенты на незнакомом языке говорят им... Вот некоторые фрагменты этого кошмара.
Сначала несколько диалогов
Преподаватель: Что делает fopen?
Студент: Открывает файл и читает его.
Преподаватель: Какое значение возвращает fopen?
Студент: Ноль.
Преподаватель: (с надеждой) В каком случае?
Студент: ??? Ну, открывает файл и возвращает.
Преподаватель: (подсказывает) А если файл не откроется?
Студент: Не может быть!
Преподаватель: Какое значение возвращает fopen?
Студент: В случае успеха ноль, а в случае ошибки NULL.
Преподаватель: Что такое agrc?
Студент: Это параметры.
Преподаватель: Какие?
Студент: Ну которые там.
Студент: Она здесь буквы переводит в один регистр.
Преподаватель: Это, видимо, в ВАШЕМ сценарии, а вообще что она делает?
Студент: ~> man tr
Тe же через пять минут
Студент: Она меняет символы.Преподаватель: Удалите из файла все табуляции.
Студент: ~> man tr
Те же через неделю.
Студент: Вы просили удалить из файла табуляции.
Преподаватель: (заинтересованно) Ну и?
Студент открывает файл c именем qqqq, состоящий из четырех сплошных строк. Добавляет в него пробелы.
Преподаватель: Речь шла о табуляциях.
Студент: Да, да. (добавляет табуляции)
~> cat qqqq|tr -d '\t'Смотрит на оставшиеся пробелы.
Студент: (грустно) Да, не получилось.
Последняя пересдача лабораторных за день до переэкзаменовки в последний день сессии.
Преподаватель: Что будете сдавать?Студент: Все программы. Вот первая.
Преподаватель: Запустите ее.
Студент открывает emacs. Исправляет makefile, транслирует программу.
Преподаватель: (про себя) Это можно было сделать заранее.
Студент: А Вы не помните какими клавишами запускается gdb?
Преподаватель: Нет, не помню.
Студент: Я тоже. Я посмотрю в интернете?
Преподаватель: Запустите программу из командной строки.
Студент: Это из Linux-a. (Выход из emacs)
Преподаватель: Да-да.
Студент: ~>.\first.c
Linux: bash: .first.c: command not found
Студент: (после некоторого молчания) ~>./first.c
Linux: bash: ./first.c: access denied
Студент: Я все таки пойду посмотрю и через десять минут вернусь.
Преподаватель: Может не стоит? Могут возникнуть другие вопросы.
Студент: Я всегда знаю где это можно посмотреть.
Те же через полчаса.
Студент: ~>./first
Linux открывает stdin. Студент набирает несколько слов через пробел.
Студент: А как закончить ввод?
Преподаватель: Вам виднее. Это же Ваша программа. Как у Вас это сделано?
Студент: ^С
Linux: ~>
Студент: ~>./first
Linux открывает stdin. Студент набирает несколько слов через пробел.
Студент: Нет, ну вот как сказать ему, что этот символ последний?
Преподаватель: Это зависит от того, какой символ Вашей программой трактуется как последний.
Студент уходит. Видимо ему снова нужно вспомнить где это можно посмотреть.
А теперь несколько цитат
"Чтобы проверить правильность работы программы, необходимо чтобы
программа прошла через транслятор."
Мечты-мечты...
"По-другому то, что программист пишет в текстовом редакторе
называется исходный код. Как правило, исходный код имеет
расширение *.c"
С другой стороны другие языки действительно ни к чему!
"Но нередко программист может допускать ошибки."
"Вид ошибок: Ошибки времени выполнения."
Видимо заданий студентами.
"Семантические ошибки ... трудно изменить."
А уж исправить... Лучше не пробовать.
"Отладчик помогает автоматизировать процесс трансляции."
"Логические выражения это ">" "<" "+" "-" "*" "/"."
"Форматный вывод обеспечивает вывод форматированной информации."
Спасибо, профессор Амбридж, за Вашу содержательную речь.
"Обычно рекурсию используют ... когда без рекурсии алгоритм не
реализовать."
Алгоритм назовем?
"Язык С создавался как многофункциональный, поэтому функция есть его неотъемлемая часть и структура."
"Тип данных последовательность (массив)."
"В любом языке программирования более или менее высокого
уровня..."
Литературно.
"В написании программы может использоваться обращение к файлу по
его имени как для извлечения его содержимого так и для получения
его адреса.
Пример: *File получает содержимое файла с именем "File"."
Действительно, чего возиться.
"Существуют разные операторы ветвления."
"Данные называются переменными."
"Командная строка представляет собой массив символов."
И возразить-то нечего.
"Тестирование призвано указать на наличие или на отсутствие
ошибок."
На свалку старые теории! Молодежь берет программирование в свои руки! Даешь
программы без ошибок! Долой Дейкстру и Ван Тассела!
"Программирование на языке С это трудоемкий процесс разработки программного обеспечения."
"scanf(x)"
В этом эпизоде Бриан кричит особенно громко в ультразвуковом диапазоне
"if - логическое выражение, подразумевающее "если"."
Ну хоть английский сдаст
"
#include"int x; main() { scanF('%5/n', x); printF('%d/n', x); } return 0.
Рука тянется к крупнокалиберному пулемету.
Пояснение: Теоретически вышеприведенный фрагмент должен считывать пятеричное число и выводить соответствующее ему десятичное.
"Алгоритм может делиться на несколько путей."
"
сhar str[MAXLEN]; int len; ................ scanf("%s\n", str); len=strlen(str); str[len+1]='\0';"
Для знатоков
P.S. Если Вы не поняли юмора, перечитайте конспект.