Sun 17 February 2013I 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
This is related to the next point "The next big thing". New programming languages and web frameworks seem to pop up daily. Many of them like Node.js, Backbone.js, Meteor and alike use JavaScript. Maybe you are unhappy with the overhead of Java? How about Grooy, XTend oder Kotlin? Not to mention the big players of "scripting" languages: Perl, Pyton and Ruby. Or why not learn some Lisp? I always wanted to do that! Or one of the other interesting functional languages like Haskell or Erlang? (CouchDB is written in it, isn't it? So it must be interesting!) Or why not go back to the basics and write some C again to be able to praise the higher level of all those above? And then there is the urge to concentrate on one of the tools you use from time to time, but are not really familiar with. All I do with JavaScript for example is to throw in some jQuery in my web projects. If something does not work right away, I just google for the solution and copy and paste the code in. That's not how It is meant to be! JavaScript is a full-fledged language and deserves more attention. But has it to be pure JavaScript? Google introduced Dart, Microsoft introduced TypeScript, then there is CoffeScript and zillions other dialects and extensions that you can write and use JavaScript in. So, there are many choices. One approach could be that you just try as much as possible, pick what feels "right" and comfortable and then just stick to that decision. Or you could use the more logical approach and choose one tool that will bring you the most economic gain. Aka what is going to be the next big thing you have to be prepared for.
The next big thing
Like Chad Fowler wrote in "The passionate programmer", you have to wisely choose your market, and you can exploit imbalances in the market. Both ends - adapting a technology and getting rid of a technology - can bear vast opportunities. But how to know what will be worth dealing with? A lot of platforms seem to incorporate JavaScript, like Windows 8 or Gnome. Regarding web frameworks, there seems to be a craze about JavaScript. But can you JavaScript really use as an everday language, say for little pagescraping programs or small GUIs? The decision about a new programming language should not only be made because of the latest craze, but also of what your personal preferences are and what you want to accomplish. But maybe that is not satisfying either.
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.