I hated hearing, "You're too young to understand," when I was a teenager. Now that I've had some time to learn some things and then learn from my misunderstandings about those things, I've started to think that about myself—that I was too young to understand. I also notice that sentiment more now when others say it about themselves, probably because of my own introspection.
I don't think we should stop there, with lamenting about our past ignorance, or even being pleased that we have come so far in our understanding of things since our youth. We still have much to learn, and years into the future we could look back on today as our ignorant youth. The more you know, the more you know you don't know, as the saying goes.
When I was first learning to program, I learned Pascal and then C++. Then I had to pick up Java for a few college courses, and it wasn't that difficult. I was starting to think that I had pretty much mastered programming. Sure, the other material in Computer Science was challenging, but I found the actual programming rather easy and figured that was all there was to it. This programming thing wasn't nearly as hard as they made it out to be. Boy was I wrong.
The reason I thought programming was so easy was that I didn't really understand the power and utility of the more abstract programming language constructs. Because I didn't understand them, I didn't use them and get comfortable with them. Things like C++ templates and Java reflection actually went right over my head at the time, and I didn't even know it.
Looking back, I can see how little I understood about programming. I can clearly remember how I thought about learning new languages back then, and my thought process was pretty simple. All I needed to do was learn the new syntax and keywords, and then I could go off and write awesome programs in the new language. I ended up writing a lot of programs in various languages that looked a lot like C++ programs. I didn't know how to think in any language other than C++.
One language in particular was SKILL, a scripting language for a very expensive IC CAD tool. SKILL is actually based on a LISP dialect. I'm not sure which one because it's been so long since I used it, but now I at least realize that it was a form of LISP. At the time I was using SKILL I had no idea, and I was totally clueless about LISP's importance and potential. I did write some cool layout generation macros and other utilities in SKILL, but I wonder what I could have done with it if I had understood what it really was.
Another example of being too young to understand what I was learning was the compilers course I took in college. We covered the main stages of a compiler and wrote our own compiler for a toy language that was a reduced form of Java. I could do all of the work for the course fairly easily, but I wasn't even aware of the fact that I didn't understand what I was doing. I didn't have any context for what I was learning. After learning many more languages and studying programming more extensively in recent years, I have a much deeper appreciation for language design, and I would love to learn more. I'll have to pursue that with all of the free time I have. Heh.
I can think up dozens more examples like these. There are all kinds of things that I thought I had learned well years ago, but now I know that I had only scratched the surface. Some things I've learned much more in depth, some things I want to learn more, and some things I've had to put aside. But one thing is true of all of them. There is no limit to the extent of knowledge you can attain in any area you choose to pursue. In five, ten, twenty years I will look back on what I think I know now and chuckle at my own ignorance. At least I hope I will.
It's fine to look back and think I was too young to understand, but the thought shouldn't end there. What that thought really means is that I was too young to understand things the way I understand them now. That will always be true, no matter what age I am. What is even more interesting is what I will learn in the future that will make my current ideas seem naive. Study, experience, and time will reveal what those ideas are, as long as I make the choice of what to pursue and put in the effort. I no longer hate the thought that there are things I don't know. I embrace it as an opportunity, and I look forward to the time when I'll think that my current self was too young to understand.