Назаренко Светлана Эдуардовна, учитель информатики МБОУ

advertisement
Назаренко Светлана Эдуардовна,
учитель информатики МБОУ СОШ №7
г. Ноябрьск,
89678903191
scholl7324@mail.ru
Размышления на тему профильного образования. Взгляд снизу.
Понятие искусства крайне широко, оно может
проявляться как чрезвычайно развитое
мастерство в какой-то определённой области.
Википедиа
Аннотация. Статья знакомит читателей с одной из форм дополнительного
образования учащихся профильных информационно-технологических классов, такой
как
«каникулярная профильная школа». Автор анализирует специфику профильной каникулярной
школы в области информационных технологий, определяет ее педагогические возможности
и особенности в образовательном процессе.
Профессия разработчика программного обеспечения становится все более
востребованной и высокооплачиваемой. В связи с этим из года в год все больше школьников
на уровне среднего (полного) общего образования выбирают профильное обучение в классах
информационно – технологического направления.
Чтобы вырастить грамотного
специалиста в этой области, нужно изначально более осознанно подходить к вопросу
его обучения. Целью обучения не должно быть тривиальное освоение языка
программирования (знание его синтаксиса и операторов), это намного больше: готовность с
помощью языка решать реальные и актуальные задачи, склонность к глубокому анализу
методов их решения, стремление к совершенству разрабатываемой программы, ее красоте и
концептуальной завершенности. Не каждый ученик, мечтающий стать программистом,
способен в действительности овладеть этим трудным ремеслом, требующим усидчивости,
терпения, внимания, кропотливого труда и большого запаса знаний. Поэтому важно еще на
стадии самоопределения показать ученику все стороны этой профессии, чтобы
программирование для ученика стало больше, чем хобби, а именно средством
самореализации в будущей профессиональной деятельности.
Одной из перспективных дополнительных форм работы в реализации профильного
образования в области информационных технологий считаю организацию и проведение
регулярных каникулярных профильных школ, где ребята могли бы продвинуться в той или
иной области предметных знаний с помощью привлеченных высококлассных специалистов.
Обучение в профильных школах должно выходить за рамки школьного курса по предмету
информатика и ориентироваться на более высокую ступень освоения предметных знаний.
Профильная каникулярная компьютерная школа — это интенсивный тренинг, который
должен пройти каждый ученик. Это необходимый этап на пути начинающего программиста,
дающий возможность совершать ошибки, наступить на те «грабли», на которые надо
наступить, чтобы понять, что было неправильно и как в дальнейшем этого избежать. Это
замечательная возможность получить практические навыки и важнейшую теоретическую
базу. Но самая главная цель профильной компьютерной школы — вдохнуть в учеников
идеологию настоящего разработчика программного обеспечения, стремление к
совершенствованию кода своих программ и своего мастерства в целом. Для школьников
профильных информационно - технологических классов, учащихся городских школ юного
программиста считаю рациональным организовать обучение в каникулярной профильной
компьютерной школе по двум параллелям (в дальнейшем количество параллелей может
увеличиваться: от медиа - IT технологий, до робототехнических направлений):
1.
Алгоритмическая параллель, сосредоточенная на изучении теории алгоритмов и
решении олимпиадных задач. Почему в основе олимпиадное программирование?
Олимпиадное программирование - это
богатейший опыт и тренинг в искусстве
программирования, возможность оценивать и сравнивать уровень своего мастерства с
мастерством сверстников, возможность ставить новые цели и достигать их. Ведь для того,
чтобы решить олимпиадную задачу, требуется сначала придумать оригинальное и
эффективное по памяти и по времени решение, потом последовательно превратить его в
алгоритм, потом в программу на языке программирования. Но язык программирования
плохо сочетается с языком мыслей, поэтому ученики должны найти способ выразить свою
мысль через этот язык. И год за годом улучшать это умение, создавая все более и более
совершенные «произведения искусства».
Эта параллель многоступенчатая, ибо невозможно за одну смену объять необъятное. И
строить ее можно в соответствии с уже давно апробированными примерными программами
всероссийских школ, занимающихся олимпиадным и спортивным программированием
(Приложение 1).
2.
Промышленное программирование, которое подразумевает моделирование
функционирование группы разработчиков в крупной IT-компании, работы в соответствии со
стандартами, принятыми в промышленности. Эта параллель для школьников, уже умеющих
уверенно программировать, готовых к работе над реальными проектами. Другими словами,
она для победителей и призеров олимпиад уровня не ниже регионального. В отличие от
традиционных параллелей, посвященных изучению алгоритмов и решению олимпиадных
задач, в этой параллели ставится задача: смоделировать работу группы разработчиков
крупной IT-компании (например: Яндекса, Google, ВКонтакте и т.д), чтобы создать у
школьников представление о стандартах, принятых в промышленной разработке. Привлекать
к обучению в этой параллели необходимо специалистов, работающих в подобных
компаниях. Во время каждой каникулярной смены силами параллели разрабатывается
полноценный продукт, готовый к использованию. Вот несколько моментов, отличающих
этот процесс от участия в олимпиаде по программированию:

работа в команде: одновременное изменение кода несколькими разработчиками
системы контроля версий и внимание к оформлению;

тестирование кода: Unit-тестирование, «коридорное тестирование» и акцент на
работоспособности продукта;

объектно-ориентированное программирование;

итеративный подход к разработке: снижение рисков, реальная оценка состояния
проекта и постоянная доработка.
Кроме того, за смену школьники смогут эффективно использовать возможности
среды разработки, узнают о способах общения в команде, научатся оценивать
пользовательские интерфейсы и получат неповторимый опыт разработки на языках C# и
Python, которые в условиях стремительно развивающихся технологий стали стандартом дефакто для веб-приложений множества компаний.
Продолжительность обучения в каждой параллели должна варьироваться от 10 (в
осенней, весенней сменах) до 20 дней (в зимней, летней сменах). Для эффективного
построения учебного процесса количество обучающихся в группе не должно превышать 8-12
человек, на одну группу количество преподавателей - не менее двух: основной
преподаватель и преподаватель - тьютор для консультирования и помощи учащимся во
время практических занятий. Обучение в профильной школе могут проходить обучающиеся,
обладающие определенным запасом знаний основ программирования и имеющие опыт
уверенного программирования задач школьного курса. Иными словами, обучение в
профильной школе не должно сводиться к обучению «с нуля». Начальные знания ребята
должны получать в школе на уроках информатики или кружках дополнительного
образования. В связи с ограничением на количественный состав участников школы отбор в
профильную школу должен осуществляться на конкурсной основе, приоритет должен
отдаваться учащимся, проявившим себя на олимпиадах по информатике различных уровней.
Однако реализация данной идеи в нашем маленьком городе сталкивается с рядом
проблем, главная из которых – кадры.
В школах фактически нет специалистов (и этот факт, к сожалению, приходится
констатировать), способных на должном уровне преподавать в классах информационно –
технологического профиля, дающих хорошую начальную базу в области программирования
на профильном или хотя бы на пропедевтическом уровне по предмету, а также
подготавливающих ученика к олимпиадам по информатике муниципального уровня. Из
года в год количество участников муниципального этапа олимпиады по информатике очень
мало, а следовательно, и выбирать участников профильной школы фактически не из кого. В
школах мало детей, увлеченных программированием, только потому, что педагоги просто не
занимаются этим видом деятельности с детьми. Выход? Дополнительное образование через
занятия в городской школе юного программиста. Однако это не решает проблемы, один
преподаватель школы программирования способен полноценно заниматься максимум с 8-12
учащимися города, т.к. занятия большей частью сводятся к
индивидуальному
консультированию каждого ученика. Это связано с тем, что дети, которые занимаются в
школе программирования разновозрастные и уровень программирования неодинаковый.
Поэтому важно заниматься в этом направлении не только с детьми, но в первую очередь
начать с педагогов. Организовать круглогодичный консультационный пункт, повышать их
мастерство через проведение обучающих семинаров, мастер – классов, интенсивных
тренингов.
Большинство олимпиадных задач по программированию требуют от ученика
глубоких познаний в области линейной алгебры, теории вероятности, комбинаторики,
вычислительной геометрии. Поэтому некоторые предметные школы должны быть
интегрированными, другими словами, учащиеся профильной школы по информатике
должны пройти определенные курсы профильных школ по математике. Это еще одна
проблема.
Организация второго направления «Промышленное программирование» возможна
только в том случае, когда в городе уже появится хотя бы одна группа уверенно
программирующих ребят, прошедших обучение во всех параллелях первого направления, а
значит, это направление целесообразно вводить поэтапно, не ранее, чем через 2 года после
начала апробации данной идеи.
Для достижения высоких результатов занятия в таких школах должны быть
регулярными и круглогодичными, не менее 4 раз в год, но весь вопрос упирается в
финансирование. Считаю оправданным проведение таких школ именно в городе, а не
организовывать вывоз детей в другие подобные школы. Это, в первую очередь, экономия
средств на проживании, питании и дороге обучающихся. Куда меньше понадобится
расходов, если пригласить и оплатить работу одного – двух специалистов. Один из выходов
– проведение осенних, зимних и весенних смен на базе городской школы юного
программиста, а летних смен профильной школы в региональном лагере «Ямал», в Болгарии,
организовав
занятия с совмещением активного отдыха у моря. Программа отдыха
одаренных детей в лагере «Ямал» финансируется из средств бюджета Департамента по
молодежной политике, и средства выделятся именно на одаренных детей, почему бы не
организовать одну из смен именно для проведения профильных школ.
Таким образом, профильные каникулярные школы решают комплексные и
разноуровневые задачи поэтапной допрофессиональной или начальной профессиональной
подготовки. Каникулярная профильная школа - это система взаимосвязанных,
преемственных программ одного профиля, позволяющих обучающимся освоить
(самостоятельно выбрать) тот или иной уровень образования. Данное обстоятельство
приводит к возможности перехода наиболее способных школьников к профессиональным
занятиям и к сопутствующей профессиональной подготовке.
Можно сказать, что
предназначение профильной каникулярной школы, о которой речь идет в данной статье, это обеспечение региональных и национальных достижений в области IT технологий,
подготовка высококлассных специалистов – разработчиков программного обеспечения.
В рамках каникулярной профильной школьной осуществляются три главных
процесса:
 организация социального опыта школьника в ситуациях напряжения сил, преодоления
себя, открытой конкуренции, переживания победы и поражения, опыта отношений в
команде, призванной решать сложную задачу;
 общее профильное образование, обучение специальным знаниям и умениям;
 индивидуальная педагогическая помощь в самоопределении по отношению к
осваиваемой деятельности в рамках допрофессиональной и начальной
профессиональной подготовки (как в случае успехов и карьерного продвижения, так и
в случае неуспеха, содействие в преодолении кризисов карьеры в освоении данного
вида деятельности), поддержка в преодолении учебных трудностей.
Приложение 1.
Примерные программы алгоритмических параллелей
Параллель C' Программа курса:
 Сложность алгоритмов.
 Проверка на простоту, разложение на множители. Наибольший общий делитель и
наименьшее общее кратное: алгоритм Евклида. Признак Паскаля. Расширенный
алгоритм Евклида.
 Линейный поиск.
 Квадратичные сортировки (выбор, вставки, пузырек). Сортировка подсчетом.
 Функции. Виды параметров. Передача массивов.
 Рекурсия: НОД, Ханойские башни, перебор с возвратом.
 Стек. Стек функций.
 Теория графов. Определения графа, основных элементов графов. Типы графов.
Деревья: число вершин и висячих вершин.
 Представления графов в памяти: с помощью матрицы смежности и списка ребер.
Оценка сложности для простейших операций.
 DFS и BFS. Алгоритм. Реализация для простейших представлений в памяти. Оценка
сложности. Восстановление пути.
 Динамика на одномерных и двумерных массивах: количество способов, есть ли способ,
лучший способ.
 Динамическое программирование с 2 параметрами - длина и последний элемент.
 НОП.
 Бинарный поиск. Инвариант, время работы.
 Быстрая сортировка Хоара. Время работы в среднем/худшем случае.
 Длинная арифметика. Сложение, вычитание, умножение на короткое/длинное число.
Параллель C Программа курса:
 Структуры данных. Стек. Дек. Очередь. Куча
 Квадратичные сортировки. Сортировка выбором. Сортировка пузырьком. Сортировка
вставками
 Вещественные числа (хранение в памяти, операции с погрешностью)
 Линейный поиск. Барьерные элементы. Двоичный поиск. Двоичный поиск по ответу
 Продвинутые сортировки. Быстрая сортировка Хоара. Сортировка подсчетом.
Сортировка слиянием (merge)
 Динамическое программирование. ○ Количество 0-1 последовательностей заданной
длины без двух подряд идущих единиц ○ Наибольшая возрастающая
подпоследовательность (за O (n2)) ○ Задача о рюкзаке ○ Динамика на подотрезках
 Комбинаторный перебор. Генерация всех комбинаторных объектов (двоичных
последовательностей длины n, перестановок, сочетаний)
 Комбинаторика.
○ Двоичные последовательности длины n. Подсчет количества. Генерация следующей
последовательности. Определение номера по объекту и объекта по номеру. k-ичные
последовательности. ○ Перестановки. Подсчет количества. Генерация следующей
перестановки. Определение номера по перестановке. Определение перестановки по
номеру. ○ Сочетания. Подсчет количества. Генерация следующего сочетания. ○
Правильные скобочные последовательности. Генерация следующей правильной
скобочной последовательности. Подсчет количества (формула Каталана)
 Графы. Способы хранения графов. Обход в глубину. Выделение компонент связности.
Поиск циклов. Топологическая сортировка.
 Кратчайшие пути в графе. Обход в ширину. Алгоритм Дейкстры. Алгоритм Флойда.
Циклы отрицательного веса.

Геометрия
○ Векторы. Точка. Вектор. Хранение в памяти. Операции над векторами. Расстояние
между двумя точками. Теорема Пифагора. Длина вектора. Нормализация вектора. ○
Основы тригонометрии. Декартова и полярная система координат. Полярный угол.
Радианы, градусы. Определение полярного угла точки. ○ Взаимное расположение
векторов. Скалярное произведение векторов. Векторное произведение векторов.
Определение взаимного положения векторов с использованием векторного и
скалярного произведения. Угол между векторами. Использование atan2([a, b], (a, b)). ○
Взаимное расположение точек и фигур. Проверка принадлежности точки прямой,
лучу, отрезку с использованием векторного и скалярного произведения. Расстояние от
точки до прямой, луча, отрезка. Проверка двух отрезков на пересечение. Расстояние
между отрезками. ○ Точность вычислений. Сравнение двух величин (==, !=, , <=, >=).
○ Прямая. Уравнение прямой. Нормальное уравнение прямой ax+by+c=0. Расстояние
от точки до прямой, заданной уравнением. Параллельная прямая, уравнение
параллельной прямой. Пересечение прямых. Точка пересечения прямых.
Параметрическое задание прямой. Уравнение биссектрисы угла. ○ Луч, отрезок. ○
Многоугольники. Ориентированная площадь треугольника. Ориентированная
площадь многоугольника. Определение выпуклости многоугольника. Нахождение
точки внутри многоугольника. Метод подсчета углов. Метод дополнительного луча.
○ Окружность. Взаимное расположение точки и окружности. Взаимное расположение
прямой и окружности. Уравнение касательной к окружности, проходящей через
заданную точку. Нахождение точек пересечений прямой и окружности. Взаимное
расположение двух окружностей. Нахождение пересечения двух окружностей.
Параллель B' Программа курса:
 Алгоритмы сортировки. Устойчивые и неустойчивые сортировки. Сложность
алгоритмов сортировки.
 Бинарный поиск элемента в отсортированном массиве. Решение задач методом
бинарного поиска по ответу.
 Нахождение корня функции методом деления отрезка пополам.
 Нахождение экстремума функции методом тернарного поиска.
 Задачи на обработку событий и множество отрезков на прямой.
 Метод сжатия координат.
 Метод сканирующей прямой. Нахождение площади объединения прямоугольников на
плоскости.
 Скобочные последовательности и сводящиеся к ним задачи. Числа Каталана.
 Рекурсивные и нерекурсивные алгоритмы перебора всех правильных скобочных
последовательностей.
 Восстановление правильной скобочной последовательности по шаблону.
 Быстрое
определение
последовательности
по
номеру
и
номера
по
последовательности.
 Алгоритмы поиска в глубину и в ширину. Применения алгоритма поиска в глубину.
 Алгоритмы поиска кратчайших путей в графе: Дейкстра, Флойд, Форд-Беллман.
 Алгоритмы построения гамильтонова пути и цикла.
 Игры на ациклических графах: определение выигрывающего игрока.
 Комбинаторные алгоритмы: перебор всех перестановок из n элементов, перебор всех
k- элементных подмножеств множества из n элементов.
 Элементарная геометрия на плоскости.
 Многоугольники. Выпуклая оболочка.
Параллель B Программа курса:
 Сортировки. Быстрая сортировка, сортировка слиянием.
 Списки. Односвязные и двусвязные, кольцевые. Хранение списков в массивах.

Графы. Обход в глубину. Времена входа и выхода. Топологическая сортировка.
Сильная связность. Конденсация. Мосты, точки сочленения. Эйлеровы циклы и пути
 Задачи на отрезках. Sqrt-декомпозиция. Дерево интервалов. Дерево Фенвика.
 Двоичные деревья поиска. Декартово дерево.
 Групповые операции на дереве отрезков и на декартовом дереве.
 Геометрия. Скалярное, векторное произведения. Пересечение отрезков. Площадь
многоугольника. Проверка многоугольника на выпуклость. Проверка точки на
принадлежность многоугольнику. Выпуклая оболочка
 Динамическое программирование (ДП)
○ Лесенки ○ Наибольшая возрастающая последовательность за O (n log n) ○ ДП по
подотрезкам ○ ДП по подмножествам ○ ДП по поддереву ○ ДП по профилю, ДП по
изломанному профилю.
 Минимальное остовное дерево. Алгоритмы Прима и Краскала.
 Система непересекающихся множеств. Алгоритм Краскала с СНМ.
 Кратчайшие пути в графах. Поиск в ширину на 0-k графе. Алгоритм Дейкстры с
деревом интервалов. Алгоритмы Форда-Беллмана и Флойда. Поиск отрицательных
циклов.
 Парасочетания. Алгоритм Куна. Минимальное вершинное покрытие.
 Поиск подстрок. Алгоритм Кнута-Морриса-Пратта. Z-функция. Хеши. Хеш-таблицы.
Бор. Динамика на боре. Алгоритм Ахо-Корасика.
Параллель A' Программа курса:
 Продвинутые применения поиска в глубину (топологическая сортировка, выделение
компонент сильной связности, построение конденсации графа, задача 2-SAT,
эйлеровы циклы и пути)
 Паросочетания в двудольном графе и связанные темы
 Потоки. Алгоритмы Форда-Фалкерсона и Эдмондса-Карпа, масштабирования потока.
Задача mincost-maxflow
 Задача о поиске наименьшего общего предка (LCA). Алгоритм двоичного подъема.
Алгоритм Тарьяна для offline-поиска LCA.
 Поиск подстрок. Алгоритм Кнута-Морриса-Пратта. Z-функция. Бор. Алгоритм АхоКорасик. Хеши
 Суффиксный автомат
 Продвинутое динамическое программирование (ДП):
○ Рекурсивное восстановление ответа в задачах на ДП ○ Вывод объекта по номеру и
определение номера по объекту ○ Способы написания ДП (с просмотром вперед,
назад; рекурсия с запоминанием результата) ○ Продвинутые виды задач на ДП (ДП на
на ациклических графах, ДП на деревьях, ДП на подмножествах, ДП по профилю, ДП
по изломанному профилю)
 Игры. Ретроанализ. Функция Гранди.
 Матрицы. Быстрое возведение в степень, быстрое решение линейных рекуррентных
соотношений. Решение системы линейных уравнений медотом Гаусса. Поиск
обратной матрицы.
 Задачи на отрезках. Дерево интервалов (отрезков), sqrt-декомпозиция, дерево Фенвика
 Многомерные структуры данных. Многомерное дерево Фенвика. RMQ декартовых
деревьев.
Параллель A Программа курса:
 Дерево отрезков. Реализация сверху/снизу. Двумерное дерево отрезков. Сжатое
двумерное дерево отрезков
 Дерево Фенвика. Многомерное дерево Фенвика. Модификация на отрезке. Дерево
Фенвика для максимума.

Декартово дерево. Декартово дерево по неявному ключу. Декартово дерево с деревом
отрезков, групповые операции
 Система непересекающихся множеств. RMQ offline с использованием СНМ без
сведения к LCA. LCA offline с использованием СНМ. Dynamic connectivity problem
 Задача о наименьшем общем предке (LCA). Связь с задачей RMQ. Двоичный подъём.
Сведение LCA к +-1 RMQ. Sparse table. Фарах-Колтон-Бендер. Cведение RMQ к LCA.
Heavylight decomposition
 Дерево ван Эмде-Боаса
 Простые алгоритмы на строках. КМП. Z-функция. Ахо Корасик. Использование
хешей. Алгоритм Дюваля
 Суффиксный массив.
 Суффиксное дерево. Алгоритм Укконена
 Суффиксный автомат
 Задача о максимальном потоке. Алгоритмы Форда-Фалкерсона, Эдмонса-Карпа,
масштабирования и декомпозиции потока. Алгоритм Диницы.
 Поток минимальной стоимости (mincost - maxflow)
 Задача о максимальном паросочетании в двудольном графе и задача о назначениях.
○ Алгоритм Куна ○ Венгерский алгоритм
 Игры. Функция Гранди. Ретроанализ. Алгоритм Смита
 Геометрия
○ Проверка принадлежности точки многоугольнику ○ Проверка пересечения прямой и
многоугольника ○ Построение касательных к выпуклому многоугольнику
○
Пересечение выпуклых многоугольников ○ Выпуклая оболочка объединения
выпуклых многоугольников ○ Алгоритм Мелькмана построения выпуклой оболочки
простой ломаной ○ Рандомизированный алгоритм проверки непустоты пересечения
полуплоскостей ○ Рандомизированный алгоритм нахождения окружности
минимального радиуса, покрывающей заданные точки
В параллелях С′, В′, А′ внимание уделяется не столько изучению новых алгоритмов,
сколько умению реализовать различные алгоритмы и применять их для решения задач.
Download