Stages in Life of a Web Developer
Monday, September 1st, 2008After experiencing this interesting development in my own life, I keep seeing others go through the same 3 stages:
- Stage 1: TOTAL HAET!
- Stage 2: Careful, reserved acceptance…
- Stage 3: TOTAL LOVE!
People in Stage 1, almost unanimously think that Javascript is “totally ghay”. They use phrases such as “a silly toy language” and generally consider it to be just a step above Visual Basic. Let me explain this for those readers who don’t hang out with programmers all day and they don’t get to learn our lovely stereotypes, and for Visual Basic folks who are probably not aware of this. In the world of software engineering, being a VB guy is a bit like wearing a mullet. In other words, it implies lack of style and sophistication and underlines the fact that you are just not keeping up with current trends. Not that there are no talented VB programmers - there are exception to every rule after all, and all stereotypes are mostly false except when they are true.
Stage 1 people look at Javascript hackers, and scoff at them confident of their own superiority. They view client side scripting as a thankless, tedious job for masochists. After all, coding in Javascript is a a chore, right? You set something up and test it in Firefox, only to find out it doesn’t work in IE. Then you fix it for IE6 but it doesn’t work in IE7. Then you find out it doesn’t work in Opera. Finally you covered most of your bases and someone tells you that you need to support IE5 as well. Then IE8 comes along, and breaks your code once more. So your code branches into a tangled forest of exceptions, workarounds, hacks and mostly undocumented syntax acrobatics. This must be what programmer’s hell is like.
Most people who go through this once or twice in their career, wash their hands from client side development and declare themselves as server side dudes. Some of us however, end up working more and more with the infernal language, and eventually we end up researching ways to make the language it less painful and more powerful. And then something happens.
We discover one of the many Javascript frameworks such as JQuery, Prototype, YUI and etc. All of a sudden you have this tool - this API which gives you a comprehensive list of cross-browser functions, objects and widgets to play around. Someone already went through the browser compatibility hell and built a layer on top of it. You talk to the framework, and the framework deals with the browser bullshit that made your life so difficult initially. All of a sudden you realize that, hey - Javascript ain’t that bad actually. The language is flexible, dynamic and very expressive. It doesn’t get in your way, it doesn’t require you to write boilerplate essays, and it allows you to be as brief and cryptic or as verbose as you like. Wow…
Welcome to Stage 2. At this point many people still have their reservations. They are sure that sooner or later they will to fall back onto their old Javascript tricks and deal with the browser hell. They are convinced that there will always be exceptions and outlying cases that will make the framework a liability. They thing that at some point they are bound to run into a problem which is only compounded by the framework and will have to work around it, and around browser bullshit to fix it. So they remain cautious and vigilant. They promise themselves that they will never get roped into doing client side stuff again. They will be strictly server side from now on. They view Javascript as necessary, but manageable evil and purposefully make their trips to client-side land brief and limited in scope.
But then as they work on their JS related projects they grow to like the language. The realization that this language can do almost everything that Ruby and Python are being praised for if not more while maintaining a conservative and familiar syntax slowly starts sinking in. You can do crazy dynamic Ruby/Python like stuff without actually running yet another interpreter of VM. Javascript runs in your browser, and can run on the JVM with Rhino. If you wanted to, you could even use it on the server side with full access to Java API and leveraging the full potential of JSP without the burned of verbose, statically typed Java syntax.
A whole new world opens before you. Javascript is popular. Everyone knows a little bit of it. Everyone has a collection of hacks posted somewhere. There are volumes upon volumes written about the language. There are dozens of frameworks, millions of libraries and code snippets waiting for you to exploit them. Whatever problem you are having, there is probably an easily googlable solution for it. If the solution seems complex there is probably a framework out there which reduces it to a single function call. And if you happen to be working with Rhino you can always just call one of the countless Java API methods instead.
You just entered Stage 3. Stage 3 folks can be recognized by the smug smile glued to their face when they code in Javascript. They know that you know that they know something that you don’t. They have this inner glow, and supernatural powers - they can solve a complex issue in 3-4 lines of code. They take this silly toy language and build incredibly awesome, rich client side applications. Stage 1 person may think that Javascript is pretty much only good for sending asynchronous request to the server and making things fade in and out on the screen. Stage 4 people create impressive stuff ranging from Rhino on Rails, to a 14KB Super Mario Clone or DHTML Lemmings.
Personally I think Javascript has a bright future. It’s just that a lot of people are still stuck at Stage 1 and the stigma of toy language keeps them there indefinitely. Stage 2 is transitory and brief, and almost always results in a transition to Stage 3.
Which stage are you? Are you hating Javascript, begrudgingly accepting it or loving it? Have you experienced a similar transition, or were you one of the few people who instantly fell in love with the language? Do you think you will ever transition beyond your current stage?