Типовые задачи для обучения программированию
Во время обучения программированию вам придётся выполнять много практических заданий. Большинство задач от преподавателей нацелено на закрепление пройденного материала. Они полезны, но не слишком интересны студентам. В итоге учащиеся сами придумывают себе задания, которыми хвастаются перед друзьями и преподавателями.
О том, какие образовательные проекты были на моём пути, расскажу далее.
Боец
Тип приложения: игра.
Платформа: Turbo Pascal.
Описание: в 5 классе, после первого знакомства с программированием, любой ученик пытается создать игру. В моём классе настоящим хитом стала игра под жутким названием «Боец». Это текстовая пошаговая аркада, имеющая настольный аналог с бумажками и костями.
Суть игры следующая: вы — боец, вышедший на ринг. За один ход игрок может совершить одно действие: удар левой рукой, правой, ногой или поставить блок. После этого ход переходит противнику.
Далее генерируется случайное число от 2 до 12. Если выпадает меньше 5 — удар не достигает цели, 5−8 — только рукой, 9−11 — засчитывается любой, 12 — критическое попадание. Удар левой рукой оценивается в 1 пункт, правой — 2, ногой 3, критическое попадание прибавляет единицу. Блок нивелирует любые попадания, кроме критического, но по номинальной «цене».
Необходимые навыки: никаких. Знания математики и языка хватит, чтобы устроить небольшое соревнование с друзьями. Научитесь записывать и считывать данные из файла — станет еще интереснее.
Калькулятор
Тип приложения: офисное.
Платформа: Borland Delphi.
Описание: на следующей стадии обучения программированию я и мои одноклассники решили использовать программирование не в развлекательных целях, а для пользы дела. Классический калькулятор никто не создавал, все творили «моды»: у кого-то он решал уравнения 2−3 степени, у кого-то строил графики, некоторые умудрялись адаптировать его под задачи по физике и геометрии.
Необходимые навыки: знакомство с диалоговыми окнами и математикой. Все остальное — игра воображения.
Бильярд
Тип приложения: игра.
Платформа: Borland Delphi.
Описание: в старших классах я загорелся идеей создать собственное приложение с двухмерным бильярдом. Реализация кажется довольно простой до тех пор, пока вы ей не займетесь. Главная проблема — графическое описание физики столкновений. Здесь есть два решения: отрисовывать каждый пиксель смещения, что смертельно для быстродействия, или отрисовывать физику с учетом допусков, количества шаров, их положения и даже цвета.
Необходимые знания: работа с графикой, физика и математика за 8−10 класс, много желания и свободного времени.
Онлайн-анкета
Тип приложения: офисное.
Платформа: Visual Studio, C#.
Описание: мой преподаватель в университете считал, что с помощью кода можно только прошить микроконтроллер и создать диалоговый интерфейс. Поэтому мы постоянно отрабатывали взаимодействие с БД: автозаполнения, автодополнения, протоколы, оптимизации, шифрования и т. д. В общем, к финишу курса каждый из студентов должен был создать онлайн-анкету, которая бы сохраняла введенные данные и генерировала письмо с резюме и портфолио.
Необходимые навыки: работа с файлами и БД. Сложностей здесь мало, зато механически набивать код придется много.
Робот-собеседник
Тип приложения: искусственный интеллект.
Платформа: MATLAB/Simulink.
Описание: в университете также был полугодовой курс по дисциплине «нейронные сети», по итогам которого студенты сдавали какой-нибудь проект. Я отделался примитивной системой перемещения для робота, в то время как большинство сокурсников взялось за создание «умного» собеседника. Те, кто работал с нейронными сетями в MATLAB, понимает, что это проект или для очень амбициозного человека, или для мазохиста. Не знаю, к какому типу относился каждый из сокурсников, но рабочего проекта так никто и не создал.
Необходимые навыки: Во-первых, начните не с нейронных сетей, а с простой комбинаторики. Чатбота создать проще(необходимы лишь навыки работы с БД), да и язык роли не играет. Во-вторых, выберите другую платформу, MATLAB не для этого. Python с PyBrain будут полезнее.
Управление умным домом
Тип приложения: домашнее вспомогательное.
Платформа: Keil uVision для МК, Netbeans для веб-интерфейса.
Описание: еще один университетский преподаватель был одержим умными домами, наверняка его собственный был похож на берлогу сумасшедшего профессора с висящими проводами и кучей диодов. Он довольно быстро сумел заинтересовать нас работой над симбиозом софта и железа. Совместными усилиями к концу семестра на даче у одного из студентов(он же спонсор затеи) появилась система с контролем движения, датчиком температуры и даже автополивом растений. Всё это контролировалось и управлялась через браузер. Система выглядела колхозно, работала с кучей багов, но никто ничего круче на этом курсе не делал ни до ни после нас.
Необходимые навыки: нам потребовалось изучить мануалов всех контроллеров и датчиков, плюс языки веба. Так как времени было в обрез, а совершенную систему делать никто не собирался, данных знаний вкупе со специальным ПО было достаточно.
Если же подходить к делу серьёзно, куда проще купить Raspberry Pi для сбора информации и взаимодействия с клиентом, а остальное реализовать на готовых датчиках.
Какие интересные задачи в школе, университете и на курсах решали вы? Пишите в комментариях.