Каковы хорошие задания для вводного курса, чтобы достичь сегодняшних студентов? [закрыто]


25

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

Чтобы дать вам представление о сфере действия, вот что рассматривается :

  • Назначения должны быть в Java, можно использовать некоторую внешнюю библиотеку, но это должен быть простой API, а не полная структура
  • Переменные, Примитивы и Строки
  • Консольный ввод и вывод
  • if, for,while
  • Арифметические и логические операторы
  • Простая графика с рисованием линий и форм
  • Статические методы
  • Одномерные массивы

Студенты не будут углубляться в сложные темы (например, без рекурсии, без акцента на наследование). Таким образом, я не ищу сложные проекты: «Пусть они напишут компилятор Си. Я сделал это, когда мне было 5 лет, и это был единственный способ, которым я научился!»

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

Вместо этого я ищу интересные идеи, которые можно реализовать в короткой программе. Например:

  • Студенты могут написать консольную версию генератора «Звездных войн» . Это эффективно читать строки и использовать substring, но я думаю, что это весело. Аналогичным вариантом будет программа " Mad Libs ". Я использовал это пять лет назад, и, возможно, он уже "несвежий".

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

  • Также не исключено использование некоторого простого класса анимации с большей частью предоставленного им кода. И если вы знаете сервис Twitter или Facebook, доступ к которому можно получить с помощью простого API, мне было бы очень интересно узнать.

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

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

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


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

@Mayra: Это введение в курс программирования, первый курс по специальностям CS. Я ищу захватывающие проблемы для студентов, чтобы использовать их в первые 5 недель (или даже в первый день), а не только в конце. Работать с этими требованиями очень сложно (и, поверьте мне, некоторые вопросы находятся вне моего контроля), поэтому я обращаюсь к вам, ребята, за помощью.
Макнейл

Ответы:


9

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

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

например

You have 10 guesses left.      * * * E * * T
What is your next guess?

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

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


Отличная идея! Я думаю, что я собираюсь использовать это. :-) Кстати, что вы подразумеваете под "уровнем обучения"? Как в расходах?
Макнейл

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

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

7

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


2
Звучит весело, но держите это маленьким.

7

Как насчет использования одной или двух проблем с http://projecteuler.net/ Некоторые из них довольно интересны, и можно было бы увидеть преимущества написания программы для их решения. Они достаточно малы, чтобы их можно было выполнять в качестве заданий. Еще один, который я хотел бы использовать, - это найти слова за 1 доллар. Каждая буква в алфавите стоит своей позиции в копейках, то есть a = 1, b = 2. Сколько слов в $ 1,00 вы можете найти? Это может включать файловый ввод / вывод (чтение в словаре), массивы, циклы и т. Д.


1
+1 за проект Эйлера. Очень круто. Хотя некоторые проблемы слишком сложны, есть и другие, которых нет.
Макнейл

Мне нравится Project Euler, но я не уверен, было бы весело, если бы мне пришлось заниматься в университете.
Оливер Вейлер

Нет, не все из них были бы забавными, но некоторые, я думаю, мы были бы хорошим выбором
Gratzy

6
  • Реализуйте игру Монополия. Монополия имеет очевидную последовательность и очень легко поддается делению на функции. Также требуется только одномерный массив и несколько базовых классов. Логика достаточно проста, так что учащиеся будут больше думать о том, «как», чем «что», и это приведет к тому, что можно будет продемонстрировать другим.

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

  • Я не знаю, почему вы покрываете только одномерные массивы, а не матрицы (они на самом деле не такие уж и разные), но если вы хотите включить это в sylabus, «Игра Жизни» Джона Конвея также относительно проста и приводит к чему-то весело.

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


+1 за предложение игры «Монополия». Что касается 2D-массивов, я абсолютно согласен, что они могут привести к очень интересным назначениям. Однако существуют ограничения, которые делают его так, чтобы 2D-массивы были нежизнеспособными (например, учебник уже исправлен, и миллиард других вопросов политики факультетов, с которыми я не буду утомлять вас, и не буду утомлять вас своим личным мнением по этим вопросам). вопросы вне моего контроля).
Макнейл

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

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

4

Мы создали немало проектов с использованием только ввода / вывода, функций и условных операторов в школе. Все сделано до того, как мы узнали об объектно-ориентированном программировании. Эти проекты продвигались медленно, чтобы быть все более и более сложным. Достаточно сказать, что 4 часа, которые у нас были каждую неделю, к концу года не хватило.

Все эти проекты были сделаны только с функциями & I / O:

  • Игра, которая учится. Вы берете несколько палочек, компьютер берет несколько палочек. Повторение. Последний, кто держит палку, проигрывает. Мы должны были создать простую программу самообучения, которая становилась лучше после каждой игры. Хороший пример для изучения 2D массивов.

  • Взломщик кода Вы знаете шифрование Цезаря, выбираете букву и добавляете значение буквы к каждой букве вашего слова. Например, ключ = «а» и слово = «секрет». Это станет "tfdsfq". Это можно сделать, прочитав файл, а затем создав таблицу частот для каждой буквы. Вы также читаете в английском Библии. Тогда вы можете просто увидеть, что наиболее используемая буква в английском алфавите - это «е», и решить ее. Добавлен вызов: используйте ключ типа «ab», который был нашим заданием. Хорошее упражнение для понимания ввода / вывода.

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

  • Генетический алгоритм для решения проблемы коммивояжеров. Это был более продвинутый проект для 2 или 3 человек. Вы начинаете со случайного маршрута, и этот маршрут улучшается все время, пока у вас не появится "хороший маршрут". Бонус: создайте карту с маршрутом.

  • Работающая программа сжатия lzw . Это был финальный проект для 4 человек. Параметры были довольно просты. "Zip file.txt file.zip" или что-то подобное. Интересный проект, но понимание алгоритма lzw заняло некоторое время.


Очень интересно ... В какую школу ты ходил? Это было в вашем первом году?
Макнейл

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

3

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

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

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

Надеюсь, что это даст вам некоторые идеи! Удачи в вашем классе.


1
+1 Спасибо! Это именно тот ответ, который я ищу.
Макнейл

Игры веселее калькуляторов.

3

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

Продвинутые студенты могут написать версию в 3D для дополнительных очков.


3

Я бы перебрал генератор простых чисел.

Назначения

  1. Печать простых чисел от 1 до 100.
  2. Вывести простые числа от input1 до input2.
  3. Запись и распечатка данных о производительности основного поколения.
  4. График производительности данных простого поколения.
  5. Итерации по алгоритму оптимизации генератора простых чисел.

2

Я использую библиотеку ACM, чтобы помочь начинающим студентам создавать простую графику и игры. Мы смогли сделать простые игры для двух игроков, основанные на кликах, и не более чем намеченные вами навыки. На этой неделе они играют в Лис и Гончие .

Я пытался держаться подальше от консольного ввода-вывода как можно дольше. Для многих студентов это чужая концепция, так как все они выросли на GUI. Поэтому я сосредотачиваюсь на MVC, корректирую модель и добавляю графический интерфейс только после того, как они проверили свою модель. Тестирование выполняется с помощью автоматического модульного тестирования и Code Pad в BlueJ . Нет public static void main()необходимости, никогда.


интересный. Возможно, вы бы описали свой опыт в статье или записи в блоге?

2

Я преподавал интро в прошлом столетии, и это был бейсик, но, как и вы, я хотел, чтобы студенты начали интересный проект, разработанный самим собой. Поэтому я предложил кучу возможностей:

  • Простая приключенческая игра, как Wumpus
  • Спортивный симулятор (только текст, графика для амбициозных) для бейсбола или что-то еще
  • Наука, как симуляция генетической эволюции
  • Спорт / наука, как парусные гонки
  • Финансы, например, собственный банк для людей в вашем доме или инвестиции
  • Музыка или простые графические игры

... или что бы ни думали студенты. Они приходили ко мне и говорили: «Как насчет программы, чтобы сделать XYZ?» и я всегда говорил «Великолепно», а потом, может быть, немного направлял их, чтобы не усложнять.

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

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


1

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


1

В моем вступительном курсе три проекта застряли на мне

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

Из моего класса алгоритмов
Реализовать треугольник Серпинского

Эти четыре проекта дали мне хорошее понимание обработки строк, рандомизации, графики, рекурсии и анимации.


1

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

Примеры:

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

  • Econ студенты могут рассчитывать сложные проценты по элементу.

  • Студенты-математики могли выбирать задачи из проекта Эйлера.


1
Класс для майоров и не майоров. Многие в биологии.
Макнейл

Интересный. Идея: найти картину одноклеточных организмов, плавающих в воде. Преобразуйте изображение в черно-белое изображение. Напишите программу для подсчета количества организмов в воде. Это поднимет всевозможные интересные темы для обсуждения: обнаружение краев, различие между водой и неводом, удаление пыли и т. Д.
Барри Браун

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

1

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

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


0

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

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


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

1
Это должно быть проблемой, которую они не могут (легко) сделать на своем калькуляторе TI-83. Еще один налоговый калькулятор не будет сокращать его.
Барри Браун

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

1
Нет. Эти проекты должны быть прежде всего веселыми. Веселые проекты могут быть сложными. На самом деле, большинство моих любимых проектов сложнее повседневных программ, которые я выполняю на работе.
Карра

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

0

Задание для построения глупых виджетов на своих мобильных телефонах. То, что они могли бы показать своим друзьям. У меня очень дешевый телефон AT & T, и мне нужны какие-то баночные файлы.


0

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

Несколько, которые произвели на меня впечатление:

  1. AI Рошамбо (используется в курсе ИИ в UOA). Простая функция, которая возвращает -1, 0, 1 для камня, бумаги, ножниц. ИИ противостоят друг другу, а статистика собирается общей утилитарной программой. Это задание постоянно удивляет людей тем, сколько подходов является жизнеспособным (и сколько таких неудачных).

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

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

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

  5. Маленькие языки (еще одна слабость у недавних выпускников). Разработайте немного языка для простого игрового ИИ (шашки, росхамбо, танки, CSS mojo, боты Twitter). Размышление о концепциях языкового дизайна, интерпретации и действия является фундаментальным.


Знают ли бумаги, камни, ножницы ИИ о результате или видят историю?
Макнейл

Да, истории доступны через массивы в примере C (но в равной степени это относится к Java, Ruby и т. Д.). Проверьте оригинальную страницу конкурса: webdocs.cs.ualberta.ca/~darse/rsbpc.html
Брюс Олдерсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.