С++ и непонятно чему завидующие одноклассники

Так сложилось, что нас, как и в большинстве школ, учат программировать на паскале. (Да-да, старый добрый Turbo Pascal. Намечающихся олимпиадников по понятным причинам пересаживают на Delphi.) Собственно, все “программисты” нашего класса, коих я вместе с собой насчитываю 6 штук (некоторые успехи проявляют ещё несколько, но они даже на городской олимпиаде дипломы не всегда берут, ни о каких поездках на области, всеросы и прочие олимпиады первого уровня и речи нет), программировали в Delphi. До какого-то момента.

Если вы давно и более-менее внимательно читаете мой твиттер, то знаете, что часть летних и зимних каникул я провожу в таком замечательном месте, как Летняя Компьютерная Школа. Если кратко, это — лагерь для школьников, у которых более-менее неплохо идёт олимпиадное программирование. Как понятно из названия, там учатся (в день 2 часа теории, 2 — практики, а многие ещё и часть свободного времени проводят в “комповнике”, дорешивая задачи с практики; в конце — зачёты по теории и практике и оценки), но ещё и отдыхают хорошо (действительно, отдохнуть с половины третьего дня и до отбоя — не хило так). Зимняя смена отличается в плане организации (туда могут попасть только те, кто были в летней смене; две зимние школы, проводившиеся на данный момент, были в Москве и Петербурге, и нас часто таскали по всяким экскурсиям, а летняя смена проводится в какой-нибудь глуши типа турбазы “Берендеевы поляны” в Костромской области). Вообще, у ЛКШ есть огромный плюс: оно помогает понять, хочешь ли ты заниматься программированием вообще. Я знаю как людей, которые после ЛКШ пошли учиться на программистов, так и тех, кто сказал что-то вроде “О, я поняла, что это, и я поняла, что это не моё. Всё-таки лингвистика”. Я думаю, что ЛКШ создавалось ещё с целями “На этого обратить внимание: его чуть-чуть подготовить, и он поедет на IOI” (среди преподавателей полно людей из жюри и научного комитета Всероссийской олимпиады школьников по информатике — почти конечного этапа отбора людей на межнар) и “На этого обратить внимание и провести тщательную обработку, чтобы он пошёл в мой родной университет и у меня учился” (среди преподавателей — Андрей Сергеевич Станкевич и несколько других).

Это лирическое отступление было не просто так, а к теме этой записи.

В ЛКШ большинство школьников тоже пишет на паскале (общая тенденция преподавания информатики в школе), но есть и те, кого учат на C++ и Java (второе реже встречается). Прошлым летом в один из дней в ЛКШ мой друг и по совместительству одногруппник (преподавание по группам, разумеется) попросил помочь с дебагом кода. Мне, паскалистке, знающей о C++ только “Ой, да это тот язык, где сортировка встроенная есть”, было очень весело смотреть мало того, что чужой, так ещё и непонятный код (“А эти скобочки — это типа begin и end? А % — что такое?”). По-моему, в какой-то момент друг даже пожалел о своей просьбе (надо было слышать, как он, бедняжка, отвечал: “Да, begin и end. А это — mod”), но всё же отдебажили. А меня язык зацепил почему-то (код показался компактным, более читаемым, да и сортировку за O(n log n) я никогда запомнить не могла. #confessionfriday). Зацепил и зацепил, но ничего более.

Смена проходила в июле, и для отдыха у меня был целый август. Но пару недель из него я проболела ангиной и от этого (да и от невозможности выйти из дома) скучала. Мне стало настолько нечего делать, что я решила немного поучиться. Почитала пару объяснений по основам плюсов (не скажу, где. Шпионы-одноклассники, а так же их родители, привет! О вашем странном поведении речь пойдёт дальше), кратко законспектировала, немножко отработала это. А к тому времени я вылечилась, у меня появилось много других, более интересных дел, а там и учебный год начался, и стало не до дополнительной учёбы.

В октябре начинается такая интересная вещь, как Открытая олимпиада школьников по программированию (раньше она называлась “Заочная…”, и с той поры её многие называют “заочкой”). Первый её тур действительно заочный, длится долго, есть возможность подумать. В день, когда она началась, мне было нечего делать, и внезапно мозг выдал идею “А попробую-ка я написать первые несколько задачек на плюсах! Задачи лёгкие и очевидные, значит, ошибки будут не в алгоритмах, а в реализации на определённом языке. Заодно увижу, насколько я всё забыла. Не пойдёт — ну и пофиг, паскалист я, вообще-то”. Из ящика стола вытащились конспекты, нашёлся спрятанный в Program Files (я тогда ещё не была убунтоводом) CodeBlocks… За час я отправила, по-моему, три задачи (для того, чтобы сделать то же самое на паскале, мне бы потребовалось бы минут пятнадцать) с постоянными заглядываниями в конспект и мыслями “Ааа, почему не компилится?”. Но в итоге всё более-менее закодилось, и я, очень гордая собой, не похвасталась в твиттер (не так много я ему тогда времени уделяла) и ушла спать.

Следующие задачи я захотела решать на том же C++ хотя бы для того, чтобы в протоколах сдачи всё красиво было. Долго мучилась, но сдавала. И к декабрю стала более-менее нормально писать на плюсах в тех рамках, которые мне были нужны.

Те самые пятеро одноклассников знали о том, как я “извращаюсь” с написанием программ на незнакомом им языке, но не воспринимали это всерьёз. Ну мало ли, может, не хвастаюсь я, а лгу. Масштабы “проблемы” они осознали в зимней смене ЛКШ, когда я почти все решения задач отправляла на C++. В какой-то момент речь пошла о заочке, и я никогда не забуду лицо одного из них при вопросе “Кать, так ты что, всю заочку на плюсах написала?!”. Чувствовалось, что их это беспокоит (такие уж характеры у них: “Я должен быть гораздо лучше и уметь гораздо больше, чем какая-то там Катька Титкова!”), но не сильно.

Насколько я поняла, апогеем стала областная олимпиада по информатике. Там я тоже всё решала на плюсах: к тому времени я уже достаточно хорошо помнила всё, что мне нужно, а при попытке написать что-то на паскале долго переправляла все “=” на “:=”. Если условно пронумеровать одноклассников (там и одноклассницы есть, кстати), то меня обогнал лишь первый, второго там вообще не было, третий и четвёртый просто были хуже (причём четвёртый вообще неудачно на нашем фоне выступил, он даже на всерос потом не прошёл, несмотря на диплом), пятого задели мои +10 баллов по отношению к его результату, и после, видимо, более чем внимательной вычитки условий он обнаружил, что тест, на котором его программа валилась, “не соответствовал условию”. Скорее всего, составители условий просто ошиблись (условно ошибка выглядела так: подразумевалось 0 ⩽ N ⩽ 100500, а напечатали 0 < N ⩽ 100500; я не помню точно, но всё было именно так незначительно). Нормальные решения, которые большинство и написало, случай с нулём обрабатывали и так, а кривые, как у пятого, очень хорошо ломались на этом. В итоге пятый подал на апелляцию, получил свои +20 баллов, которые ничего не меняли (всё равно у нас дипломы одинаковые, баллов там нет), но очень этим загордился. Но именно тогда одноклассникам почему-то пришло в голову, что если они тоже будут писать на C++, то у них всё сразу станет очень-очень хорошо.

Одноклассники смешные такие, у них из-за этой зависти (не знаю, как это назвать иначе) пики активности появляются, только если я как-то им напомню о своём мнимом преимуществе. Когда я попросила учителя информатики установить на мой школьный компьютер CodeBlocks (самим ничего устанавливать нельзя, а админ два месяца проверял, что CodeBlocks действительно свободное ПО), они снова начали выпендриваться и пытаться показать, что, как сказала героиня Ирины Муравьёвой в замечательном фильме “Москва слезам не верит”, “А мы не хуже ихних!”. Эти попытки заключаются в задавании мне вопросов про язык при полном игнорировании ответов. Что интересно, они всячески пытаются отрицать то, что делаю я (если я обычно использую cin и cout, то они пытаются работать с scanf и printf, ничего в этом не понимая, отчаиваясь и забывая всё до следующего пика). Ещё эти попытки проявляются в статусах в аськах и контактах (кстати, по ним складывается впечатление, что ребята не хило мучаются) и диалогах с первым: “― О, ты ноут купила? Повезёшь его в ЛКШ летом? ― Да. ― А, так вот к кому мне приходить, если нужно будет покодить, а в комповниках мест не будет. ― У меня Ubuntu, Delphi для неё нет да мне и не надо. ― (пренебрежительно) Да я всё равно на C++ переходить буду летом.”

В какой-то момент первый и второй решили, что чем учиться самим, лучше, если это всё расскажет учитель, и явно у неё это попросили. Учитель ответила отказом, сказав: “Если хотите — учите сами”. Видимо, она хорошо относится к самообразованию, и поэтому не ругалась, когда я просила поставить CodeBlocks.

Итак, дорогие одноклассники (а вы наверняка это прочитаете)! Вы очень смешные, правда. Ну, по крайней мере, меня веселите. Спасибо вам за это. И поймите, что не в самом языке дело, а в вашем умении его применять. Я не думаю, что C++ я применяю как-то лучше, чем Delphi, мне просто приятнее на нём кодить. Если у вас нет этого, то зачем мучиться? Жизнь и так непростая штука, мучений много. Не спасёт вас то, что вы будете отправлять на проверку файлик “main.cpp” вместо “TaskA.dpr”, от поездок на всерос не для диплома, а для тусовки, от тупизма на городской олимпиаде, от тупизмов, которые со всеми случаются, от зазнайства и от написания кривых решений, не проходящих на нуле, да с криво сделанными динамическими массивами. Вы же все умеете больше меня, особенно первый, третий и четвёртый (что стоит ваше хождение к репетитору по программированию! Я всё знаю, да. Вы думали, я настолько тупа, что не смогу выяснить, что означает ваш выпендрёж в виде вопросов друг другу “Дашь мне конспект того, что мы в воскресенье делали?” и таинственное молчание на вопрос “А что вы в воскресенье делали?”?). Да и пятый совсем неглупый. И второй тоже. Вы не думайте, я не издеваюсь над вами, я просто даю дружеский совет, к которому вы всё равно не прислушаетесь. Я вас всё равно люблю.

Кстати, это самостоятельное изучение плюсов дало мне понять, что я не настолько безнадёжна. Что в случае со мной самообразование возможно. И что я умею выполнять поставленные цели, если захочу. Это прекрасно и придаёт мне силы, когда совсем тоскливо.

Сейчас, кстати, я снова наблюдаю пик активности (не понимаю, почему), и, видимо, после этой малюсенькой заметки он продолжится. Ну и пофиг, мне важно было выговориться.

Нечто

  1. katya-titkova posted this