Стартовый модуль курса «Алгоритмы. Олимпиадное программирование» или Год в пути

    На старт!


    Если на велосипеде ехать целый год (cм. статью 2014г.: Желтый велосипед с красными колесами или еще один курс алгоритмов от фирмы «1С»), то можно обогнуть Землю дважды. Скажем, крестом: сначала по меридиану 37.57571, потом по параллели 55.81842 и вернуться в главное здание фирмы «1С» на Тимирязевской, с которого все и началось. (Математикам: да, по параллели короче, чем по экватору получится; биологам: да, с остановками на отдых получится гораздо больше года; занудам: да, да, по океану плыть).

    Стоит остановиться и подвести итоги нашего путешествия. Но начнем с самого начала.

    imageДаже еще раньше — вернемся на два года назад.

    В 2013г., к 1С: Летней школе был написан Первый Модуль (12 занятий) нового курса по алгоритмам для школьников. Он получился вполне хорошим, но сложным. По нему сложно было заниматься без предварительной подготовки, изучения базового синтаксиса языка и понимания основных алгоритмических конструкций. Предварительный курс по Java в 1С: Клубе программистов — (это введение в проектное программирование) проблему практически не решал — все-таки первую игру по основам Java пишут при большой помощи преподавателя и решают больше задачи дизайна, практически не сталкиваясь с разработкой именно алгоритмов. Но разработка курса продолжалась — были написаны и апробированы второй и третий модули. В планах стояла разработка четвертого…

    И снова — 1C: Летняя школа, уже 2014 года.

    Мне поставлена задача: нужно сделать так, чтобы сейчас занять совсем начинающих детей, но уже интересующихся алгоритмическим олимпиадным программированием. А осенью к ним донабрать еще, чтобы «старые» с «новыми» — все вместе занимались?

    Решение: нужно начать «с нуля» и двигаться очень медленно. И получилось все это объемом… аккуратно еще в один модуль.

    И все встало на свои места: в курсе появился Стартовый — нулевой модуль (программисты же должны нумеровать с нуля!) — материал для быстрого и простого вхождения в настоящий курс алгоритмов.

    Как и в остальных, в Стартовом модуле есть не только Задачи, но Подсказки и Разборы. Учебное пособие можно использовать и как рабочую тетрадь, в нем есть специальные места для заполнения карандашом, так и в качестве самоучителя: в пособии есть ответы на все вопросы. Даже для простейших программ приводятся фрагменты решения.

    С седьмого класса или даже раньше


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

    Темы, изучаемые в Стартовом модуле, могут быть вполне известны учащимся «в теории» по предыдущим курсам по программированию. Задача Стартового модуля состоит, конечно, не в том, чтобы «повторять» изученные ранее алгоритмические конструкции в течение полугода, а в том, чтобы научится правильно и быстро их применять для разработки алгоритмов.

    В восприятии ребенка, изучающего программирование, цикл для организации движения объекта-картинки по экрану и цикл для определения простоты числа — абсолютно различны. Отзыв об алгоритмическом программировании "…мой мозг не предназначен для решения задач по алгоритмике, он способен на написание кода для игр..." кажется забавным, однако это на самом деле обычная, естественная ситуация. Собственно, задача преподавания Стартового модуля — изменить такое состояние дел.

    О том, что нужно всем, но на что у всех не хватает времени

    Именно в Стартовом модуле уделяется много времени вещам, на которые обычно на занятиях не хватает времени или они традиционно считаются тривиальными, естественными, хотя это не так. Стиль — очень важно научится правильно расставлять в коде пробелы, отступы, правильно называть переменные. Когда стоит использовать ту или иную алгоритмическую конструкцию, и наоборот, что часто важнее — когда не стоит. Какое условие поставить в цикл, стоит ли использовать равенство или лучше строгое неравенство? Что лучше: цепочка из if-else или switch-case? break и continue: когда это зло, а когда полезный инструмент?

    Если этого не делать, у учеников может сложиться (и часто складывается) собственный «стиль» программирования, и «переучить» их в этом случае бывает очень сложно. Например, ребенок самостоятельно «открыл» возможность выхода из цикла примерно таким образом:

    for (int i = 0; i < 10; i++) {
    
       if (…) i = 11;
    
        …
    
    }
    

    Один раз «сработало». Система «одобрила» и все – во всех остальных программах выход из цикла осуществляется так. Очень важная задача преподавателя, ведущего Стартовый модуль – обнаруживать такие ситуации и не допускать, чтобы подобные подходы превращались в навык.

    Алгоритмические гонки


    И, конечно, соревновательность. Олимпиадное программирование — это все таки спорт.

    Обучение в Стартовом устроено таким образом: первая «олимпиада» сразу после первого ознакомления с условным оператором и циклами. Слово «олимпиада» поставлено в кавычки, потому что содержит совсем простые задачи с условиями по тематике 1С. Формулировки задач забавны, а решение – стандартные простейшие алгоритмы.

    Например — самая простая «олимпиадная» задача:
    «Программисты 1С в перерыве в буфете решили сыграть в азартную игру на бутерброды. Они пишут тайно какие-нибудь числа на салфетках и отдают буфетчице. Буфетчица отдает все бутерброды первому, если его число больше, или второму, если у первого оказывается меньше. Но если вдруг числа окажутся одинаковыми — оба бутерброда остаются в буфете. По данным числам на салфетках выведите номер сытого программиста или 0, если оба остались голодными»

    (надо отметить, что в 1С буфет играет огромную роль в жизни будущих программистов)

    Дети с большим удовольствием обнаруживают, что это фактически обычный поиск максимума. Это интересно тем, что ребенок «участвует в олимпиаде» практически сразу в начале изучения курса и добивается успеха.

    По серпантину


    Обучение идет по спирали. Сначала самые необходимые вещи, потом сразу олимпиадное занятие. Далее более обстоятельное обсуждение условного и циклических операторов. Для тех, кто плохо понял циклы на третьем занятии, будет комфортно «вернуться» к условиям на шестом и седьмом. Однако, это совсем не простые задачи. Например, проверить возможность упаковать две прямоугольных коробки в третью, дже с ограничением по высоте — коробки нельзя класть на бок, но можно ставить одну на другую — технически очень сложная задача.
    На последних занятиях – функции (это обеспечит хорошее понимание рекурсии) и в заключение Финальный контест. Все задачи, которые предлагается решить участникам по олимпиадным правилам — совсем без подсказок — просты, но взяты из реальных олимпиад.

    Красота!


    Благодаря тому, что Стартовый создавался последним с учетом накопленного опыта, он, как и первая часть Звездных войн посте третьей и четвертой, выглядит очень эффектно.
    Мы раскрасили его тематическими эдвайсами и цитатами из Типичного программиста, добавили боковые колонтитулы, которые позволяют пролистывая быстро находить нужные части пособия, и сам стиль изложения получился веселым.
    Можно сказать, даже немного хулиганским, но именно этот стиль ценят и любят младшие школьники (для учителей программирования 7-8 класс — это младшие).

    Web-часть курса и Пособие по Первому модулю в pdf выложены на informatics.msk.ru.
    там же есть pdf нескольких уроков Пособия Стартового Модуля.

    И, в заключение:

    Трек за год


    Немного о текущих результатах. Они небольшие, но ощутимые. Сформировано 7 групп, общей численностью 80+ человек. Ребята подрастают, через год лучшие из них — попадут в нашу сборную, а там, глядишь, им покорится и Всерос ).

    Автор статьи: Ильин Владимир Владимирович (oivt@ya.ru), учитель, Школа 179 МИОО г. Москвы
    1С: Клуб программистов
    29,00
    Компания
    Поделиться публикацией

    Комментарии 0

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

    Самое читаемое