1233
— Ты где такую Солнечную систему видел? Кто их так делает? Cоздай себе другой экземпляр системы и экспериментируй на нём.
— У тебя гравитационное поле есть?
— Есть, 36 на 36.
— Мне так много не надо.
— Сколько надо — столько и возьмёшь.
— Ты куда Юпитер дел? Что? Это Юпитер? Это дерьмо, а не Юпитер, совсем не похоже!
— У тебя с Марсом проблемы — скачет по небу.
— Куда ты дел звёзды и как их включать?
Шёл только первый день творения. До сдачи новой версии виртуального планетария оставалось целых шесть дней.
1209
В последнее время я сконцентрировался на программировании микроконтроллеров на Си и ассемблере. Столь глубокое погружение в новую тему не могло не сказаться на психике.
Итак, раннее утро, часов шесть. Должна приехать родственница жены; я сквозь сон слышу звонок в дверь. Супруга просыпается, идёт встречать гостью. В сонный мозг приходит мысль: «Прерывание от звонка в дверь сработало». Мысленно представляю себе текст программы, понимаю, что до следующего прерывания еще куча тактов, и спокойно ухожу в sleep mode c пониженным энергопотреблением.
Через какое-то время просыпается мелкий, и не обнаружив рядом мамы, начинает пинать меня ногами в живот. Возвращаюсь к листингу — это не прерывание по звонку будильника. Если это не прерывание, значит, меня пинает главный цикл. А как он меня может пинать, если я в sleep mode? Он обязан подождать следующего прерывания!..
С мыслью о найденном баге я окончательно просыпаюсь.
1206
SexPosition, говорите? Мне как-то довелось заниматься рефакторингом модуля, работавшего с системными таблицами нашего приложения, среди которых была и пресловутая «Sex».
То, что, разбираясь с этим делом, я осуществлял в проекте поиск по известному ключевому слову и чувствовал себя злобным, начинающим и неопытным др^H^H искателем порнухи — это полбеды. Гораздо интереснее было обнаружить сопутствующий класс SexManager — видимо, что-то вроде офис-менеджера по особым вопросам.
Cреди находок были переменные и функции animalSex, SexPanel и sexModel.getSex(). А что вы хотите — система медицинская, тут понятие пола порой к одному биту не свести. Вот и приходится работать... секс-менеджером.
1203
Талантливый препод объясняет продвинутым школьникам алгоритмы.
Преподаватель: Еще задачка на динамику. Сейчас мы узнаем, как сгенерировать все последовательности длины N из нулей и единиц так, чтобы рядом не стояло трёх единиц.
Голос с задней парты: А зачем все это нужно?
Преподаватель: Нужно. Вот представь — гуляешь ты с девушкой, и вдруг она тебе говорит: «А сгенерируй-ка мне все последовательности длины N из нулей и единиц так, чтобы трех единиц не стояло рядом!»
Голос с задней парты: ...и я покажу ей исходники решения, а она сама сгенерирует.
Голос с первой парты: (мечтательно) Да-а, девушка-компилятор — это круто!..
1193
В конце 11 класса мы с двумя друзьями из класса сдавали ЕГЭ по информатике. Один из них испытывал трудности в подготовке к экзамену и обратился ко мне за помощью. Дело происходило в июне, в школу мы уже не ходили, поэтому алгоритмы решения задач я объяснял ему по аське. Это было крайне неудобно: задачи были нетривиальными, поэтому печатать приходилось очень много.
Мы решили организовать видеоконференцию. То ли я нажал не туда, то ли мой друг воткнул микрофон не в ту дырку, но я не получал ни изображения, ни звука, а друг меня только слышал. Работали мы по такой схеме: он в письменном виде присылает мне задачу, а я устно объясняю решение.
Представьте: сижу я и вдумчиво излагаю, как определить, сколько чисел в двумерном массиве после выполнения алгоритма на Паскале примет отрицательные значения. Входит мать и видит картину: её сын сидит, смотрит на пустой рабочий стол (все окна я свернул для концентрации внимания) и о чём-то разговаривает со своим компом. Крику было!.. С трудом отговорил маму вызывать психиатра, объяснив, что я ещё не успел сойти с ума от многочасовых бдений за клавиатурой.
1192
Некоторое время назад мне понадобилось написать класс, разбирающий структуру данных (строку, содержащую в себе в кодированном виде информацию о человеке) и дающий доступ к этой информации при помощи простых функций.
Буквально через день в процессе доработки этого класса появилось желание вынести позиции полей данных в этой строке в константы во избежание появления ошибок в дальнейшем. Был выбран простой синтаксис: *Position обозначало позицию поля данных в строке, а *Length — её длину. Например, birthDatePosition и birthDateLength — всё просто и понятно.
Только по прошествии получаса до меня наконец дошло, что речь-то идёт о разборе данных о человеке. Теперь невиннейшие константы sexPosition и sexLength в коде навевают определённые мысли о собственном моральном облике.
1180
— Пятачок, нам прислали десять горшков меда, по восемь каждому!
— Но как это, Винни, по восемь каждому?!
— Не знаю как, но свои восемь я уже съел.
На пятый час написания кода на ассемблере под ATmega128 я осознал, что Винни-Пух на самом деле был очень справедливым медвежонком. Просто он был программистом и считал в шестнадцатиричной системе...
1157
В 2007 году я училась в физико-математическом интернате для 10–11 классов при одном из лучших московских университетов. Нам читали материал первого курса, и на информатике мы усиленно изучали Delphi. Надо сказать, что процесс обучения был построен весьма интересным образом. Выдаваемые нам задачки, которые обычно пишут на Паскале, мы писали в консольном приложении Delphi, и сдавали их не преподавателю, а серверу, который прогонял прогу через 10–20 автоматических тестов.
Однажды нам попалась простая на первый взгляд задачка:
Даны числа A, B, C, D. Если кирпич размерами A х B пролезет в отверстие C х D, то вывести «Да», в противном случае — «Нет».
Пишу примитивную прогу: сравниваю числа, если стороны кирпича меньше сторон дырки, даю положительный ответ. На пятом тесте сервер выдаёт ошибку. Удивленно спрашиваю преподавателя, в чём дело, а тот хитро улыбается: кирпич ведь можно совать наискосок! Вспоминаю тригонометрию — безрезультатно...
За день до «дедлайна» смотрю статистику — почти у всех прога сдана. Мне стало интересно, как ребята справились с задачей, и спросила совета у одноклассницы. Та ответила: «Ой, да лёгкая же задача! Вот, возьми текст», — и протянула мне флешку. Ключевая строчка выглядела примерно так:
if (A=...) and (B=...) and (C=...) and (D=...) then writeLn ('Да');
Для каждого теста, который прога не проходила, студенты написали по «затычке». Какие из них потом вырастут программисты?
1129
Во времена учебы в универе была у нас преподавательница, которая не особо отличалась «умом и сообразительностью». На одной из пар она предложила студенту закодировать алгоритм сортировки, который она сама выберет из толстого справочника. Времени на задание было отведено совсем мало.
Студент не растерялся и настрочил строк 40–50 полного бреда, однако, включающего в себя честный ввод массива чисел и вывод его после сортировки. Естесственно, написанный им алгоритм ничего хорошего с данными сделать не мог, если бы не вставленный в самом конце через несколько десятков «табов» стандартный sort(). Студенты — берите на заметку!