Quote of the Day

"The ... trick is to stop thinking about yourself.  While learning something new, many students will think, "Damn, this is hard for me.  I wonder if I am stupid."  Because stupidity is such an unthinkably terrible thing in our culture, the students will then spend hours constructing arguments that explain why they are intelligent yet are having difficulties.  The moment you start down this path, you have lost your focus."

--Aaron Hillegass, Cocoa Programming for Mac OS X

How to Learn a Framework?

I've recently discovered the Cappuccino framework.  It is impressive, and solves a big problem for me.  I lack the graphic design skills needed to create attractive HTML/CSS based websites on my own.  More and more I lack the enthusiasm to learn them, as HTML/CSS look more and more like the relic of the past that they are -- a way for people without knowledge of programming to mark up text documents.  HTML/CSS were not designed as a user interface for applications, though they have been twisted in brilliant ways to perform as such.  I much prefer to spend my time working with the back end, where things are less arbitrary, and I can see big patterns and apply them to multiple problems.

All that aside, I need to learn the Cappuccino framework, and quickly.  Every time I come up against a big new framework, like the JDK, Cocoa, or Ruby on Rails, I am daunted by the task of learning it.  I am not endowed with an eidetic memory, so I can't just read straight through the documents and memorize all the classes and methods.  Even if I could, it wouldn't do me much good, as what is truly important is understanding the way the classes are meant to be put together.  Working through provided examples helps a bit, but most examples are so basic as to be of little value in understanding how complex applications should be built within the paradigm of a particular framework.

My approach in the past has been to simply start working on the application I want to build, piecing it together, bit by bit.  Learn what I need to get some small feature working, learn what I need get something else working with that, etc. until I have all the features I want.  I feel like there must be a better way, though.  I feel like if I truly understood the framework, I could build things faster, and not waste time making wrong turns and trying to fit pieces together that don't belong together.

I want building an application to be like hiking up a well-worn mountain trail, not feeling my way through a dark, damp cave.

How to get there from here (quickly)?  I don't know.  My strategy right now is to work as many Cocoa examples from Hillegass' book as quickly as I can.  I would welcome tips from others on how they approach this problem.