Some of the richer, deeper concepts we use in SoftwareDevelopment, in various problem domains, and in the RealWorld in general, take time to fully "sink in." My software instructors in college (one of which was GradyBooch) referred to this as SoakTime, and I've frequently found it to be true, both for myself and my co-workers.
The pattern that I've noticed is that my mind often leaps to a "first level" understanding of a new concept fairly quickly (because new ideas are FUN!) But this can lead to a false sense of security, a sort-of mental "I already 'get' that" attitude, which gets in the way of gaining deeper and better understanding of the concept, including all the implications that can follow from it. I've found that these deeper levels of meaning and understanding are often subtle, and usually take multiple iterations of hearing the concept to reach.
In the end, I've found that some of the most useful knowledge about software development that I have is the stuff that has been percolating around in my head for YEARS, stuff that I've had a chance to play with and practice, turn inside out, contrast with its opposite, use under stressful and intensive RealWorld situations, and just generally live with.
I'm sure some, perhaps most, of this is obvious to most developers, to the point of being a truism. Feel free to comment... -- AndyMoore
True indeed. On a related note, I believe in "exposure first, rigor later" when it comes to teaching and learning software. I hate when texts on programming languages use Chapter One to catalog all the data types that they support. I'd much rather see them jump right into examples. -- SteveHowell
Agreed. BjarneStroustrup's The C++ Programming Language (third edition) is very much that way; it introduces language elements and OO concepts gradually through numerous, well-chosen examples, with plenty of discussion to help you digest and consider the implications. (But nevertheless, it is a very dense work, and I generally just nibble on it a bit at a time, and give myself plenty of time to think and reflect and try stuff before moving on.) I would add one reservation: I don't care for software books that are more than 50% code. I usually flip through to gauge the ratio of code to text to diagrams. Example code is good and important, but shouldn't leave all the burden on the reader to puzzle out what's good about it. Another case comes to mind: O'Reilly's Java Examples in a Nutshell. It is mostly about example code, but it is augmented with plenty of discussion about why to do things a certain way... -- AndyMoore
Yep, I learned Java from the Examples in a Nutshell book. After reading it, I still don't know every nuance of Java, but I definitely know how to think in Java better. -- SteveHowell