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

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

5587

SlowSort()

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

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

Первое занятие у одной группы. После получасовых объяснений студент спрашивает: «А что, STL использовать нельзя?» Говорю, что нет, ибо цель как раз в том, чтобы понять, как это работает. Он оказывается самым сильным в группе, библиотеку знает, но не умеет передавать параметры в функцию по ссылке. Круто. Объясняю.

Через пару — вторая группа. «А теперь возьмите код из примеров и реализуйте через функции». Четыре девочки говорят, что не умеют с ними работать. Мысленно матерюсь, вслух зову их поближе к доске и полпары объясняю то, что они должны были усвоить в первом, на крайний случай во втором семестре. Остальная часть группы краем уха слушает. Дома изливаю яд в блоге, вопрошая, почему девочкам незнание программирования ранее спустили на тормозах. Дураки с этой специальности отчисляются на первом курсе, так что по крайней мере математику студенты понимают.

Вторая неделя. Несколько студентов сделали задачи дома и принесли сдавать. Один красавец для каждой задачи создаёт отдельный динамический массив, перемещается по нему с помощью указателей и пытается выдать творение за линейный список. Ругаюсь, пока не начинаю повторяться. Товарищ оправдывается: мол, хотел побыстрее отделаться. В итоге потратил две пары на переделывание и дописывание задач. В конце сдаёт и гордо так говорит, что сделал быструю сортировку. Разумеется, нашёл реализацию для массива, и вместо каждого упоминания размера вставил функцию определения длины списка. Объясняю, что у полученного алгоритма сложность стала больше, чем у «пузырька». Ржём уже вместе. Кстати, о «пузырьке» — надо ли говорить, что остальные студенты о других сортировках не имеют никакого понятия? Обнаруживаются ещё четверо не знающих функций, зато давешние девицы к концу занятия доделывают первую часть лабы. Правда, с моей помощью, но радость и гордость на лицах неподдельные.

Началась третья неделя. Жду, что нового принесёт четверг.

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

5574

Арифмометр: удалённое администрирование

В конце шестидесятых годов, когда я училась в Плехановском институте, вершиной технической мысли, доступной студентам, была вычислительная машина «Оптима» — эдакий электрифицированный арифмометр. Хотя в нашем институте уже была своя ЭВМ, но студентов даже на экскурсию к ней не водили, чтобы не прокладывать народную тропу. Интерес к ЭВМ был просто ажиотажным, и никто, кроме узкой группы посвящённых, не должен был тянуть к умной машине шаловливые ручонки.

Так вот, сдаём мы экзамен по вычислительной технике, и моей подруге достаётся вопрос «Параллельные вычисления на арифмометре». Таня от страха провалить экзамен забывает абсолютно всё и передаёт в коридор сигнал «SOS». Я, стоя так, чтобы она меня видела в полуоткрытую (под предлогом создания сквозняка — жарко было очень) дверь, начинаю пантомимически изображать действия, необходимые для такого процесса. Чуть позже Ярмольник прославился ученическим этюдом, знаменитым «Цыплёнком табака», но попробовал бы он изобразить арифметическое действие!

Отстрадавшие своё соученики, ждавшие окончания экзамена, получили неожиданную возможность развлечься и буквально в слезах и страшных корчах от смеха зажимали рты обеими руками, чтобы не привлечь внимание преподавательницы и не отвлечь меня. Хотя меня ничто не могло отвлечь: я просто гипнотизировала Татьяну, изо всех сил стараясь, чтобы она поняла меня правильно. Танечка с уверенным видом продемонстрировала показанные из-за двери манипуляции с числами на стареньком «Рейнметалле» и покинула аудиторию.

А теперь представьте себе наши чувства, когда Татьяна получила пять, а я — четыре!

5567

Не видя кода, не суйся в воду

Работаю учителем информатики. Проходим язык разметки гипертекста. Домашнее задание: записать в тетрадь основное тригонометрическое тождество sin²(x) + cos²(x) = 1, отформатировав его с помощью тегов таким образом, чтобы формула корректно отображалась на веб-странице. Топовая отмазка: «Я не сделал домашнее задание потому, что у меня дома нелицензионная винда, в которой нет Блокнота».

5560

История файловых форматов нового времени

Ввели в нашей школе систему дистанционного обучения. Если занятия в школах отменяют (мороз, карантин и всё такое), на сайте школы можно лицезреть домашнее задание. Как раз подвернулся морозный день. Занятия отменены, я лезу смотреть задание младшему брату на сайте. Всё понятно, но по истории предлагают скачать тест. Тест оказался диковинного формата SHS. Поначалу пытался открыть 2007-м Офисом, Опенофисом, на крайняк Блокнотом. Никак! Лезу в гугл. Выясняю, что это «файл фрагмента», что бы это ни значило, чем открывать — непонятно. Нахожу на заброшенном форуме обсуждение со ссылкой на конвертер. Хвала небесам! Получаю что-то вменяемое в виде RTF, где виден искомый тест.

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

5552

Как огурчик

Графопостроитель нам показали в конце второго курса. Работал он от славного ящика СМ-1420. Подготовка данных велась на «больших машинах» серии ЕС при помощи как бы графического пакета ФАП-КФ, который в свою очередь базировался на GRAFOR — графическом расширении поныне популярного в узких кругах языка Фортран. Особую сексуальность процессу придавала пакетная обработка заданий на перфокартах: «сдать на просчёт» можно было только раз в сутки. Работала система крайне глючно, частенько вместо чертежей выдавая распечатку о делении на ноль и других внутренних проблемах непростых взаимоотношений надстроек между собой и несгибаемым Фортраном.

С азами программирования и прелестями пакетного режима вычислений на ЭВМ серии ЕС нас познакомили в конце первого курса, и мы уже спокойно воспринимали все неудобства. А вот нашим подружкам-первокурсницам пришлось несладко, когда кафедра начерталки, желая не отставать от прогресса, ввела машинную графику в первом семестре. На дворе стоял 1985 год, и самый доступный компьютер стоил 150 тысяч рублей (доллар был по 60 полновесных копеек). Хотя девчонки были весьма сильны в математике и усвоили начерталку хорошо (медалистки и призёры физико-математических олимпиад), ФАП-КФ оказался сильнее. В расстроенных чувствах студентки поведали нам о страшной ситуации: до конца зачётной недели два дня, а подлая машина вместо линии пересечения геометрических объектов печатает всякие глупости и рисует непонятно что. Недопуск к сессии уже был виден отчётливо. Разбираться с пакетом из двухсот перфокарт за три дня до Нового года не было ни времени, ни желания, поэтому было принято решение выполнить чертёж от руки.

Времени было мало, и мы работали в многозадачном режиме: я отправился в «графопостроительскую» при ВЦ делать бланки, а приятель занялся построением линии пересечения графическим способом. Через несколько часов у нас были заготовки листов, выведенные на графопостроителе (номер группы, фамилия препа и студента, дата), а также вычерченная от руки искомая кривуля. Из электрокартона был изготовлен шаблон, и начались эксперименты по перенесению кривули на бланк. Тут-то и выяснилось, что кривульки, отрисованные на графопостроителе, обладали дрожащим контуром, а наша получилась идеально гладкой. Мы были страшно расстроены: столько трудов — и всё напрасно…

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

5511

Дежурный по интернету

Общежитие местного универа. Все специальности разделены по этажам; на четвёртом расположились программисты и системщики. Раньше айтишники квартировали на четырнадцатом, но ценой неимоверных усилий и кровопролитных сражений пробились на четвёртый этаж. Зачем? Я расскажу.

Напротив общежития располагается кафе с вайфаем. Пароль от точки доступа написан на чеке и меняется каждый день. Заходите в кафешку, покупаете чашечку кофе (самую дешёвую, за 5 гривен — студенты же) и получаете заветный чек. Балкон, который находится к кафе ближе всего (тот самый четвёртый этаж), увешан точками доступа и антеннами разного цвета, размера и формы.

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

Дежурят уже седьмой год.

5500

Без начала и конца от неизвестного лица

Когда-то наша страна называлась СССР, и в ней была Партия. У Партии была История. История КПСС. Именно этот предмет преподавал тов. Трамвай (фамилия изменена). После распада СССР талантливейшего ментора в ранге подполковника определили на кафедру ЭВМ рассказывать нам об устройстве чуда инженерной мысли. На кафедре товарищу заботливо выдали книжку без начала и конца от неизвестного лица восьмидесятого года образца, полную средневекового бреда и зачем-то третий курс АСУшников, большей частью уже успевших препарировать компьютеры с разной степенью успеха, но все же умеющих отличить процессор от Светлого Будущего. Мы немного повозмущались таким цинизмом: после ассемблера, Дельфи, C, SQL, программирования дисковых контроллеров с точностью до полубита и прочей ереси нас заставили изучать строение ЭВМ!

Трамвай выступил убийцей души прекрасных порывов. Он рассказал нам про шины «ай-си-эй» и «пси», о том, что в WAV пишутся ноты, а в MIDI — цифровые отсчёты, про современные 16-битные процессоры, про винчестеры и дисководы 5,25 дюймов, про «Мсидос» и «Видовс». Первые три занятия мы с ним пытались спорить, но с подполковником спорить бесполезно, а иногда и опасно для мозга. Мы прекратили, тем более что любую свою глупость Трамвай прикрывал книжкой, которую ему сунули на кафедре, видимо, просто для смеха.

Устав бороться, я отмазался от экзамена и занятий, пообещав написать эмулятор лабораторного стенда по изучению чуда советской электроники — процессора КР580ВМ80А. Сначало было интересно, но потом интерес к эмулятору куда-то пропал, и перед экзаменом минут за тридцать я просто набросал форму. Окно с нажимающимися кнопочками, счётчиком команд, регистрами, кодами команд и памятью на сто шагов ввела Трамвая в состояние экстаза, и я получил заслуженную пятёрку. И только друзья-товарищи так и не простили мне обмана целого подполковника.

5498

Цифра в боксе, плюс в уме

Учусь в небезызвестной Бауманке на робототехнике. Начало второго семестра, первая в нём информатика и задание: написать на WinForm калькулятор. Пока все радостно рисовали кнопочки на форме, я решил сделать калькулятор из двух текстбоксов, вылавливая в них ключевые символы по событию Change и отправляя в нужные переменные, дабы потом посчитать. Ловила программа элементы не как-нибудь, а брала для этого из текстбокса символ по счётчику, который рос при каждом вызове этого самого Change. Да, знаю, что индусятина, но вылетела из головы команда, чтобы длину строки получить.

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

Дебажили половиной группы во главе с преподом. Путём удаления строк кода выяснили, что ошибка возникает, если после нажатия плюса прога пытается записать в текстбокс что-то длиннее того, что там уже было. Долго дебажили, ошибку не видели. Хотели уже списать на мистику и бросить, но с помощью препода и чьего-то внимательного глаза баг нашли. Кто-то, может, уже и догадался, в чём дело; их попросим тихо читать дальше и не кричать, что убийца — дворецкий. Для остальных же расскажем, как всё это происходило с точки зрения компьютера.

Ой! Пользователь нажал кнопку! Так, счётчик у нас ноль, смотрим нулевой символ… Ага, единичка. Ничего делать не буду, но счётчик плюсану. Ай! Опять кнопку нажали. Ладно, надо свои ватты отрабатывать. Счётчик — единица, и под номером один у нас… ага, плюсик. Мы его из текстбокса убираем. Вай, что это — опять событие Change! Я же и то не закончил! Ладно, справлюсь, у меня оперативки много. Что, опять проверять текстбокс? Ладно. Счётчик — единица. Что? Да нету здесь символа с таким номером! Идите вы все…

5484

О барометре в свободном падении

Говорите, программа рассчитывает принадлежность клетки к одной или другой группе по цвету фона? Ха! Нас этим не удивить.

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

Для справки: задача важная, нужная и популярная, и решений у неё есть много. Одно из решений приведено в книге «Алгоритмы: построение и анализ» Т. Кормена, являющейся университетским учебником для большинства вузов, начиная с MIT. Но в девяностых на окраине России про Кормена ещё не знали, и пришлось выкручиваться своими силами.

Насколько я понимаю, от нас ожидалось что-то вроде алгоритма Грэхема: взять самую левую точку, которая гарантированно будет включена в эту выпуклую оболочку, построить векторы ко всем остальным точкам, выбрать из них самый правый, перейти на выбранную точку, повторить. Если уже выбраны две точки, ситуация облегчается: сумма нормированных векторов будет тем больше, чем больше они сонаправлены. Проблема только в выборе второй точки, потому что не на чем построить самый первый вектор. Но если самая первая точка — крайняя левая, то можно взять вертикальный вектор (добавить мнимую точку с той же координатой X, но с запредельным Y): все остальные точки будут гарантированно справа. Но векторы у меня вылетели из головы, а с тригонометрией и выбором самого маленького угла относительно только что построенной прямой я просто запутался. Время поджимало, и надо было сдать хоть какое-то решение. Результат поразил даже меня самого.

Итак, для получения бонусных очков надо показать всё это графически. Отлично: выводим на экран все введённые точки, между всеми ними рисуем линии. Тогда линии, составляющие выпуклую оболочку, тоже будут нарисованы. Теперь берём какую-нибудь точку, расположенную вне этой оболочки ([639, 479] кажется подходящим кандидатом) и выполняем заливку FloodFill кавайно-малиновым цветом. Заливка упрётся в линии выпуклой оболочки. Теперь ещё раз пройдёмся по всем возможным линиям, отрисовывая их уже чёрным цветом — с точки зрения пользователя линии сотрутся. На экране останется малиновый фон с чёрной кляксой посередине, а граница между ними как раз и будет внешней оболочкой. Бонусное задание выполнено.

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

Монстрообразная программа состояла из нескольких десятков функций с «говорящими» именами типа CheckThis и Try12. Комментариев по делу не было: мне было не до них. Переменные имели имена, в которых начал путаться я сам. Глобальные и локальные были замешаны в гремучую смесь. Времени на отладку и на доводку этого чуда до ума просто не хватило. Работает? Сдаём!

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

Дома, в спокойной обстановке, я переписал решение как надо, с векторами и определением углов. Потом, переехав в другую страну и обучаясь на факультете компьютерных наук, я обнаружил ещё несколько решений этой задачи, в том числе очень оригинальный и довольно быстрый алгоритм Чана, созданный как раз в середине девяностых. Переписанная программа заняла в несколько раз меньше места, работала не в пример быстрее и выглядела куда элегантнее. А самое обидное, что реализация этого решения (даже с учётом повторения темы «векторы» в учебнике математики) заняла меньше времени.

Какой будет мораль? А не будет никакой морали. Разве что повторение общеизвестной истины: озаботьтесь проектированием перед тем, как начать писать код.

5481

Ословедение

Я учусь на первом курсе университета по специальности «юриспруденция». Первая лекция по информатике. Приходит препод, даёт нам всем чёрно-белый принтскрин Windows ХР и начинает рассказывать, что есть что. Ну, думаю, ладно, может, на практике будет лучше. Первая пара — учит открывать ярлыки на рабочем столе и копировать обьекты. Но на этом мучения не закончились: мы принялись изучать работу с офисными приложениями на основе 2003 версии пакета.

— %teacherName%, давайте я бесплатно пробник 2007 Офиса поставлю везде, с собой диск есть.

— Нет, не надо, мне этот нравится.

Я понимаю, что ей всё равно, что практически везде сейчас седьмой, а то и десятый Офис стоит, и студенты, которые с «тройкой» работать научились, с трудом будут переквалифицироваться на остальное.

На сладкое — «самая тяжёлая лабораторная работа», которой мы будем зачёт закрывать.

1. Как запустить программу Internet Explorer?

2. Как устанавливается связь с провайдером?

3. Из каких частей состоит URL-адрес?

4. Назовите элементы окна Internet Explorer.

5. Как устанавливается и для чего служит автономный режим работы?

6. Какие команды позволяет выполнять панель инструментов «Обычные кнопки»?

7. Какую информацию отображает строка состояния?

8. Для чего служит панель ссылок?

9. Для чего служит строка адреса?

10. Как выполняется выход из программы Internet Explorer?

Украина — страна технически отсталая, юристы в особенности, но не настолько же!