I was tutoring someone in web app development recently, and the monumental task in front of him really hit me. He was trying to learn and use nine new languages at the same time.
In our case it was:
Ruby
Rails
MySQL
Bash (command line usage)
HTML
CSS
Javascript
JQuery
Git
(Capistrano, Yaml, nginx, ??)
Even though some of these aren’t true languages in the traditional sense, they appear this way to newcomers since they are each a new syntax to learn.
If you slowly built up these skills over 15 years, they are clearly separate concepts in your mind. But for a newcomer trying to use them, it’s not even clear which one is which.
Is that a Ruby method or a Rails method?
Is “script/server” a shell command or is “ls” part of rails?
Is this file html, js, or css? (actually a mix of all three)
He made a comment along the lines of “wouldn’t it be great if you could build an entire web app in one language”, and I started thinking about it.
GWT (Google Website Toolkit), ActiveRecord, CoffeeScript, and Heroku are all steps in this direction. You could classify them generally as trying to “eliminate a language in the stack” or allowing you to do a piece of the stack in a language you already know.
Obviously there is a trade off here between power and simplicity, but I’m wondering – would it be possible or desirable to get an entire web app down to just one language? If not that how few could you use?
Btw, I think there are benefits to seasoned developers here as well. I remember Lars Rasmussen (creator of Google Maps and Wave) mentioned something to this effect at Google IO in 2009, that GWT allowed him to spend his mental CPU cycles at a higher level and be more creative (not having to worry about cross browser css or js). So the benefits of higher abstraction may not only be for newcomers.