четверг, 12 июня 2014 г.

Соображения о кружках по программированию

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

В этом году, забрав "бразды правления" в группе C кружка СПбТЦ СПбГУ всецело в свои руки, я пытался на его базе воплотить в жизнь многие собственные соображения о том, каким должен быть "кружок моей мечты". О том, что получилось / не получилось / не успелось / удалось понять, по порядку.

Сразу лирическое отступление о собственном опыте, на который я и опираюсь:
- в качестве школьника в течение 4 лет я успел позаниматься на 6 кружках по олимпиадному программированию. Так что есть пища для сравнений;
- в качестве преподавателя два года (недавно закончившийся - второй) преподавал в группе C СПбТЦ СПбГУ, в ЛКШ.июль был младшим преподавателем в C.cpp;
- ещё до того в 10-м классе:
а) объяснял на переменках в школе двум одноклассникам разные алгоритмы. Как результат, с одним из них с декабря 2012-го (т.е. полтора года спустя) почти все командные олимпиады писал вместе. Не по дружбе (вернее, не только), а потому что вскорости он стал показывать ничуть не уступающие моим результаты. А зачастую и превосходящие. Ещё бы дома самостоятельно продолжал тренироваться так, как делал это на первых порах, вообще цены бы не было ;)
б) весной по предложению учительницы информатики два урока в неделю из трёх я в компании двух своих одноклассников-олимпиадников (об одном из них - пункт "а": причём ещё в сентябре он, действительно, почти ничего не умел) рассказывал остальным одноклассникам из "сильной" группы информатики о разных базовых алгоритмах;
- в 11-м классе описанное в пункте "а" продолжилось, но уже с другими одноклассниками. Были и те, кто заинтересовался решением олимпиадных задач и тем, что за этим стоит, после наших довольно неумелых рассказов весной;
В общем, опыт преподавания потихонечку накапливался, и далеко не с 1-го курса, а на два года дольше.

Отступление закончилось, перехожу к основной части:

1) Как бы не хотелось внутренне обратного, по всей видимости, успешным может быть только кружок с, так скажем, единоличной диктатурой в преподавательском составе. То, что все решения, касавшиеся программы занятий, принимал я, позволило:
- почти не тратить время на обсуждение того, что же мы делаем дальше;
- иметь одного человека в лице меня, который в курсе всего и вся, что происходит на кружке, даже в те разы, когда сам там отсутствует. Что, как не 100%-ная информированность, может помочь осуществлять оптимальное планирование следующих занятий?

Два примера обратного - аналогичный кружок прошлого года и наша C.cpp в ЛКШ.июль-2013. Оба раза мои более опытные коллеги активно слушали, в числе прочего, моё мнение, а, наверное, не стоило этого делать (хотя тогда мне это, безусловно, нравилось. А о том, что это косвенно наносит вред образовательному процессу, как-то совсем не думалось). В результате мнений, зачастую противоречащих друг другу, накапливалось много, драгоценное время тратилось на выбор лучшего из них и на убеждение каждого, что это, действительно, лучший шаг. А в случае с кружком всё равно всё могло пойти наперекосяк, потому что в отличие от ЛКШ часть из нас вела занятия в один день, часть - в другой, между ними же были лишь короткие обсуждения в vk.

2) Вечная проблема едва ли не каждого кружка: редко хоть кто-то из школьников посещает 100% занятий. Сегодняшнее занятие пропустил один человек, через два дня - другой... Плохо это, разумеется, тем, что если всем даётся один и тот же материал, то преподавателям приходится либо притормаживать, чтобы пропустившие успели нагнать остальных, либо мириться с тем, что какие-то содержательные вещи минуют часть ребят. 

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

Что ещё помогает исправить такой подход?
- осенью приходят совсем по-разному подготовленные ребята. В частности, они могли закончить в ЛКШ D, могли C, а могли вообще не слышать, что такое ЛКШ. Если балансировать на уровне несуществующего среднего школьника, то рухнуть рискует всё: сильным будет неинтересно, слабым - сложно, а мотивация ходить уменьшится и у тех, и у других. При этом если дробить существующие в Питере кружки на ещё большее количество уровней, то необходимое число преподавателей рискует сравняться с числом школьников, а эффективность не вырастет...;
- в наши ряды можно было влиться хоть весной, что некоторые и делали. Их индивидуальный план был в чём-то похож на тот, что получали в октябре все, кто был с нами в начале года. Конечно, они не нагнали остальных (это и не представляется возможным), зато они понимали, что происходит (чего бы не произошло, если бы им предлагались те же темы, что и тем, кто занимается весь год), а потому получали пользу от занятий;

Что требует дополнительно такой подход?
- больше преподавателей. Не зря осенью нас зачастую было по трое на 6-8 школьников. Это вызывало предельное непонимание со стороны коллег-преподавателей [других кружков], писавшиих студенческие тренировки в то же время в том же месте, но этот шаг позволял сделать жизнь преподавателей чуточку проще, а возможности школьников чуточку шире;
- больше беготни и прочей активности со стороны преподавателей. И ещё умения быстро переключаться между темами. Мне кажется, справиться получилось, но было тяжело. Тяжелее, чем в любом из прошлых случаев в моём не очень богатом опыте. Впрочем, стоило получше подойти к организации процесса: тогда между темами переключаться бы не пришлось, потому что в зону ответственности конкретного преподавателя попадали бы ребята с одинаковыми или очень близкими темами. А ещё, если идти преподавать на кружок, то уж выкладываться на все 100%. Так что и неважно, что временами усталость после занятия значительно превышала усталость после, например, 4 пар в университете (во всяком случае, на себе я это хорошо чувствовал).

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

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

А табличка была бы полезна: число "уникальных посетителей" нашего кружка было осенью в районе двух десятков, в среднем же на занятии появлялось больше 8 человек (да, выглядит абсурдно, но я считал ;) ).

3) Многие школьники ничего не решают дома / на каникулах, и ничего с этим не сделать. Во всяком случае, такое мнение сложилось у меня. Уже активно обсуждалось.

Я произносил, произношу и буду произносить перед ребятами слова о том, как важно тратить дома время на практику. Но, как бы я не старался, чтобы призыв вышел как можно более пламенным, всё равно часть ребят не дорешивает вообще. И я, к сожалению, близок к уверенности в том, что с этим ничего не сделать. Человек либо сам поймёт, что ему это нужно/интересно, либо ему это не нужно / скучно.
Можно, конечно, в качестве контраргумента к "Нет времени" носить с собой ведомость с собственными оценками за 11 класс (особенно хорошо должно действовать на тех, кто знает, что такое учёба в ФМЛ 239) и перечень задач, которые я успел решить за тот учебный год, но... вы, в общем, поняли, что это была не самая удачная попытка пошутить, потому что так делать совсем непедагогично и вряд ли действенно... К большому сожалению, не в каждом впечатление от чужих результатов вызывает понимание, что и он так может.

4) Внезапный психологический момент: даже те ребята, кто активно задаёт вопросы на занятии, в большинстве своём стесняются задавать вопросы по почте / в vk вне занятий. Хотя на занятии в явном виде говорится: если что-то будет не получаться, когда будете дорешивать, не тяните до следующей недели, задавайте вопросы в Сети, мы будем вам помогать! И я не понимаю, как изменить ситуацию.

Есть ещё один момент, корни которого, наверное, там же: обращение на "Вы", которое для некоторых так и не вытеснило обращение на "ты". Хотя я в начале года намекал, как лучше. 

Но если в том, что к тебе обращаются на "Вы", как бы тебе не хотелось обратного, в сущности, нет никакой проблемы, то в том, что школьники не задают вопросы вне учебной аудитории, проблема есть!

5) В этом году мы сказали: "Нет!" - зачёту в конце года. Вместо зачёта случилось чаепитие ;) 
Почему я считаю, что я прав:
- кружкам очень не хватает того, что есть в ЛКШ, что есть во многих дружных школьных классах. Общения. Какого-то микроклимата, уюта от того, что ты там находишься. А этот микроклимат - причина того, что новые знания усваиваются лучше и принимаются с большим желанием. Во время занятия особо о том о сём не поболтаешь, а за чашечкой чая не об алгоритмах же общаться? Кроме того, это отличная возможность получить обратную связь, услышать какие-то соображения ребят по поводу того, что происходит на занятиях. Так и мы на последнем занятии сели в круг, чтобы каждый по очереди сказал, что он думает о времени, проведённом на кружке, что ему понравилось / не понравилось, что хотелось бы изменить. В общем, устроили что-то вроде типичного для каждого вечера в питерском физлагере огонька. Разве что вместо свечки в центре круга стояла коробка с пирожными ;)
- конец года - и так нервное для школьников время: у кого годовые контрольные, у кого ГИА или внутришкольные экзамены. Ясно, что даже если о зачёте предупредить, готовиться как следует никто не будет, ибо не до того. Зачёт без подготовки - уже не очень хорошо. А ещё зачёт - это всегда волнение. Ну и зачем лишний раз заставлять замечательных ребят волноваться, когда у них и без того проблем хватает?

При этом я, разумеется, не считаю, что абстрактный зачёт - что-то ненужное. Зачёт - крайне полезное мероприятие, если проводится в правильное время. Полезное для каждого из сдающих, чтобы лучше понять свои слабые стороны; чтобы уяснить какие-то детали, которые не удалось уяснить ранее, получив верные наводящие вопросы от принимающих, и т.д. (всё это, конечно, при условии, что принимают зачёт правильно, но желающими "завалить" без пользы для школьника кружки ведь в среднем не отличаются?) 

В этом году с проведением зачёта, скажем, в марте, не сложилось. Ничего, всё впереди. А ещё можно случайно на первом занятии кружка "зачёт" по ранее изученному устроить. Идеи в процессе разработки ;)

6) Я решил, что стоит сказать: "Нет!" - стекам, декам, очередям, быстрым сортировкам, хипам... 
Да, это, наверное, сто раз непедагогично. Но напрашивается несколько наблюдений:
- сколько раз человеку нужно рассказать, скажем, стек или дек, чтобы тема была понята? Очень сильно удивлюсь, если больше одного. Так этот один раз случится в ЛКШ. А если человек по каким-то причинам не ездит в ЛКШ, то:
а) он неправ ;)
б) вряд ли он что-то потеряет от незнания того, как называются две интуитивно устроенные структуры данных;
- мы готовим к олимпиадам или даём фундаментальные знания в области алгоритмов? В моём понимании это отнюдь не одно и тоже. Фундаментальные знания ещё успеют прийти к ребятам в том или ином качестве в университете. Или, захотят - хорошие книжки почитают на досуге. А на олимпиадах:
а) Хип бесполезен, когда есть set, который, к тому же, умеет значительно больше (и пусть set до поры до времени будет просто множеством, магически работающим за log). Умение писать быструю сортировку (а также понимание того, как она работает) бесполезно, когда есть sort (тут я, конечно, не до конца прав: я хорошо помню, что идеи MergeSort и QuickSort используются и в не имеющих на первый взгляд никакого отношения к сортировке задачах, но такие задачи не очень-то и часты на контестах, чтобы сильно беспокоиться о том, что школьники уровня параллели B-C не умеют решать именно их, а не сотни других не менее содержательных, но более популярных на олимпиадах задач).
б) Стек бесполезен до тех пор, пока человек не понимает те идеи, где используется эта структура, достаточно глубоко. Я уверенно писал работоспособный dfs и произносил слова "стек рекурсии", но до определённого момента ни на секунду не задумывался о том, причём тут стек и какое отношение он имеет к рекурсии. Потом как-то раз понадобилось построить в одной задаче эйлеров цикл без рекурсии... тут-то я и ощутил всю пользу самой концепции стека. Случилось это на 1-м курсе на Харьковских сборах, тогда как про стек мне рассказывали в 8-м классе, потом в 9-м, и так далее. Мне кажется, значительно содержательнее дать, например, на одну сравнительно нестандартную задачу на бинпоиск по ответу больше или разобрать на один несложный пример пугающего на первых порах большинство ребят ДП больше, чем прочитать "лекцию" о стеке и предложить его реализовать: в головах большинства школьников это ещё долго будет оставаться "темой ради темы".
в) Отчего бы не рассказать очередь вместе в bfs'ом, когда настанет черёд последнего? Выносить в отдельную тему рассказ о массиве и двух переменных не кажется верным шагом.
г) Зачем на достаточно раннем этапе говорить про КМП, Z-функцию, если почти все задачи на строки (до тех, что требуют суфф.структур, автомата Ахо-Корасик, и т.д.) решаются хешами?
д) <вставьте своё предложение>

Я понимаю, что необходимость объяснять большинство таких тем оправдывается тем, что каждый алгоритм - содержательная идея, которая развивает способность нетривиально мыслить. Но достаточно взять задачу C-div2/D-div2 какого-нибудь случайного раунда Codeforces, и лежащие в основе её решения идеи с большой вероятностью окажутся ничуть не менее содержательными (речь, напомню, о школьниках уровня параллелей B/C ЛКШ). Разве что алгоритма "Решение задачи такой-то с такого-то раунда Codeforces" в природе не существует. Зато размышление над такими задачами создаёт условия, лучше приближенные к "боевым". Поэтому если выбирать: задача на ДП / бинпоиск / два указателя / ещё какую-нибудь популярную идею или редко нужный на практике алгоритм, - я уверен, нужно выбирать первое. А выбирать приходится: мы же не каждый день по несколько часов занимаемся с ребятами; в результате ресурс времени, имеющийся у нас, слишком мал.

7) Почему никогда не акцентируется внимание на тесных связях между некоторыми темами? Связях не в том, на что направлены темы (то есть, например, не между алгоритмом Форда-Беллмана и алгоритмом Дейкстры), а в том, какие идеи эти темы используют? Абстрактные примеры: почему Форд-Беллман не рассказывается в связке с ДП, почему не рассказать суффиксный массив за N log^2 N сразу же после хешей тем, кто знает слово sort и умеет писать двоичный поиск (фактически, в качестве задачи/упражнения)? Какую сложность представляет ДП по подмножествам для тех, кто понимает идею, лежащую в основе ДП, и имеет представление о битовых операциях? А если принцип ДП уже понят, то в комплекте с dfs может идти ДП по поддеревьям. 

Отступление про ДП: вечная проблема - как его на начальном уровне объяснять. Мне категорически не нравилось, когда про ДП мне рассказывали на нескольких шаблонных примерах, затем я сдавал задачи, представлявшие собой похожие примеры, и, как результат, не имел ни малейшего представления, почему ДП по подмножествам/поддеревьям/профилю/подотрезкам вообще так называется и что общего между поиском кратчайшего гамильтонова цикла и задачкой о числе различных битовых последовательностей без трёх нулей подряд. 
Я пробовал рассказывать динамику через граф состояний и переходов. Не сказать, что мне это показалось особенно эффективным способом, но когда человек, недавно закончивший C/C', одолевает буквально в октябре стандартное ДП по подмножествам (а никакого псевдокода не даётся, даётся только та составляющая идеи, что касается битмасок, объяснённая на совсем простых примерах), это всё же радует.

Утопическая идея №1: составить орграф, в каждой вершине которого пары - тема/типичные задачи на тему. Рёбра ведут в вершину из вершин с pre-requisites (как это адекватно в 1-2 слова выразить по-русски?..): так, из типичного примера на ДП и из задачи на работу с битмасками ведут рёбра в типичный пример на ДП по подмножествам... Возможно, объяснить не удалось. В таком случае, объясню вторым способом: прототип для моей идеи - tree view списка задач на "биотимусе" (rosalind.info), только одна вершина может содержать несколько задач, а задачи на любую алгоритмическую тематику.

8) Едва ли не самая страшная для меня проблема: как объяснять тем, кто находится на совсем начальном уровне? Кто пришёл к нам хотя бы после С' ЛКШ, с большой вероятностью уже достаточно хорошо умеет приспосабливаться к разным преподавателям, рассказывающим об алгоритмах. А если опыта ещё меньше? Нет, безусловно, если преподаватель очень хороший, он сумеет объяснить так, чтобы было понятно всем. Объяснить, не проглотив попутно какую-то важную деталь, которую сам осознал уже давным-давно, а оттого стал считать предельно очевидной. У меня, увы, далеко не всегда так получается. А дальше проходит час-другой безуспешных попыток школьника воплотить в код только что рассказанную идею, ты заглядываешь к нему и... осознаёшь, что он-то понял тебя совсем не так, как ты хотел. 

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

Есть и другой выход - предлагать более опытным школьникам с того же кружка делиться опытом с менее опытными товарищами. На себе проверено неоднократно ещё в школьные годы: чем больше пытаешься поделиться своими знаниями с кем-то, тем больше обнаруживаешь в них пробелов, а ещё тем лучше они укладываются в голове. Docendo discimus (Обучая, учишься сам) - писал ещё Сенека. Эта фраза будет актуальна всегда.

К слову, первый раз с реализацией этой идеи на практике я столкнулся на замечательных уроках геометрии в ФМЛ 239. На них мы осваивали огромный блок теории "коллективно": каждый разбирался с одной небольшой темой (для некоторых темы совпадали, но в целом же тем было много), а дальше происходил обмен знаниями по следующей схеме:
- разбиться на пары;
- рассказать соседу по паре свою тему и послушать, как он расскажет свою. Задать все возникшие вопросы;
- моя тема := тема, которую я только что слушал;
- повторить предыдущие пункты много раз;
Работало безотказно. В случае кружков по программированию это не совсем то, что нужно, потому что больших блоков теории, в сущности, нет, а все полученные знания нужно тотчас отрабатывать на практике, но идею можно и переосмыслить под изменившиеся потребности.

9) Я, кстати, категорически против стандартных хоть сколько-нибудь продолжительных лекций как системы обучения на кружках. Лекция - это такой несложный для преподавателя способ выдать сразу огромный набор знаний, а дальше - сами разбирайтесь / задавайте вопросы. А то, что если лекция покрывала несколько тем, то и так уже немалая часть материала потеряна, т.к. процент запомненного с любой лекции для любого школьника (да и не только школьника) явно не соответствует 100, как бы никого не волнует. И хорошо ещё, если потеряно не самое важное.

Предлагаемые альтернативы:
- см. предыдущий пункт. Рассказываем тему одному-двум школьникам в личной беседе (подмечено: они в таком случае и вопросы охотнее задают!), направляем обременённых новым знанием к тем, у кого его ещё нет, и запускаем "машину взаимообразования". А ещё это идёт в соответствии с идеей пункта 2 об индивидуальных планах: тому, кто впереди всех расскажешь тему, а тем, кто его будет догонять, расскажет уже он сам;
- если почему-то совсем не хочется давать школьникам слово (хотя почему так может быть?), но зато соотношение преподаватели/школьники на кружке не катастрофически маленькое (скажем, хотя бы 1/5 или ещё больше), то можно и самостоятельно рассказать несколько раз одну и ту же тему в маленьких группах. Заодно потренироваться излагать одно и то же по разному, чтобы самому не скучно было. А маленькие группы лучше и тем, что можно попутно задавать вопросы по пониманию школьникам, если сами они никак не дают знать, понятно ли им;
- если лекция покрывает много маленьких подтем, то стоит, мне кажется, очень часто прерываться и давать 10-15 минут на отработку только что полученного знания на практике. Опробовано на базовой вычислительной геометрии в декабре. Конечно, успелось как обычно раза в два меньше, чем хотелось успеть, но процесс шёл динамично, никто не засыпал, а это главное. И это лучше, чем рассказать всё с начала до конца, а потом дать 15-20 задач на формулы и if'ы людям, некоторые из которых первый раз об аналитической геометрии услышали только что и у которых в голове невообразимая каша от обилия материала, который на них свалили в один подход.

Ещё по последней идее:
У нас на кружке язык по умолчанию - C++. Но не предполагается, что пришедшие к нам в сентябре с ним знакомы. Поэтому на первом занятии пришлось довольно долго рассказывать основы (хотелось минут за 15, но вряд ли в час удалось уложиться. Это был своеобразный первый блин, который известно как выходит...), а вот дальше хотелось, чтобы знание языка совершенствовалось в фоновом режиме. Так и сделали: каждое занятие устраивалось несколько пятиминуток, в течение каждой из которых рассказывалось про какую-нибудь одну фишку языка или про что-то напоминалось. А иногда и простые теоретические идеи давались в той же форме: прерываемся буквально на 5 минут, а затем каждый возвращается к тому, что решал перед тем, как прерваться. Опять-таки, мысль в том, что если можно блок теории разбить на подблоки, стоит делать именно так, а не перегружать школьников теорией за один раз.

10) К сожалению, отсутствует какая-либо связь между кружками/сборами/ЛКШ. Да и даже между тремя кружками СПбТЦ СПбГУ как таковой связи нет.
В качестве результата имеем то, что школьники получают за несколько лет одну и ту же задачу по 4-5 раз. А принцип Repetitio est mater studiorum работает только тогда, когда нет более удачных альтернатив. Альтернативы же есть! Если дать человеку n задач на одну и ту же идею, больше вероятность, что он разглядит эту идею на олимпиаде и решит (n+1)-ю задачу, если n достаточно велико, а не равно 1. И менять нужно подборку задач именно на кружках: как минимум, это проще. Я старался это делать, пусть и не всегда получалось. 

Утопическая идея №2: создать перечень задач, которые есть в Полигоне в ЛКШ (и поддерживать в случае добавления новых!), хранить его в публичном доступе и не давать эти задачи на кружках/сборах! 

Да, а задачи брать с codeforces, timus'a, acmp.ru, codechef'а. Да хоть с TopCoder'а: потратить половину занятия на знакомство с не самой интуитивной системой сдачи задач - я считаю, достойное вложение времени, которое потом окупится с лихвой. Скинуть в публичный доступ ссылки на задачи и радоваться жизни. Если вам вдруг принципиально собрать из задач контест и видеть сводную таблицу, vjudge (или любой аналог) решит ваши проблемы в считанные секунды (не работает с acmp и TopCoder'ом, но отлично подходит во всех остальных случаях).

Вышеописанный подход должен устроить всех, кто решал/решает много задач на разных OnlineJudges. Мне зачастую достаточно увидеть название или первые строки легенды решённой несколько лет назад задачи, чтобы вспомнить, о чём она была. Нас таких, наверное, большинство среди преподавателей кружков. Остальным же нужен перечень ссылок на задачи, упорядоченный по темам. Кажется, пока это можно назвать утопической идеей №3. Тем не менее, я (и не только я) планирую/ем улучшить ситуацию в этом направлении в ближайшем будущем. Очень хочется написать: ждите новостей.

Возвращаюсь к кружку...
Итак, мы за этот год ни разу не тратили время на несодержательную часть подготовки контестов, отделяющую готовый перечень задач от готового контеста. И, знаете, мне понравилось ;)

Если есть лишнее время, лучше подготовить, например, какой-нибудь тест. Скажем, у нас была парочка тестов по знанию языка (мы принудительно обучаем на C++ (точнее, "Си с STLем") ), нацеленных на то, чтобы, дав большую часть неправильных ответов, при разборе школьники осознали свои слабые места, чтобы они узнали о некоторых тонкостях языка не на олимпиаде, где высока цена ошибки, а тогда, когда ошибаться в чём-то даже полезно.
Идея с тестами совсем не моя (и на мне самом она хорошо работала ещё тремя годами ранее). Я привнёс одно изменение: удобным показалось делать тесты в качестве опросов в Google Docs, чтобы дальше у меня была возможность мгновенно получить таблицу для сравнения результатов ребят и понять, на что требуется обратить особое внимание.
Для примера один из тестов.

Утопическая идея №4: объединить усилия, делать тесты на какой-нибудь единой платформе (желательно, ещё более удобной), делиться ими среди преподавателей и использовать плоды совместных трудов. Понятно, что речь не только о тестах по языку программирования: например, в ЛКШ в C.cpp мы готовили (в печатном виде) тесты по алгоритмам. И не одни мы этим занимались, но хочется консолидации усилий.

11) Вопрос: нужна ли кружку сводная таблица? В нашем случае она практически невозможна (из-за индивидуальных планов), но если отталкиваться от стандартного подхода, когда все идут по учебному процессу наравне друг с другом, нужна ли, как считаете вы?

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

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

12) Я незадолго до начала года открыл свою страничку в vk, и очень правильно сделал: мне имели возможность (и несколько раз ей пользовались) писать и родители ребят. Если речь идёт ещё о классе 7-8, школьник, конечно, будет в первую очередь делиться своими успехами и неудачами, своими впечатлениями с родителями. Даже если родители плохо представляют, что такое олимпиадные задачи по программированию (или даже вообще "программирование"), всё равно они, а не преподаватели, будут первыми, кто узнает от школьника, что тот думает. Если преподаватель объяснил путано и совершенно непонятно, увы, далеко не каждый школьник наберётся смелости на это намекнуть. Тем не менее, преподавателю важно об этом узнать и как-то скорректировать свои действия.

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

Чем может быть чревата обратная ситуация? Вот вам пример из жизни: в 8-м классе я первый раз пошёл на кружок по олимпиадному программированию. Ввиду очень слабой математической подготовки да и почти отсутствующих навыков программирования (чего стоил мой год с лишним почти самостоятельного обучения программированию, если я даже с массивами работать не умел?), мне было, конечно, очень сложно. Уже в октябре-ноябре я, приходя с занятия домой, честно и откровенно говорил, что понимание у меня было первые минут 10. Дальше - как в тумане :) Разумеется, в ответ мне советовали отложить кружки такого рода на будущие годы. Меня спасли упрямство, а также невероятное везение, пришедшее через год с небольшим. Упрямство не дало поставить крест на посещении кружка (и позволило по крупицам набирать те знания, которые я мог выхватить из общей канвы. Лекции были и в целом прекрасными, но я к осознанию их содержания был не готов. А поднять руку и сказать: извините, ничего не понимаю - это, сами понимаете, большая, почти никого не обходящая проблема; а также постепенно решать задачи, изобретая для каждой свои велосипеды. До сих пор помню и своё вычитание длинных чисел на добрую сотню строк, и подсчёт компонент связности при помощи упрощённого подобия СНМ-а с линейным временем работы), а везение в 9-м классе принесло диплом призёра на РОИ, не особо заслуженный, но заставивший поверить в себя и поставить новые, более высокие цели. Беда в том, что в общем случае упрямство не особо похвальное качество. Поэтому диалог преподавателя с родителями призван объяснить, что ребятам не стоит ждать результата сразу, не стоит расстраиваться из-за плохих результатов, но стоит продолжать трудиться, потому что труд будет вознаграждён. Иначе рискуем потерять потенциально талантливого человека из-за первых неудач.

13) Интересно, привлекал ли кто-нибудь до нас к преподаванию на кружках самих школьников (разумеется, более опытных, чем те, кто занимается на кружке)?
Меня, кстати, привлекали один раз в 9-м классе. Но ты был кружок по web-программированию, поэтому аналогия неуместна. А ещё я тогда ну совсем не справился...

Мы попробовали, ухватившись за единственную возможность не прерывать занятия: в конце января я только-только выбрался из больницы, а из теоретически остававшихся 6 человеко-занятий в реальности в нашем распоряжении было 2-3. И если 2, то в один и тот же день на неделе, а кружок-то два раза... 

Эксперимент стоит признать удавшимся! Просто огромное спасибо Никите Подгузову, Пете Смирнову и Севе Степанову! Без них хорошее начинание заглохло бы в середине. Учитывая, что писали мне о занятиях как сами школьники, посещавшие кружок, так и их родители (см. предыдущий пункт), справились они отлично! И даже централизованность системы удалось не нарушить: процессом по-прежнему руководил я, излагая содержание грядущих занятий новоиспечённым коллегам в vk / по телефону, а после занятий в ответ получая подробнейший рассказ о том, как всё прошло. Подробный вплоть до того, что про каждого школьника я знал, какие задачи он пытался сдавать, какие сдал, какую теорию узнал.

Продолжаю раздавать благодарности :)

Спасибо Олегу Давыдову, также поучаствовавшему в спасении нашего кружка.

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

Спасибо Владе Рау, Альбине Езус и Гоше Новикову, составившим вместе со мной изначальный коллектив преподавателей кружка. И осенью мы все отлично справлялись! Очень жаль, что обстоятельства оказались против того, чтобы всё так же отлично и продолжилось. Но задел был сделан хороший, и до конца довести начатое, благодаря помощи вышеупомянутых замечательных людей, удалось.
Уже писал в п.2 и п.8, почему нас было так много. Дополняю: четыре человека - это четыре взгляда для происходящее и четыре источника идей, часть из которых удалось взвешенно рассмотреть и внедрить в процесс.

И, хоть я и поблагодарил всех ребят, кто был на последнем занятии, а также не преполагаю, что они это читают, спасибо нашим замечательным школьникам! Работать с ними в этом году было одно удовольствие! Даже те, кто почти не садился за программирование дома, на занятия приходили с желанием работать, а не засыпать и не заниматься чем-то посторонним. На стульях никто не катался, по Скайпу друг с другом через всю аудиторию никто не общался (вы не знали, что такое бывает? Зашли бы к нам в прошлом году...), и так далее. Уж не знаю, в чём кроется причина. Возможно, даже в не самом стандартном для кружка по программированию соотношению числа девушек к числу юношей (которое, бывало, существенно превышало 1): первые в среднем по личным наблюдениям ответственнее подходят к делу. Возможно, ещё в чём-то. Хотелось бы верить, в то, что заслуга и в разнообразии, которое мы вносили в учебный процесс, чередуя разные подходы, большая часть из которых описана выше.

14) Несколько слов по итогам года, который ребята провели на кружке.

Я уверен, что сейчас у каждого из тех, кто ходил к нам с осени, за плечами та теоретическая база, с которой можно добиться, как минимум, диплома призёра на РОИ. "Беда" в том, что диплом дают не за понимание разбора, а за самостоятельное придумывание и реализацию решений. Способность придумать решение здесь, разумеется, самое проблемное место, к тому же требующее больше всего практики. Этой практики традиционно не хватает нигде: ни на кружках, ни в ЛКШ, ни на сборах. А метод её набрать один (обязательно поправьте, если считаете по-другому) - брать подряд сравнительно непростые задачи, продолжительно ломать над ними голову, а затем при необходимости вникать в разбор. Ликвидировать нехватку практики такого рода, на мой взгляд, в условиях кружка могут только теоретические семинары, то есть "лекции", на которых предмет обсуждения не алгоритм, а содержательная задача, а говорят, в основном, школьники. Преподавателю же даётся роль усовершенствованного разбора, который не даёт узнать своё содержание полностью, а лишь наталкивает в нужные моменты школьников на верные мысли. Первый такого рода теор.семинар случился у нас только 30 апреля, то есть в первый раз, когда я появился на кружке во втором полугодии. Я не жалею, что не пытался опробовать такую форму обучения раньше, так как важно было вначале дать ребятам существенную теор.базу (например, некоторые из них теперь умеют писать дерево отрезков, почти все должны были реализовывать весной корневую, и т.д.), чтобы [почти] не отвлекаться на неё впоследствии (на самом деле, в голову не приходят темы, которые нужны, но не были рассказаны. Декартовы деревья, игры и потоки школьникам, у которых иногда возникают затруднения с B-div2 Codeforces, уж точно не нужны. Да и пока у них не будет стабильных 3-4 в div2, пока не будет способности быстро придумать и написать решения первых трёх задач каждого дня почти любой регионалки, какие декартовы деревья?). И то, что большинство пока не показало хорошие результаты ни на одной олимпиаде, не так страшно: как-никак 11-классники к нам не ходили. Теперь важно сделать акцент на идейной составляющей задач, ни на что больше не отвлекаясь и пользуясь подговтоленной алгоритмической базой, и результат придёт. Надеюсь, что моё желание продолжить начатое и работать в следующем году примерно с тем же коллективом школьников не встретит возражений, и тогда теор.семинары станут основным видом занятий. Благо, за задачами для семинаров мне, по-прежнему достаточно регулярно участвующему в контестах, "ходить" особо далеко не придётся.   

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

P.S. Содержание этой заметки очень долго обдумывалось, но, к сожалению, начал писать я её сравнительно недавно. А раз идеи не фиксировал ровно в те моменты, когда они приходили ко мне, возможны апдейты. Ещё, возможно, в комментариях всплывёт какая-нибудь забытая тема, соображениями по поводу которой хотелось поделиться.

понедельник, 2 июня 2014 г.

Kivy App Contest 2014

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

Совершенно случайно наткнулся в марте-апреле на анонс конкурса по разработке приложений (помнится, гуглил тогда что-то конкретное по связке Python + GUI).

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

О конкурсе


  • собственно, страничка соревнования;
  • обязательным условием являлось написание приложения на фреймворке Kivy для Python'а (поддержкой этого фреймворка и занимаются организаторы). Фреймворке, насколько я понял, не пользующемся большой популярностью. Причём, наверное, не пользующемся ей от недостаточной раскрученности. А конкурс - отличный повод расширить круг тех, кто знает, что такое Kivy, и им пользуется, а заодно увеличить количество публично доступных и способных завлечь новых разработчиков приложений;  
  • конкурс проводился во второй раз. Первый имел место в 2012. Я тогда знать не знал обо всём об этом (да и на Python'е написал к тому моменту лишь несколько олимпиадных задач суммарно строчек на 50). И не один я не знал: всего 11 человек поучаствовало в тот раз. Это при не менее способствующей творчеству теме "Игры". Планшет за третье место при таком числе участников смотрелся многообещающе. А при ближайшем рассмотрении достаточно слабенького на мой вкус проекта-победителя - так и вообще...
  • на разработку отводился месяц (начиная с середины апреля). Тема конкурса (Education) была анонсирована с началом этого периода;
  • участвовать можно было как в одиночку, так и командами;

О фреймворке

  • Kivy App устроено так: программе на Python'е сопутствует файл *.kv, позволяющий средствами очень удобного языка (kvlang'а) описать GUI и графические примитивы. Вынесение графической части за пределы кода, отвечающего за основной цикл работы программы, и описание её на другом, лучше соответствующем цели языке, чем-то напомнило html / каскадные таблицы стилей, живущие независимо от JavaScript'а, хоть и тоже на стороне клиента.
  • Эти "каскадные таблицы стилей" (возможно, это только моя ассоциация, а вам kvlang их и не напомнит), как и Python, "вынуждают" программиста оформлять код легкочитаемым и унифицированным образом: отступы играют здесь ту же роль, что и в Питоне;
  • В описании графики (аналогия с Java Script Canvas, но в данном случае можно обойтись и без Python'а, воспользовавшись только разметкой на kvlang'е) замечены вкрапления элементов, знакомых мне, в первую очередь, по OpenGL: translate/rotate/scale/что-то вроде стека модельно-видовых матриц, и тому подобное.
  • Он просто шикарно документирован! Вы это слышите из уст человека, который ещё осенью поносил документации на MSDN (нравящиеся, во всяком случае по моему впечатлению, среднестатистическому программисту) на чём свет стоит! Документация Kivy представлена в двух вариантах: как в превосходно собранной 1000-страничной pdf-ке, которую было очень удобно читать с планшета в транспорте, так и на сайте. Плюсы (обоих вариантов): 
    • "связность" по ссылкам внутри документации зашкаливающая, так что информацию о любой упоминающейся детали можно быстренько уточнить; 
    • документация богато снабжена скриншотами, примерами работоспособного исходного кода;
    • оформление (цветовыделение, курсив, и тому подобное) позволяет быстро выхватывать из контекста то, что действительно важно.
  • Кросс-платформенный. Один и тот же код, обещают нам, можно будет собрать в работоспособное приложение и под Android, и под iOS, и под MacOS, и под Windows. Одна неожиданность: чтобы собрать приложение под Android, нужно воспользоваться Linux'ом, а вот под, собственно, Linux приложение не собрать.
  • Больше ничего писать не буду, посмотрите и попробуйте сами: мне кажется, фреймворк того стоит!

О моём проекте

Вначале предлагаю посмотреть, что у меня получилось:


Замечания насчёт видео:

  • FPS в реальности не настолько плохой: в движении рывками виноват Screencast-O-Matic, при помощи которого я делал это видео. Там подходящих настроек не обнаружилось; тратить время на поиски другой программы не хотел, раз одна уже была когда-то установлена. Кстати, посоветуйте что-нибудь удобное и качественное для создания скринкастов;
  • но, когда "на сцене" появляется много колбочек, FPS всё же резко падает. Ниже о том, почему;
  • вы видели обучающий уровень 0 и начало уровня 1. В текущей версии есть ещё уровни 2 и 3, а также простая и задокументированная возможность добавлять какое угодно количество пользовательских уровней. Все они устроены одинаково:
    • на конвейере могут появляться только вещества из специального списка 1 (для каждого уровня список свой);
    • цель - получить в ходе реакций любые X различных веществ из Y, представленных в отдельном списке 2 (для каждого уровня список свой);
    • можно пополнять базу веществ (и в частности, задавать им цвет) и реакций (таким же простым, понятным рядовому пользователю, догадавшемуся открыть readme.txt, способом. К слову, после прохождения третьего уровня приложение само посоветует пользователю сделать это). Допустимо сколько угодно конечных продуктов реакции.

Несколько слов о процессе разработки:

  • Вначале, когда я только-только узнал о том, что вскоре начнётся конкурс, и принял решение поучаствовать, я думал, что он вновь будет посвящён разработке игр. Первая мысль: нужен художник-дизайнер! К сожалению, на мой призыв один хороший знакомый, подходивший под описанное в предыдущем предложении желание, ответил, что время выделить не может... А тут подоспел и анонс темы конкурса, после которого я решил, что самостоятельно постараюсь справиться: Education App вам не игры. Но, конечно, с художником было бы лучше. Например, был бы какой-нибудь фон на околохимическую тему на дальнем плане. А ещё мне бы колбочки нарисовали по-человечески. А так, колбы, которые вы видите, представляют собой по 4 кривые Безье с подогнанными мной параметрами, ну и ещё пару линий.
  • Занятный момент: вы видели, что в каждой колбочке находится "жидкость". Так вот, чтобы она удачно заняла пространство, хотелось запихнуть внутрь колбы прямоугольник со скруглёнными углами. И вот незадача: примитив "многоугольник со скруглёнными углами" добавлен в версии 1.8.1 фреймворка Kivy, а последняя поддерживаемая Windows версия, - 1.8.0... В результате подгонял самостоятельно из обычных эллипсов ;) 
  • Торможение, по всей видимости, вызвано использованием большого количества NumericProperties. Каждая колбочка - это виджет, описанный в *.kv-файле. Чтобы задавать положение колбы python'ом, нужно сделать его [положение] этим самым NumericProperty. Чтобы задавать надпись на колбе, StringProperty. Чем больше properties в программе, тем медленнее работа, - говорят лучше знакомые с фреймворком люди. Наверное, этот недочёт должен обходиться более адекватным способом, нежели отказом от большого числа виджетов, но я слишком поздно понял, что все силы стоит бросить именно на то, чтобы понять, как его обойти.
  • Раз сказал про надписи, упомяну как нельзя лучше подошедшую мне особенность фреймворка: внутри label'ов поддерживается упрощённый html, благодаря чему отображение индексов в формулах, разноцветных надписей, выделение главного полужирным/курсивом не создаёт никаких проблем. Помню, почти 7 лет назад, когда я делал свои самые первые шаги в программировании, мне аналогичных возможностей очень не хватало в Borland Delphi 7.
  • Занимался проектом примерно две недели. Иногда тратил на него буквально по часу, а иногда и весь день. Спектр возможностей фреймворка изучал, читая документацию в метро и одновременно обдумывая, как (и можно ли? стоит ли?) интегрировать каждую новую возможность, о которой только что узнал, в свой проект.
  • Закончил, как обычно, в последние минуты... :) Не получается пока по-другому ни с чем!.. Последний коммит - за 19 минут до дедлайна, описание и скриншоты - в оставшиеся 19 минут (а за окном в тот момент - 3 часа ночи...).
  • Да, у вас есть возможность посмотреть код, но не делайте этого, пожалуйста! Я знаю, что текущая версия лечится только двумя способами:
    • рефакторингом,
    • а то и вообще переписыванием проекта с нуля. Благо < 1200 строк суммарно на Python и kvlang это не так уж и много для слова "переписать".
Я также знаю, что "плохо" - слишком мягкое слово для двух файлов с кодом на весь проект... Подождите, я ещё не сказал, что работа от начала до конца велась в Far Manager'е?) 
В общем, привычки олимпиадника давали о себе знать, но в июне-июле непременно этот проект поправлю и больше так не буду: мне самому не понравилось каждые 5 минут в последние часы перед дедлайном искать среди 900+ строк main.py ту, которая нужна мне в настоящий момент.
  • Основная причина плохой структуры кода - то, что он разросся раза в два за последние три дня написания. И было в те часы уже не до того. Равно как и перебраться из Far'а в какую-нибудь IDE, а также разнести код по разных файлам - хорошие начинания, требовавшие вложений времени, которые рисковали не успеть себя оправдать. В общем, начинать надо было, не отталкиваясь от Far'а и одного файла, тогда бы и в конце проблем было бы на порядок меньше.
На тему того, почему выше вы видели видеоролик, а не ссылку на работоспособное приложение:
  • В 20-х числах мая я пытался собрать приложение под Android, вчера попытался сделать это же под Windows. На данный момент оба начинания не увенчались успехом: что *.apk, что *.exe у меня есть (только *.apk пока не умею скидывать кому-нибудь, не подключив его устройство к своему ноутбуку с Ubuntu), но оба они вылетают с ошибкой при запуске. Пока что разбираюсь, что не так. Как будет, чем поделиться, непременно поделюсь. 
  • А чтобы запустить проект из исходников, требуется предварительно слишком много всего установить, чтобы я предлагал этим кому-нибудь заниматься :)
На тему того, почему конкурс начался в середине апреля, закончился в середине мая, а пишу я о нём только в начале июня:
  • Анонс результатов должен был появиться 20-го мая (по GMT, то есть не позже 3 ночи 21-го мая в нашем часовом поясе). Я с нетерпением ждал этого момента. 
  • Тем не менее, вечером 20-го мая на сайте появилась следующая запись (обратите внимание на орфографию в двух последних предложениях: кажется, писавшие это долго не спали, пытаясь успеть к ими же поставленному сроку :)
  • Потом орфографию всё же поправили) 
  • И наконец, 1-го июня результаты были опубликованы.

Мои ожидания


  • В середине апреля я поставил себе цель (одну из тех самых X целей на год) - взять один из 8 ценных призов (одно из трёх первых мест либо победа в одной из пяти специальных номинаций: см. сайт). Информация сейчас куда-то пропала, но призы были солидные: так, за одно из трёх первых мест участник получал смартфон/планшет (не на выбор ;), а в зависимости от места) из линейки Google Nexus, бесплатный онлайн-курс английского/французского с инструктором (а вот тут на выбор ;), и мой был бы очевиден, достигни я результата-мечты), привилегии на год на GitHub'е и что-то ещё. 
  • Ставя эту цель, я ориентировался на прошлый конкурс с 11 участниками, когда, ко всему прочему, даже проект-победитель отнюдь не впечатлял. 
  • За сутки до крайнего срока внесения изменений в проект я, в числе 177 участников (да, электронные адреса в массовых рассылках в наши дни скрывать становится всё менее и менее модно...), получил deadline reminder. "177 участников" - ключевое словосочетание в предыдущем предложении :) Ожидания сразу приуменьшились, хотя я ещё грезил номинацией Best App Idea: расширяемость под нужды конкретного пользователя, имеющего своей целью запомнить конкретные хим.реакции, должна была быть высоко оценена.
  • Приза мой проект удостоен не был, то есть цель, формально говоря, не выполнена, но я всё равно доволен! Доволен невероятно 
    • тем, что поучаствовал (как писал выше, впервые участвовал в чём-то подобном), 
    • тем, что на сей раз я сам ставил себе задачу, а не выполнял кем-то навязанное задание. Границ для творчества практически не было, и это прекраснее всего!
    • тем, как шёл процесс разработки,
    • тем, чему научился за это время, 
    • тем, что в результате многое, пусть далеко не всё, что задумывалось, получилось. 
    • И ощущаю себя причастным к конкурсу, объединившему участников from over 56 different countries, как гласит страничка соревнования.
  • Да и не совсем с пустыми руками останусь: любимый приз программиста-олимпиадника - футболка - не обошла меня и в данном случае: моё приложение среди 53 valid entries that could be scored and used for the contest. 53 человека пополнят свой гардероб новой вещью. Будет забавно, если на ней будет изображён этот логотип: с ним есть риск привлекать слишком много внимания ;)

А закончу пост в обычном стиле: делитесь идеями, соображениями, знакомыми художниками и опытом участия в подобных мероприятиях: не один же я в них участвую!

P.S. Традиционный хронометраж: на написание (вы не подумайте: не приложения, а лишь этого поста) затрачено ~ 3h30, разбитые на вчера и сегодня.


воскресенье, 1 июня 2014 г.

Итоги мая

Pre Scriptum. По-хорошему, судя по тому, что гуглится, я должен был написать "Prae Fatia", но согласитесь, что Pre Scriptum выглядит понятнее?
Друзья, как и всегда, призываю вас активнее участвовать в обсуждении! Не просто так прошу: ваши идеи способствуют тому, что мои собственные расцветают, обретают новые формы! И не говорите, что у вас нет идей: не поверю! ;)

Основная часть

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

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

  • по 3.05 - coursera, см. предыдущий пост;
  • по 15.05 - python + kvlang;
  • по 24.05 - французский;
  • по 31.05 - биоинформатика;
Подробности, касающиеся трёх последних периодов, будут, как только будут результаты. А будут они, соответственно:
  • непонятно когда, т.к. должны были быть опубликованы 20-го мая, а теперь отложены на неопределённый срок. Это и была та самая вторая цель, которая должна была быть раскрыта в мае, как я писал в "Итогах апреля";
  • "может, через месяц; может, через два";
  • 25.06;
А в перерывах находилось время и на CS центр, и на соревнования по программированию, и на многое другое (многое другое, в свою очередь, не имело никакого отношения к программированию). Всё-таки разнообразие в видах деятельности способно увеличить продуктивность в разы и заодно не дать забыть, что такое энтузиазм!

Выдержка из того, чем ещё запомнился мне май 2014-го:
  • первой вылазкой в музей с декабря;
  • эмоциями от достижения первой из поставленных на год цели;
  • первым в жизни очным общением с французом;
  • первым визитом к стоматологу за ~ 6 лет;
  • первыми оценками в весеннем семестре Computer Science Center'а;
  • первым в жизни экзаменом по французскому (никак не пересекается с первым общением с французом: то случилось раньше);
  • последним занятием нашего кружка по программированию в этом учебном году. За год накопилось столько мыслей, что все они непременно будут собраны воедино, отшлифованы и заключены в отдельную заметку. Я в процессе, это быстро не сделается :)
  • первой футболочкой Google Code Jam, с 4-й попытки наконец-то взятой;
и не только.

А ещё я почти перестал следить за спортом. И если вам меня не понять, то, наверное, не понять и насколько это прекрасно: получить столько времени и не тратить эмоции по сомнительным поводам. Я, скажем, не имею ни малейшего понятия о том, как вчера сборная России по футболу сыграла со сборной Норвегии. Неплохо было бы ещё и не знать о том, что они вообще играли вчера. Ведутся работы и в этом направлении ;) Чемпионат мира по хоккею (с очень сомнительными по силе составами едва ли не всех топовых сборных за исключением (да и то с натяжкой) сборной России. Опять-таки, детали, которые было бы неплохо и не знать вовсе) я пропустил целиком и полностью. На очереди ЧМ по футболу! Что-то, конечно, посмотрю, но верю, что "что-то" не перекроет половину всех игр, как это случалось раньше, и даже не имеет теоретических шансов к ней приблизиться.

Теперь ещё одно усилие воли, и внимание с политики, где в наши дни, похоже, нет шансов получить реальную картину происходящего, на каком языке не читай и не слушай (а особенно, если читаешь и слушаешь на трёх...), должно быть переключено на что-нибудь более жизненное, актуальное для меня, позитивное и недвусмысленное!

Перехожу к статистической составляющей:



Комментарии. Их, как всегда, много:

  • новая область, которую я предлагал в "Итогах апреля" угадать по значку, носит гордое имя "Здоровье". Значок - попытка изобразить что-то похожее на эмблему "Всемирной организации здравоохранения", но сама область включает в себя отнюдь не то, о чём можно было бы после такого начала подумать. В ней ежедневные физические упражнения, прогулки, в ней будет бег (верю, что не так уж долго осталось по нему скучать), будет и многое другое. Поскольку физическую активность следует поощрять, потолок сравнительно высок, а баллы набираются не так сложно/долго, как в некоторых других областях;
  • перевод упражнений в баллы, а также изменённый способ пересчёта результатов дня по ТЕД в CSS, безусловно, сыграли свою роль в том, что теперь хотя бы положительных сумм за день стало намного больше, чем было раньше. Но заслуга в этом и у того, что месяц в целом был проведён заметно продуктивнее предыдущих;
  • по "потолкам", да и по баллам в целом, должны бы неплохо выделяться два последних обозначенных в начале поста периода;
  • до сих пор затрудняюсь придумать для ряда занятий адекватный эквивалент результату в баллах. Временами доходит до 0,01 балла за строчку кода... Вроде, бóльшую чепуху придумать надо ещё постараться, но как ещё связать друг с другом плотную работу над проектом (тот самый период "python + kvlang") и систему начисления баллов? Я, кстати, открыт для идей и предложений ;)
  • отдельный разговор о сне (бонус, левый верхний угол). В начале месяца мне казалось, что я добился своего: я стабильно ложился в 21-23, вставал в 6 (по будильнику, но без проблем и без желания подремать ещё). Потом случился один вынужденный срыв, когда я лёг не то в 6, не то в 7 утра... Вроде, удалось выправиться, и тут ещё раз - 4! Оба вышеупомянутых случая примечательны тем, что я пробовал на себе двухфазный сон, потому что на непродолжительное время встать требовалось через час после отбоя. Вторая фаза длилась оба раза в районе 3 часов, и, надо сказать, что 1+3 часов для сна мне оба раза хватило с лихвой (и ощущения были не хуже, чем после обычных 7-9 часов сна). Сегодня, если удастся заснуть днём, случится третья попытка: уже по всем канонам, с фазами, разнесёнными друг относительно друга почти на полдня. А вы когда-нибудь пробовали двухфазную/многофазную схему сна? Если да, хочется впечатлений/ощущений/выводов насчёт того, стоит ли игра свеч.
  • отдельные слова про ТЕД:
    • аж 5 строчек без единой галочки я насчитал. Да, это очень плохо... 
      • Но только от одной из этих строк я откажусь на июнь. Речь, как ни странно, о французской лексике (вторая сверху строка): имеющаяся на данный момент в Anki (вкратце, это "метод воронки для ленивых". На подробности когда-нибудь отведу целый пост) база слов не выдерживает никакой критики: там столько всего лишнего и при этом не хватает такого количества слов, которые нужны, но вечно забываются в самый неподходящий момент... Один из "слонов" (это, кстати, антоним к слову "лягушка" ;) Как всегда, отсылаю вас к "Тайм-драйву") на июнь - навести порядок в базе.
      • Остальные четыре будут просто светиться зелёным в первый месяц самого зелёного времени года. Вот увидите!
    • рекорд месяца только в 4 галочки за день не впечатляет. Наверное, это обратная сторона изменений, внесённых в процесс пересчёта баллов.

От комментариев к майским таблицам переходим в таблицам июньским.

Suomi vastaisku! (надеюсь, все слова правильно употребил...). Новая загадка: откуда я взял глагол? (в словарь не смотрел, есть конкретная привязка к финскому варианту одного очень многим известного названия)

Думаю, по подписи вы заметили основное отличие таблиц на май и июнь. Потолок по возвращённой области поднят на 3 балла относительно февраля-марта, планы гигантские!


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

Что поменялось?
  • количество пунктов. Ну, вы сами видите ;)
  • кроме отдельных пунктов, есть сгруппированные по блокам. Имена блокам - биоинформатика, шахматы и французский. Последний - следствие нескольких традиций (точнее, пока ещё "надеюсь, традиций"), сформированных по итогам упомянутого выше периода 16-24 мая;
  • столбик, озаглавленный "-$" (к слову, не имеющий никакого отношения к валюте :) Лишь расшифровка - долг), отныне будет перед началом каждого месяца содержать информацию о балансе сделано / нужно было сделать. Такие же показатели будут вычисляться по итогам месяца и венчать таблицу. Сравним - сделаем предметные выводы;
Не побоюсь снова выделить основные области на наступивший месяц. Это:
  • шахматы,  совсем скоро (17-25.06) играю в первом за почти 6 лет рейтинг-турнире, впервые за ещё больший срок появившись в спортивной школе, где занимался с 2001-го по 2008-й;
  • финский, немногим больше месяца до момента, когда его можно будет попробовать применить; 
  • французский и биоинформатика достаются в наследство с прошлого месяца. Я вошёл во вкус :) 
За сим всё. Делитесь опытом и соображениями, отгадывайте загадки! Генерируйте и воплощайте в жизнь свои идеи, творите!

P.S. На написание затрачено чуть менее 2,5 часов. Неплохо для тех же двух с половиной часов сна. Спокойного вам июньского дня. А у меня сиеста (или вторая фаза сна, как вам угодно) до очередного раунда Codeforces.
P.P.S. Вы не думайте, что 2 часа сна - это норма. Нормой будет 4-5 часов ночью + 1-2 днём, если смогу приучиться спать в светлое время суток и не будет противоречий с распорядком дня. Сегодня же во всём виноват yandex.contest :)

пятница, 16 мая 2014 г.

Первая цель достигнута, или как совмещать то, что кажется несовместимым

В ночь с 13-го на 14-е мая появился повод поставить первую галочку на своей карте целей. На самом деле, об успехе я знал уже 3-го числа, но следовало дождаться формального подтверждения результата.

Два следующих дня, 14-15 мая, прошли уж очень напряжённо. Зато теперь 20-го мая я жду нового результата. И если новая цель будет покорена, радости моей не будет предела. Но и в противном случае я всё равно буду собой доволен. За что и почему - читайте после 20-го числа. 

А пока я не с головой погрузился в то, что будет актуально для меня в самое ближайшее время, а именно в Big Data и французский (связи никакой, просто связанные с ними дедлайны совсем неподалёку друг от друга), настал момент похвастаться результатом.

Картинка для привлечения внимания, подробности следуют ниже.


Надеюсь, у всех получилось уловить основную суть. 

Итак, я совместил две "несовместимые" области - французский и программирование - и на протяжении примерно двух месяцев время от времени ими обеими одновременно занимался.

Вообще, исходно я определил эту цель в раздел "французский", решив, что всё содержание курса мне знакомо, а вот язык да ещё и незнакомые термины могут сделать получение сертификатацель была именно такая) сложной задачей. Но... примечательный факт: с какого-то момента программирование стало создавать мне намного больше проблем, чем иностранный язык. Боюсь, правда, что это всё-таки не комплимент моему знанию французского, а намёк на то, что с ООП даже на C++ дела были совсем плохи. Что ж, стали они, во всяком случае, лучше. С множественным наследованием, с переопределением потокового вывода и многим другим я теперь хорошо знаком, причём, что важно, и на практике.

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

Все задания путём многочасовых усилий были доведены до 100% (формально говоря, не совсем: у меня на 5 баллов меньше максимума в первом задании и на 5 [бонусных] больше максимума во втором, но общей сути это не меняет), но, к сожалению, в случае с последним заданием я сумел уложиться лишь в hard deadline, из-за чего потерял половину баллов за самую дорогостоящую четверть курса. Итоговый результат - 83.1% - конечно, неплох для первого в жизни онлайн-курса, пройденного к тому же на французском языке, но небольшой осадок есть... Почти посерединке мой процент между требуемым на сертификат (75%) и на сертификат с отличием (90%), а ведь и до абсолютного максимума мне не хватило только усилия воли, чтобы приступить к последнему заданию заблаговременно, а не за 5 часов до первого дедлайна.

О французском внутри курса:
  • кроме терминологии (которая благодаря так нравящейся мне любви франкофонов к своему языку и его традициям часто не является калькой с английского) в условиях задач и лирики было немало. Не настолько много, как в типичных уральских олимпиадных задачках ;), но мне хватило и того, что было. И юморили швейцарцы, как могли: например, в одной из задач, где требовалось описать классами лабораторию, в которой разводили и клонировали мышей, согласно условию, клонированная мышь зеленела по достижению половины продолжительности жизни. Ну, всякое бывает... Наличие неформализованных, но важных частей в условиях, понятное дело, заставляло внимательно читать. Всё-таки не русский и не английский: бегло просмотрев текст, пока ещё суть уловить не удаётся. К слову, легенды задач были на любой вкус: нам давалась возможность промоделировать и морской бой, и упрощённую до неприличия модель мозга (по сути нейросеть, но обучающуюся не самостоятельно, а под влиянием команд извне), и конструктор из кубиков, и многое другое. Лексика под стать легендам блистала разнообразием, что меня очень радовало; 
  • помимо условий, ко всем 7 урокам я читал от точки до точки туториалы, каждый из которых тоже представлял из себя задачу, основанную на "примере из жизни". Ещё одна немаленькая порция французского :)
Совсем не сложились дела с видеоуроками, сопутствовавшими курсу. Раз все задания сделал на 100%, учась только по туториалам, значит, программированию игнорирование видео вряд ли сильно навредило. А вот ради французского стоило послушать и посмотреть. Тем более, когда записаны занятия так здорово и все до единого снабжены субтитрами (французскими же). После вводного видео, я на соответствующую страничку курса почти не заходил, но в начале мая все материалы скачал. И надеюсь, что обращусь к ним в самое ближайшее время.

Были в рамках курса и тесты к каждому уроку. На получение сертификата они никак не влияли, что снижало мотивацию на них посмотреть. В результате обратился к ним лишь в последний день, каждый попробовал прорешать. С первой попытки на полный балл вышли далеко не все, и добивать не стал. Всё равно всё-всё-всё успеть нельзя, а с основной частью я успешно справился. Наш девиз: максимализм в охвате разнообразных задач в обход перфекционизма в реализации своих замыслов! (за редкими исключениями) А потому пора было приниматься за другие актуальные задачи, а не доводить тесты до идеального состояния.

В заключение. Качество материалов было отличным. А потому, если Федеральная Политехническая школа Лозанны предложит на Курсере ещё какой-нибудь курс на интересную мне тему, я без промедлений возьмусь за него! Не отказываться же от совмещения двух дел, каждое из которых можно смело назвать и приятным, и полезным?!

P.S. Да, вы не подумайте: EPFL - это ВУЗ, причём очень-очень сильный (почитайте, например, wiki)! Просто в наше время люди любят изобретать нестандартные названия. И называясь "школой", дают фору сильным "классическим" университетам. Впрочем, за примерами и в Швейцарию отправляться не надо, вполне достаточно "оглядеться" в Питере.

P.P.S. Дань традиции - хронометражу. На написание поста потрачено 1h25.

воскресенье, 4 мая 2014 г.

Вновь за шахматную доску!

[Этот абзац должен был оказаться в конце, но чтобы все прочитали... Да, список пунктов после абзаца следует воспринимать как его продолжение] Перед тем, как летом я поучаствую в одном или нескольких шахматных турнирах, неплохо было бы получить практику: понять, какие дебюты хромают больше; осознать, на каком уровне я сейчас нахожусь. Предыдущее предложение можно воспринимать как призыв! Детали:
  • Хочется, чтобы уровень оппонентов был в диапазоне 1 разряд-кандидат в мастера-мастер ФИДЕ. Сам я летом 2008-го на момент последнего участия в рейтинговом турнире был кандидатом в мастера, но с тех пор многое могло поменяться как в ту, так и в другую сторону.
  • В качестве площадки для игры предлагаю эту. Она удобная (даже регистрироваться не надо), предлагает гибкий способ установки контроля времени. Да, я понимаю, что шахматы на экране компьютера - это не то, что нужно, но выбирать особо не приходится.
  • Контроль времени: 
    • Не меньше 25 минут на партию.
    • Не менее 10 секунд добавления за ход. Чтобы уж совсем в сбивание "флажков" тренировка не превращалась.
    • Можно больше, не возражаю и против относительно стандартного 90' + 30''/ход.
  • В идеале сыграть с каждым откликнувшимся по две партии. Если вас будет много, так и сделаю. Всё-таки хочется выборку и по дебютам, и по уровню игры (в вышеобозначенном диапазоне) как можно шире.
  • Если хотите откликнуться на призыв, пишите либо здесь, либо в vk. Договоримся о времени и сыграем.
  • Если у вас есть заинтересованные и подходящие под описание знакомые, буду благодарен, если сообщите им. До шести рукопожатий доводить не надо, двух вполне хватит ;)
  • Вот... а теперь обо всём по порядку. Обязательная часть закончилась ;)
Начал я играть, кажется, ещё в детском саду. Правилам научил папа и несменяемым за, возможно, несколькими исключениями оппонентом до осени 2001-го был тоже он. В 1-м классе я пришёл на школьный кружок, а оттуда быстро попал в ДЮСШ-2 Калининского района, где и прозанимался почти 7 лет: с осени 2001-го по лето 2008-го.

Норму кандидата в мастера спорта я выполнил в районе 5-го класса. Года через полтора мне обсчитали рейтинг ЭЛО (причём в тот момент, когда я этого совсем не хотел, а я был на тот момент уверен, что для первого обсчёта рейтинга требуется дополнительный взнос в рейтинговом турнире). В результате, если память не изменяет, я стартовал с 1797, а играть, как показала практика, оставалось год с небольшим. Рейтинг за тот год вырос, но не сильно. Впрочем, смотрите сами.

На лето 2008-го приходится последнее моё участие в рейтинговом турнире. После настало время ФМЛ 239, время программирования, олимпиадного и не только, знакомство с которым для меня началось за год до [временного] расставания с шахматами. Расстался, впрочем, без особой горечи: за 7 лет порядком поднадоело.

До осени 2013-го я и не помышлял когда-то серьёзно вернуться к шахматам, пусть даже ненадолго. Играл в качестве развлечения в летних лагерях, в ЛКШ-2011 даже турнир выиграл, а годом ранее в потрясающем по накалу полуфинальном матче проиграл человеку с роскошной фамилией. Кто знает, о ком я, меня поймёт ;)

Помню ещё отличные партии в физлагерях 2008-го и 2009-го годов. А ведь такое нечасто случается: три достаточно сильных шахматиста в одной комнате в лагере, основная тематика которого - физика, а не шахматы...

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

Обратная дорога на следующий год, уже в толпе программистов, принесла хорошую партию, примечательную ещё и тем, что сыграна она была: 
  • в районе полуночи; 
  • в момент, когда за последние 1,5 суток спал я в районе 1-2 часов. Победа при этом осталась за мной.
В общем, шахматы меня не покидали, как бы я от них не скрывался ;)

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

Дальше - больше. Стал искать информацию, стоящую на пересечении того, что как-то касается меня, и того, что касается шахмат. Вот лишь малая часть того, что я нашёл:
  • Я играл с шахматистами, идущими в мировом рейтинге по состоянию на май 2014 на (!) 17-й и 80-й позициях (для сравнения: я в рейтинге 90724-й). Оба они, кстати, младше меня. С первым играл лишь в первый год занятий шахматами, в 4-м и 3-м разряде. Да, Аниш Гири начинал заниматься в той же спорт.школе, что и я (читайте википедию ;) ), несмотря на то, что на сегодняшний день представляет Нидерланды, несмотря на то, что корни у него, кроме России, в Непале и Японии, несмотря на то, что сейчас он мне видится вообще человеком с другой планеты, когда я пытаюсь посмотреть его партии :) Что до второго, это был городской этап соревнования между школами (не спортивными, а ГОУ) "Белая ладья", быстрые шахматы, в которые я быстренько и проиграл. Недавно совершенно неожиданно обнаружилось, что я с этим человеком знаком через два рукопожатия, из которых, во всяком случае, одно весьма тёплое :)
  • У меня на счету ничья с ныне 138-м шахматистом в мире, на тот момент (кажется, 2006-й год) являвшимся только мастером ФИДЕ. Дело было на районном этапе "Белой ладьи" (см. выше) и результатом я во многом обязан малому контролю времени (25 мин. без добавления).
Итак, эти ребята уже международные гроссмейстеры. И не просто международные гроссмейстеры, а элита мировых шахмат. И не то чтобы я ощущаю себя способным или готовым устремиться туда же, но... мотивация, главное - мотивация, и вышеперечисленные факты на неё оказывают должное влияние.

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

  • случайные игры плохи тем, что если у соперника низкий внутриигровой рейтинг, играет он плохо, толку от таких игр мало. А если рейтинг большой, он просто не примет вызов. Самому же набирать этот большой рейтинг долго, упрямо продираясь через слабых противников;
  • турниры, как правило, с контролем времени 5-10 минут (а то и вообще по 2). О шахматах с таким контролем времени зачастую не успеешь и подумать;
  • раньше (лет 5-6 назад) в любые дни все возможности "Шахматной планеты" были доступны. Теперь - для участия в турнире не в среду ("в любой непонятной ситуации выбирай в качестве случайного дня недели среду") нужно приобрести абонемент. Абонемент не такой дорогой, чтобы его было себе не позволить, но цель средства не оправдает.
В декабре меня это не особо волновало: я просто хотел осмысленно "подвигать" фигуры и вспомнить, каково это :)
Что было в конце декабря, вы, скорее всего, знаете. В больнице заняться особо было нечем, так что каждый день я с папой играл в шахматы на pocketbook'е. После выписки продолжили дома уже на привычной доске. Счёт нашего "матча" убедительно показал, что играть я не разучился. 

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

Раньше никогда, смотря на доску, я не видел так явственно потенциальные многоходовые маршруты фигур, не мыслил схемами, не пытался заставить фигуры исполнить танец, завораживающий меня самого и несущий "смерть" для противника. В общем, мой мозг функционировал примерно как перебор с отсечениями ;) Теперь именно такие образы, как вышеупомянутый танец, возникают у меня в сознании, когда я сажусь за доску. Как и настоящий танец, этот, исполняемый ансамблем резных деревянных фигур под моим руководством, приносит настоящее удовольствие. А не жалел я о [временном] расставании с шахматами, именно потому, что удовольствия от игры почти не было. Что ж, ситуация в корне поменялась!

В ближайших планах у меня участие в 1-3 рейтинговых турнирах летом: в частности, в финском Heart of Finland, забавную историю, связанную с которым, можно было прочитать на моей страничке vk. Осталось только разобраться с визой, билетами и гостиницей, но первые шаги уже сделаны, а время ещё есть. Тут и посмотрим: получится ли у меня заставить фигуры исполнить победный танец в игре против сильных оппонентов или... или это только метафоры, за которыми ничуть не большая сила и ничуть не больший потенциал, чем был у меня в 2008-м.

В планах, чуть более отдалённых, по выходу из академического отпуска в октябре переписаться с общей физической подготовки на шахматы. На 1-м курсе я предпочёл шахматам оздоровительный бег, но на то были причины, и я о том выборе ни разу не жалел. То был удивительный год с точки зрения физкультуры, за который, ничего особенно не сделав, я, еле-еле пробежавший в сентябре 2012-го на первом полноценном занятии 1,5 км, в августе поставил свой личный рекорд, без пауз пробежав 17 км. Ничего, и этот рекорд будет побит, ногам нужно лишь время, чтобы окрепнуть после пережитой травмы. Возвращаясь к физкультуре, опция ввиде оздоровительного бега отпала с осени 2013-го, а то, что сейчас в целом происходит с этим предметом на мат-мехе, описывается одним словом - "ничего". В результате, оптимальным вариантом мне видится ежедневно уделять хотя бы минимальное время на физподготовку дома, а пресловутые баллы для зачёта, до которого ещё больше трёх лет, зарабатывать за занятия шахматами. Надеюсь, препятствий тому не возникнет. И ещё надеюсь, что сейчас шахматам будет тяжело мне надоесть.

Как я узнал совсем недавно из новостной ленты vk, наш Университет выиграл городские соревнования по шахматам среди ВУЗов. Что ж, дополнительная мотивация, хотя в сборную, судя по рейтингу её участников, попасть удастся, только если дела пойдут совсем хорошо, но вдруг...)
К слову, когда я нашёл более подробную информацию о турнире, не обошлось без очередной "встречи" со старыми знакомыми оппонентами. Так, с девушкой, играющей на первой женской доске Политеха и показавшей на своей доске лучший в городе результат, за время, пока я был перворазрядником и кандидатом в мастера, я играл с переменным успехом в разных турнирах едва ли не больше раз, чем с любым другим из противников, с кем доводилось встретиться. И человек на второй женской доске СПбГУ мне хорошо знаком, пусть счёт игр в данном случае и намного меньше.

Итак, в путь! А там... увидим, как отнесётся к моему начинанию-продолжанию Каисса!

P.S. Традиционная дань тайм-менеджменту, то есть хронометраж: на написание поста затрачено порядка 2,5 часов без учёта предварительного плана. 

пятница, 2 мая 2014 г.

Итоги апреля

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

Баллы по областям в двух частях:


По-моему, я придумал отличный способ перенести названия строк к оставшимся справа столбцам, не уместившимся на первую фотографию, - два раза согнуть лист бумаги ;)

По порядку:

  • Финский не был запланирован на этот месяц, как я сообщал месяц назад.
  • Область "Олимпиадное программирование" переименована в "(Олимпиадное) программирование", что можно отследить по изменению обозначения. Так и было задумано: в "Итогах марта" об этом написать я забыл, но упоминал в комментариях.
  • К биоинформатике притронуться не получилось, зато в мае... впрочем, про май позже.
  • Область "Университет"... о ней в подробностях в конце поста в качестве бонуса тем, кто читает от начала до конца (или просто с конца ;) ). Конкретные факты: досдать зимнюю сессию мне не дали; 29-го апреля я написал заявление о выходе в академический отпуск по состоянию здоровья до 1.10.2014; причин его не удовлетворить, вроде как, нет, так что до середины сентября об университете я не думаю. Выйдя из академического отпуска, буду надеяться на то, что полученные в III семестре четыре зачёта и "Ладно, ну Вас, давайте зачётку" (то есть, "пятёрку" досроком) за "экзамен" по информатике мне согласятся переставить, а лишний семестр (даже поменьше) матанализа (за день до зачёта по которому я переходил тот злополучный пешеходный переход) мне, испытывающему с этим предметом наибольшие проблемы, точно не навредит.
  • Вы видите эти обведённые зелёным "+2" в "бонусе"?! Да, распорядок дня временами выправляется. Потом он снова отправляется в тартарары, чтобы снова выправиться. Но, рано или поздно, стимулируемый баллами жаворонок заклюёт во мне сову!
  • Суммы пока грустные. Но... нововведения мая сделают их более позитивными и, вместе с тем, более объективными!
Таблица ежедневных дел (далее - ТЕД):

  • В строке usual (стандартный комплекс упражнений на ~ 30-40 минут) решил указывать и те ситуации, когда не успел сделать всё, но делать начал. Оттуда там и дроби.
  • Последняя строка - прогулки. Гулять мне надо обязательно: во-первых, расхаживать почти поправившуюся ногу, во-вторых, дышать свежим воздухом, от которого я был оторван столько времени. За апрель и первый день мая успел попасть и под снегопад, и в дождь, и под палящее солнце. Погода развлекается на любой вкус, и мне это нравится!
  • Есть строки со сплошными крестиками. Нижняя из таких строк - шахматные дебюты - точно исправится уже в мае. Повторение французской лексики - тоже, но вначале нужно подкорректировать список слов, которые я повторяю. Последнее время стало казаться, что там слишком много лишнего, а важного, наоборот, не хватает... Пальчиковая гимнастика... вы не найдёте её в списке на май. И не потому, что я не планирую её делать ;)
Теперь коротко о главном:
  • В начале месяца я избавился от костылей, 3-го апреля первый раз вышел на улицу, 18-го числа меня выписали, 22-го апреля я первый раз с 26.12.2013 доехал до ПУНКа, а также (что намного приятнее) до живущих в Петергофе бабушки и дедушки. Наконец, 30-го апреля я первый раз в этом календарном году провёл занятие кружка :) Неплохая динамика выздоровления, верно?)
  • Разнообразные орг.вопросы постепенно начинают решаться. Появляются сроки (например, шахматного турнира Heart of Finland, о котором я упоминал на своей странице в vk, Летней школы по биоинформатике, и т.д.), для меня потихоньку вырисовывается картина того, как будет устроено моё лето.
  • В жизни случаются разные внезапности. Причём для этого вовсе не обязательно выходить из дома. Лежишь себе в кровати, спишь, а тебе приходит на электронную почту неожиданное письмо, и начинается...) Подробности будут, но позже. Возможно, намного позже.
  • Продолжаю постепенно делать свою жизнь удобнее. Обустраивать комнату так, как мне видится идеальное для своей деятельности пространство, избавляться от лишних, занимающих место вещей (пример: сегодня распределил почти все CD/DVD диски по имеющимся в достатке кейсам. Результат: упаковок для дисков больше нет, места благодаря этому стало намного больше (даже трудно было себе заранее представить, насколько компактнее диски уместятся в кейсы), диски теперь распределены в соответствии с содержанием, на поиски нужного времени больше почти не потребуется). А ещё, оснащаю рабочее место разными полезными вещами. Пример:
Это сканер. В него вставлен лист A4, можете сделать из этого вывод о размерах устройства. Вес почти никакой, так что сканер в буквальном смысле карманный (если карман достаточно глубокий, конечно ;) ). Подключение по usb. Стоил в районе 4000 руб., то есть сравнительно немного. Вот цены на принтеры такого же размера, увы, зашкаливают. Работает сканер вот так: 


Таким образом, с мая все таблички будут переведены в формат A4, и мне станет намного удобнее их оцифровывать. Польза для меня, конечно, не только в этом: например, за время прослушивания лекций CSC (и не только) скопилось очень много mind-map'ов на листах A4. Самое время избавиться от бумаги, а также сделать эти mind-map'ы доступными для себя в любой точке земного шара, где есть Интернет, в любой момент. Кстати, если кого-то заинтересовало это устройство, подробности.
  • недавно мне пришёл мой первый заказ из США. Как-никак, событие :) Кстати, если вы не знали, содержимое первого заказа из-за границы должно выглядеть вот так:

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

Полный вперёд! Несколько слов и картинок про май

  • Как вы могли заметить, финский пропал совсем. Он вернётся. В июне.
  • По вышеуказанным причинам пропал "Университет". Он тоже вернётся, осенью. А какие-то его "проявления", возможно, и летом в форме отдельной области.
  • Добавилась новая область. Угадаете по значку?) 
  • А ещё я решил, что немного оформления не повредит. Надеюсь, не повредило :)

ТЕД каждый месяц будет меняться, меняться сильно. Поменялась и на сей раз. Можно снова поиграть в угадайку ;) Интересуют строки номер 4, 6, 10 (номер 1 имеет строка с аббревиатурой). 

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

Во втором столбце слева указано, как обычно, количественное выражение "ежедневного дела", а справа - периодичность (в днях), не реже которой требуется достигать успеха в этом деле.

Коренные изменения в самой ТЕД и во влиянии ТЕД на CSS:
  • Предположим, дело надо выполнять раз в 3 дня. Но вот уже 6 дней я не достигаю в нём успеха. Тогда это дело будет получать "не выполнено" (крестик) вместо "не назначено" (прочерк) все дни, когда я не буду выполнять это дело, до тех пор, пока я не избавлюсь от "долга", то есть не выполню за прошедшие 3X дней это дело хотя бы X раз.
  • Предположим, в какой-то день X дел было выполнено, а Y дел - не выполнено (неназначенные не считаем). Тогда я получаю за день бонус в размере ((X - (X + Y) / 2) / ((X + Y) / 2)) * 10 баллов. Таким образом, если со многими назначенными делами я справился, но что-то не успел, буду всё равно считать результат положительным. Кажется, это правильно. 
Примеч: бонус за сон остался прежним. Кажется, сегодня он будет отрицательным... :(

Куда пропали прогулки, упражнения, и т.д.? Они пропали только из ТЕД. Подробнее - в следующей "серии" ;)

Приоритетными областями в мае становятся CSC, биоинформатика и французский. Чуть отстают от них шахматы и (олимпиадное) программирование. А та, с загадочным (или нет?) значком, она стоит особняком :)

И, да, в мае несколько целей будут уже точно выполнены или не выполнены. Я решил, что о каждой цели вне зависимости от результата буду писать отдельно, не дожидаясь итогов месяца, так что не пропустите ;)
Заодно, по понятным причинам, отменилась цель, касающаяся досдачи сессии, а также появилась одна новая цель, в области "(олимпиадное) программирование". Карта целей теперь выглядит вот так:
Как видно, место ещё есть, так что будут и ещё появляться новые цели! И о уже поставленных, конечно, придёт время поговорить.

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

За сим всё, хотя и дальше можно почитать. Предупреждаю: настроение не поднимется.

Как мне не дали досдать сессию, или ещё одна капля в бушующее море ненависти к бюрократии

  • В январе, когда я не то лежал в больнице, не то только что вернулся домой, моя мама звонила начальнику студенческого отдела мат-меха СПбГУ, и узнала у него, что оптимальным для меня вариантом будет досдать зимнюю сессию, когда я поправлюсь, а затем выйти в академический отпуск до февраля 2015-го года.
  • В марте я уже сам общался с тем же человеком и выяснил, что как только я закрою справку, по которой нахожусь на больничном, (и не раньше) мне смогут составить график ликвидации академической задолженности, согласно которому я сдам оставшиеся зачёт и три экзамена, а затем должен буду оформить академ.отпуск.
  • Пора было начинать готовиться. С этим у меня возникли определённые трудности. И имя им, скорее, не лень, а неумение отдать приоритет менее приятному делу, когда есть много более приятных, тоже непростых и важных, но способных подождать. На самом деле, стоило только втянуться в это за пару дней, и алгебра с матаном и дифференциальной геометрией стали бы выглядеть намного приятнее. Было такое, знаю. Но втянуться не удалось, как вы, наверное, видели в табличке за апрель. Поскольку цель моя дальше, чем "сдать всё хотя бы на 4", никак не простиралась, то я и не очень сильно волновался: на горизонте-то дат экзаменов ещё нет... Хотя, так безответственно подойдя к подготовке, я никак не рассчитывал на то, что произошло дальше.
  • 18-го апреля меня выписали. 19-го (суббота) я прислал справку, как и все предыдущие, в студ.отдел мат-меха и задал вопрос, что требуется сделать, чтобы мне назначили график досдачи экзаменов. 21-го с самого утра (как и должно быть) приходит ответ: "Вы должны приехать и написать заявление до 23-го апреля" (ненавижу формулировку "до такого-то", т.к. это то подразумевает "включительно", то не подразумевает. Раз от разу, как повезёт. Да не о том речь).
  • 22-го апреля приезжаю в студ.отдел. И там совершенно неожиданно узнаю, что, скорее всего, досдать 3-ю сессию без едва ли не одновременной сдачи 4-й у меня сейчас не получится, потому что, раз я вышел с больничного, то вновь являюсь полноценным студентом. То есть на меня распространяется и необходимость сдавать 4-ю сессию в соответствии с расписанием, установленным для всех. А назначить экзамены в оставшиеся ~ два десятка рабочих дней до сессии мне не могут, потому что "по положению между экзаменами должно быть не меньше X дней", и т.д. Один вопрос: почему я это узнал, притащившись с палочкой с самого севера города (кто был в гостях, может представить, что такое доехать от моего дома до мат-меха для человека, который всего второй раз за почти четыре месяца воспользовался общественным транспортом), а не в телефонных разговорах / по почте?
  • Тем не менее, предлагают на всякий случай написать заявление с просьбой составить график ликвидации академ.задолженности и обещают уточнить, как только смогут, успею ли досдать, и перезвонить.
  • На следующий день перезванивают: нет, не успею досдать. Приезжайте, надо успеть оформить академический отпуск до начала сессии, иначе вынуждены будем исключить. Ну что ж, я уже человек опытный, да и ноги крепнут с каждым днём, так что не убудет, приезжаю 25-го. На мат-мехе получаю запрос в поликлинику СПбГУ на то, чтобы комиссия поликлиники подтвердила необходимость предоставления мне академического отпуска (честно говоря, я считаю, что уже тут начинается маразм: есть же все справки, результаты всех исследований, какие ещё подтверждения? Но это правило всем давно известно, самое удивительное же ещё поджидает нас). Подписывать это заявление требуется на хим.факе. Вот в/на Украине юго-восток борется за децентрализацию власти, а в ПУНКе не борются. И вся власть на хим.факе, а студ.отдел мат-меха даже такую простую бумагу подписать не имеет права.
  • Прихожу вместе с человеком из студ.отдела мат-меха на хим.фак (надо отдать должное сотрудникам студ.отдела мат-меха: они ко мне очень внимательно отнеслись, в одиночку хромать непонятно куда (до хим.фака-то я дойду и сам, а дальше?) не отправили, и вообще прониклись моим положением и всё старались сделать как лучше. Так бы и с самого начала... Сказали бы в январе: нет, в мае уже нельзя будет сдавать экзамены, оформляйте академ.отпуск хоть сейчас, - вообще бы нареканий к ним не было) . Узнаю, что бумага оформлена с ошибками. Заодно узнаю, что поликлинику ПУНКа СПбГУ недавно переименовали и теперь она в официальных документах называется (!) так же, как сам университет. В результате в правильно оформленной бумаге университет должен обращаться к самому себе... На хим.факе про изменения знают, но на практике сталкиваются с ними впервые. Необходимость "просить себя о чём-то" вызывает у самой главной начальницы диссонанс... Вернёмся к ошибкам в бумаге. Благо, до ПУНКа уже добралось чудо человеческой мысли - электронная почта, хромать обратно за исправленным заявлением на мат-мех на требуется. Каких-то 30-40 минут, и я с подписанным документом иду в поликлинику. Ещё повезло, получил документ в руки за 5 минут до обеденного перерыва, а то, здравствуйте, ещё 50 минут тоскливого ожидания.
  • Кстати, заодно на химфаке я узнал, что если бы я появился у них чуть позже, моё заявление о составлении графика ликвидации академической задолженности (да-да, его тоже должны были бы составлять на химфаке!) уже могли бы утвердить, а в таком случае я обязан был бы сдавать и 3-ю, и 4-ю сессию, а отозвать заявление уже не смог бы. Либо отчисляться. В общем, повезло, что не успели утвердить.
  • Прихожу в поликлинику. Иду, как сказали в регистратуре, к старшей медсестре, чтобы уточнить, все ли необходимые для оформления академ.отпуска документы при мне, и узнать, что нужно, чтобы врачебная комиссия дала своё заключение. И узнаю, что... раз я наблюдался в течение болезни не в поликлинике СПбГУ, а в поликлинике по месту жительства, то и отпуск мне "по положению" могут оформить только в последней.
  • На мат-мехе встречаю удивление. Про "положение" там не знают, но знают, что попытка кому-то что-то доказать обречена на провал. Увы, это, действительно, так.
  • Дают новую бумагу, в городскую поликлинику. Неприятность в том, что та поликлиника с недавнего времени на ремонте, а потому идти до врачей от дома не полкилометра, а все три, но это уже мелкая неприятность. 
  • Прихожу во второй раз на хим.фак. На удивление быстро получаю подпись под новой бумагой. Приключения в ПУНКе на 25-е апреля подошли к концу. Не прошло и 3 часов. А может, и прошли...
  • Оставшаяся часть истории имеет уже, напротив, в основном, светлую окраску, благодаря тому, что, начиная с февраля, с врачами мне везло. Фантастически везло. Всё время. В частности, и с теми, которые бумаги подписывают, везло. Благодаря этому каких-то два похода в поликлинику, несколько часов там, и уже 29-го апреля везу заключение мед.комиссии на мат-мех, пишу заявление, марафон окончен!
  • Поменьше бы таких марафонов...