I’ve been teaching myself a lot of new programming languages and/or APIs lately (C#, HTML5, Cocoa, Adobe AIR). Something I’ve been thinking about a lot is expert-level problems. These are technical problems you encounter that you can’t solve unless you’re an expert at a particular technology. For example, here are some that I’ve battled:
* dealing with Unicode in Perl
* managing the thread-context ClassLoader in Java
* working with two different malloc implementations in C++
* making a standards-based webpage look pixel-perfect in IE
Expert-level problems are the bane of someone coming up the learning curve in a new technology. The biggest issue is that beginners don’t know how deep the problem is. Maybe it’s a little problem that you’ll be able to solve with a little learning, or maybe it’s a problem where you can sink a week of work and get nowhere.
I believe there’s no solution except to become an expert (or hire an expert). And, in my opinion, you can’t become an expert unless you’ve got a tangible goal and strong motivation to reach that goal (i.e. a job). When you’re just dabbling with a technology, it’s not likely that you’ll become an expert because you won’t have the time or motivation to dig to the bottom of those expert-level problems.