Well, some of these things will be more suited to some languages than others, some will take a while and some have no real purpose, but here's a few ideas :-)
- Programming challenges. Always good for flexing your programming skills, try projecteuler.net for some prime number type ones that'll test your maths as well as your coding! If you're just starting out with java then javabat.com is a very good site for getting to grips with coding different algorithms.
- A scientific calculator. Not always as simple as it first seems, yes it's been done lots before but it's always a good exercise. It'll test you on data structures, using things like BigDecimal in Java and the equivalent in other languages, and requires some basic but not too hard GUI programming as well.
- Again on the Java front (can you tell what my mother language is by any chance?
) have a look at greenfoot.org and greenfootgallery.org, that offers an easy and fun way into programming Java, and there's a good community there to help you with any problems you might have. Any game would do, you could recode an old classic or make your own entirely!
- Make a basic web server. It's really not as difficult as it sounds and it can really give you an insight into those sorts of technologies and how browsers request files etc. Whilst I wouldn't advise using this to run a full website, if you just wanted to serve say a page up on an old machine somewhere with some information on, if you wanted to integrate it into some other small application then it could work well. This one's also good because the sky really is the limit - you could write a really basic one in, say a lot less than 50 lines probably, but go to the other end of the scale with things like apache and there's practically no limit - you can add what you want!
- Play around with some web technologies. Download the radio times tv listings for example and create a program that displays the programs in a nice format. This will give you the experience with parsing basic XML files, and give you the option to do some nice GUI work.
- Create some basic photo editing software. Again, you can do something really simple like an image viewer, or you can add all sorts of effects. This will give you practice at implementing existing algorithms into languages of your choice since most of the popular algorithms for editing images are out there somewhere, and you can experiment with your own. You're not going to make something to rival photoshop in a hurry, but it can be fun to play around with!
- Along the same lines as the above, try to create a more fully featured version of the photo printing wizard in XP. What about the options of dragging photos around on a page, rotating them and creating your own layouts to print? This one is especially interesting because while you'd aim to have it as flexible as possible, you don't want to create the interface to be overly complicated and bulky, otherwise you might as well fire powerpoint or openoffice up. A very good exercise for nice interface design, and I don't think this one will be as simple as it first seems!
- A basic P2P instant messaging program, that sends and receives messages (and perhaps files?) in encrypted format, and a good encryption that can't be broken with known techniques. A really good exercise on the security side of things as well as networking, and I don't think there's a program out there that currently does this. You'd be making it as server-less as you possibly can (perhaps completely) and everything possible would be transferred securely and stored on the client in encrypted format (chat logs, files etc.) This is quite a large task but would probably make quite a good group project if more than one person wants to be involved - it could be broken down into parts quite easily and even coded in different languages.
- Again on the security front, find some known weaknesses in security algorithms (MD2 etc.) and code a suite of command line apps to break them. Can be quite hard, but it'll teach you a lot about security algorithms and the various problems with them!
That's a few ideas there then - any of those sound appealing to anyone? :-)