views:

387

answers:

7

I am a mostly self taught programmer. When I learn a new language it usually goes like this:

  • Buy a book (or books) on a language.
  • Read said book(s).
  • Look up more confusing/interesting aspects on the web.
  • Actually use that language for something (using the web, and book as reference)

Web programming provides plenty of possibilities for that something. Forums, blogs, social networks etc. The end result won't be the same quality as something properly done, but I can then download an open source program doing the same thing and compare to see if my code is good.

However, for a desktop GUI, I'm kind of stumped for ideas. Any suggestions on a reasonably complicated (but do-able) project to get used to desktop programming?

+6  A: 

You could find an available (probably, but not necessarily, open-source) command line tool and write a GUI wrapper for it that makes handling the command line options easier. That should teach you a lot about finding the right UI metaphor and how to implement it.

balpha
+1  A: 

For an exciting intro project to the exciting world of desktop GUI programming (which is still completely trendy) you could write a simple invoice management tool for an accounts payable type operation. Make sure you include plenty of reporting options.

In all seriousness, I'd start off by trying to create a GUI for a command line tool that you like. That or an implementation of pong. Pong is always fun.

Ben Hughes
And we all know how complicated the user interface for pong is :-)
balpha
just complicated enough to make you never want to make a desktop app again.
Ben Hughes
+2  A: 

Make one of your old Web applications using Eclipse Rich Client Platform. That should prove interesting, to say the least.

geowa4
+1  A: 
  1. File explorer
  2. Clock application
  3. Calculator
Nick
+1  A: 

A good desktop application would be a game. ;-) Then again, many games are moving towards internet connectivity but often have their own Internet logic. You could start with creating a nice cardgame, then move towards checkers or a simple Chess engine.
It might sound silly but good programmers are able to create interesting games. It's a great exercise between real projects.

Workshop Alex
+1  A: 

Even a simple instant messaging app will hold a few interesting problems to solve, like:

  • asynchronous network communication and handling those events in GUI
  • creating custom controls (e.g. contact roster with statuses and avatars)
  • working with shell drag and drop for file transfers
  • desktop notifications (incoming message) and other desktop integration features (handling Send To in windows maybe)
  • managing configuration state
  • providing power awareness - your app should for example disconnect from server before your computer goes into standby
  • handling user idle events
  • creating a chat window with a rich text message editor
  • etc.

Cool stuff!

macbirdie
+1  A: 

How about a diff viewer? It should be pretty simple to get the basics going, but there should be plenty of opportunities to improve the GUI beyond that (note that several of these features already exist in good diff viewers like Meld and Kdiff3):

  • Scroll so that the diffs appear as close as possible to each other (not trivial if lines have been removed/added)
  • Syntax highlighting using existing libraries like GeSHi
  • Option to "compact" text which is at least X lines away from any diff
  • Graceful handling of different encodings / line endings
  • Flipping left/right pane
  • Three-way diff
  • Directory diff
  • Smooth "tube" between diff lines
l0b0
It's a good idea, but I've never been very good with regexes so it's not for me.
Macha

related questions