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


25

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

Щоб дати уявлення про сферу застосування, ось що охоплюється :

  • Призначення повинні бути на Java, за допомогою зовнішньої бібліотеки можна зробити, але це повинен бути простий API, а не повний фреймворк
  • Змінні, примітиви та рядки
  • Введення та вихід консолі
  • if, for,while
  • Арифметичні та логічні оператори
  • Проста графіка з лінією та фігурою
  • Статичні методи
  • Одновимірні масиви

Студенти не будуть заглиблюватися в розширені теми (наприклад, відсутність рекурсії, не наголос на спадщині). Таким чином, я не шукаю складних проектів: "Попросіть їх написати компілятор С. Я це зробив, коли мені було 5, і це був єдиний спосіб, коли я навчився!"

Якщо у вас є ідеї, які є більш досконалими, ніж сфера застосування, будь ласка, опублікуйте їх у відповідь на питання "Виклик", а не на це.

Натомість я шукаю цікаві ідеї, які можна здійснити за короткою програмою. Наприклад:

  • Студенти можуть написати консольну версію генератора "Ім'я зіркових воєн" . Це ефективно читання рядків і використання substring, але я думаю, що це весело. Аналогічна варіація була б програмою " Шалені вуса ". Я користувався цим п’ять років тому, і, можливо, він вже "несвіжий".

  • Використовуючи поданий їм триггер, учні можуть малювати регулярні багатокутники та створювати цікаві спіральні фігури.

  • Крім того, не варто використовувати простий клас анімації з більшою частиною коду, що надається їм. І якщо ви знаєте сервіс 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 тижневого курсу.

Як і більшість інших людей, які мають досвід вербування та співбесіди програмістів, насправді змушує зазначити, що такий рівень навчання потрібен в університеті, але, на жаль, це, ймовірно, буде потрібно, поки школи не розглядають програмування як серйозний предмет нарівні з математики чи наук


Чудова ідея! Я думаю, я буду використовувати цей. :-) До речі, що ви маєте на увазі під рівнем навчання? Як у витратах?
Macneil

Це більше сприймає відсутність навчання програмуванню перед університетом. Уявіть, що ви приїхали до університету, щоб займатися хімією і витрачати перший термін, коли розповідають про атоми, молекули та електрони. 3 роки - це занадто короткий час, щоб зрозуміти інформатику.
Майкл Шоу

Мені дуже подобається ця ідея, немає необхідності в складній графіці, її можна виконати в командному рядку досить добре. Це весело і ще не один вирішувач математичних задач.
Джоппе

7

Здається, що текстова пригодницька гра може стати приголомшливим завданням десь в семестрі. У мене був клас, який змусив нас грати в Colossal Cave Adventure, а потім робити власну гру. Це навчило мене дуже багато основних конструкцій на ранніх стадіях, і це було так весело, що всі, хто потрапив у це, дуже цікаво.


2
Звучить весело, але тримайте це мало.

7

Як щодо використання проблеми або двох з http://projecteuler.net/ Деякі з них досить цікаві, і можна побачити користь написання програми для їх вирішення. Вони досить малі, що їх можна виконати декількома. Ще один, який я хотів би використовувати, - це пошук слів у 1,00 дол. Кожна літера в алафабеті вартує свого місця в копійках, тобто a = 1, b = 2. Скільки слів за 1,00 долара ви можете знайти? Це може включати введення / виведення файлів (читання у словнику), масиви, циклічне виконання тощо.


1
+1 для проекту Euler. Дуже круто. Хоча деякі проблеми трохи надто розвинені, є багато таких, які не є.
Макнейл

Я люблю Project Euler, але я не дуже впевнений, чи було б весело, якби мені доводилося проводити вправи в університеті.
Олівер Вайлер

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

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

  • Надайте їм зашифрований файл, який був зашифрований з деяким оборотним правилом, і попросіть їх написати декодер (хоча це зробити досить просто). Це дає додатковий стимул вирішити це через таємницю щодо змісту повідомлення.

  • Я не знаю, чому ви покриваєте лише одновимірні масиви, а не матриці (вони насправді не всі такі різні), але якщо ви готові включити це до навчального плану «Гра життя» Джон Конвей - це також досить легко і призводить до чогось весело.

  • Така гра, як шахи, вимагає певної думки, але все ще знаходиться в межах того, що може робити початківець з мінімальним успадкуванням (конкретні шматки успадковуються від загального класу Piece, а на дошці розміщені об'єкти типу Piece) та 2D масиви (ви можете вибрати спростіть його, не вимагаючи впроваджувати важкі речі, такі як виявлення зоряних зірок або неможливість замку, якщо ворожі шматки загрожують шляху закидання).


+1 за пропозицію Монопольної гри. Що стосується 2D-масивів, то я абсолютно згоден, що вони можуть призвести до дуже цікавих завдань. Однак є обмеження, завдяки яким 2D-масиви не є життєздатними (наприклад, підручник уже виправлений, і мільярд інших питань політики факультету я не набридаю, і я не набридаю тобою своєю особистою думкою щодо цього справи поза моїм контролем).
Макнейл

Ах, нам довелося створити монопольну гру в школі. І вимикач шифрування.
Carra

+1 для монополії. Після того, як учні це зашифрують, попросіть їх створити ймовірність посадки на різні властивості. Ці знання справді допомагають стратегічно.
Джошдик

4

Ми створили досить багато проектів із просто вводу-виводу, функціями та умовними операторами в школі. Все зроблено, перш ніж ми дізналися про об’єктно-орієнтоване програмування. Ці проекти просувалися повільно, щоб було все складніше. Досить сказати, що 4 години, які ми проводили щотижня, було майже недостатньо до кінця року.

Усі ці проекти виконувались лише за допомогою функцій & i / o:

  • Гра, яка вчиться. Ви берете кілька паличок, ПК займає ряд паличок. Повторіть. Останній, хто тримає палицю, втрачає. Нам довелося створити просту програму самонавчання, яка покращувалася після кожної гри. Хороший приклад для вивчення 2D-масивів.

  • Вимикач коду. Ви знаєте шифрування Цезаря, виберіть букву і додайте значення літери до кожної літери свого слова. Наприклад, ключ = 'a' і слово = "секрет". Це стане "tfdsfq". Це можна зробити, прочитавши у файлі, а потім створивши таблицю частот для кожної літери. Ви також читаєте в англійській біблії. Тоді ви можете просто побачити, що найпоширеніша літера в англійському алфавіті є «е», і вирішити її. Додано виклик: використовуйте ключ типу "ab", який був нашим завданням Гарна вправа для розуміння вводу / виводу.

  • Виробник штрих-коду. Ця програма була вправою викликати зовнішню бібліотеку. Ви отримали код і повинні були генерувати зображення зі штрих-кодом. Для створення зображення була використана зовнішня бібліотека.

  • Генетичний алгоритм вирішення проблеми продавців подорожей. Це був більш просунутий проект для 2 або 3 осіб. Ви починаєте з випадкового маршруту, і цей маршрут весь час вдосконалюється, поки у вас не з’явиться «хороший маршрут». Бонус: створити карту з маршрутом.

  • Працююча програма стиснення lzw . Це був заключний проект, чотири людини. Параметри були досить прості. "Zip file.txt file.zip" або щось подібне. Веселий проект, але розуміння алгоритму lzw зайняло певний час.


Дуже цікаво ... У яку школу ви ходили? Це все було на першому курсі?
Макнейл

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

3

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

Для оброблення рядків я б запропонував деякі проблеми з валідацією. Адреси електронної пошти приходять до уваги - якщо їх не перевірити, це може призвести до появи отворів для ін'єкцій SQL чи інших речей, і їх порівняно просто перевірити. Для додавання, можливо, є програма, яка може приймати ім'я, ім'я та прізвища, а також з'єднувати їх з пробілами, а також взяти повне ім'я та розбирати його у кожному компоненті. Перший використовується більше, ніж другий у реальному житті, але я не міг придумати ще один сценарій розбору, який був би досить простим.

Щоб продемонструвати статичні методи, ви можете призначити проблему пошуку електронної пошти. Майте файл імен та електронних листів, і статичний конструктор може помістити імена / електронні листи в список зі статичним методом пошуку електронної пошти для заданого імені.

Сподіваюсь, вони дадуть вам кілька ідей! Удачі вам у класі.


1
+1 Дякую! Це саме та відповідь, яку я шукаю.
Макнейл

Ігри веселіші за калькулятори.

3

Однією дуже цікавою і цікавою річчю для завдання є написання реалізації гри «Життя життя Конвей» у 2D. Він дуже добре відображає основні структури даних масиву, це цікаво і досить просто, але все ж вимагає певного продумування. Це може також відкрити деяку цікавість та експерименти (AI).

Студенти старшого віку можуть написати додаткову версію в 3D для отримання додаткових балів.


3

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

Призначення

  1. Друкуйте праймери від 1 до 100.
  2. Друкуйте праймери з входу1 на вхід2.
  3. Записуйте та друкуйте дані про продуктивність першого покоління.
  4. Дані про ефективність графіків основного покоління.
  5. Ітерація щодо оптимізації алгоритму генератора простих чисел.

2

Я використовую бібліотеку ACM, щоб допомогти студентам-початківцям робити просту графіку та ігри. Ми мали змогу робити основні ігри на основі двох клацань, що базуються на кліках, не що інше, як намічені ними навички. Цього тижня вони роблять гру « Лисиця та гончаки» .

Я намагався якомога довше триматися подалі від вводу / виводу консолі. Сьогодні для багатьох студентів це іноземна концепція, оскільки всі вони виросли з графічним інтерфейсом. Тому я зосереджуюсь на MVC, виправляючи модель та додаючи GUI лише після того, як вони протестували свою модель. Тестування проводиться за допомогою автоматизованого тестування блоку та кодового блоку в BlueJ . Ніколи public static void main()не потрібно.


цікаво. Можливо, ви б написали свій досвід у статті чи публікації в блозі?

2

Я викладав вступний шлях у минулому столітті, і це було ОСНОВНЕ, але, як і ви, я хотів змусити студентів продовжувати цікавий проект, який вони розробляли. Тому я запропонував купу можливостей:

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

... або що б не думали студенти. Вони б прийшли до мене і сказали "а як щодо програми робити XYZ?" і я б завжди казав "Чудово", а потім, можливо, трохи їх направляю, щоб не зробити це занадто складним.

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

PS Я дав це завдання після того, як студенти були компетентні з базовими структурами управління, введеннями / виводами, масивами та послідовними файлами. Це був терміновий проект, основна частина їхнього ступеня, і я мав проміжні завдання, як начерки, так що вони не намагалися зробити це в кінці і вдарили об стіну. Я хотів зайнятися цим питанням як можна раніше в семестрі, коли вони мали достатньо навичок, щоб розпочати роботу, як правило, близько 6 або 8 тижня.


1

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


1

У моєму вступному курсі у мене застрягли три проекти

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

З мого класу алгоритмів
реалізуйте трикутник Серпінського

Ці чотири проекти дали мені чудове розуміння обробки струн, рандомізації, графіки, рекурсії та анімації.


1

Чи всі учні класу CS спеціальностей? Думаю, не було б. Я б придумав завдання, пристосовані до спеціальностей у класі.

Приклади:

  • Студенти мистецтв могли написати програму, яка приймає розміри шматка полотна, а рамка для обчислення кількості полотна була б недоступною для малювання (через обгортання та зшивання полотна навколо кадру).

  • Студенти Econ могли розрахувати складні відсотки за предмет.

  • Студенти з математики могли вибрати проблеми з проекту Euler.


1
Клас призначений для мажорів та не мажорів. Багато хто з біології.
Macneil

Цікаво. Ідея: знайдіть зображення одноклітинних організмів, що плавають у воді. Перетворіть зображення в B&W. Напишіть програму для підрахунку кількості організмів у воді. Це підніме всілякі цікаві теми обговорення: виявлення країв, розмежування між водою та не водою, усунення пилу тощо
Баррі Браун

Що стосується біо, очевидно, що спадає на думку - це стільникові автомати. Ви можете взяти бабло на bioquest.org, щоб отримати кілька ідей.
Кавет Керек

1

У середній школі я взяв вступний клас програмування, і ми використовували робота Карела Дж . Він забезпечує gui для перегляду вашого робота і має дуже базовий набір датчиків і методів руху, які ви повинні розширити, щоб змусити його робити цікаві речі. Я думаю, що це добре, тому що роботи легко зрозуміти людям, які ще не зрозуміли різницю між програмним забезпеченням.

Є також Processing , який я нещодавно виявив, який спочатку був розроблений для навчання програмуванню, і його також у Java.


0

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

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


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

1
Це повинно бути проблемою, яку вони не можуть зробити (легко) на своєму калькуляторі TI-83. Але ще один калькулятор податків не зменшить його.
Баррі Браун

1
Ці студенти готові до програмування та потребують занять няні в цьому курсі. Зробити це нудно, мабуть, не найефективніший спосіб навчити їх програмуванню, і ми повинні дивитись на найкращих вчителів, а не просто змушувати їх декламувати специфікацію Java від кінця до кінця.

1
Ні. Ці проекти, перш за все, повинні бути цікавими. Веселі проекти можуть бути важкими. Насправді більшість моїх проектів для домашніх улюбленців важче, ніж щоденне програмування, яке я роблю на роботі.
Carra

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

0

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


0

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

Кілька, що мене вразили:

  1. Рошамбо ІС (використовується в курсі AI в UOA). Проста функція, яка повертає -1, 0, 1 для скелі, паперу, ножиць. Інтелектуальні пристрої виконуються між собою, а статистика збирається за допомогою сукупної корисної програми. Це завдання постійно дивує людей тим, скільки підходів є життєздатними (а скільки - настільки погано).

  2. Прості проблеми сортування з неможливими характеристиками. Сортуйте файл нескінченної довжини з кінцевою пам'яттю. Ця проблема сколихнула мою основу мислення в алгоритмах. Існує багато проблем, пов’язаних із цим: середньоквадратичне значення за даними нескінченної довжини тощо, кожне з них вирішує щось, здавалося б, неможливе.

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

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

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


Чи знайомиться AI з папером, скелею, ножицями результат чи бачите, яка історія була?
Macneil

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