Probably one of the first really "interesting" applications I wrote was one that helped me reverse-engineer binary file formats for an arcade game. I actually got beatmania IIDX Happy Sky to play Spanish Castle Magic as its opening theme
Writing applications to fit low-level uses (i.e. networking apps, serial protocols, working with raw data, etc) really really helps you understand coding and how things work internally. I wrote a small userspace wiimote driver for Linux recently which really helped me understand pthreads, concurrency, and the bluetooth stack in linux.
Basically, if you find something interesting in computing, figure out how to write a program for it. Even if you don't succeed 100% you will always get something out of it
