Как тренируются программисты в Карелии

В Петрозаводском государственном университете уже более 10 лет идет подготовка и участие студентов в ACM и других олимпиадах. Участие идет небезуспешное, наши команды показывают хорошие результаты. Регулярно в Петрозаводске проводятся сборы сильнейших команд, участников финала ACM, в том числе и с участием зарубежных команд. Также, несколько раз в год проводятся локальные сборы для наших студенческих команд. Чтобы осуществлялась преемственность поколений, надо работать со школьниками. Работа ведется уже давно, практически столько же, сколько со студентами. С 2002 года почти каждый год организуются сборы для школьников. Ниже подробно описано, как сейчас в Петрозаводске ведется подготовка школьников к олимпиадам по программированию и как организованы летние сборы. Кому интересно — добро пожаловать под хабракат.

Работа в течение учебного года.

2 года назад было решено начать массовую подготовку школьников Карелии. Сейчас складывается следующая программа подготовки детей:

1 год обучения:
В октябре набирается группа около 100 человек. Приглашаются ученики 6-7 классов, хотя другие классы тоже допускаются. Мне все равно, в аудитории сидит 100 или 120 человек. После начала занятий начинается естественный отсев за счет того, что некоторым становится неинтересно, другие понимают, что не могут вытянуть предлагаемый темп. Детям читаются лекции по 2 пары в неделю. Обучение начинается с основ, объяснения того, что такое алгоритм, понятия переменной и других элементарных вещей. При этом обучение ведется в очень высоком темпе. Изначально объясняются основы программирования на примере блок-схем. Рассматриваются элементарные задачи, такие как: задача о фальшивой монете, выбор максимального из 2,3,4, последовательности чисел. Также на блок-схемах изучаются линейные массивы. На этот материал уходит около 2,5 месяцев. После блок-схем переходим к изучению языка С++. После 3-4 занятий по С++ у детей начинаются практические занятия в дисплейных классах. К этому моменту остается немногим менее половины учеников. Для практических занятий дети делятся на 2 группы примерно по 20-25 человек. Поначалу приходится работать по 2-3 человека за компьютером, но ускоряется отсев детей, которые понимают, что им слишком тяжело дается написание программ. Детям предлагается первоначальный набор из 15 простых задач. Те, кто решает предложенный набор, получают доступ в автоматическую тестирующую систему и следующий набор из 100 задач. На написание первых 15 задач обычно уходит около 1-2 месяцев (март-апрель). Тем временем на лекциях дальше читается С++. ООП не рассматривается. После окончания изучения языка переходим к изучению базовых алгоритмов: поиск минимума/максимума в массиве; линейный, бинарный поиск элемента; сортировки пузырьком, подсчетом, слиянием, быстрая сортировка; генерация перестановок; список, очередь; К концу года остается 10-15 детей, освоивших программу, и 5-7 с трудом справляющихся с ней. Те, кто освоил программу, приглашаются на летние сборы и все желающие приглашаются на следующий учебный год.

2 год обучения:
Состав группы остается почти неизменным после первого года. Те, кто справился с первым годом, переходят на второй. В течение года читаются лекции по основным алгоритмам, и на практических занятиях в дисплейных классах дети решают задачи соответствующей тематики. Примерный набор тем, которые рассматриваются: структуры данных; поиск и сортировка; пирамида и быстрая сортировка; динамическое программирование; графы; геометрия; комбинаторика; длинная арифметика; битовые операции.

3 год обучения
Группы 3-го года обучения пока не существует, есть планы. Планы заключаются в том, что последовательную лекционную программу смысла строить нет, надо, чтобы закрепились имеющиеся навыки. Для этого предполагается действовать в следующих направлениях:
1. каждое воскресенье проводить тренировочный контест. Некоторые контесты сделать тематическими, некоторые из разного набора задач. После контеста – разбор задач, а на неделе после этого – лекция на соответствующую тематику, если задачи были тематическими. Таким образом, получается, что ученик сначала обдумывает задачу и ищет решение на основании имеющегося у него опыта, потом сразу после контеста получает правильное решение задачи, а спустя несколько дней – лекцию, к материалу которой он уже подготовлен.
2. С каждого школьника требовать прорешивание задач на онлайновых серверах.
3. Школьникам предлагается объединиться в команды, каждой команде назначается персональный тренер, который направляет команду в нужном направлении.

После 3-го года школьник по этой программе будет заниматься до поступления в университет.

Летние сборы.

Карельская летняя компьютерная школа — мероприятие, которое организует Клуб творчества программистов Петрозаводского государственного университета для школьников, которые в Клубе занимаются подготовкой к олимпиадному программированию. Проходит она в поселке Эссойла в 70 км. от Петрозаводска. В этом году школа проходила с 28 июня до 8 июля, и это было уже в 8 раз.

Программа сборов примерно одинакова из года в год. 25 детей провели 10 дней в п. Эссойла в 70 км от г. Петрозаводска. Распорядок каждого дня был примерно таким:
7:30 Подъем, умывание
7:50 зарядка
8:30 завтрак
9:15-13:15 решение задач
13:30 обед
14-18 лекции/разбор задач
18:00 ужин
19:00 — 20:00 дорешивание
после ужина свободное время или организованные развлечения.
22:30 мягкий отбой: дети должны находиться в комнатах или умываться.
23:00 жесткий отбой: определение кандидатур на внеочередное дежурство на следующий день.

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

Как мы живем в плане быта? Живем в благоустроенном здании интерната. Во время учебного года тут живут дети из окрестных поселков, откуда тяжело ежедневно ездить на автобусе. Летом на эти 10 дней здание отдают нам. Немного тесновато, приходится задействовать учебные классы, используя их в качестве жилых комнат. Мальчики живут в комнатах по 7-9 человек. Проблемы это вызывает только для преподавателей, когда надо после отбоя заставить всю эту ораву угомониться и перестать болтать. Едим в школьной столовой, занимаемся в классах школы. Расстояние между зданиями школы и интерната около 300 метров.

Какой возраст детей? 4-11 классы. Разброс очень сильный. Проблем не создает, дети имеют сходные увлечения, примерно одинаковый уровень подготовки в этом направлении, что позволяет им общаться на равных, невзирая на разницу в возрасте.

Как мы занимаемся? Занятия проводятся в форме лекций, в форме тренировочных олимпиад. Тематика занятий та же самая, что в течение учебного года: задачи на спортивное программирование, лекции по математике и алгоритмам. Чтобы разнообразить учебу, я младшим детям рассказал немного про ООП. Хотел рассказать про MS .NET, C# чтобы они могли побаловаться с программами с графическим интерфейсом, но не успел. О том, что не успел — не жалею, дети чуть-чуть побольше отдыхали.

Что мы делаем кроме решения задач и сидения на лекциях? Одна из задач этой летней школы — делать из детей единый коллектив, который дальше будет формировать Клуб. Это достижимо только через совместные мероприятия. В первые же минуты после приезда в этом году я услышал звуки гитары. Кстати, гитар в этом году у нас 4 штуки, включая одну мою. Во второй вечер играли в мафию 20 игроков. Позже я достал привезенный комплект для игры Го. В Го дети обычно с удовольствием играют между собой или пытаются переиграть меня. В субботу организовали полосу препятствий, для преодоления которых требуется коллективная работа. После полосы препятствий пикник, костер, песни под гитару. Устроили детям поездку в зоокомплекс, расположенный неподалеку. Викторина на то, кто больше назовет языков программирования, операционных систем.

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

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

Копирайты: часть идей организации и некоторые наборы задач были взяты из ЛКШ. Многие студенты, которые преподают в летней Карельской школе, бывали в ЛКШ как учениками, так и в роли преподавателей.

Кто за все это платит? Финансируется проведение КЛКШ за счет Министерства образования Карелии. Кроме того перечисляется небольшая родительская плата, около 4 тыс. рублей. Работа преподавателей в течение учебного года оплачивается за счет учреждений дополнительного образования детей, а также за счет ПетрГУ. Те суммы, которые платятся за работу, абсолютно не покрывают затрачиваемых преподавателями усилий, поэтому размер преподавательского состава в Клубе невелик. Хочется сказать большое спасибо тем людям, которые работают в основном на своем энтузиазме.

Какие есть у нас проблемы?
1. Школьный подход у детей к обучению – «растолкуйте нам» вместо того, чтобы самим стараться понять.
2. Большой отсев. В основном отсев происходит на первом году, но и потом в течение нескольких лет до университета многие теряют интерес.
В качестве решения для уменьшения отсева на первом году я планирую выкладывать на сайте материалы лекций и проверочные вопросы, чтобы родители, школьные учителя информатики могли бы у ребенка невзначай поинтересоваться как дела и как он усваивает материал. Умные дети отваливаются, не поняв какую-нибудь мелочь, а я не могу это отследить. При аудитории около 100 человек у меня не хватает опыта, чтобы контролировать всех индивидуально, если это в принципе возможно. Уже договорились с группой учителей о специальном семинаре для них. Может, это поможет.
Share post

Similar posts

Comments 32

    +9
    Желаю Вам успехов.
    8 лет назад мой школьный преподаватель начал свои подходы для подготовки детей, проявляющих интерес к программированию. Он приглашал таких детей на внеклассные занятия. Мы собирались вечерами в классе информатики и изучали основы. Но его подход был, как я считаю, более интенсивным и правильным: в течении 3-4х занятий он давал новичку основы языка (Pascal) и разбирал 5 простейших программ («Hello world!», арифметическая задача, задача с логикой, работа с файлами, работа с массивами). После чего выдавал задачник и своеобразный HandBook. В задачнике все задачи были построены по принципу от простого к сложному.
    Так-же им было организовано то, что теперь мы называем OpenSpace — новички задавали вопросы более опытным ученикам или преподавателю на прямую. Спустя год таких занятий (3 раза в неделю + работа дома) была готова команда для олимпиад, которая показывала неплохие успехи.
      +4
      Спасибо. Ваша идея о том, чтобы более опытные школьнки учили младших интересна. И ее наверное стоит внедрить у нас.
        +3
        Рад был помочь. Кроме того, такой принцип обучения мотивирует обе стороны процесса: новичку хочется догнать опытного товарища, а опытный получает удовольствие от того, что имеет «выше уровень». Ну и сплоченность команды и знание сильных и слабых сторон друг-друга, как немаловажный фактор успеха команды.
          0
          Это довольно старая идея (в дидактике). Польза от этого всем участникам процесса.
          1) Менее опытный получает опыт.
          2) Более опытный — выявляет область своего незнания, плюс прокачивает коммуникативные навыки.
          3) Преподавателю меньше сил нужно затрачивать. Можно брать большую группу.
            0
            Не всем. Выявление области незнания для самого опытного менее эффективно (к примеру таких областей может не быть если школьник всегда глубоко понимает проходимые темы), чем изучение нового с преподавателем. Стоит ли тормозить сильнейшего ради всех остальных?
              0
              На самом деле, в таком процессе объясняющий более глубоко понимает объясняемый материал. Происходит переосмысление и систематизация знаний.
                0
                Пять раз объяснил, уже сам понял, а они — нет…
                0
                Однозначно стоит. В современной образовательной модели колоссальный провал в формировании коммуникативных навыков, а время одиночек давно прошло. Нужно уметь работать группами.
                И это еще один бонус групповой работы.
          +3
          Мда, «большой спорт» это титанический труд.
            +1
            Не зря Петрозаводск в рейтинге «РИА Новости» как лучший город для развития детей: ria.ru/social_ratings/children/
              +1
              Отличное начинание — вы молодцы. Сам бы хотел попасть на подобное обучение в школе. Вспоминаю информатику — мне ее было мало, и задачи, которые там были быстро потеряли новизну для меня. Хотелось дальше продолжать, но школьная программа скупа, а 95% моих одноклассников приравнивали этот предмет к физкультуре — то есть, то что в принцпе можно не посещать.
                +1
                Поддерживаю.
                В своё время мне не хватало таких занятий. Был кружок «Информатика» в местном дворце пионеров. Весь первый год осваивали BASIC (переменные, массивы, условия, циклы), но на второй год сменился преподаватель, который отнесся к делу «я смотрю кино, а вы пишете программы» и не заладилось.
                А в школе до 10 класса у нас информатики вообще не было.
                0
                > Большой отсев. В основном отсев происходит на первом году, но и потом в течение нескольких лет до университета многие теряют интерес.

                А это и не удивительно. Не так много помешанных на программировании. Рекомендую сделать предотбор ребят, уделяя больше внимание «слегка аутичным»детям (интровертам) с низкими навыками коммуникации. Им нравится зависать над решением задач, часами прокачивая навыки программиста. Я так команду собирал на турнир 2004/2005 года. Удалось проскочить в полуфинал, что в нашем NEERC регионе достаточно сложно для областного вуза.
                  –14
                  «Тем временем на лекциях дальше читается С++. ООП не рассматривается. После окончания изучения языка переходим к изучению базовых алгоритмов:»

                  Дальше не читал.
                    0
                    От ООП на АСМ пользы ноль, а вреда предостаточно.
                      +1
                      если преподается c++ нужно дать хотя бы самые основы ООП, чтобы дети смогли пользоваться STL(естественно после того, как научатся эти алгоритмы и структуры данных реализовывать без него)
                      пользоваться stl на acm никто не запрещает, а скорость написания программы может увеличиться в полтора раза
                        +1
                        а также неплохо было бы шаблоны прочитать
                          +1
                          В 6-8 классах? Какой в этом смысл? Тем более, что поставленная цель — олимпиадное программирование. Достаточно объяснить использование конструкций вроде vector<int> и то делать это лучше после нескольких лет обучения.
                            0
                            Зачем же несколько лет. Достаточно заставить написать трижды описание однонаправленного списка для разных типов данных и когда поймут, что дублируют код, сразу подкинуть им эту фишку.
                          +1
                          А где в STL ООП? Там чистой воды обобщённое программирование, без каких-либо намёков на динамическую диспетчеризацию и интерфейсы.
                        +3
                        В течение первого года на детей ложится и так достаточно большая нагрузка. Хочу обратить ваше внимание, на то, что я читаю курс лекций с нулевого уровня. И ООП для детей будет тяжел для понимания вместе с изучением алгоритмов. А с учетом того, что в основном идет подготовка к ACM соревнованиям, больше делается упор на алгоритмы, чем на приемы промышленного программирования.
                        При этом я сам считаю, что нельзя растить програмистов исключительно в спортивном направлении и поэтому ООП им рассказываю в летней школе.
                        0
                        Про ООП жалко, я вот жалею, что мне в школе не рассказывали. С другой стороны программа действительно обширна и все это титанический труд, который обязательно будет вознагражден. Продолжайте в том же духе.

                        Мне кажется что для отсева возможно нужно проводить собеседования или тесты. Причем с логическими задачами и алгоритмами, чтобы навык программирования ложился на благодатную почву. Но, к сожалению, так действительно можно кого-то пропустить.
                          0
                          Я задумываюсь скорее о другом, но в том же направлении. Предложить детям задачи на выявление способностей и по результатам решения приглашать заниматься. Но при этом ни в коем случае не запрещать ходить тем, кто задачи не решал или не смог решить. У школьника может не быть очень большого таланта изначально, но при желании усердием он добьется результата.
                          0
                          > Какие есть у нас проблемы?
                          > 2. Большой отсев. В основном отсев происходит на первом году, но и потом в течение нескольких лет до университета многие теряют интерес.

                          Это не проблема. Это очень хорошо, если человек смог сколько-то погрузиться в программирование и понять до университета, что это «не его». Хуже, когда люди приходят к этому уже в университете на средних или старших курсах. Осознают, что тратили время не на то.
                          Так что я бы воспринимал это как хороший вклад в жизнь тех людей, которых учите.
                            0
                            Согласен, для детей это очень хорошо, если они смогли что-то новое хорошее попробовать, узнать. И проблема скорее не в самом факте отсева — он в лбом случае будет большим, а в его причинах.
                            Пример: занимался у меня в этом году мальчик, ученик 6 класса. В середине года он что-то упустил и перестал ходить. Я с ним встретился в конце учебного года через его учительницу информатики, поговорил, дал несколько заданий, спросил почему перестал ходить. У мальчика оень хороший потенциал и, если бы можно было узнать, что он что-то упустил и это ему объяснить, может быть он и сколько-то других не отвалились бы.

                            Одно из решений — контрольные работы. Я за весенний семестр провел 2 штуки. Оценок не выставлял. Просто отметил правильные и неверные ответы, сделал разбор заданий. Больше контрольных давать боюсь чтобы это не стало для детей школой №2.
                              0
                              > Оценок не выставлял.

                              Так в чем проблема? Дух соревновательности очень мотивирующий фактор. Пусть будут не оценки, а баллы по правилам ACM.
                                0
                                Параллельно у детей идут практики, где они видят сколько у других решено задач. Там есть соревновательность. Тем более, что умение написать программу важнее, чем правильные ответы на вопросы по теории.
                                И в начале я не хочу делать слишком много соревновательного фактора чтобы более слабые не отваливались из-за того, что оказываются в хвосте. Это можно как мотивировать на старание, так и полностью демотивировать.
                                Задача контрольных для меня — выяснить общий уровень понимания. Для каждого ученика — увидеть, что и где он не знает. Выставление баллов отдельно по каждому заданию по моему эту задачу решает.
                                  +1
                                  > чтобы более слабые не отваливались из-за того, что оказываются в хвосте.

                                  Есть в моей копилке и на этот случай совет:
                                  1) мотивирует голова списка и желание туда попасть
                                  2) демотивирует ховст списка
                                  => нужно убрать хвост списка, т.е. половина сортируются по баллам, а вторая половина списка не сортируются совсем, образуя одну кучу
                            +2
                            Честь вам и хвала. Отличное начинание на фоне общего падения уровня образования.
                              +1
                              Первая статья, которую мне действительно захотелось «плюсануть».
                                +1
                                Отсев происходит потому, что это очень специфическое и далеко не каждому интересное занятие. Как правильно высказал пользователь Danov, оно больше подходит «аутичным» детям, в хорошем смысле слова. Я сам закончил ПетрГУ и совсем чуть чуть занимался в клубе программистов у Кузнецова уже будучи студентом. Быстро понял что это не моё, однако на моём будущем это никак не отразилось, я успешно закончил матфак и много чего добился за время после окончания вуза. Вобщем это такой же вид фанатизма как бодибилдинг.
                                  +1
                                  Интересно, спасибо!
                                  Был у вас пару лет назад на зимних сборах перед финалом АСМ, очень понравилось. Детям, должно быть, нравится. У нас в области тоже уже очень давно существует практика летней школы для школьников, правды график там значительно мягче: занятия только в первой половине дня, остальное — свободное время в режиме детского лагеря.

                                  Only users with full accounts can post comments. Log in, please.