Teaching Programming and Preparing for Olympiads for Schoolchildren of Gomel (Belarus)
Teaching Programming and Preparing for Olympiads for Schoolchildren of Gomel (Belarus)
Abstract
The methods, means and technologies of teaching programming to schoolchildren are described, grouped into the following topics: "What to Teach?", "How to Teach?", "Teaching to Learn", "Teaching a Profession". The developments have been carried out during several decades and are described in the decreasing order of the students' training level. The theme "What to Teach?" is determined by the author's solution of the problems of the Belarusian Republican and Regional Olympiads in Computer Science, as well as important (typical, characteristic) problems from the international Olympiads in Computer Science USACO (USA), COCI (Croatia), St. Petersburg Internet Olympiads (Russia). The topic "How to Teach?" includes the following subtopics: automatic construction of Codeforces ratings of schoolchildren of Gomel Oblast; DL.GSU. BY; weekly Sunday Olympiads based on the materials of international Olympiads of Russia, Croatia, USA; five regional Olympiads in three divisions (1-4 grades, 5-8 grades, 9-11 grades); weekly Sunday Olympiads (repeats of regional Olympiads of previous years) in two divisions (1-4 grades, 5-11 grades); quarterly Cups with awards in the courses "Programming Professionals" (no age limit), "Basic Programming" (grades 1-8), "Informatics" (grades 1-4), "Mathematics" (grades 1-8); training courses "Basic Programming", "Informatics", "Mathematics" and task packages in them. The theme "Teaching to Learn" includes the description of methods of influencing schoolchildren to improve the learning process quality. The theme "To Teach Profession" contains the description of the tools developed under the author's supervision to facilitate the transition from Olympiad to professional programming. The aim of the author's work is professional orientation of schoolchildren in the field of programming. The effectiveness of the work is confirmed by successful performance of pupils in regional, republican and international Olympiads in computer science and programming. The purpose of the article is to familiarize the general teaching community with the author's developments and to invite interested teachers and students to apply them.
1. Введение
Даже беглый анализ литературы показывает насколько сейчас актуально обучение программированию школьников от «Каждый ученик в каждой школе должен иметь возможность изучать компьютерные науки» , до обучения школьников таким профессиональным языкам программирования как Python
, , , C++ , C# , Java , Javascript , HTML и CSS . Особое значение придаётся геймификации как средству привлечения внимания школьников к программированию и автоматическим системам проверки программ для повышения скорости и качества обучения программированию. Указывается на то, что соревнования по программированию мотивируют школьников к изучению программирования . Разрабатываются рекомендации по подготовке к соревнованиям по программированию и новые подходы к обучению программированию, например, в предлагается обучение по принципу OBE (output-based education). Вносятся предложения и по развитию, собственно, электронных обучающих систем . Встречаются примеры успешных систем обучения программированию . Автор занимается обучением программированию школьников , уже несколько десятилетий и предлагает в данной работе описание своего подхода к обучению программированию. Изначально автор был ориентирован на обучение школьников прикладному программированию. Однако когда из десяти отлично мотивированных и подготовленных школьников-программистов в университет поступили только двое, было принято решение переориентироваться на подготовку к олимпиадам по информатике, поскольку получение диплома республиканской олимпиады школьников гарантирует поступление.2. Чему учить?
С 2010 года условия задач для Белорусских республиканских и областных олимпиад по информатике готовятся единым научным комитетом и фактически таким образом задаётся вектор развития обучения – каким темам и на каком уровне сложности требуется готовить школьников к олимпиадам по информатике. С этого же времени автор сам решает эти задачи по двум направлениям:
А. Набрать баллы, достаточные для прохода с Гомельской области на Белорусскую республиканскую олимпиаду и набрать баллы, достаточные для получения диплома Белорусской республиканской олимпиады. Как правило, для того чтобы добиться желаемого результата, достаточно в каждом туре решить полностью одну-две задачи и сделать частичные решения для двух-трёх задач тура. Каждый тур включает четыре задачи;
Б. Решить полностью тематически важные задачи, которые необязательно было решить полностью для получения диплома, но они очень полезны для успешного выступления на международных олимпиадах. Речь идёт о задачах на следующие темы: динамическое программирование, сложные структуры данных, графы, элементы теории чисел.
Для всех решённых задач автор пишет собственные подробные описания не только идей решения, но и деталей реализации своего решения. Описание также включает полный текст решения на Паскале. Это делается для того, чтобы решения могли понимать все ученики. Обучение у нас начинается на Паскале, но с некоторого момента многие олимпиадники переходят на С++. Если оригинальное решение жюри использует продвинутые (по сравнению с Паскалем) возможности С++, то оно (вместе с оригинальным описанием) прикладывается к решению автора статьи.
Задачи пункта А собираются в специальный пакет заданий «Белорусские олимпиады – Дипломный минимум» в порядке возрастания сложности тем и задач внутри тем в курсе «Базовое программирование». На текущий момент данный пакет заданий содержит задачи Белорусских республиканских и областных олимпиад 2010-2023 годов, сгруппированные по темам: одномерный массив, двумерный массив, геометрия, строки, перебор, жадный алгоритм, дихотомия, трихотомия, элементы теории чисел (модульная арифметика, делители, наибольший общий делитель, решето Эратосфена, системы счисления, битовая обработка), рекурсия, динамическое программирование, графы (рекурсия, система непересекающихся множеств), плюшки С++ (multiset, map), частичные решения, также сгруппированные по темам: одномерный массив, двумерный массив, строки, перебор, элементы теории чисел (делители, решето Эратосфена, наибольший общий делитель, системы счисления, битовая обработка), жадный алгоритм, очередь, рекурсия, динамическое программирование (префиксные суммы, рюкзак, наибольшая возрастающая подпоследовательность, разбиение массива на подмассивы); графы (очередь, рекурсия, минимальное остовное дерево-алгоритм Прима), плюшки С++ (map).
Задачи пункта Б собраны в отдельные пакеты заданий внутри папки «Белорусские олимпиады» по темам: динамическое программирование (одномерное, двумерное, трехмерное, на массиве строк, на дереве, по числу, по битовому числу, метод включения-исключения); сложные структуры данных: бор (строковый, битовый), дерево отрезков (без модификации, одиночный инкремент-сумма, одиночное присваивание-минимум и номер, инкремент на отрезке-ленивое проталкивание-минимум); плюшки С++ (vector+sort, map, multimap, upper/lower bound, ordered set); графы (диаметр дерева, дихотомия по ответу, алгоритм Крускала, наименьший общий предок, центроидная декомпозиция); элементы теории чисел (наибольший общий делитель, решето Эратосфена, функция Эйлера, битовая обработка (цикл по всем подмаскам)).
Понятно, что далеко не всегда автору удаётся самостоятельно решить задачу, в этом случае на помощь приходят оригинальные разборы и решения.
3. Как учить?
За десятилетия обучения школьников программированию сформировались следующие общие принципы авторской методики обучения:
- учить всех, кто приходит, без отсева по возрасту и/или уровню подготовки;
- на каждом занятии каждую минуту работает каждый ученик, и не потому, что его заставляют, а потому что ему интересно;
- персонализированное адаптивное обучение;
- множество индивидуальных образовательных траекторий;
- разумное сочетение индивидуальных и групповых занятий.
Эффективная реализация этих принципов стала возможной благодаря разработке под руководством автора инструментальной системы дистанционного обучения DL.GSU.BY и её непрерывному развитию и наполнению учебными материалами, начиная с сентября 1999 года. Слово инструментальная в названии системы дистанционного обучения означает, что DL может быть использована в качестве инструмента для автоматизации дистанционного обучения в самых разнообразных предметных областях.
Наиболее существенные из возможностей системы DL, используемые при обучении программированию: предъявление обучаемому теории/справок, дифференцированное предъявление обучаемому заданий/отсылка решений, автоматическая проверка/уступка тестов. На текущий момент обеспечена проверка программ на следующих языках программирования: Pascal (Turbo, Free, ABC.Net, Delphi); C++ (GCC, MS Visual), Java, Kotlin, C#, JavaScript, CoffeeScript, Clojure, ClojureScript, Perl, QBasic; Поддерживаются разнообразные таблицы результатов и статистические таблицы для учителей и учеников.
Далее описываются другие особенности авторского подхода к обучению программированию.
Автоматическое формирование таблицы Codeforces-рейтингов школьников Гомеля и Гомельской области. Всем школьникам, которые ставят своей целью участие в областной олимпиаде по информатике и далее, настоятельно рекомендуется зарегистрироваться на сайте Codeforces.com и, как минимум раз в месяц, решать там раунды. Как результат, автоматически формируется таблица, хранящая следующую информацию для каждого ученика: рейтинг, город, учебное заведение, фамилия, имя, дата последнего участия в раундах, общее количество участий в раундах.
15 верхних строк таблицы, представляют 15 наиболее вероятных кандидатов на участие в следующей Белорусской республиканской олимпиаде в составе команды Гомельской области. Как показывает статистика последних 6 лет, не менее 11 из них (в 2023 году – 14) возьмут дипломы Белорусской республиканской олимпиады. 25 верхних строк таблицы показывают наиболее вероятных дипломников ближайшей Гомельской областной олимпиады по информатике. 25 лучших в таблице по Гомелю показывают наиболее вероятных на текущий момент участников ближайшей Гомельской областной олимпиады от города Гомель.
Таким образом, каждый из учеников может постоянно понимать своё место в областной/городской иерархии, отслеживать эффективность своего обучения, ставить перед собой и решать задачи подняться к планируемому уровню. Колонки «Дата» (последнего участия) и «Количество раундов» (в которых школьник принял участие) показывают серьёзность намерений ученика. Важно также отметить, что решение раундов Codeforces позволяет отслеживать тенденции в развитии олимпиадного программирования, узнавать новые полезные к изучению алгоритмы, а также проводить психологический и тактический трениг участников олимпиад.
Еженедельные воскресные олимпиады. Для наиболее продвинутых ребят Гомеля на базе кабинета информатики СШ 27 еженедельно по воскресеньям проводятся тренировочные олимпиады по материалам олимпиад USACO (США), COCI (Хорватия), Российских финальных, региональных и интернет-олимпиад. После стандартного 5-часового решения проводится разбор задач участниками олимпиад. Поскольку всегда берутся олимпиады, для которых выложены авторские разборы, то ими также можно пользоваться при дорешивании данных олимпиад.
Региональные олимпиады по программированию. Проводятся 5 раз в учебном году: осенью две (школьная и городская) в трех возрастных дивизионах (1-4 класс, 5-8 класс, 9-11 класс) и весной три (школьная, городская, областная) также в трёх возрастных дивизионах (1-4 класс, 5-7 класс, 8-9 класс). Важной особенностью наших региональных олимпиад является строгий тематичеcкий подход. Темы заданий фиксированы следующим образом:
1-4 класс (осенью и весной), 20 задач, все задачи по 5 баллов:
1. Введение в программирование – числа 1;
2. Введение в программирование – числа 2;
3. Введение в программирование – числа 3;
4. Введение в программирование – символы;
5. Введение в программирование – строки;
6. Введение в программирование – длины;
7. Введение в программирование – символ с номером;
8. Введение в программирование – DELETE;
9. Введение в программирование – COPY;
10. Введение в программирование – POS;
11. Одномерный массив – суммирование;
12. Одномерный массив – подсчет;
13. Одномерный массив – максимальный;
14. Одномерный массив – минимальный;
15. Одномерный массив – поиск;
16. Двумерный массив – стандартный алгоритм;
17. Геометрия – координаты/расстояния + стандартный алгоритм;
18. Строки – нестандартный алгоритм;
19. Сортировка;
20. Текстовая задача.
5-8 класс осенью и 5-7 класс весной, 10 задач, все по 40 баллов:
1. Введение в программирование;
2. Одномерный массив;
3. Двумерный массив;
4. Геометрия;
5. Строки;
6. Сортировка;
7. Текстовая задача;
8. Исследование/перебор/элементы теории чисел;
9. Жадный;
10. Очередь.
Можно заметить, что задачи 3-7 в среднем дивизионе совпадают по темам с задачами 16-20 в младшем дивизионе. Более того, с 2016 года это одни и те же задачи. Таким образом, ученики 1-4 классов исподволь готовятся к переходу в олимпиады старшего дивизиона, а лучшие даже участвуют и успешно выступают одновременно в нескольких дивизионах. Задачи 1-2 в среднем дивизионе также соответствуют знаниям, полученным в обучении темам «Введение в программирование» и «Одномерный массив» в младшем дивизионе.
9-11 класс осенью, 8-9 класс весной , 15 задач, все по 40 баллов:
1. Введение в программирование;
2. Одномерный массив;
3. Двумерный массив;
4. Геометрия;
5. Строки;
6. Сортировка;
7. Текстовая задача;
8. Исследование/перебор/элементы теории чисел;
9. Жадный;
10. Очередь;
11. Рекурсия;
12. Динамическое программирование – простое;
13. Графы;
14. Сложные структуры данных;
15. Сложное ДП.
Можно заметить, что задачи 1-10 в старшем дивизионе совпадают по темам с задачами в среднем дивизионе, более того с 2016 года это одни и те же задачи. Таким образом, школьники среднего дивизиона исподволь готовятся к участию в олимпиадах старшего дивизиона, а наиболее продвинутые участвуют и успешно в олимпиадах обоих дивизионов.
Фиксированные темы задач, с одной стороны, предлагают учителями и ученикам программу обучения, а с другой, позволяют регулярно оценивать текущий уровень обученности учеников.
Еженедельные тренировочные олимпиады. Они проводятся на заданиях региональных олимпиад прошлых лет в двух дивизионах 1-4 кл, 5-11 кл. Задачи открываются в четверг утром, а закрываются в среду следующей недели вечером. Таким образом, каждый ученик имеет в своём распоряжении целую неделю, чтобы найти время порешать эту олимпиаду. Тематический формат олимпиад позволяет ученику и его учителю постоянно видеть качество усваивания пройденных тем, а также предстоящие к изучению темы.
Сезонные кубки. В целях дополнительной мотивации к занятиям ежеквартально подводятся количественные итоги обучения (кто больше всех решил задач за Осень, Зиму, Весну, Лето) в четырёх номинациях «Програмирование профессионалы» (без ограничений по возрасту), «Базовое программирование» (для учеников 1-8 классов), «Информатика» (для учеников 1-4 классов), «Математика» (для учеников 1-8 классов). По трём последним номинациям подводятся также итоги конкурса «Персона года». Награждение ценными подарками проводит фирма OpenMyGame, основанная учениками автора.
Кубки прогресса. Награждаются по одному ученику в курсах «Базовое программирование» и «Информатика» достигших наибольшего прогресса. Награждение ценными подарками проводит DL Club (Санкт-Петербург).
Обучение программированию в средней и старшей школе. Методика обучения менялась в течение эксплуатации и развития DL, поэтому фактически существует множество методик и маршрутов обучения. Укажем некоторые из них. Ученикам, начиная с 5-го класса, предлагается подписываться на учебный курс «Базовое программирование», а в нём выбирать пакет заданий «Ускоренный курс 2013». Он включает в себя 8 тем, соответствующих первым 8 задачам в олимпиадах среднего и старшего возрастных дивизионов: введение в программирование, одномерный массив, двумерный массив, геометрия, строки, сортировка, текстовая задача, исследование/перебор/элементы теории чисел. В каждой теме содержатся папки задач с названиями «Техминимум», «Олимпиады 1-4 классов», «Олимпиады 5-8 классов». В папке «Техминимум» содержатся задачи с дифференцированным обучением, покрывающие необходимые базовые знания по данной теме. Олимпиадные задачи выстроены по подтемам в порядке возрастания сложности подтем и сложности задач в подтемах. Следующий этап обучения – пакет заданий «Олимпиады 9-11 классов», в которых находятся задачи региональных олимпиад 9-11 классов по темам задач 9-15, а именно: жадный алгоритм, очередь, рекурсия, динамическое программирование, графы, сложные структуры данных, сложное ДП. Задачи внутри каждой темы структурированы по подтемам в порядке возрастания сложности, а внутри подтем задачи также идут по возрастанию сложности. На текущий момент этот путь «Ускоренный курс 2013» – «Олимпиады 9-11 классов» – автор считает основным маршрутом обучения для своих учеников. В реальной практике используются и другие маршруты обучения. Например, для учеников, которым трудно в «Ускоренном курсе 2013» есть два более простых маршрута – самый простой – отступить в курс «Информатика 2015» и начать обучение там, а затем переходить в «Базовое программирование». Другой чуть более сложный вариант – проходить дифференцированное обучение в «Базовом программировании», последовательно по каждой из тем «Введение в программирование», «Одномерный массив» и т.д. Ученики/учителя, которые предпочитают более свободный путь обучения могу работать в курсе «Методы алгоритмизации», где задачи также сгруппированы по темам и подтемам, но в порядке обратном хронологическому. Ещё один вариант – работать в курсе «Олимпиады по информатике», где собраны олимпиады разных лет, разных уровней от региональных до международных. Кроме того, при подготовке к Гомельской областной и Белорусской олимпиадам по информатике школьники активно используют курс «Белорусские олимпиады – Дипломный минимум».
Обучение текстовому программированию (на Паскале) в начальной школе. Базируется на последовательном прохождении в учебном курсе «Информатика 2015» следующих пакетов заданий: «Учимся думать 2012», «Пропедевтика слов», «Учим слова (медленно)», «Число», «Символ», «Строка», «Все вместе», «Длина строки». «Позиции символов», «Встроенные функции и процедуры». «Одномерный массив», «Двумерный массив», «Геометрия», «Строки», «Сортировка», «Отладчик», «Входной и выходной файлы». Все пакеты заданий выстроены на принципах дифференцированного обучения. Дополнительно имеются пакеты заданий «Математика (Программы) 1-5 классы» и ЧЯРис (Чертёжный Язык Рисования). Ежегодно на базе кабинета информатики СШ 27 под руководством автора такое обучение проходят все желающие ученики начальной школы СШ 27 и других учебных заведений г. Гомеля. Кроме того, подобные занятия проводятся и в других школах Гомеля и Гомельской области. Наконец, в связи со свободным доступом ко всем учебным курсам на DL, аналогичное обучение может проходить любой желающий, и, на момент написания статьи, в таблице результатов учебного курса «Информатика 2015» зафиксировано 18849 учеников из Беларуси, России, Украины. Кроме того, всем ученикам настоятельно рекомендуется проверять и повышать уровень своей математической подготовки решая задачи в курсе «Математика», где собраны различные задачи по математике, в том числе Кенгуру (2001-2021), Бобёр (2013-2018) и др.
Автоматизация обучения на произвольных языках программирования. Летом 2016 года на IOI был поднят вопрос о том, чтобы отменить использование Паскаля в качестве языка программирования на IOI. Поскольку одной из наших целей является подготовка лучших учеников к успешному выступлению на IOI, встал вопрос о переходе на другой язык программирования и развитие соответствующего обучения. Мы решили эту проблему следующим образом: была разработана программа, которая «на лету» генерирует обучающие задания, подобные тем, которые выполнены вручную для Паскаля. Для этого в папке задачи должно находиться авторское решение на нужном языке программирования, а в папке программы – файл соответствий для данного языка – русское/английское слово. Кроме того, был сформирован пакет заданий «Ускоренный курс 2016» на основе текущего, на тот момент, состояния пакета заданий «Ускоренный курс 2013». При этом задания были перестроены в четыре папки: «Техминимум», «Контроль», «Контроль*», «Обучение». Для С++ автор сам разработал все авторские решения, для других языков (Java, Kotlin, C#, Python, JavaScript) авторские решения разрабатывались студентами и выполнены не для всех задач. Переход на С++ учениками автора осуществляется при желании ученика, как правило, после успешного завершения пакета заданий «Ускоренный курс 2013». Поэтому для ускорения перехода могут пропускаться папки «Контроль *» и «Обучение».
4. Учить учиться
Автор считает, что первое и самое важное чему он должен научить своих учеников – «научить учиться». Поскольку специалисту в информационных технологиях придётся это делать практически на протяжении всей своей профессиональной карьеры. Начинается эта учёба «с малого» – завести тетрадь по предмету, вести разумные записи, правильно вести себя в учебной аудитории (не отвлекаться самому и не мешать учиться другим). Следующий уровень «учиться учиться» – слушать объяснения учителя, стараться понимать услышанное, всё время думать о том, чему обучаешься. Далее идёт умение понимать задание, выделить важное, отбросить неважное, разрабатывать алгоритм и отлаживать программу, написанную по нему. Затем идёт формирование навыков работы в команде – внимательно слушать, лаконично и понятно излагать свои мысли, корректно вести себя во время дискуссий и разрешения споров. И, наконец, формирование умения получать информацию из Интернета – основного на сегодня источника знаний.
5. Учить профессии
Исторически так сложилось, что подавляющую часть своего времени работы со школьниками автор тратит на обучение олимпиадному программированию. Во многом это связано с тем, что диплом республиканской олимпиады по информатике (которая фактически является олимпиадой по программированию) даёт возможность поступать в любой вуз Беларуси без экзаменов. Кроме того, белорусы могут участвовать в российских олимпиадах, которые дают аналогичные права по поступлению в вузы России. Победители международных олимпиад имеют определённые льготы при поступлении в вузы других стран.
В то же время периодически находятся школьники, которые хотят переходить к прикладному профессиональному программированию, например, после того, как они в конце марта взяли диплом на республиканской олимпиаде и обеспечили себе поступление в вуз и «свободное время» до начала учебы в вузе в сентябре.
Такие ребята привлекаются работе над развитием DL.GSU.BY. Что сделано для упрощения их перехода к профессиональному программированию?
1. Создана виртуальная машина DL, которая позволяет установить у себя на компьютере сайт и учиться «методом проб и ошибок», не угрожая работе боевой DL;
2. Создан видео-учебник по установке этой виртуальной машины DL, модификации программ на виртуальной машине и передаче проверенных модификаций на «боевую DL»;
3. Профессиональные программисты (ученики автора) оказывают консультации начинающим и осуществляют строгий контроль изменяемого начинающими кода;
4. Для профессионального общения разработчиков поддерживается специальный сайт документации DL, включающий раздел вопросов и ответов;
5. Создан специальный курс «WEB-технологии для начинающих» – с автоматической проверкой решений, все задания содержат в себе примеры решения (под спойлером) и ссылки на теорию – включающий:
- задания на разработку html-файлов: комментирование, форматирование текста, списки, таблицы, ссылки, блоки документа, разбиение страницы на части на экране, взаимодействие с пользователем, атрибуты;
- задания на разработку css-файлов: селекторы тегов;
- задания на JavaScript DOM: атрибуты, добавление и удаление, обработчики событий, поиск и изменение по тегу, классу, ID, имени, фреймы - задания на JSP/сервлеты – введение в языки WEB-программирования, где предлагаются задания техминимума из Ускоренного курса 2016 (на темы: введение в программирование, одномерный массив, двумерный массив, геометрия, строки, сортировка) выполнять на одном из следующих языков: JavaScript, Clojure, ClojureScript, CoffeeScript, JSP, Python, Java, Kotlin, C#, Python, Ruby.
6. Заключение
В данной работе описаны методы, средства и технологии обучения программированию школьников, сгруппированные в следующие темы: «Чему учить?», «Как учить?», «Учить учиться», «Учить профессии». Наработки выполнены в течение нескольких десятилетий. Результативность работы подтверждается десятками медалей гомельчан на международных олимпиадах школьников по информатике (IOI) и сотнями дипломов гомельчан на Белорусских республиканских олимпиадах школьников по информатике с 1997 по 2023 годы.