Как я могу разобраться с отношением к грузопотоку?

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

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

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

257 голосов | спросил 8 revs, 4 users 33%
Peter Mortensen
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

30 ответов


120

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

Другая возможность - хотя и не строго задача программирования - это попросить их оценить различные вещи. Например. сколько воды проходит через дельту Миссисипи в секунду? Такие вопросы не имеют заданного ответа, особенно потому, что нужно сделать определенные предположения для получения убедительного (диапазона) значений (значений). И хотя ответы на многие из этих «классических» могут быть действительно искажены, вы можете легко создать новые, которые еще не найдены в сети.

Примеры для обоих видов упражнений можно найти, например. Программирование жемчуга от Джона Бентли. Также Программист-программист имеет некоторые хорошие проблемы.

Третий вид задачи состоял в том, чтобы представить им часть кода с (одним или несколькими) ошибками в нем, которые они должны найти и исправить. Это снова заставляет их использовать свои аналитические способности и разум о том, как работает программа.

Update

Отзывы от пользователя Billy ONeal:

  

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

Вы правы, хотя я чувствую, что это больше связано с общей проблемой, связанной с установлением сложности курса на правильном уровне /группировкой учащихся с одинаковым уровнем навыков вместе. Более того, можно организовать студентов в более мелкие группы, где они должны обсуждать и обсуждать проблемы и решения, а также решать проблемы вместе. Если кто-то не получит его, другие могут помочь (эта настройка также улучшит навыки командной работы). И если кто-то пытается лениться и позволить другим делать всю работу, это наверняка замечает учитель (который должен ходить, контролировать и наставлять учеников, не играя WoW на своем ноутбуке в углу ;-)

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
142

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

(Get It Wrong || Experiment) == (Неудачное ранжирование & & Время отработки)

Как только студент чувствует, что их время или класс подвержены риску, даже для интересного предмета, они прекращают обучение и прыгают прямо к «Мне все равно, просто дайте учителю правильный ответ". Ваши ученики пытаются вырезать углы (или так они думают) , думая как можно меньше о проблеме и просто взламывая ее копированием и вставкой.

Вот мои предложения о том, как с этим бороться:

  1. Используйте метод Боба Росса: Докажите им , что возможно и быстрее начать заново, а не копировать и вставлять. Создавайте новые программы перед их глазами во время занятий - действительно показывают им, что программирование может быть как покраска картины.
  2. Предоставить задания, требующие творчества . Например, каждый студент создает свои собственные структуры данных (какие объекты необходимы для создания зоопарка, магазина домашних животных, города, колледжа и т. Д.) На бумаге для использования на протяжении всего курса. Назначение # 2 может преобразовывать эти структуры в классы или объекты и т. Д. В принципе, заставляйте их мыслить абстрактно - вознаградить их за то, что они креативны, а затем вознаградить их за превращение своего творчества в компьютерную программу.
  3. Использовать наименьшее количество синтаксиса. . Такие элементы, как создание классов и синтаксиса языка, настолько распространены во внедрении программирования, что он часто вводит в заблуждение учащихся, думая, что все программирование - это просто знать, где положить фигурные скобки - они не понимают, что то, что находится в середине фигурных скобок, является то, где креативность течет . Выберите простой язык и предоставите образцы файлов (например, пустой файл класса) для студентов, которые все еще хотят скопировать и вставить что-то. Вы постепенно можете стать более строгими в отношении синтаксиса и компилятивных назначений по мере продвижения курса.
ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
44

Несколько вещей, которые приходят мне на ум:

  • Дайте им задания, где они действительно должны объяснить код, который кто-то еще (вы) написал. Понимание предыдущего кода или, более конкретно, его отсутствие - и самая большая причина и опасность программирования культа груза. Попросите их использовать комментарии, если необходимо, по очереди, чтобы объяснить вашу программу на простом английском языке (или в зависимости от того, какой язык вы используете).

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

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

  • Тогда и только тогда вы можете дать им задание написать кусок кода с нуля самостоятельно. На этом этапе они должны иметь гораздо лучшее представление о том, что такое код на самом деле. Возможно, им даже будет немного легче сделать это сами.

Основная идея заключается в том, что программирование - это не просто написание кода, но и его чтение. Следует также прочитать код чтения.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
38

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

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

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
25

Я преподавал вступительные занятия в прошлом и, как я помню, оглядывался назад:

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

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

  1. Некоторое время было потрачено на то, чтобы объяснить некоторые вещи, такие как детерминизм, что означало для них, что в той же среде с теми же данными и кодом они будут иметь одинаковые результаты (отбросить «случайность»),

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

  3. Они находятся в образовательной среде, поэтому проблемы создаются для того, чтобы предлагать учебный опыт, результатом является научиться программировать (или в некоторых случаях, например, классы для системных администраторов, как работают программы, отличается) и не дать мне решение. («Мир не нуждается в другом калькуляторе, это упражнение»), поэтому их проблемы могут быть решены с помощью доступных материалов (пример: примечания),

  4. Я думаю, что это в Code Complete: «Даже если вы копируете и вставляете, код принадлежит вам». Если кто-то это сделал, это не должно быть грузовым. Каждая строка должна была быть объяснена мне (индивидуально) или другому ученику (тому же) или классу.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
23

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

Когда я вступил в программирование, наше первое назначение получило название Rick the Robot . У нас был кусок бумаги с воздушной картой города с интересными точками, такими как банки, продуктовые магазины и т. Д. У нас был чувак под названием «Рик», и у него были такие действия, как «сделать один шаг», «посмотреть влево», «посмотрите направо», «перейдите дорогу», и мы можем использовать такие вещи, как «повторить» и «если что-то, а затем сделать что-то». (Это не 100%, так как я не мог найти это задание). Идея заключалась в том, что Рик мог использовать только то, что ему дали, и ему пришлось добраться до разных мест на карте.

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

Наконец, идея состоит в том, что вы начинаете с abstract и переходите к конкретному . Они не могут копировать пасту. Они должны понять это, чтобы решить проблему.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
20

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

К сожалению, это своего рода тип поведения «привести лошадь к воде». Анализ и синтез также очень трудно сделать, когда вы все еще боретесь с пониманием. Без понимания на месте аналитические и синтетические мероприятия будут действовать скорее как отходы, чем учебные мероприятия.

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
11

Рассматривали ли вы поставку их с некоторым кодом для начала? Независимо от того, какие простые строительные леса необходимы для назначения, как пустая основная функция (я не знаю, какой язык вы используете). Что-то, что компилируется и запускается и ничего не делает. Затем они могут начать добавлять свой код с некоторой степенью уверенности в том, что работает как минимум часть .

Это действительно довольно распространено в «реальном мире»; множество IDE и других инструментов создают пустые проекты с уже существующими типовыми библиотеками /шаблонами /конфигурационными файлами.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
8

Любой тип менталитета грузового культа (в том числе куки груза ) происходит из-за отсутствия фундаментального понимания вовлеченной технологии.

Культурно-культовое программирование не следует рассматривать как проблемную привычку, а скорее симптом основной путаницы, с которой сталкивается программист.

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

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
7

Измените вашу идею проектов!

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

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

Пример

Проект: построить систему лифта

  • Назначение 1: распечатать текущий этаж
  • Назначение 2: Создайте структуры данных для класса лифта и распечатайте пол на основе лифта.
  • Назначение 3: Создайте код, который «перемещает лифт», распечатывая пол. Принять ввод с клавиатуры (> ввести пол:)
  • Назначение 4: Управление несколькими лифтами

Дело в том, что вы строите в предыдущем задании вместо повторного использования старых назначений для новой задачи.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
7

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

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

Я лично преподавал ML на моем курсе программирования в CS. В течение многих лет Lisp преподавался как введение в программирование в Массачусетском технологическом институте. Оба являются отличным выбором. Некоторые из преимуществ, которые у них есть, -

  • Интерактивный интерпретатор. Очень важно, поскольку это позволяет проводить исследования.
  • Очень лаконично. Никакой шаблоны. Это позволяет студентам сосредоточиться на идеях, которые они пытаются выразить.
  • Относительно неясный и чуждый (по крайней мере, по сравнению с Java, C или другими основными языками, с которыми у студентов может уже быть некоторый опыт). Да, я перечисляю это как профессионала. Он выравнивает игровое поле для студентов, так как, вероятно, никто не будет иметь предшествующий опыт. И это делает менее вероятным, что они смогут просто копировать-вставлять решения в домашнюю работу из Интернета.
ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
6

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

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

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
5

Вы можете задать им вопросы о фрагментах кода, требующих письменных ответов? Как «Что делает этот код?» «Почему программист решил это так?» «Есть ли лучший способ?» И т. Д.?

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
5
  • Попросите их создать кратчайшие возможные решения для проблема.
  • Награждайте более сжатые решения стимулом.
  • Создание упражнений, которые полностью вращаются вокруг кода рефакторинга
  • Предложите студентам распределять задания, а также оценивать их эффективности и чистоты кода, а также использовать некоторые из в качестве примеров, на оверхед-проекторе.
ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
4

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
4

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

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

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

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

...

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
4

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

Не зная больше о контексте класса, я бы сказал, что больше сосредоточимся на этих проблемных учениках на самых основных структурах - simple , если /thens, loop и т. д. Простые процедуры для распечатки нечетные числа, каждый десятый номер и т. д. Не более 10 строк кода. Если они «магическое мышление», они, очевидно, еще не освоили эти основы. Попросите их сделать много разных простых процедур, пока они не поймут, что происходит. Кто-то еще упомянул о написании кода на бумаге - я думаю, что это был бы отличный способ сделать эти простые процедуры.

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
3

Идеально в первой лекции, начните их с чего-то совершенно абстрактного: пусть они (как группа, с вами, как лидер) напишут инструкции о том, как пойти в магазин по магазинам из списка и разбить хай- постепенно до тех пор, пока они не достигнут просветления.

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
3

Алистер Кокберн рассказывает о концепции Шу-Ха-Ри и о том, как она относится к программированию, http : //alistair.cockburn.us/Shu+Ha+Ri . Я думаю, что важно иметь в виду, где ваши ученики находятся в этом континууме. Сначала это поможет облегчить некоторые из ваших разочарований. Копировать /подражать - это очень естественный ответ и принятый режим, когда вы впервые начинаете что-то изучать. Во-вторых, это может помочь вам получить некоторые идеи о том, как двигаться вперед. Например, вы можете захотеть выбрать проблему, которая может быть решена несколькими способами (циклы против рекурсии, консоль против веб-интерфейса /gui), а затем явно их сначала решить одним способом, а затем другим способом - бонус, который они могут изучить о законном повторном использовании кода, компонентизации, создании многоразовых библиотек и т. д.

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

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
3

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
3

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

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

Я построил маленький компьютер с чипом Intel 8008, несколькими EPROM и несколькими схемами. Я запрограммировал его, чтобы сыграть небольшой дуэт, когда чип I /O был подключен к пару динамиков. Я бы объяснил, как работает небольшая программа, с внутренним циклом для подсчета счетчика. Это будет действовать как задержка. Затем он переключит выходной бит и сделает это снова. Он будет делать это некоторое время, а затем переключиться на другую задержку, давая еще один шаг и так далее. У микросхемы памяти был небольшой таймер, и если бы я заправил конденсаторный провод под одним из входов таймера, программа медленно запускала veeeeery . Класс мог слышать, как динамики нажимают, щелкают, нажимают ... Я хотел, чтобы класс понял, что компьютер делает очень простые вещи за один шаг за раз . Тогда я бы снял трубку с конденсатора, и «музыка» разразилась бы. (Аплодисменты)

Затем я построил симулятор для очень простого десятичного компьютера с 1000 ячейками памяти, каждый из которых имел подписанное 4-значное десятичное число. У него были очень простые коды операций, такие как «добавить к аккумулятору», «прыгать, если отрицательно» и т. Д. Я хотел бы, чтобы они писали небольшие программы на этом «машинных языках», например, добавляли два номера или добавляли список чисел. Затем они могли смотреть, как он работает с помощью однократного нажатия или удерживая клавишу Enter, чтобы смотреть, как он работает «быстро».

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

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
3

A s a s e l f - t a u g h t programmer Я считаю анимацию наиболее сложной с точки зрения понимания того, что делает код. Когда программа содержит алгоритмы и математические преобразования, выполняющие абстрактные манипуляции, единственный способ понять, что делает математика в любой точке (если вы не гений), требует понимания исполнения самого кода.

Исправьте меня, если моя наивная идея неверна. Что вы хотите сделать, это not, чтобы ваши ученики не использовали «шаблоны проектирования», но чтобы найти способ убедиться, что они понимают, что они представляют собой CnP? Затем попросите своих учеников манипулировать анимацией. Чтобы настроить выход в анимации, необходимо понять, что происходит на каждом шаге. Для вашей заявленной озабоченности я предполагаю, что хорошо продуманный анимационный проект проявится очевидным образом, когда студент «получит» - когда они осуществили трансформацию, которую вы не ожидали, или не подгоняли некоторые связанные, взаимозависимые переменные.

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

В другой заметке я прочитал газетную статью (да, бумагу!) о конкурсе Coding Olympics - wot-wot - конкурс для программистов до колледжа. Описание их проблем было самой четкой артикуляции чистого кодирования , которую я могу вспомнить, прочитав. Конкуренты оцениваются друг против друга и по стандартам хорошей практики. Для этих соревнований учащиеся должны как планировать свое решение , так и ручным кодом элементный «шаблон проектирования», который должна решить проблема в сроки. Таким образом, решение вашей озабоченности в отношении программирования CnP заключается в проверке, могут ли студенты писать те же «куски кода», что они CnP'n!

Я уверен, что это было в NY Times. Быстрый поиск не нашел. Аналогичным примером является Конкурс международного коллегиального программирования ACM. Этот конкурс подчеркивает быстрое программирование:« Молниеносное программирование в командных соревнованиях - это явно изворотливое умение, а не точно одно много ищущих работу место должно быть на вершине rà © sumà © «. Таким образом, я бы рекомендовал абстрагироваться от реальных проблем .

Кроме того,

Войны кодов HP

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
2

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
2

Вы также можете относиться к ним с трудом.

Найдите способ нанести им вредоносную копию. У меня нет точного примера, но если вы создадите первое упражнение, решение которого, если оно будет вставлено в аналогичное смотрящее второе упражнение, приведет студентов-культовых студентов к очень длинной и болезненной ошибке «нестабильной нестабильности» или «бесшумной печати данных». Между тем, «негрузовое культ» 2 млн. Мышлений принесло бы очевидное решение даже самому худшему ученику (разве он не видел первое решение для упражнений). Тогда, возможно, есть вероятность, что они смогут выучить урок и подумать дважды, прежде чем копировать код в третье упражнение.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

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

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

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

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

Никогда не давайте им одинаково звучащие задания.

Или, более сумасшедший, изучите их TDD с самого начала. Это заставляет писать (не копировать, писать) много кода (а именно тестов), что на самом деле помогает сформулировать проблему, которая решается.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

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

Когда я начал программировать, мне было тяжело, и я много копировал в классе. Затем дома я начал делать небольшие игры, так как я хочу стать программистом для игр, и я нашел их намного проще сделать. Хотя они были намного сложнее, чем то, что мы видели в классе. Просто потому, что это меня заинтересовало.

Несколько других людей в моем классе перешли от 40-50% на экзамены до 90-100%, потому что они сделали то же самое.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31
1

Когда я был во вводном курсе программирования, инструктор потребовал, чтобы все написали алгоритм на английском языке и распечатали его и включили, прежде чем мы начали писать код. Тогда нам нужно было бы добавить много комментариев, таких как «Создать переменные», «Получить входные данные от пользователя», «Выполнить вычисления», «Печать» и т. Д. Я был пристыкован пару раз, чтобы не хватать комментариев, когда я думал, что их было много, поэтому я начал добавлять Больше. Это заставило меня задуматься над тем, что я делаю, и написать решения и продолжить перевод между английским и Java.

ответил user3119546 30 MonEurope/Moscow2013-12-30T19:04:31+04:00Europe/Moscow12bEurope/MoscowMon, 30 Dec 2013 19:04:31 +0400 2013, 19:04:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132