Jeff Atwood has a good article on using practice-programming to continually hone your programming skills:
Contrary to what you might believe, merely doing your job every day doesn’t qualify as real practice. Going to meetings isn’t practicing your people skills, and replying to mail isn’t practicing your typing. You have to set aside some time once in a while and do focused practice in order to get better at something.
I continually stretch my programming skills, seeking out new and better ways of doing things and trying to find ways to incorporate them into my code. When the project I’m working on doesn’t lend itself to that sort of thing, or I find a neat-sounding technique that doesn’t fit with whatever I’m doing, I write a small test program to play with it, or (if I can’t immediately spare the time) make a note to do it later. I’d like to practice with another programmer as he suggests as well, but I just don’t know that many personally, and none of the ones I do seem to have the interest (or the time) for “mere” practice.
Designing and writing software isn’t something I do to make a living, it’s something I do because I love doing it. Being able to make a living at it is merely icing on the cake.
You could practice making trivial and buggy OS X programs with me. 😉
When I was developing Windows programs, you were on Linux. When I switched to Linux, you switched to OS X. When I pointed out that C++ can be cross-platform, you decided you were using Objective-C instead. Maybe it’s just me, but I think I sense a pattern here… 😉
I certainly didn’t start using Linux because you were programming Windows, when I started using Linux we both were using MS-DOS with DESQview-386, and shunning Windows 3, then you ran OS/2 – I would have joined you in that but my 386 with 4 megs RAM couldn’t handle it. 🙂
Besides, I also want to program for the iPhone, and for that you need either to make webapps, or write Obj-C Cocoa Touch apps, so I might as well continue to learn Cocoa in general. I do intend to learn C++, and maybe to write stuff that runs on Windows and Linux in it that doesn’t need Cocoatron or GNUstep to be cross-platform, but my current focus on cross-platform apps is cross-platform between Macs and iPhones… Besides, I don’t feel comfortable writing something with wxWidgets or whatever if I don’t understand what’s going on underneath. I’m like that, even though maybe this isn’t really the easiest method of doing things.
Yes, it’s always better to understand what’s going on under the hood before you start using a library like wxWidgets. It makes tracking down the inevitable problems a lot easier in the long run.
I thought of programming in Carbon, which would be C or C++, but if I did that, it would be deprecated, and even less portable, despite the language choice. Besides, I’d still need to learn Cocoa Touch for the iPod Touch or iPhone programs.