Всем привет.
В этом году я закончил один из сильных в ACM ВУЗов и, отдыхая летом дома, думал о предстоящей работе. Недавно получил предложение развивать олимпиадную информатику в одной из школ родного города. В связи с этим, интересно мнение сообщества (в первую очередь опытных тренеров/организаторов).
Бэкграунд
- Я играл за среднюю по уровню команду, пару раз съездили в Петрозаводск, в основном решали по фану. В команде хорошо натренировали ролевую тактику — я был математиком-алгоритмистом с дополнительной ответственностью за несколько алгоритмов. Писал на джаве, до того на си, до того на паскале.
Два последних года удалённо тренировал две команды, в зимние и летние каникулы проводили мини-сборы. В итоге одна из команд (впервые с 2004 года) прошла на ВКОШП и взяла там диплом, два человека прошли на Всеросс, где один из них взял диплом; два диплома ИОИП. - Масштаб города ~400k человек, примерно пять школ что-то делают в сторону олимпиадок. В регионе — чуть меньше миллиона. Регион довольно компактный, есть ещё пара заинтересованных городков. Есть целая одна закрытая ежегодная командная олимпиада, хоть и с ужасным уровнем, но лучше чем ничего.
- Школа, в целом, неплохая, со средним для провинции уровнем математики, скатившимся уровнем информатики, но хорошим — языков. Потенциал у учеников есть, но их не могут толком заинтересовать.
- Сейчас есть неплохой девятиклассник, съездивший в ЛКШ-В, постараюсь раскрыть его потенциал, но ясно, что с ним одним каши не сваришь. Остальные в пределах школьной программы.
- Локальные ВУЗы очень вялые и даже не участвуют в четвертьфинале :(
Вопросы
- Понятно, что надо будет усердно работать, и я к этому готов, но весь опыт у меня связан с олимпиадниками ненулевого уровня, потому до конца не понятно, с чего начинать. Какие будут по этому поводу советы? Какой язык порекомендуете? (я умею паскаль, си, джаву, могу попробовать питон)
- С какого возраста посоветуете начать вводить людей в олимпиады?
- Как оцените роль математики в этом процессе? По своему опыту скажу, что я начал с математики и, начав олимпиады по программированию в конце десятого класса, успел выйти на три школьных онсайта и даже взял диплом. Не исключено, что это совсем неправильный подход и мне просто повезло.
- Какие ещё действия стоит предпринимать для популяризации олимпиад и остальных полезных связанных результатов?
Любые материалы приветствуются.
Спасибо за уделённое время. Надеюсь, все советы будут полезны :)
public static void main(String[] args) throws Exception
. Мне кажется медленным (например, никто не гарантирует наличие хотя бы одной задачи, проходящей на питоне, в среднестатистическом Div1-раунде). Не буду делать заявлений "точно не надо" — лучше спросить у тех, кто пробовал. Возможно, педагогический эффект перевешивает остальные неудобства.Тренировал когда-то людей с нуля, которые даже не знали язык (тоже в своем маленьком городке). На мой взгляд, главный совет для начинающего тренера — не переборщить (со сложностью материала), в остальном не вижу особой разницы по сравнению с неначинающими, наоборот вам же проще — весь материал точно знаете, даже если сами не супер-стар (я тренировал, когда вряд ли был уровня фиолетового на CF — и нормально, и то местами борщил со сложностью).
По вопросам:
[1]. Язык — C++. Паскаль уже точно неконкурентоспособен, Java и др. языки — слишком ООПшны, у начинающих школьников могут быть проблемы с восприятием этой концепции. По программе — проще всего задавать себе вопрос "чего они не знают, что им нужно в первую очередь" — и рассказывать.
Сначала это язык, потом стандартные темы — динамическое программирование, жадные алгоритмы, перебор (конечно, параллельно разбирается решение классических задач на эти темы), потом уже графы и геометрия. Думаю, проще всего взять классические книги типа Окулова и идти по ним (последние издания Окулова так вообще прекрасны, имхо).
Ну и конечно сейчас проще стало — куча ресурсов, где можно тренироваться.
[2]. Чем раньше тем лучше. Мне кажется, с 5-го класса — точно можно. Другое дело, не с каждым пятиклассником у вас получится, но это уже сами увидите =)
[3]. Ну, важно наличие "математического" мышления, имхо. Пытаться учить этому делу "лириков" точно не стоит. В остальном, по моему опыту, наличие какого-либо мега-бэкграунда не требуется. Собсно, решение алгоритмических задач будет в какой-то мере развивать и их математические способности + кто захочет серьезно развиваться в этом направлении — сами поймут на каком-то этапе, что математика определенного уровня нужна.
[4]. Соревнования невысокой сложности в школе, чтобы все желающие могли принять участие и что-то решить. Интереснее даже делать их не формата ACM/олимпиад, а что-то вроде "бои программ по решение крестиков-ноликов", "соревнование блэк-джэк/покер ботов", или вроде того. Так вы точно зацепите людей, которым интересно самостоятельно клепать что-то более-менее интеллектуальное на компьютере.
В общем, еще раз повторю главный вывод из моего опыта (чтобы вы не повторяли моих ошибок) — главное будьте проще (по крайней мере на старте и далее в каких-то вещах), и народ потянется.