Вы представляете, как сейчас выглядит код, который я набросал? Я всё доделаю и заставлю работать как надо. Мне это ново и интересно. Но я заранее прошу прощения перед всеми, кто может с моим кодом столкнуться в дальнейшем. Я не специально. Меня заставили.
#5324: Серьёзный зависон
12:00 30.01.2011, IT happens
Дело было утром 4 января 2011 года. Весь рабочий состав офиса провайдера в сборе и готов к работе после окончившихся праздников. В 9:15 раздаётся звонок:
— Доброе утро! Не работает интернет.
Смотрю на карту сети — лежит сегмент из пяти домов. На одном из домов изредка подвисает медиаконвертер. Отправляю монтажника. Через пять минут он перезванивает и сообщает мне тревожным голосом:
— Тут это… Мужик висит.
— %name%, если это шутка, то она неудачная и не смешная совсем!
— А вот и не шутка! Висит и смотрит на меня. Я на техэтаж не полезу!
Отправляю вдогонку другого — перезванивает и говорит, что таки висит и таки смотрит.
Через полчаса приехала милиция и сняла бедолагу с балки. Интересно, что как только мужика сняли, сеть поднялась — даже в ящик лезть не пришлось. На балке, на которой он болтался, не было никаких проводов — видать, медиаконвертер просто немного струсил.
#5325: Ах, вот ты где, Олег! Я давно тебя искал
14:00 30.01.2011, IT happens
Да-да, оттуда[3] и берутся быдлокодеры, пишущие индийский код. Скажи мне, Олег П-тов из 10 «Б» класса школы № ####, для кого я писал в тексте задания слово «рекурсия»? Сколько раз нужно объяснять это перед всем классом, окончательно задалбывая тех, кто слушает на уроке учителя, а не играет с соседом в «клоподавку»?
Специально подобранные задачи на рекурсию от идиотски простых к умеренно сложным. Примеры рекурсивных алгоритмов на Паскале и псевдокоде в тексте листка. Консультации после уроков и на переменах. Для кого всё это? Да, может быть, для отличников, которые ходят на уроки и думают, пока не додумаются, а не лезут за каджым чихом в Гугл с запросом «ханойские башни без циклов без регистрации».
Индусский код пишут те, кому лень даже начать думать. Пиши, мой дорогой друг, и дальше программы с 23 ветвлениями и получай за них оценки, которых они заслуживают. А потом иди работать быдлокодером и пиши свои семь вложенных циклов, как ты сделал в прошлый раз.
Или наоборот. Разрушь шаблон, сядь и разберись, чего от тебя хотят. Может, не так уж оно и глупо, а они не так уж это и скрывают?
#5326: Нереально, но факт
12:00 31.01.2011, IT happens
Студенты сдают первую лабораторную по C++, я бегаю принимаю. Их сорок человек, я один, времени всего час, поэтому конвейер и никакого индивидуального подхода. Одна из задач: используя рекурсию, написать функцию, вычисляющую факториал. Студент показывает программу на два или три экрана кода. Разбираться некогда, поэтому предлагаю запустить с мыслью, что сейчас факториал семи окажется равен 143 или вроде того, и со спокойной совестью оставлю студента копаться в этой каше дальше. Но программа считает, и считает совершенно правильно, по крайней мере, для чисел от 1 до 10. Смотрю код. int fktrl(int n, int p)… Собственно, факториал считается через вызов fktrl(n, 0).
— Что такое p?
— Сколько произведений.
— Каких произведений?
— Которые уже есть. А то иначе не работает.
Понятно, думаю, такой безумный вариант я уже видел. Смотрю код дальше. Ничего подобного! Какие-то проверки, сравнения, штук пять разнообразных рекурсивных вызовов — и fktrl(n?1, p), и fktrl(n, p+1), и совсем загадочное fktrl(n?2, 3). Умножений нет вообще, зато есть сложения.
Времени не остаётся. Ставлю студенту плюсик (потом по моим плюсикам проверят только, кто присутствовал, — хотя студенты этого, конечно, не знают, маленькие ещё) и бегу принимать дальше. Но два вопроса меня теперь мучают: как это работало и как такое можно было придумать и отладить?