I recently stumbled across this great article about epiphany addiction, and several people (including me) who might suffer from it from time to time came to my mind. I then noticed that this phenomenon ist not only limited to pseudo-insightful life tips as described in the article, but also to another part of the life of someone who spends hours a day working with computer programs - programming languages.
You can’t fully grok a language
For me, the main culprit may be that you are never really done ‘learning’ a programming language. For example during programming and computer network courses at college I wrote a Game of Life with GUI, an auction simulation program, a stop-motion video editor, an Android app for adding POIs to OpenStreetMap, a chat program that acts as client and server using different network layers and an online airline management system. All in Java, because it’s the language used to teach programming. Have I really understood every aspect of Java? Hell no. A lot of stuff regarding generics is still a white spot on the map for me. From all those courses you learn a subset of the language at best. Yet this subset will serve you for everyday tasks, and you can be a productive Java programmer and easly ‘get’ Java code written by others with that knowledge. Or take Ruby, for example: In my previous posts I mentioned that most of the introductionary material (including whole books) about Ruby will teach you the language to exactly where it gets gritty; they normally don’t deal with the complicated object model oder metaprogramming. If you are impatient like me, that’s disastrous. I’m not happy with my programming until I feel I fully mastered the tools I work with. And after being unhappy for a (I’m afraid little) while using one particular tool, I feel the urge to try something different. But what?
Many, many options
The next big thing
What is right for me
So I made my choice. I tried around and chose what fits my brain, so to speak. Now I could just stick to it and live happily ever after. Really? As it turned out, I’m working with various other tools every day, but not the one I chose. Job opportunities are not as good for the tool I chose. There is little to no chance I get hired for mediocre knowledge of my favourite tool, but probably for screwing around with the ones I don’t like. And I just don’t have the time for learning my favourite tool to that extent that I am fully happy with it (see first point). So being held from using my favourite tool, the epiphany cycle kicks in. If I can’t spend time learning my favourite tool, and I’m not happy using the tools I have to use, so maybe something else is the answer. And so starts the pondering anew. At some times I’m that flashed by something new I discovered that I’m having the thoughts of the linked blog article above: “That’s it! Why didn’t I check out this before??” But since it’s impossible to fully grok a programming language (see first point again), sooner or later the new tool will feel like a waste of time (see this point). And here comes the cycle again.
So, what’s the answer?
If I only knew that! In “The passionate programmer” Chad Fowler makes the point that one should become a specialist and generalist at the same time, but specialist meaning here not to don’t know anything else about all the rest. Another inspiration comes from Zed Shaw. In his book Learn Python the hard way he writes that he mastered programming to such extent that it’s become uninteresting and boring to him and that he can pick up a new language in a day to a week. Maybe that’s the way. It’s not the tools themselves, it’s the experience you gain by learning as much as possible. These points are all good and well for them, but such processes take decades to come to fruition. Did I mention that I’m an impatient kind of guy? And here comes the cycle again.