Monday, 4 June 2012

Reasons to be Cheerful
(why now is a good time to be a dev)

I've been a working as a developer in some way, shape or form for just over 10 years now. And it occurred to me the other day that I can't think of a better time to be a software developer than right now. This year was better than last year. Last year was better than the year before. This is a happily recurring theme.

So why? Well I guess there are a whole host of reasons; this is my effort to identify just some of them...

Google and the World Wide Web (other search providers are available)

When I first started out as a humble Delphi developer back in 1999 learning was not the straightforward proposition it is today. If you want to know how to do something these days a good place to start is firing up your browser and putting your question into Google. If I was to ask the question "how do I use AJAX" of a search engine 10 years ago and now I would see very different things.

On the left the past, on the right the present. Do try not to let the presence of W3Schools in the search results detract... And also best ignore that the term AJAX wasn't coined until 2006...

What I'm getting at is that finding out information these days is can be done really quickly. Excellent search engines are now the norm. Back when I started out this was not the case and you were essentially reliant on what had been written down in books and the kindliness of more experienced developers. Google (and others like them) have done us a great service. They've made it easier to learn.

Blogs / Screencasts / Training websites

Something else that has made it easier to learn is the rise and rise of blogs, screencasts and training websites. Over the last 5 years the internet has been filling up with people writing blogs talking about tools, techniques and approaches they are using. When you're searching for advice on how to do something you can pretty much guarantee these days that some good soul will have written about it already. The most generous devs out there have gone a step further producing screencasts demonstrating them coding and sharing it with the world *for free*. See an example from the ever awesome Rebecca Murphey below:

Similarly, there are now a number of commercially available screencasts which make it really easy to ramp up and learn. There's TekPub, there's Pluralsight (who have massively improved my commute with their mobile app by the way). All of these help tug away the curtain away from the software development Wizard of Oz. All this is a very wonderful thing indeed!


If you're a Boogie Down Productions fan then you may be aware of the concept of Edutainment. That is to say, the bridge that can exist between entertainment and education. This is what I've found podcasts to be. I listen to a lot. Hanselminutes. Herding Code. JavaScript Jabber. The JavaScript Show. Yet Another Podcast. There's more.

There's something wonderful about about listening to other developers who are passionate about what they are doing. Interested in their work. Enthusiastic about their projects. It's infectious. It makes you want to grab a keyboard and start trying things out. I can't imagine I'm the only dev that feels this way.

And of course I couldn't fail to mention my favourite podcast: This Developer's Life. Put together by Scott Hanselman and Rob Conery (I love these guys by the way), and inspired by This American Life, this show tells some of the stories experienced by developers. It gives an insight into what it's like to be a developer. This podcast is more entertaining than educational but it's absolutely *fantastic*.

JavaScript (and HTML and CSS too)

All of the above have eased the learning path of developers and made it easier to keep in touch with the latest and greatest happenings in the dev world. Along with this there has, in my opinion, also been something of a unifying of purpose in the developer community of late. I attribute this to JavaScript, HTML and CSS.

Back when I started out it seemed much more the case that developers were split into different tribes. There was the Delphi tribe, the Visual Basic tribe, the C++ tribe, the Java tribe (very much the "hip young gunslingers" tribe back then - I guess these days it'd be the Node.JS guys) as well as many others. And each tribe more or less seemed to keep themselves to themselves. This wasn't malicious that I could tell; that just seemed to be the way it was.

But shortly after I started out the idea of the web application took off in a major way. I was involved in this coming from the position of being an early adopter of ASP.NET (which I used, and loved, since it was first in beta). Many other web application technologies were available; JSP, PHP, Perl and the like. But what they all had in common was this: they all pumped out HTML and CSS to the user. Suddenly all these developers from subtly different backgrounds were all targeting the same technology for their GUI.

This unifying effect has been *massively* reinforced by JavaScript. Whereas HTML is a markup language, JavaScript is a programming language. And more by accident than grand design JavaScript has kind of become the VM of the web. Given the rise and rise of the rich web client (driven onwards and upwards by the popularity of AJAX, Backbone.JS etc) this has meant that devs of all creeds and colours have been forced to pitch a tent on the same patch of dirt. Pretty much all of the tribes now have an embassy in JavaScript land.

So there are all these devs out there who are used to working with different server-side technologies from each other. But when it comes to the client, we are all sharing the common language of JavaScript. To a certain extent we're all creating data services that just pump out JSON to the client. Through forums like StackOverflow devs of all the tribes are helping each other with web client "stuff". They're all interacting in ways that they probably wouldn't otherwise if the web client environment was as diverse as the server-side environment...

The Browser Wars Begin Again

Didn't things seem a little dull around 2003/2004? IE 6 had come out 3 years previously and had vanquished all comers. Microsoft was really the only game in town browser-wise. Things had stopped changing; it seemed like browsers were "done". You know, good enough and there was no need to take things any further.

Then came Firefox. This lone browser appeared as an alternative to might of IE. I must admit the thing that first attracted me to Firefox was the fact it had tabs. I mean technically I knew Firefox was more secure than IE but honestly it was the tabs that attracted me in the first place. (This may offer some insight as to why so many people still smoke...)

And somehow Firefox managed to jolt Microsoft out of it's inertia on the web. Microsoft started caring about IE again. (Not enough until quite recently in my book but you've got to start somewhere.) I'm a firm believer that change for it's own sake can often be a good thing. Change makes you think about why you do what you do and wonder if there might be better approaches that could be used instead. And these changes kind of feed into...

...HTML 5!

That's right HTML 5 which is all about change. It's taking HTML as we know and love it and bolting on new stuff. New elements (canvas), new styling (CSS 3), new JavaScript APIs, faster JavaScript engines, support for JavaScript 5. The list goes on...

And all this new stuff is exciting, whizzy, fun to play with. That which wasn't possible yesterday is possible now. Playing with new toys is half the fun of being a dev. There's a lot of new toys about right now.

The Feeling of Possibilites

This is what it comes down to I think. It's so easy to learn these days and there's so much to learn about.

Right now lots of things are happening above and beyond what I've mentioned above. Open source has come of age and gone mainstream. Github is with us. Google are making contentious forays into new languages with Dart and Native Client. Microsoft aren't remotely evil empire-like these days; they've made .NET like a Swiss army knife. You can even run Node.js on IIS these days! Signal-R, Websockets, Coffeescript, JS.Next, Backbone.JS, Entity Framework, LINQ, the mobile web, ASP.NET MVC, Razor, Knockout.JS, the cloud, Windows Azure...

So much is happening right now. People are making things. It's a very interesting time to be a dev. There are many reasons to be cheerful.