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