Контраст между информатикой на практике и информатикой в ​​классе

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

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

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

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

Обращение к творчеству

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

Обычно раннее задание по программированию выглядит примерно так:

public class P1 {
/*
* Declare a variable of type integer called myInt initialized to 10. Print the value of myInt.
* Declare a variable of type double called myDouble initialized to 2.0. Print the value of myDouble.
* Declare a variable of type String called myString initialized to "Hello!". Print the value of myString.
*/
    public static void main(String[] args) {
        // YOUR CODE HERE
    } 
}

Нет места творческому мышлению. Нет никакого значения, связанного с myInt, myDouble или myString, к которому студент может привязать свое обучение. Есть инструкции, которым нужно следовать, и синтаксические правила, которым должен соответствовать ученик. Хуже того, существуют объявления классов и методов, которые учащийся не ожидает и не может понять. Студент ничего не узнает, просто запутается. Лучшее задание выглядело бы так:

/* 
You are tasked with defining the Pizza class. Declare three meaningful local variables of your choosing to represent a Pizza object. Implement a toString() method for the Pizza class that uses at least two of your variables. 
*/ 
public class Pizza {
    
    //declare variables here
    public String toString() {
        //implement toString here
    }
}

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

Затем студент должен разработать реализацию toString(). Это тоже требует творческого мышления. Какое строковое представление Pizza объекта лучше всего? Важно то, что решение остается за молодым программистом.

Задание «пицца» способствует глубокому и осмысленному пониманию классов, объектов, переменных и методов. После его завершения студентка разработала собственную реализацию класса Pizza. Конечно, у этого стиля задания есть явный недостаток - его нужно оценивать вручную.

Сделайте впечатления личными

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

Учащийся подаст задание на пиццу, чтобы его прочитал и оценил реальный человек, и они получат личную обратную связь. Оценщик может оставлять комментарии, например: «Вы решили использовать целое число для обозначения цены. Не думаете ли вы, что двойник будет иметь больше смысла? " или «Обязательно придерживайтесь верблюжьего регистра в именах переменных».

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

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

Создайте сообщество, которое поощряет сотрудничество

Уроки информатики часто изолируют молодых программистов. Задания нужно делать в одиночку. Совместное использование кода запрещено. Нет никаких инструкций или обзоров со стороны коллег. В лучшем случае такая среда препятствует социальному росту и отрицательно влияет на карьеру. В худшем случае такая среда отвлекает потенциальных студентов от информатики.

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

Кроме того, учащимся следует поручить рецензировать код друг друга. Это мотивирует критически относиться к наиболее эффективным и разумным реализациям. Если решение ученика А настолько запутанно, что ученик Б не может понять, что пытался сделать ученик А, ученик А, вероятно, не понимает, что происходит. Студент B может дать представление о проблеме и помочь студенту A установить связи, которые она не создавала самостоятельно. Это дает дополнительное преимущество, заставляя студентов научиться читать код, что составляет по крайней мере 50% работы программиста.

Переосмысление информатики

Это больше похоже на урок английского, чем на урок информатики. Стиль? Красной ручкой? Экспертная оценка? Читаете?

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