views:

4122

answers:

16

I remember when I took my first programming class in the 11th grade in high school. The course was called AP Computer Science. Anyway, the teacher had some very cool and challenging assignments to help us learn.

One of which was a 2D fish tank simulation. The fish in the tank had a sex and other characteristics. Fish were born of other fish, reproduced, swam around, and died. Their were other explicit requirements, but I can't remember them all. But that was a very fun project, and I learned a ton doing stuff like that in the class.

Going through college was a different story. The teachers weren't as creative. We mostly followed examples from a book.

I hope to begin teaching programming courses at the college level in the near future, so I am on the lookout for some good project ideas for students.

What are your most memorable programming challenges that would be good for students (beginner - advanced)? Please give specific details about ideas for projects.

+8  A: 

Although hard, one of the more interesting classes I took back in undergrad was an operating systems design class. We used the bochs pc emulator to write our own OS for the entire semester. We started with simple loading of programs into memory for execution and worked our way up to a very fragile version of dos that would have fallen over if you looked at it the wrong way.

Basic OS included (from the parts that I remember) file system, virtual memory, a very very simple shell.

One thing the instructors did right is that at every step, he gave us the best working code from the previous step so if you did not complete it or if your code had problems it wouldn't escalate in the later projects.

That class taught me a lot.

The other class I remember is the software design class. In that one we actually had to design and build a software for the local fire station to keep track of their inventory and personnel, that was probably my first experience working on a team > 4 people (the entire class was split into 2 teams of roughly 20).

Btw both of these were senior level classes, definitely not recommended for freshmen :)

yx
Really like the idea of giving you a fresh start at each step. A lot of learning going on there.
Jon Smock
+4  A: 

Know your audience. Imho it boils down to finding things that speak to the students. If they're interested in the task at hand, they'll be happy to learn whatever new trick is necessary. So start off with some "higer/lower" game and depending on their interest move on to more complicated project. When they really get excited, who knows you can have them code sudoku solvers soon :)

tehvan
+1  A: 

I had to create Incredible Machine clone in C++. It was entartaining, fun and I've learned a lot about programming and graphics. You can also easily scale difficulty of it, starting from one simple puzle with few basic objets to more levels with various advanced objects or even with level editor.

GvS
+5  A: 

Games are always good, requires input, physics, rendering and alot of other stuff.

And all the above fields can be done either very easy or very very advanced. This way those who think graphics is cool can focus on this while the ones who like physics more maybe thinks it's enough with a simple box that bounces around more realistic.

+4  A: 

One of the best assignments was part of a LAN networking course. It was a group work of 5-6 students. We designed our own protocol and implemented a multiplayer game using it. Great fun and we learned a lot. Not just about protocols and programming but also about team work and project management.

Petteri Hietavirta
+3  A: 

One of the more exiciting projects I did as an undergrad was the Trading game competition. It tought all sort of skills from using datastuctures and efficent code, it can be done either as a group project or individually.

CodeMonkey
+1. I also did this project as an undergraduate. Our tutor set up a tac server locally, and we pitted our agents against each other, with relative performance having some affect on the marking. It's amazing how motivated everyone becomes when the concept of competition is added to a project.
RJFalconer
+1  A: 

The best education I've had to this point was from Prof. Whitaker at DeVry Columbus. This was for our intermediate Java course work (the second class in a 3-class series). I will admit it was quite boring, but he had us learn all the infrastructure of the Java Fx by re-building the Fx on our own. So many times I have been able to draw off of that education to understand underlying issues or happenings, so that I know when it is best to use a linked list vs. an arraylist vs. a regular list.

Our Java 1 course was slightly more by-the-book, and although I ace'd the course, it wasn't anywhere near as informative.

Now that I look back on it, I'd definately say to teach the students how the framework works... once they know that, then educate them on how to use the "tools" to create solutions to problems.

Richard B
+3  A: 

http://projecteuler.net/ has a number of interesting problems to solve. The entry-level assignments don't take longer then maybe 10 minutes each - just a couple lines of code. That, and the presentation on the webside including statistics and discussions are good motivators to actually do some from time to time. Some basic coding skills and understanding of mathematics is required though to even get started.

lithander
+1  A: 

My teacher took a couple examples from this page: http://nifty.stanford.edu/

It's kind of a repository of fun little projects you can assign to students. Some of them have all the details and materials you would need to have as a teacher, others have little more than just the idea and some hints as to how to go about it. But from what I've seen, they're all good projects.

MatrixFrog
A: 

Try the Code Katas from http://codekata.pragprog.com/

Quote from the site:

Code Kata is an attempt to bring this element of practice to software development. A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long). Some involve programming, and can be coded in many different ways. Some are open ended, and involve thinking about the issues behind programming. These are unlikely to have a single correct answer. I add a new kata every week or so. Invest some time in your craft and try them.

f3lix
A: 

I have given my students a paint project. They store the coordinates as an %, shape, fill color, line color in a text or XML file. Then they had to write code to store their picture, save and open. Some students added the ability to animated their pictures. It turned out to be quite a fun little project for them.

CuTop
+1  A: 

The only non-trivial project that I did in college that sticks in my mind was a simple search engine. The program had to read in a series of html files, parse out the tags, and index all the words. You could then give it search terms and it would return a list of the pages that contain the terms you gave it.

We had to implement 3 different data structures to store the page data in. One was a hash table, another was a red-black tree (I think), but the last was one that we had to come up with on our own. To discourage a ton of linked-list submissions, everyone's project was timed, using our data structure, on a large input set, to see who's was the fastest. That ranking then contributed 20% of the project grade. I used a ternary trie and won, since I could find words in a time proportional to the word length, independent of the size of the pages I was looking through.

Looking back, I think the reason I remember this project isn't because of the programming techniques that it taught, but because of the competitive nature. Not so much that the 'winner' was guaranteed an A and the 'loser' an F, but just enough to make it interesting.

Jeff Shattock
A: 

Sir can you tell me are message me what are the projects, and where they available , based on the c programming

Amaresh
+1  A: 

Mandelbrot generator, Tron, bouncing balls, Synthesising a plucked string with Karplus Strong algorithm, Recursive folder size calculator, Connect 4, ...

It always feels good to code something up that is useful, or amazing, or spectacularly neat.

If you're feeling ambitious, you could get them to take on a large task as a collective, and then they would have to split it up into modules and arrange themselves into groups.

That would be wonderful OOP / reusable code practice, teaching them to specify interfaces.

That is what I would do: for the first assignment they have to go away and come up with an idea. for the second class they have to put out all the alternatives, and choose winners. maybe three projects may get chosen. then they have to split into groups to work on whichever project...

Teacher's main role would be to check how they are assigning tasks / workshare, making sure that everyone does something.

Form these groups early on in the course, then put it on the backburner for a few weeks while you teach all of the necessary constructs that they will need to accomplish their task. it is always easier to learn something if you have some objective in the background when you forwards.

Remember, now is the day of the Internet: it's not so important to teach someone something as it is to teach them how to find the answer themselves.

Ohmu