Последние несколько дней или, может быть, больше недели я билась головой о стену о том, какие проекты давать своим ученикам. Вчера я, наконец, посмотрел на прошлые проекты инструкторов GIR, чтобы посмотреть, смогу ли я собрать какие-либо идеи, и один из проектов поразил меня.

Это было для текстовой упрощенной игры в блэкджек, и на самом деле предпосылкой было не писать код, а читать код, который уже делает то, что должен делать. Предупреждение: код представляет собой огромный текстовый файл без каких-либо функций, а затем есть лучшая версия, где код использует функции. Задача студентов состоит в том, чтобы использовать эту улучшенную версию — для вызова предоставленных функций — для создания той же функциональности, что и существующий код без функций. Я подумал, что это гениальная идея, потому что она включает в себя чтение кода и рефакторинг — две очень важные части отраслевой практики, с которыми студенты обычно не знакомятся.

Я решил использовать этот проект для вышеуказанной цели, но мне казалось, что задание можно выполнить за неделю, а мне очень хотелось, чтобы проект был более продолжительным. Раньше я бегло просматривал прошлые проекты инструкторов GIR и почерпнул некоторые идеи, но проекты были недостаточно большими. Я, вероятно, предвзят, потому что в университете, в котором я учился, у нас были проекты, назначенные за три или четыре недели до их сдачи, и я хочу, чтобы это было и для моих студентов.

В течение сегодняшнего дня в отношении игры в блэкджек я понял, что у студентов есть большой потенциал, чтобы сначала создать код без функций самостоятельно, затем преобразовать повторяющийся код в функции, а затем, наконец, использовать эти функции для создания конечного продукта. Они также напишут модульные тесты для функций и, возможно, интеграционные тесты. Сложность интеграционных тестов заключается в том, что в них есть рандомизатор, но, может быть, я просто научу их, как каждый раз давать этому рандомизатору одно и то же число. Я также заставлю их писать комментарии в своем коде и стилизовать его в соответствии с руководством по стилю Python, и я играю с идеей, что они напишут дизайн-документ постфактум, что на самом деле просто потому, что я не говорю о дизайн-документах. до тех пор, пока в классе. Может быть, я заставлю их написать дизайн-документ перед рефакторингом, я не уверен.

Однако я очень много думал о том, как автоматически оценить все это, потому что я не хочу ничего оценивать вручную. Я дам четкие указания о том, как именно программа будет работать, и поэтому код без функций может быть автоматически оценен таким образом. Следующим шагом, который заставит студентов указать, какие части кода повторяются, будет трудно справиться, если код у всех разный, и идея, которая у меня есть прямо сейчас, состоит в том, чтобы выпустить код для того, как должен выглядеть код без функций для студентов провести рефакторинг. Кроме того, я не хочу, чтобы у студентов были неправильные не-функции, а затем они были заблокированы при продолжении. Я действительно не знаю, как оценить «что повторяется и как это исправить?» вопрос с автогрейдером.

Для следующего шага после определения повторяющегося кода я действительно хочу дать имена функциям, чтобы я мог автоматически оценивать эти функции с помощью модульных тестов, но я также хочу, чтобы студенты сами создавали их, называли функции правильными именами, правильно стилизовали их, и так далее. Я думаю, что начинать с нуля очень полезно. Компромиссы, я думаю. Возможно, я сделаю это групповым заданием в лаборатории или лекцией, чтобы студенты могли найти решение в классе. Проблема в том, что лучшие ученики могут просто дать все ответы.

После этого использование функций и повторное тестирование функциональности должно пройти нормально. На самом деле тесты уже были бы написаны, потому что это были бы те же тестовые случаи, что и код без функций.

Мне также нужно выяснить, как оценивать модульные тесты учащихся. На самом деле я не хочу читать код юнит-тестов, но просто запустить их и убедиться, что они все проходят, кажется немного не впечатляющим.

У меня также была идея давать обзоры кода, но это может быть слишком много работы. Я тоже не уверен, как это сработает, учитывая, что домашнюю работу нужно выполнять еженедельно. Цикл обратной связи может занять слишком много времени, и проект растянется навсегда.

Я отлично провел время, размышляя над этим проектом, и я очень рад, что мне пришла в голову идея заставить студентов рефакторить свой собственный код.

Сегодня я также задумался о следующем проекте, и я искал «проекты практического программирования» и наткнулся на несколько. Одно из них, которое выделяется, — это средство отслеживания расходов, что забавно, потому что мы с товарищем по команде работали над презентацией о том, как использовать Firebase для создания средства отслеживания расходов, и презентация, которую я даю на хакатонах, о том, что Firebase использует создание средства отслеживания расходов в качестве примера приложения. .

Конечно, их средство отслеживания расходов будет представлять собой текстовые входы и выходы, и идея этого средства заключалась в том, чтобы добавить в него все структуры данных, которым я их учу, включая списки, словари, наборы, стеки и очереди. Я подумал, что эта идея на самом деле была довольно умной, потому что с предпосылкой категорий чеков и списков чеков, принадлежащих каждой категории, я могу многое с этим сделать. Есть много способов запросить информацию, и он может использовать структуры данных так, как я захочу. Это великолепно! Я действительно взволнован, чтобы построить этот проект на самом деле.

Ах, я только что понял, что мне придется написать код для него самому, потому что с тех пор, как я придумываю проект, ни у кого нет заранее написанного кода, такого как для игры в блэкджек!

Я попрошу студентов написать дизайн-документ для этого до того, как они начнут (опять же с проблемой автогрейдера), а затем фактически реализовать его. Я очень рад этому!

Поэтому я думаю, что теперь, когда у меня есть два более длинных и крупных проекта, каждый из которых длится не менее трех или четырех недель, я чувствую себя лучше в своем классе. У них по-прежнему будут еженедельные домашние задания, а затем этот проект будет дополнительной работой. Неплохо! Очень счастлив и рад, что наконец-то решил эту проблему, и это было весело!