Jan 1, 0001
Домашнее задание по занятию №2
Шишацкий Михаил группа: Б05-932 email: shishqa.main@gmail.com tg: https://t.me/shishqa
Название урока: Как я перестал бояться и выстрелил себе в ногу Тематика: Разработка проекта на языке программирования
Блок 1. Цели будущего курса
- C точки зрения преподавателя
- Проблема: в школах много внимания уделяется олимпиадному программированию, и мало внимания - проектной деятельности, разработке (по личному опыту); Цель: дать школьникам опыт разработки программного продукта, приближенный к реальной жизни. Поделиться особенностями профессии.
- Проблема: настройка того же Linux - очень увлекательный процесс, ничем не отличающийся от сборки конструктора Lego. Однако школьники часто боятся лезть в эту область, потому что она кажется скучной и сложной; Цель: на простых примерах и аналогиях показать, что школьники могут делать на начальных этапах знакомства со сложными на первый взгляд технологиями.
- С точки зрения ученика
- Проблема: хочется стать программистом, но нет понимания, что делать, что учить; Цель: узнать от преподавателя пути профессионального развития на раннем этапе, в школе.
- Проблема: хочется создать свой проект; Цель: под руководством преподавателя написать хороший, интересный проект.
- С точки зрения работодателя
- Проблема: в программе университета нет явных курсов по культуре разработки, студенты ограничены учебными проектами, хороших преподавателей не хватает. Поэтому часто студенты приходят без понимания культуры промышленной разработки, мыслят в рамках учебных задач, теряются на этапах настройки рабочего окружения или решения простых проблем. Приходится тратить время ментора (технического лидера) на доучивание таких студентов; Цель: получить студента, который со школы увлекается разработкой, ориентируется в области, способен решать простые задачи, не боится задавать вопросы.
Вопросы для декомпозиции:
- Какого объёма проект будут реализовывать школьники? Сколько времени они потратят на реализацию?
- Проект индивидуальный или командный?
- Какие предварительные знания требуются?
- Какие технологии необходимо дать школьникам, чтобы они смогли успешно реализовать проект?
- Как связать тему Linux с разработкой проекта?
- Какие практики необходимо внедрить в учебный процесс, чтобы школьники познакомились с процессом промышленной разработки?
- Как работать с вредными привычками школьников (плохо называют переменные, пишут грязный код)?
- Как провоцировать учащихся на вопросы?
- Какого объёма практики достаточно, чтобы учащиеся могли сами решать простые проблемы (даже если им не хватает знаний)?
- Как оценить достижение учащимися некоторого уровня самостоятельности?
Локальные цели (на урок 20 минут):
Преподаватель:
- Подготовить рассказ об основных особенностях промышленной разработки на 2-3 минуты, необходимый для вовлечения учащихся в процесс обучения;
- До урока подготовить набор упражнений на 10 минут для изучения базовых конструкций языка программирования:
- Продумать, в каком окружении учащиеся будут выполнять упражнения, протестировать процесс;
- До урока реализовать учебный проект до 500 строк кода с количеством расширяемых модулей равным числу учащихся для дальнейшего распределения этих модулей по учащимся:
- Обильно снабдить код комментариями, написать документацию, описывающую все составляющие;
- Протестировать процесс написания кода от лица учащегося. Тестировать необходимо не только успешные сценарии, но и ошибочные, когда учащийся что-нибудь ломает. Продумать сценарии поведения на каждый такой сценарий;
- Внедрить в код несколько явных ошибок, чтобы провоцировать учащихся на вопросы, вызывать внутренний конфликт с полученными знаниями;
- До урока настроить репозиторий:
- Написать скрипт для упрощения добавления кода в репозиторий;
- Протестировать процесс добавления кода в репозиторий;
- До урока протестировать весь процесс на паре знакомых, получить обратную связь;
Учащийся:
- Учащийся будет знать, чем промышленная разработка отличается от “кустарной”, потому что это необходимо для профессионального развития
- В начале занятия будет дан обзор;
- Примеры и аналогии будут приводиться в течение всего урока;
- Учащийся познакомится простыми элементами синтаксиса (возможно нового для учащегося) языка программирования (не сложнее вывода в консоль, условных операторов и циклов)
- Информация не будет перегружена деталями рабочего окружения, учащийся будет работать в (web) IDE;
- В процессе изложения материала преподаватель намеренно делает ошибки, плохо называет переменные, провоцируя учащихся на вопросы
- Учащийся самостоятельно напишет часть проекта, которую укажет преподаватель
- У каждого учащегося будет задача реализовать маленькую (до 20 строк кода), изолированную от других учащихся часть проекта (например, операции в калькуляторе или плагины для какого-нибудь редактора). Задачи не будут перегружены деталями реализации объемлющего проекта;
- Учащийся протестирует собственный код;
- Добавление в систему контроля версий будет скрыто от учащегося вызовом скрипта (команды в терминале);
- (дополнительно) Будет организовано code-review, где каждый учащийся посмотрит на код другого учащегося (в web интерфейсе gitlab или github)
Блок 2. Образовательные результаты будущего курса по таксономиям Блума и Марцано
- Знание:
- Учащийся перечисляет технологии, которые использовались на уроке, и их назначение;
- Учащийся перечисляет вредные практики в программировании, перечисленные на занятии;
- Учащийся идентифицирует все конструкции языка программирования, которые использовались на уроке, объясняет принцип их работы;
- Учащийся даёт определения таким понятиям, как документация (README), тестирование кода, code-review; Артефакт: методичка (созданная преподавателем)
- Понимание:
- Учащийся объясняет, почему вредная практика действительно вредная;
- Учащийся описывает стандартную структуру любого программного проекта, объясняет необходимость всех составляющих;
- Учащийся объясняет идею проекта, в котором он участвует, функциональность части кода, которую он пишет; Артефакт: конспект, комментарии в коде
- Применение:
- Учащийся применяет изученные конструкции языка программирования для написания выделенной части программы;
- Учащийся воспроизводит алгоритм добавления написанного им кода в систему контроля версий;
- Учащийся демонстрирует написанный им код другим учащимся;
- Учащийся переносит знания о вредных практиках в программировании на свой код (т.е. старается их избегать); Артефакт: код программы
- Анализ:
- Учащийся рассуждает, спорит с другими учащимися на тему культуры разработки;
- Учащийся исследует документацию и код коллег, выделяет отдельные составляющие;
- Учащийся анализирует технологии, не перечисленные на уроке, для дальнейшего профессионального развития, других проектов, соотносит их с уже известными; Артефакт: оформленный репозиторий на github или gitlab
- Синтез:
- Учащийся может с нуля написать простой проект, аналогичный тому, что разрабатывался на занятии, продумать его архитектуру;
- Учащийся может организовать команду из единомышленников для создания командного проекта;
- Учащийся модифицирует уже написанные проекты с учётом новых знаний; Артефакт: написанный с нуля проект
- Оценка:
- Учащийся даёт рекомендации коллегам с учётом имеющегося у него опыта разработки и полученных знаний;
- Учащийся доказывает, что для написания проекта разумно использовать перечисленные им паттерны;
- Учащийся перечисляет недостатки своих проектов и возможности развития, доказывая текущую их неоптимальность; Артефакт: исправленные проекты
- Метакогнитивный уровень:
- Учащийся ставит цель изучить недостающие, интересные ему технологии;
- Учащийся пересматривает свои прошлые проекты и хочет поправить их, сделать чище, выложить на github или gitlab;
- Учащийся рассуждает, как добавить к изобретаемым им “велосипедам” фичи, которые делают его проект уникальным и непохожим на остальные; Артефакт: аккаунт учащегося на github или gitlab
- Я-система:
- Учащийся определяет ценность изучаемого как конкурентное преимущество при поступлении в вуз, приёме на работу;
- Учащийся называет себя разработчиком; Артефакт: тоже аккаунт учащегося на github или gitlab