You are not logged in.
I'm taking a class in software engineering now and I'm looking for practical software engineering exercises. That is, I'm not looking for a language tutorial, or somehting that tests "concepts" of software engineering. I'm looking for exercises (preferably language agnostic) where a simple program (say 3-7 classes) is described in terms of its public interface so that any relatively competent programmer can build a working program out of it, making their own implementation choices in the process. Are there any sort of exercises of this type? I haven't been too successful finding what I want using google.
The Bytebaker -- Computer science is not a science and it's not about computers
Check out my open source software at Github
Offline
maybe something like http://projecteuler.net ...
Offline
ProjectEuler is nice for killing time, but has rather to do with discrete mathematics than programming tasks.
I can't give you the homepage that you are asking for (i'm interested, too), but why don't you create your own challenges by thinking about minimalistic programs?
Offline
Perhaps try re-implementing open source programs by looking at the manuals and header files only?
Offline
ProjectEuler is nice for killing time, but has rather to do with discrete mathematics than programming tasks.
Luckily computer science is all about mathematics
Offline
Data structures: implement and play around with them. An intimate knowledge on how and why different important data structures work is pretty much half of software engineering.
Offline
Project Euler is not what I'm looking for, though I think I might take VirtualRider's suggestion and start compiling a list myself.
The Bytebaker -- Computer science is not a science and it's not about computers
Check out my open source software at Github
Offline
A suggestion: Make something simple, then make it work with a huge amount of data or nodes.
I've done projects like this for fun. For instance, have you ever used ImgSeek? It is a pretty cool app, it can recognize and cluster similar images. The algorithm behind it (Haar transform) is simple. But the app scales lousy, it uses .thumbs of every picture loaded in. Load more than 10K pictures, and it gets sloooow. So I wrote my own version, and loaded it with a set of two million images. I learned a lot of fun stuff in this project, like how ext3 is limited to 32000 directories. (I was using directories as bins for faster lookup.)
Or download the entire Gutenburg corpus and write classis lit search tool. Make it support arbitrary glob commands.
Using UDP packets, get two computers on your LAN to "tick" in sync. Sync it to the nearest millisecond. Now add more computers. Over flaky wifi connections. Port forwared through a system on the other side of the world.
Play with povray. Make a simple movie animation. Now write an app that automatically farms out the rendering to a bunch of computers, collects the frames and glues together an avi. Rewrite it in erlang. Make it so you can pull the plug on any node (even the master!).
Alternatively, scale way down on a single system. Dig out the oldest computer you have. Take out all the ram. Disable swap. See if your google-berg seach still can run. Related: http://prog21.dadgum.com/29.html
Draw visualizations for really large sets of data. Related: http://bit-player.org/2009/long-division
Most software engineering is a matter of scale, so practice scaling things up and down. I had a blast doing this in college - every week I could find a pile of pentiums 2/3s being thrown out and electricity is free in the dorms. The rest of software engineering is making apps survive hardware failures. Failures are frequent when using free computers harvested from the trash, but ymmv.
Offline
Draw visualizations for really large sets of data. Related: http://bit-player.org/2009/long-division
Wow. That is a great read. Good to see someone using lisp. It was interesting to see someone look at optimisation at the algorithmic level instead of just picking a faster language.
Offline