I have two modes of learning, and one I enjoy, and one I resent mildly.
"A-hah!" learning happens from time to time while I'm working through a larger problem in my head. One might call it the holistic learning moment; I'm reading a textbook or paper and suddenly I get it. I not only understand what the author is trying to say, but I get the ramifications of it. This happens a lot when I'm reading about type systems and it clicks for me that a type system is an additional language, with it's own strengths and weaknesses, that helps the developer say what the program means, and more importantly, lets the programmer talk about the genericity and applicability of his code. These come in a flash, as if several different bundles of neurons that had been slowly growing toward each other suddenly connected and something suddenly makes a lot of sense.
"Grind" learning happens when I have to learn something that should have been an "a-hah" event but wasn't, and I have to repeat the lesson over and over until I internalize and understand it. A recent example is in my Language in 20 Minutes exercise. the hardest thing for me to get was the difference between dynamic and lexical scoping from within the interpreter. I had to write, rewrite, and rewrite again the way a functions's free variables are informed by its lexical scope (the closure), and the way its bound variables are populated by values found in the current execution scope.
In some ways, the second problem was informed by the idea that I didn't even have the notion of "bound" and "free" variables in my mind until I started reading up on the lambda calculus and trying to grok what it means and how it works. But even though I do have those terms now, it's been difficult for me to internalize the ways of lexical and dynamic scoping.
It doesn't seem to be a matter of problem size. The LangIn20 project is very elegant and doesn't have many moving parts. SparQL is a large project that has a lot of moving parts; both were grinds to master.
I wonder what, in particular, contributes to a problem being an "A-hah!" versus a grind, and if I can turn more of the latter into the former.