№ | Тема / ученик должен знать / ученик должен уметь (тривиально) | Ученик должен уметь (нетривиально) |
Проект «Арканоид 1». План проекта. Разработка процедур и функций (подпрограмм). Согласование подпрограмм между собой, кода и данных. | Иметь навыки планирования проекта. Проект «Арканоид» — опыт полноценного проекта с длинной историей (7 версий). На данной стадии — закрепление всех предыдущих умений и навыков. | |
Проект «Арканоид 1». | ||
Проект «Арканоид 2». Ввод данных с клавиатуры. Взаимодействие с пользователем. | ||
Проект «Арканоид 2». | ||
Проект «Арканоид 2». | ||
Проект «Арканоид 2». | ||
Проект «Арканоид 3». Связь с физикой (механикой). Понятие о моделировании. Моделирование движения с ускорением. | Уметь использовать принципы визуального изучения для исследования физических явлений (на примере механического движения). Уметь и любить использовать для этой цели программирование. Закрепить полученные элементарные навыки исследовательской работы. Уметь готовить доклад и выступать на семинаре с отчетом о своих исследованиях. | |
Проект «Арканоид 3». Моделирование механических задач. | ||
Проект «Арканоид 3». Моделирование механических задач. | ||
Проект «Арканоид 3». Моделирование механических задач. | ||
Проект «Арканоид 3». Моделирование механических задач. | ||
Проект «Арканоид 3». Моделирование механических задач (подведение итогов). | ||
Массивы (числовые массивы) и работа с ними. | Понимать область применения массивов и особенности работы с ними. Любить макрос assert(). | |
Характерные ошибки при работе с массивами и методы защиты от них. Использование макроса assert(). | ||
Простейшие классические задачи на работу с массивами. | ||
Простейшие классические задачи на работу с массивами. | ||
Проект «Арканоид 4» (несколько объектов). | Понимать класс как обобщение идеи модуля. Любить использовать классы для облегчения программирования. Радоваться созданию нового класса. Правильно разделять данные и методы между классами. Избегать дублирования данных и прочей двусмысленности. Понимать эквивалентность определения объекта (в данной ситуации) и класса. Уметь смотреть на объект (и «быть» объектом) с точки зрения его формального описания (класса). Понимать опасность прямой работы с данными и не любить это делать. | |
Проект «Арканоид 4» (несколько объектов). | ||
Понятие о структурах и классах. Проект «Арканоид 5» (несколько объектов с классами). | ||
Проект «Арканоид 5» (несколько объектов с классами). | ||
Проект «Арканоид 5» (несколько объектов с классами). | ||
Проект «Арканоид 5» (несколько объектов с классами). | ||
Задача об объектах разной формы в «Арканоиде». Реализация в виде нескольких классов. Понятие базового класса. Понятие виртуальной функции. | Понимать, что выделение базового класса — не формальная прихоть, это следствие общих свойств (данных или методов) объектов. Вследствие этого, глубоко размышлять над свойством объекта, прежде чем включить его в класс, исключить из класса или перенести его в другой класс. Вообще, понимать, что технология классов — это на 80% размышление (построение определений и классификация), и только на 20% программирование. Любить стройность системы классов. Понимать, что хорошо разработанная библиотека классов — очень неплохой инструмент для быстрой работы. | |
Проект «Арканоид 6» (несколько объектов различного вида). | ||
Проект «Арканоид 6» (несколько объектов различного вида). | ||
Проект «Арканоид 6» (несколько объектов различного вида). | ||
Понятие менеджера объектов. Проект «Арканоид 7» (несколько видов объектов с менеджером). | ||
Проект «Арканоид 7» (несколько объектов различного вида с менеджером). | ||
Проект «Арканоид 7» (несколько объектов различного вида с менеджером). | ||
Проекты «Арканоид». Жизненный цикл программы (подведение итогов). | Понимать, что переписывание программы с изменением технологии — вещь приятная и хорошо подходящая для изучения самих технологий. Понимать, что эволюция технологий ведет к облегчению рутинной работы (но не работы головой). Не любить рутинную работу за нудность и ненадежность и стараться заменять ее, как правило, с помощью обобщений. |
Часть 4. «Возня с данными» (классика)
№ | Тема / ученик должен знать / ученик должен уметь (тривиально) | Ученик должен уметь (нетривиально) |
Массивы букв (строки). Основные алгоритмы работы со строками. | Понимать особенности строк как «частично заполненных массивов». Понимать, что в некоторых языках массив передается «в виде оригинала» (по ссылке) и остерегаться порчи оригинала, по этой причине любить const-параметры. Понимать, как возвращать ответ в виде массива. Тренироваться в «возне с байтами» и защитном программировании. Понимать важность эффективности алгоритмов и стараться все время рассчитывать ее. | |
Разбор задач на алгоритмы работы со строками. Понятие эффективности алгоритмов. | ||
Проект «Строковая библиотека». | ||
Проект «Строковая библиотека». | ||
Проект «Строковая библиотека». Поиск и замена строк. | ||
Проект «Строковая библиотека». | ||
Проект «Строковая библиотека». Переводы число-строка и строка-число для разных систем счисления. | ||
Проект «Строковая библиотека». Переводы число-строка и строка-число для разных систем счисления. | ||
Проект «Строковая библиотека». Массивы строк. | ||
Проект «Строковая библиотека». Массивы строк. | ||
Матрицы (многомерные массивы). Решение задач, связанных с матрицами. | Иметь основные навыки работы с многомерными массивами. Знать, как это реализуется в машине (как расположен в памяти многомерный массив). | |
Решение задач, связанных с матрицами. | ||
Решение задач, связанных с матрицами. | ||
Решение задач, связанных с матрицами. | ||
Сортировка в массивах. Основные виды сортировки. Разбор задач, связанных с сортировкой. Понятие эффективности алгоритма сортировки. Алгоритм сортировки выбором (через анализ человеческих действий). | Любить анализировать эффективность алгоритмов. Иметь опыт выбора алгоритма для решения конкретной задачи. Понимать, что знание одного алгоритма — не знание, всегда нужно с чем-то сравнивать. Понимать, что идеала часто нет и много что зависит от специфики условий. Иметь опыт конкретного анализа алгоритма, сбора статистики и т.д. и сравнения с теорией. | |
Проект «Сортировка выбором» | ||
Алгоритм сортировки пузырьком (через определение отсортированной последовательности). Эффективность алгоритма сортировки пузырьком. Адаптивный характер алгоритма. Сортировка «пузырьком и гирькой». | ||
Проект «Сортировка пузырьком». | ||
Другие алгоритмы сортировки (подсчитывающая, слиянием, Шелла, идеи алгоритма быстрой сортировки). Сравнение эффективности алгоритмов. | ||
Проект «Сравнение разных сортировок». | ||
Поиск данных. Последовательный поиск и его эффективность (повторение). Двоичный поиск, его эффективность. Алгоритм двоичного поиска. | Обращать внимание на семантику операций сравнения (по каким критериям?). Понимать, как дополнительные структуры данных облегчают работу (на примере индексного поиска). Тренировать навыки осознанного сравнения выбора алгоритмов. | |
Проект «Сравнение видов поиска». | ||
Индексный поиск и индексирование. Индексный поиск в массиве строк. | ||
Проект «Сравнение видов поиска». | ||
Проект «Сравнение видов поиска». | ||
Заключительное занятие. Конечный результат или возня с байтами? (размышления о будущей профессии). | Понимать, что основа любой профессии — это не сколько получение результата, сколько любовь к возне с мелочами (соответствующими данной предметной области). Понять для себя, что в течение года было важнее в плане программирования и что-то решить на будущее. |