Lately I’ve been thinking of how much things have changed since I got my start on the web in the late 1990s/early 2000s, and in particular how things have changed for the beginning developer from then to now. Nowadays, the n00b faces a huge and growing array of choices — languages, frameworks, version control systems, hosting and deployment services both on the cloud and off. Starting out is both hard (paralysis of choice) and way more exciting than it used to be.
Image may be NSFW.
Clik here to view.
In 1998, if you wanted to learn how to build things online your choices were limited. For most of us who operated outside the world of Microsoft (which btw was enjoying the peak of its dominance at the time), this meant learning some combination of HTML, perl/PHP/C, and a relational database like mysql — and of course the apache web server. JAVA was also increasingly popular on the web at the time, and if you were learning web development in an enterprise setting, you might well have learned that instead. Everything else was a kind of bonus: JavaScript was too immature to be called essential, and although the CSS standard was defined in the mid 1990s it was at this time still very poorly supported by browsers (I indeed only learned CSS in the early 2000s, thanks to Eric Myer’s classic book.) At that time, JavaScript developers were still regarded as the tricksters of the web — people who could make web pages do funny but rather non-useful things, while the early acolytes of CSS were considered frustrated idealists whose time may or may not ever come.
Flash forward to now. Here’s where I’d start if I were starting over:
1. JavaScript
Perhaps the most profound change from that era to this is has been the explosive growth of JavaScript. This in turn as given rise to the huge tidal-wave of frameworks that have appeared on the scene over the last 8-10 years. For me, the first real sign of JavaScript’s permanence was the emergence of jQuery in 2006/2007, but nowadays it’s frameworks like Google’s angular.js that have further accelerated the pace of change. Ever since jQuery, developers have become used to yanking around the DOM and writing asynchronous apps, but the current crop of frameworks are beginning to absolve the developer of the responsibility, need and even ability to track the state of the underlying permanence layer, and have tilted web development away from the transactional apps of yore and toward the idea of the single-page app. How data gets from the browser to the server, thence to the database and thence back from it and to one or more clients — all of this is largely brokered behind the scenes by the JavaScript framework, and no longer requires the same kind of attention from the developer. This set of issues (application state, client to server communication, how databases were reading and writing etc.) used to be the bread and butter of web development … but increasingly these interactions just sort of “happen” if you use and develop on the frameworks in the right way.
There’s more to say about this of course (I’m way oversimplifying.) And of course there’s also the whole issue of node.js and the as-yet-still exploratory invasion of the server by JavaScript, a territory traditionally reserved for the P-languages — PHP, perl, Python etc … We’re at the point now where you can run the same JS application ob both the client and server … same code. All this is to say that the world has changed in a pretty huge way.
And so, the first thing I’d do (after learning basic markup and CSS skills) is learn JavaScript from the ground up. For many developers of a certain age, like me, a remedial education in the fundamentals of the JavaScript language and its implementation in the browser has been necessary (for which, btw, there are a couple of really good resources.) I believe that for new devs, it’s probably where the action should begin.
2. node, jQuery, Angular.js and perhaps a JS meta-language.
Node is JavaScript’s server-side colony, and it’s thriving. I’d learn it as soon as I could as a new developer, and deploy it in place of a LAMP or similar stack.
On the client, there are a ton of frameworks out there, and far be it from me to elevate one over the other … that said, I think jQuery is an essential tool nowadays, and I’d learn it early in my career if I were starting today. Same goes for Angular or another of the very new frameworks. I’d also get to know at least one JavaScript meta-language like CoffeeScript (ie: something that compiles to JavaScript.) because I think people will become increasingly intolerant of JavaScript’s at-times-annoying syntactic qualities. Here’s hoping that one of these frameworks (perhaps it will be CoffeeScript) will emerge as a kind of standard.
3. HTML5, CSS3 and one of SASS/LESS/Stylus etc.
Not much to say here — there’s no doubt that you still need skills like these to make stuff on the web. In fact, correct, syntactic markup is far more important now than it ever was when I was starting out. As a n00b, I’d want to quickly transition from writing vanilla CSS to a framework like LESS. Clearly some of what CSS3 and HTML5 can do has yet to come fully true in all browsers, but depending on your audience, it’s worth using them anyway.
4. JSON
One must be able to manipulate the persistence layer — to store and retrieve data. That’s why I learned SQL in 1997. Were I starting today, I’d delay learning that arcane art until I really needed it. Instead, I’d want to become familiar with the JSON standard very early — which nowadays stands in for SQL in a whole bunch of contexts, and really can hardly be avoided. Storing and querying data can now often be accomplished through encoding and sending an object in JSON to an endpoint of some kind. This is particularly true in cloud contexts, with platform APIs, and with so-called noSQL databases. My main experience lies with MongoDB, but there are obviously many others. There are certainly other ways to tie the persistence layer to the model (Mongoose for node and mongodb is an example) … but a familiarity with JSON and its associated tools remains an essential tool in many many contexts these days where data retrieval and manipulation is required.
And … that’s it! That’s where I’d start. In fact, there’s no reason that with the skills I list above, one couldn’t build quite a career nowadays. Sure, eventually you’d probably need to add at least one server-side language to this list — one of the P’s or else Ruby (though I think that’s a cult) … and perhaps SQL would still enter the picture before long … But even without these four items, (and with an underlying facility with *nix operating systems and git) a web developer could go seriously far in life.
I can’t help but reflect for a moment about what’s not on this list … basically everything that I learned early on … C++, PHP, perl, apache, SQL, mysql … Making a list like this is useful not only as a thought exercise, but perhaps also as an reminder of exactly how fast things are changing these days.
So … would you learn if you were starting over today?
Image may be NSFW.
Clik here to view.
Clik here to view.
