Часть 3. Компьютер и физика

Тема / ученик должен знать / ученик должен уметь (тривиально) Ученик должен уметь (нетривиально)
Проект «Арканоид 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-параметры. Понимать, как возвращать ответ в виде массива. Тренироваться в «возне с байтами» и защитном программировании. Понимать важность эффективности алгоритмов и стараться все время рассчитывать ее.
Разбор задач на алгоритмы работы со строками. Понятие эффективности алгоритмов.
Проект «Строковая библиотека».
Проект «Строковая библиотека».
Проект «Строковая библиотека». Поиск и замена строк.
Проект «Строковая библиотека».
Проект «Строковая библиотека». Переводы число-строка и строка-число для разных систем счисления.
Проект «Строковая библиотека». Переводы число-строка и строка-число для разных систем счисления.
Проект «Строковая библиотека». Массивы строк.
Проект «Строковая библиотека». Массивы строк.
Матрицы (многомерные массивы). Решение задач, связанных с матрицами. Иметь основные навыки работы с многомерными массивами. Знать, как это реализуется в машине (как расположен в памяти многомерный массив).
Решение задач, связанных с матрицами.
Решение задач, связанных с матрицами.
Решение задач, связанных с матрицами.
Сортировка в массивах. Основные виды сортировки. Разбор задач, связанных с сортировкой. Понятие эффективности алгоритма сортировки. Алгоритм сортировки выбором (через анализ человеческих действий). Любить анализировать эффективность алгоритмов. Иметь опыт выбора алгоритма для решения конкретной задачи. Понимать, что знание одного алгоритма — не знание, всегда нужно с чем-то сравнивать. Понимать, что идеала часто нет и много что зависит от специфики условий. Иметь опыт конкретного анализа алгоритма, сбора статистики и т.д. и сравнения с теорией.
Проект «Сортировка выбором»
Алгоритм сортировки пузырьком (через определение отсортированной последовательности). Эффективность алгоритма сортировки пузырьком. Адаптивный характер алгоритма. Сортировка «пузырьком и гирькой».
Проект «Сортировка пузырьком».
Другие алгоритмы сортировки (подсчитывающая, слиянием, Шелла, идеи алгоритма быстрой сортировки). Сравнение эффективности алгоритмов.
Проект «Сравнение разных сортировок».
Поиск данных. Последовательный поиск и его эффективность (повторение). Двоичный поиск, его эффективность. Алгоритм двоичного поиска. Обращать внимание на семантику операций сравнения (по каким критериям?). Понимать, как дополнительные структуры данных облегчают работу (на примере индексного поиска). Тренировать навыки осознанного сравнения выбора алгоритмов.
Проект «Сравнение видов поиска».
Индексный поиск и индексирование. Индексный поиск в массиве строк.
Проект «Сравнение видов поиска».
Проект «Сравнение видов поиска».
Заключительное занятие. Конечный результат или возня с байтами? (размышления о будущей профессии). Понимать, что основа любой профессии — это не сколько получение результата, сколько любовь к возне с мелочами (соответствующими данной предметной области). Понять для себя, что в течение года было важнее в плане программирования и что-то решить на будущее.