Stephen Edwards Programming Assignment Ideas from CS 1705 · 2012-07-30 · Programming assignment...

1
Programming Assignment Ideas from CS 1705 Programming Assignment Ideas from CS 1705 Stephen Edwards Stephen Edwards Virginia Tech, Dept. of Computer Science Virginia Tech, Dept. of Computer Science All materials at: All materials at: http://web http://web - - cat.cs.vt.edu/CsEdWiki/Virginia_Tech_CS1 cat.cs.vt.edu/CsEdWiki/Virginia_Tech_CS1 Lab assignment (2 hrs) Summary: Direct Karel J Robot to pick up piles of beepers Objectives: Introduces objects, classes, and method calls Nifty: students must interactively record their first test cases Collecting Beepers Collecting Beepers Lab assignment (2 hrs) Summary: Program Karel J Robot to solve a fixed maze Objectives: Introduces subclasses, defining methods Nifty: The world is initialized from a URL via a PHP script; the maze is fixed, but beeper locations vary Walking a Maze Walking a Maze Lab assignment (2 hrs) Summary: Program Karel J Robot to pick up beepers and plant them in a row Objectives: If statements, methods, recursion, while loops Nifty: The world is initialized from dynamically generated PHP output via a URL Planting Beepers Planting Beepers Lab assignment (2 hrs) Summary: Program Karel J Robot to count an unknown arrangement of beepers Objectives: If statements, recursion, while loops Nifty: The world is initialized from dynamically generated PHP output via a URL Counting Beepers Counting Beepers Lab assignment (2 hrs) Summary: Program Karel J Robot to pick up an unknown number of beepers and lay them out in a square of an appropriate size Objectives: Method parameters, local variables Nifty: The world is initialized from dynamically generated PHP output via a URL Beeper Squares Beeper Squares Lab assignment (2 hrs) Summary: Read/write one character at a time and decrypt Rot-13 text Objectives: Text streams and basic text I/O Nifty: Uses BufferedReader & PrintWriter, so input can come from many sources, including the web Rot Rot - - 13 Decryption 13 Decryption Although these assignments aren’t all nifty, there are some common trends that we’ve come to use to our advantage: Testing: We require our students to write test cases for all of their code. BlueJ helps by allowing them to interactively record test cases even before they program. I/O: We never write programs that use System.out or System.in directly. Instead, all I/O is through BufferedReaders or PrintWriters, and we provide simple wrappers for one-call creation of such objects. This is critical for writing convenient test cases, but also means it is easy to operate on a wide variety of I/O sources, including URLs. Connection to the real world: We try to relate each assignment to real-world experiences or real-world programming behaviors, even if only in a small way—reading information from the web, processing real-life data, mirroring aspects of programs students have used themselves, etc. Identifiable learning objectives: We try to spell out for our students exactly what the learning objectives are for each assignment. Even if students don’t enjoy an assignment, they know why we are asking them to do it. These ideas do not guarantee nifty or compelling assignments, but they have helped us write better assignments. Recurring Themes Recurring Themes Lab assignment (2 hrs) Summary: Read/write one character at a time and decrypt Rot-13 text Objectives: Text streams and basic text I/O Nifty: Uses BufferedReader & PrintWriter, so input can come from many sources, including the web Rot Rot - - 13 Decryption 13 Decryption Program assignment (2 wks) Summary: Program Karel J Robot to solve a dynamically generated maze Objectives: Subclasses, methods, if statements, recursion Nifty: The world is initialized from a URL, and a PHP script dynamically generates a new maze for every run Maze Solver Maze Solver Lab assignment (2 hrs) Summary: Implement a simple version of the Unix wc command Objectives: Text streams, character and line input Nifty: Uses a BufferedReader and can be targeted at the course’s web home page, simplicity is deceptive Line Counter Line Counter :String :String "Fred Flintstone" :ArrayList :ArrayList 0 :String :String “Betty Rubble" gradebook: Gradebook gradebook: Gradebook students fred: Student fred: Student name totalPts 160 numAsgns 2 betty: Student betty: Student name totalPts 186 numAsgns 2 Lab assignment (2 hrs) Summary: Build a simple set of classes to implement a grade book Objectives: constructors, containers, ArrayLists Nifty: Inspired by textbook, natural lead-in for iterators Grade Book Grade Book Lab assignment (2 hrs) Summary: Write a BufferedReader- based spelling checker that reads lines, splits them into words, and checks them against a list loaded from a file Objectives: text I/O, string splitting, container classes Nifty: Can replace the “starter” word dictionary with something much bigger, inspires maps, can be directly applied against live URLs like the course’s web pages Spelling Checker Spelling Checker Lab assignment (2 hrs) Summary: Write a simple weekly calendar that can store events scheduled on the hour Objectives: 2D arrays, writing interacting classes Nifty: Potentially very open-ended, Some students like to play with printing scheduled in HTML Time Table Time Table Lab assignment (2 hrs) Summary: Implement an interactive command line interpreter to control Karel, using a map of command objects that implement a common interface Objectives: Interfaces, maps, line- oriented input, simple interpreters Nifty: Students write their own interpreter in 2 hrs, and see how extensible the map + interfaces combo is Karel Karel Interpreter Interpreter Lab assignment (2 hrs) Summary: Students are given a buggy class (with weak tests) and a partially complete subclass; they must complete and debug the code Objectives: Debugging skills, code reading Nifty: End result is an extensible interpreter for textual calculator commands Scriptable Calculator Scriptable Calculator Programming assignment (2 wks) Summary: Write a translator that reads simple text markup and translates it into HTML Objectives: character I/O, state machines, complex logic and state Nifty: Use a simple utility function to pop up the result in your web browser so you can see the formatting DUML Translator DUML Translator Program assignment (2 hrs) Summary: Like Zuul, but using abstract based classes: students extend a framework, rather than modify existing code Objectives: Abstract classes, simple frameworks, etc. Nifty: Very open-ended, students vote on the most creative adventure game submitted in a contest Adventure Adventure Program assignment (2 wks) Summary: Write a program that crawls an interconnected set of web pages and prints out the links they contain Objectives: Text streams, character and line input Nifty: Uses a BufferedReader and can be targeted at the course’s web home page, simplicity is deceptive URL Harvester URL Harvester Lab assignment (2 hrs) Summary: Implement the ”board” for this game (other classes provided), and play the result Objectives: 2D arrays, working with libraries Nifty: Students create a playable game in a short time Mine Sweeper Mine Sweeper Program assignment (2 wks) Summary: Inspired by text, but modified to use real Apache logs from our dept server Objectives: Interfaces, 2D arrays, using code libraries Nifty: Works with real-world data that the students can relate to Web Log Analyzer Web Log Analyzer Lab assignment (2 hrs) Summary: Read, test and debug existing code (no code writing) Objectives: Testing and debugging skills Nifty: Inspired by textbook, some bugs are hard to find, students race to see who can find them all Debugging Bricks Debugging Bricks Program assignment (2 wks) Summary: Write an “AI” computer player for tetris, based on one of the Stanford “nifty” assignments Objectives: Interfaces, nested loops, working with existing code, reading docs Nifty: Playable game, plus graphical animation of computer player; students informally compete for best tetris scores Tetris Brain Tetris Brain

Transcript of Stephen Edwards Programming Assignment Ideas from CS 1705 · 2012-07-30 · Programming assignment...

Page 1: Stephen Edwards Programming Assignment Ideas from CS 1705 · 2012-07-30 · Programming assignment (2 wks) Summary: Write a translator that reads simple text markup and translates

Programming Assignment Ideas from CS 1705Programming Assignment Ideas from CS 1705Stephen EdwardsStephen Edwards

Virginia Tech, Dept. of Computer ScienceVirginia Tech, Dept. of Computer ScienceAll materials at:All materials at:

http://webhttp://web--cat.cs.vt.edu/CsEdWiki/Virginia_Tech_CS1cat.cs.vt.edu/CsEdWiki/Virginia_Tech_CS1

Lab assignment (2 hrs)Summary: Direct Karel J Robot to pick up piles of beepersObjectives: Introduces objects, classes, and method callsNifty: students must interactively record their first test cases

Collecting BeepersCollecting Beepers

Lab assignment (2 hrs)Summary: Program Karel J Robot to solve a fixed mazeObjectives: Introduces subclasses, defining methodsNifty: The world is initialized from a URL via a PHP script; the maze is fixed, but beeper locations vary

Walking a MazeWalking a Maze

Lab assignment (2 hrs)Summary: Program Karel J Robot to pick up beepers and plant them in a rowObjectives: If statements, methods, recursion, while loopsNifty: The world is initialized from dynamically generated PHP output via a URL

Planting BeepersPlanting Beepers

Lab assignment (2 hrs)Summary: Program Karel J Robot to count an unknown arrangement of beepersObjectives: If statements, recursion, while loopsNifty: The world is initialized from dynamically generated PHP output via a URL

Counting BeepersCounting Beepers

Lab assignment (2 hrs)Summary: Program Karel J Robot to pick up an unknown number of beepers and lay them out in a square of an appropriate sizeObjectives: Method parameters, local variablesNifty: The world is initialized from dynamically generated PHP output via a URL

Beeper SquaresBeeper Squares

Lab assignment (2 hrs)Summary: Read/write one character at a time and decryptRot-13 textObjectives: Text streams and basic text I/ONifty: Uses BufferedReader & PrintWriter, so input can come from many sources, including the web

RotRot--13 Decryption13 DecryptionAlthough these assignments aren’t all nifty, there are some commontrends that we’ve come to use to our advantage:

• Testing: We require our students to write test cases for all of their code. BlueJ helps by allowing them to interactively record test cases even before they program.

• I/O: We never write programs that use System.out or System.in directly. Instead, all I/O is through BufferedReadersor PrintWriters, and we provide simple wrappers for one-call creation of such objects. This is critical for writing convenient test cases, but also means it is easy to operate on a wide variety of I/O sources, including URLs.

• Connection to the real world: We try to relate each assignment to real-world experiences or real-world programming behaviors, even if only in a small way—reading information from the web, processing real-life data, mirroring aspects of programs students have used themselves, etc.

• Identifiable learning objectives: We try to spell out for our students exactly what the learning objectives are for each assignment. Even if students don’t enjoy an assignment, they know why we are asking them to do it.

These ideas do not guarantee nifty or compelling assignments, butthey have helped us write better assignments.

Recurring ThemesRecurring Themes

Lab assignment (2 hrs)Summary: Read/write one character at a time and decryptRot-13 textObjectives: Text streams and basic text I/ONifty: Uses BufferedReader & PrintWriter, so input can come from many sources, including the web

RotRot--13 Decryption13 Decryption

Program assignment (2 wks)Summary: Program Karel J Robot to solve a dynamically generated mazeObjectives: Subclasses, methods, if statements, recursionNifty: The world is initialized from a URL, and a PHP script dynamically generates a new maze for every run

Maze SolverMaze Solver Lab assignment (2 hrs)Summary: Implement a simple version of the Unix wc commandObjectives: Text streams, character and line inputNifty: Uses a BufferedReader and can be targeted at the course’s web home page, simplicity is deceptive

Line CounterLine Counter

:String:String

"Fred Flintstone"

:ArrayList:ArrayList

0 1

:String:String

“Betty Rubble"

gradebook:Gradebook

gradebook:Gradebook

students

fred:Student

fred:Student

nametotalPts 160numAsgns 2

betty:Student

betty:Student

nametotalPts 186numAsgns 2

Lab assignment (2 hrs)Summary: Build a simple set of classes to implement a grade bookObjectives: constructors, containers, ArrayListsNifty: Inspired by textbook, natural lead-in for iterators

Grade BookGrade Book

Lab assignment (2 hrs)Summary: Write a BufferedReader-based spelling checker that reads lines, splits them into words, and checks them against a list loaded from a fileObjectives: text I/O, string splitting, container classesNifty: Can replace the “starter” word dictionary with something much bigger, inspires maps, can be directly applied against live URLs like the course’s web pages

Spelling CheckerSpelling Checker

Lab assignment (2 hrs)Summary: Write a simple weekly calendar that can store events scheduled on the hourObjectives: 2D arrays, writing interacting classesNifty: Potentially very open-ended,Some students like to play with printing scheduled in HTML

Time TableTime Table

Lab assignment (2 hrs)Summary: Implement an interactive command line interpreter to control Karel, using a map of command objects that implement a common interfaceObjectives: Interfaces, maps, line-oriented input, simple interpretersNifty: Students write their own interpreter in 2 hrs, and see how extensible the map + interfaces combo is

KarelKarel InterpreterInterpreter

Lab assignment (2 hrs)Summary: Students are given a buggy class (with weak tests) and a partially complete subclass; they must complete and debug the codeObjectives: Debugging skills, code readingNifty: End result is an extensible interpreter for textual calculator commands

Scriptable CalculatorScriptable Calculator

Programming assignment (2 wks)Summary: Write a translator that reads simple text markup and translates it into HTMLObjectives: character I/O, state machines, complex logic and stateNifty: Use a simple utility function to pop up the result in your web browser so you can see the formatting

DUML TranslatorDUML Translator

Program assignment (2 hrs)Summary: Like Zuul, but using abstract based classes: students extend a framework, rather than modify existing codeObjectives: Abstract classes, simple frameworks, etc.Nifty: Very open-ended, students vote on the most creative adventure game submitted in a contest

AdventureAdventure

Program assignment (2 wks)Summary: Write a program that crawls an interconnected set of web pages and prints out the links they containObjectives: Text streams, character and line inputNifty: Uses a BufferedReader and can be targeted at the course’s web home page, simplicity is deceptive

URL HarvesterURL Harvester

Lab assignment (2 hrs)Summary: Implement the ”board” for this game (other classes provided), and play the resultObjectives: 2D arrays, working with librariesNifty: Students create a playable game in a short time

Mine SweeperMine Sweeper

Program assignment (2 wks)Summary: Inspired by text, but modified to use real Apache logs from our dept serverObjectives: Interfaces, 2D arrays, using code librariesNifty: Works with real-world data that the students can relate to

Web Log AnalyzerWeb Log Analyzer

Lab assignment (2 hrs)Summary: Read, test and debug existing code (no code writing)Objectives: Testing and debugging skillsNifty: Inspired by textbook, some bugs are hard to find, students race to see who can find them all

Debugging BricksDebugging Bricks

Program assignment (2 wks)Summary: Write an “AI” computer player for tetris, based on one of the Stanford “nifty” assignmentsObjectives: Interfaces, nested loops, working with existing code, reading docsNifty: Playable game, plus graphical animation of computer player; students informally compete for best tetris scores

Tetris BrainTetris Brain