Истории с тегом: образование

Всего историй: 725

8020

Об отсутствии пустоты

Да, товарищи, заработались мы, привыкли к умным компиляторам и IDE.

Помнится, на первом курсе университета я проходил факультативный курс программирования микроконтроллеров. Два дня дебажил задание, не понимая, почему стандартный «хеллоу-ворлд» на Си не компилится. В исступлении на третьи сутки обратился к гуру. Посмотрел он код мой, пожурил и отправил мануалы читать.

Сначала я вспылил: «Как так! Я к нему с простейшей просьбой, а он мне какие-то бумажки суёт!» Поостыв, принялся за чтение спецификации компилятора.

Оказалось, что в коде моём действительно имелся досадный баг. Я-то по наивности писал int main(), а вот в спецификации было указано, что все функции без параметров объявляются как [type] [name](void), и это обязательное требование. В обычном Cи компилятор сам подставлял «пустоту», а этому нужно было указывать явно.

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

7990

Ты помнишь, как всё начиналось?

Недавно я наткнулся на свой инженерный калькулятор, с которым связаны мои самые яркие (как ни грустно это звучит) воспоминания о школе. Когда я учился в шестом, кажется, классе, родители решили подарить мне на день рождения его — инженерный калькулятор Casio CFX-9950GB аж с трёхцветным и невероятно большим на те времена (127×63 пикселя) дисплеем. Я особо не понимал, зачем он вообще нужен, но было достаточно забавно строить какие-то хитрые графики и вообще щёлкать по кнопкам. Ах да, забыл сказать, что к нему прилагалась толстенная инструкция, которую по понятным причинам я читать не стал и убрал куда-то в стол. Да и зачем читать, если и так всё понятно было в меню:

RUN — калькулятор;

GRAPH — рисовать графики;

DYNA — рисовать динамические графики;

PRGM — типа, программы;

MEM — показывает память;

CONT — меняет контрастность экрана;

STAT, MAT, LIST, TABLE, RECUR, CONICS, EQUA, TVM, LINK — неинтересно.

Так я с ним и играл без какой-либо пользы месяца два, а потом нам по алгебре задали жутко нудную домашнюю работу: два десятка трудоёмких примеров на сравнение двух больших дробей. Делать я этого совершенно не хотел и был абсолютно уверен в том, что для меня пользы в этом нет. Вот и пришла мне в голову мысль оптимизировать процесс выполнения домашней работы, и я вечер за вечером начал штудировать инструкцию по калькулятору в поисках волшебного решения. Инструкция на 600 страниц, без объяснения основ программирования, на английском, в котором я ни бе ни ме.

Страшнее было то, что встроенный язык программирования не имел ни намёка на логи или дебаггер. Программа работала до строчки, в которой была ошибка, и завершалась. Даже не показывала, на какой строке запнулась — крутись, как хочешь, старичок!

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

Я решил не останавливаться на достигнутом и написал свою первую игру «однорукий бандит». Идея была проста: отображается твой текущий баланс, ты вводишь сумму, на которую хочешь сыграть, далее заполняются случайным образом три поля, в каждом из которых может быть любой из трёх символов. Если поля совпадают, ты получаешь приз: ставку, умноженную на какой-то коэффициент. И начал я в эту игруху рубиться! Правда, играл недолго: быстро надоела, да и рассчитал я, останусь ли я в выигрыше в итоге или нет. Это, пожалуй, был первый раз, когда я занимался теорией вероятности, хоть и не знал, что это так называется.

В общем, моя светлая голова решила, что пора играть в что-то более интересное (и уж точно не текстовое, а с таким-то 2D-графоном). Нужно написать арканоид — ну, или хотя бы то, что хоть немного может за него сойти.

Из документации — только инструкция, интернета нет нигде и ни у кого, и ни одного человека, который бы понимал, что я делаю, тоже нет. Зато есть среда разработки в инженерном калькуляторе, в которой, чтобы ввести символ, нужно нажать комбинацию из двух, трёх, а иногда четырёх клавиш, без копипаста, без дебаггера, без способа найти проблемную строку в коде, на экране 20×6 символов. Вдобавок половина школы откровенно смеётся над чудиком, который выходит в обед на улицу, но вместо прогулок и игры в футбол сидит на шине и смотрит в калькулятор. Но я справился.

К своему счастью, я тогда вообще не понимал, насколько это ужасающе дико. Хотя жалею сейчас лишь об одном: следующие лет десять я активно убеждал себя в том, что мне будет интересно всю оставшуюся жизнь заниматься сначала экономикой, потом музыкой, потом математикой, потом физикой, потом ещё раз математикой… К концу третьего курса физфака я уже и перестал понапрасну мечтать.

Хэппи-энд есть, только немного запоздалый. Я уже почти год на работе, которую безумно люблю: я разработчик на Java/Groovy.

7989

Пересортица

Я первокурсник мехмата МГУ. В числе прочего у нас, разумеется, есть предмет «работа на ЭВМ» — фактически, программирование на C.

Решаем задачу сортировки. Я, как один из наиболее врубающихся, всё сдал и бегаю по аудитории, подсказывая другим, где они ошиблись. Подзывает один из одногруппников: программа запускается и сразу же улетает в бесконечный цикл, спасает только Ctrl+C.

Сразу оговорюсь: никакой толковой отладки мы не изучали (хотя надо бы, наверное). Ладно, смотрю в код, предлагаю вбить отладочную печать. Не выводится ничего — даже то, что поставлено в самое начало процедуры сортировки. Всё, что до этого, вне подозрения: там зациклиться вообще негде. Чешу репу.

Тут меня подзывает другой одногруппник — иду разбираться. Вскоре снова оказываюсь рядом с тем «зациклившимся», и он спрашивает:

— А как можно программу запустить — там, точка, палочка, что-то подобное?…

Понимаю, что речь идёт о запуске с указанием текущей папки — работали мы в Федоре из-под терминала и запускали соответствующе. Говорю:

— Точка, слэш, название. Попробуй — может, сработает…

Через пару секунд:

— Есть!

И только тут до меня дошло. Программный файл назывался sort, и при попытке его запустить, просто набрав имя, без пути, система вместо этого выполняла стандартную команду sort и, разумеется, ждала появления входных данных. Когда же одногруппник набрал ./sort, всё запустилось как надо.

Вот так-то, дорогие коллеги! Иногда ошибка не в коде — просто вы с системой друг друга не поняли.

7987

Флешка в потайном кармане

Работаю учительницей информатики. Недавно говорю детям:

— Сейчас мы с вами будем учиться искать информацию в интернете.

И тут одна ученица заявляет:

— А я не теряла информацию в интернете!

7964

На языке предков

В эпоху «пней-133» в школе был у нас некий предмет, связанный с IT. Суть практики заключалась в изучении текстового редактора Лексикон, функциональностью немногим превосходящего сегодняшний виндовый Блокнот. Учительница (дама лет 35—40) с упорством, достойным лучшего применения, вталкивала нам в головы, что Лексикон является квинтэссенцией средств создания и форматирования текста, я же прилюдно гнул линию на Word 6.0, чем жутко её раздражал.

Занятия выглядели следующим образом: минут 30 нам объясняли очередную чудо-функцию, после чего всем раздавали по абзацу текста, который надо было набрать и оформить. Дошло дело до таблиц. В Лексиконе это выглядело так: курсор перемещался по экрану «стрелочками» клавы, оставляя за собой линию, обозначающую границы таблицы или её ячеек. Правда, весело? Я, как обычно, возмутился этому варварству, за что был наказан. Всем раздали таблички 2×2, мне же выдали таблицу где-то 30×7 с объединёнными ячейками. Сделав гадость, училка с гордым видом покинула класс, и под сочувствующие взгляды одноклассников я приступил к делу.

Стоило прожить этот день, чтобы минут эдак через семь сдать вернувшейся училке готовое задание! Ларчик открывался просто: я залез в излюбленный Word, создал таблицу, подформатировал её и полез в настройку сохранения файлов. Конечно же, возможность сохранить в формате TXT (единственно приемлимом для Лексикона) там была.

7955

Ядро ранено, урок убит

Изучали в колледже Дельфи, хотя к тому времени почти все уже знали ассемблер. Молодой, но грамотный препод набирает программку, демонстрирующую работу с сетью, попутно объясняя всё и выводя картинку через проектор на стену класса. Звонит телефон, и препод выходит из кабинета. За это время наш гений вносит изменения в исходник, добавив пару ошибок, несколько десятков табов и код:

asm

xor eсx,eсx

push 7C8xxxxxh

push eсx

ret

end;

Когда препод вернулся и попытался запустить программу, посыпались ошибки. Минуты две было потрачено на поиск и исправление багов. Удачно скомпилив программку, препод уже надеялся показать её работу, но при запуске сразу открывался отладчик.

Препод тщательно проверил ещё раз исходник программы и стал изучать вывод отладчика. Как знаток ассемблера, препод проверил вершину стека, чтобы увидеть адрес, откуда вызывается код. Но наш гений не зря поставил push 7C8xxxxxh, нарочно введя в заблуждение адресами из kernel32.dll и слегка запутав код.

Вот так и прошла пара: мы играли в «морской бой», а преподаватель ковырялся в отладчике.

7909

Клещи десятимегабитные

Была забавная история во времена учёбы в техникуме. По предмету «сети» было практическое занятие по обжимке витой пары. Каждому студенту было велено принести кусок витухи и четыре коннектора 8P8C. Обжимные клещи жали три, от силы четыре контакта. Сдача была провалена.

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

Препод вставил витую в тестер. Выпученные глаза и один вопрос: «Как?..» Что называется, спалился.

7893

А теперь — дискотека!

На втором или на третьем курсе колледжа писали лабы на С++ Builder 6. Лабы эти все я сдавал быстро, и всегда оставалось время до конца занятий на всяческие эксперименты.

Один раз я баловался с функцией Random() и цветом формы. Сделал почти прозрачную форму, поставил ей разворот на весь экран при запуске, убрал бордюры, а на форму кинул таймер, который с дикой скоростью рандомно менял её цвет. Поменял на десктопе иконку запуска Билдера на иконку моего эксперимента, после звонка свалил и забыл о замене.

На следующий день сидел на лекции по другому предмету. Ворвался препод, у которого пара была в том компьютерном классе, где я поменял иконки, и потащил меня на ковёр к завотделением.

Препод заявил, что я украл у него 15 минут времени и испортил комп. Мы пришли в кабинет, где шла пара; я показал, как избавиться от адского цветного моргания рабочего стола (Alt+F4). Вернулись в кабинет завотделением, она для вида попросила меня больше так не делать, я для вида пообещал.

Вот такие «специалисты» и преподают на айтишных специальностях. Но надо отдать должное преподу: он вскоре уволился из колледжа.

7882

А мы тут ни при чём

В контрольной работе по информатике для студентов экономического факультета требовалось написать на Паскале программку: подсчитать, сколько раз во введённой с клавиатуры строке встречается подстрока «мн». Выдержка из одной контрольной:

writeln('Введите строку');

readln(str);

writeln('Сколько раз в этой строке встречается подстрока "мн"?');

readln(n);

writeln('Такая подстрока встречается ',n,' раз');

7863

А что не крутится, так это гироскоп

Работаю я эникейщиком в военном училище. Компьютеры в учебных классах стоят уже старенькие, мощности на всё не хватает.

Курсанты нарисовали в известном 3D-редакторе стойку шасси самолёта, которую мы демонстрировали всем гостям и проверяющим. Запускали редактор, через мультимедийку проецировали на интерактивную доску и показывали, как всё крутится и разбирается. Сам 3D-редактор стоял только на преподавательском компе, так как на остальных он по-дикому тормозил.

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

Решение пришло быстро. На преподавательском компе я сделал скриншот запущенной программы, по сети перекинул его на остальные места и распахнул везде эту картинку на весь экран. Где-то в недрах телестудии до сих пор хранится этот фильм: преподаватель на доске крутит стойку шасси, а восемь курсантов пытаются повторить это на картинках на своих мониторах.