Python — очень читаемый язык! Для опытного программиста это здорово, поскольку он может быстро уловить суть строки кода. Но это может означать, что мы не видим все концепции Python, которые мы впихиваем в одну строку кода, что перегрузит учащихся.

Используя несколько примеров проектов, взятых из Girls' Programming Network, мы посмотрим, сколько концепций Python мы используем для создания базовой программы, и посмотрим, как мы можем разрабатывать проекты, соответствующие разным уровням опыта. .

Шифры Цезаря

Сначала давайте взглянем на проект Caesar Cipher. Программа спрашивает пользователя, шифруют или расшифровывают сообщение, и запрашивает сообщение и ключ шифрования, которые будут использоваться для ротации. Наконец, он выводит зашифрованное сообщение.

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

Однако, несмотря на то, что окончательный код может быть коротким, на самом деле важно количество понятий. Здесь у нас есть 16 понятий, распределенных по 15 строкам. Как видно из рисунка выше, почти каждая строка требует новой концепции, иногда двух. Также мало шансов на повторение уже изученных концепций.

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

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

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

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

Ножницы Бумага Камень

Далее мы рассмотрим создание проекта Scissors Paper Rock, в котором человек будет играть против компьютера.

По сравнению с шифром Цезаря для создания этого проекта требуется гораздо больше строк кода, всего 27 строк кода. Это может показаться серьезным недостатком для маленьких ручек, которые медленно печатают. Но, глядя на диаграмму ниже, мы видим, что концепций Python меньше: всего 13 из этих 27 строк.

Хотя код в два раза длиннее, нам нужно изучить на две концепции меньше. Это означает, что в проекте много повторений концепций, что дает широкие возможности для практики концепций. В проекте даже есть ненужные встроенные повторения; например, спрашивая имя игрока в начале игры и печатая ему приветствие. Хотя это совсем не важно для игровой механики, это дает учащимся возможность в рамках проекта практиковать навыки, необходимые для более сложного игрового аспекта.

Хотя этот код по-прежнему требует иногда двух или даже (как в случае с оператором if) трех новых понятий в строке, количество повторений означает, что мы можем больше помочь учащимся в ходе проекта, не выдавая всего решения. Например, предоставление логики для первого оператора if дает учащимся пример этой довольно сложной логической комбинации, которую они могут отредактировать, чтобы вычислить остальные комбинации для победы в игре. Это дает учащимся возможность правильно понять и манипулировать интересной логикой и структурами управления, а также сосредоточиться на основных навыках, которые мы хотим, чтобы новички освоили.

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

В дополнение к меньшему количеству понятий, использование концепции игры Scissors Paper Rock также требует меньших накладных расходов, чем шифр Цезаря, потому что алгоритм/набор правил Scissors Paper Rock — это то, с чем учащиеся уже знакомы. Это знакомство даст им лучшее понимание собственного кода и понимание прогресса создания новых функций, таких как запрос ввода данных от пользователя, определение хода компьютера и вычисление победителя. Лучшее понимание конечного продукта даст учащимся больше предвидения и способности отлаживать свой проект, когда что-то пойдет не так, как ожидалось, и больше возможностей для настройки своего основного проекта в творческих вариациях.

Сравнение концепций

Сравнивая эти два проекта, мы увидели преимущества увеличения длины кода для предоставления дополнительных возможностей для практики. Однако переход от захватывающего звучания Caesar Cipher к более простому звучанию проекта Scissors Paper Rock позволил сократить только три концепции. Так действительно ли необходимая общая когнитивная нагрузка концепции значительно ниже?

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

Сравнивая эти два проекта на начальном уровне, мы видим, что проект Caesar Cipher имеет более широкое распространение концепций, достигая пика на средних уровнях сложности. Проект Scissors Paper Rock, с другой стороны, сосредоточен на небольших и средних концепциях, с несколькими сложными концепциями, которые нужно сосредоточиться на освоении. Если добавить к этому дополнительную сложность изучения алгоритма шифра Цезаря, мы увидим, что новые программисты находят проект Scissors Paper Rock значительно более доступным.

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

Другие концепции требуют глубокого понимания синтаксиса Python, чтобы полностью понять концепцию и иметь возможность использовать ту же идею в новом контексте. Например, цикл for требует понимания того, как компьютер обновляет переменные, перебирает строки и управляет структурой тела цикла. Учащиеся должны иметь возможность воспроизвести все эти функции в новом контексте, чтобы применить эту концепцию. Точно так же логический оператор «и» кажется простой идеей, но чтобы эффективно его использовать, вам необходимо правильно понимать логическую логику всего, к чему вы можете присоединиться.

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

По мере того, как учащиеся становятся более опытными, вы начинаете получать некоторые из простых понятий «бесплатно» с точки зрения когнитивной нагрузки, что делает проект Caesar Cipher доступным для немного более опытных учащихся.

Надеюсь, вам понравился этот концептуальный подход к планированию проекта. Конечно, любой путь к мастерству полон практики в самых разных контекстах! Чтобы создать собственную версию одного из вышеперечисленных проектов, попробуйте нашу Python Playground и напишите все, что вам нравится. Или, чтобы поработать над освоением некоторых из этих концепций для внедрения в проекты, попробуйте наш курс Введение в программирование!

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