I've just recently been asked by an old friend via twitter, what are the current technologies to learn to get themselves up to speed. This, is an awesome and hugely difficult question to answer and I tried to answer via twitter, but gave up. So I thought I'd blog about it (all personal opinion of course!)...
First: Developer means programmer not designer
10 years ago, a designer could learn rudimentary programming and get work building websites (and more recently mobile apps). What this meant was that in the minds of people buying skills, the designer and developer were often synonymous.
Not so any more! You have to understand and have elements of design, but to be a top developer, you have to understand programming, and understand it in a number of different languages across a range of disciplines. Without that, your skill set is too narrow.
Second: LAMP stack is pre entry level, not senior programmer
If you think that being a PHP programmer or knowing how to put a website together using the LAMP stack, then to be honest, that's only a starting point. It's the other technologies on top that make it worthwhile. However, this can give you a good grounding in what technologies are good for which situations, so if you don't have a LAMP stack background, then really, you probably are going to be making decisions later on that could be difficult to resolve.
Third: Knowing Ruby on Rails does not make you a good Ruby Programmer
The proliferation of serious web frameworks (you can insert any other framework with it's base programming language in here), that cut down the amount of knowledge required to develop websites is superb for those trying to build websites, but it does not make good programmers.
Those of us that had to build websites in years gone by (you know... over 10 years ago), where we had to develop our own session management frameworks, know how cookies worked, manage the relationship with the database ourselves, and (heaven forbid) write SQL that actually did something valuable and fast, know that these frameworks have massive limitations. They are brilliant for prototyping but to go beyond and develop tools that go further, then you have to start delving into other skills to provide the scalability and the robustness required. This is where LAMP stack knowledge supercedes your abillity to write a rails app.
Having said that, knowing these frameworks is great, to get projects up and running fast, but recognise how and when to use them appropriately.
Fourth: Mobile programming, Cloud, NOSQL and Javascript are now key
For pretty much any project nowadays, one or more of these technologies is used (certainly true for padajo anyway). Interestingly, I am not specifying android or iOS or web-based frameworks like phonegap for mobile, or splitting out what NOSQL means, or specifying which javascript framework is best.
To be honest, this is where the melting pot of tech is at present. There are lots of technologies that have been around for a short time, and some are becoming more utilised and others becoming hyped, but not so useful.
The interesting thing from a developer point of view is that these tools change the way developers have to think about putting together applications. The cloud is the future, of that I have no doubt, but then what combination of the rest of those technologies is required for the development of the application I'm being asked to deliver?
There is a lot of trial and error at present around these technologies. I recently asked at a NOSQL conference, whether the panel of distinguished NOSQL providers and programmers could provide me with an example of when to use each of their technologies. They couldn't give me a straight answer.
We're in the world of programming as pioneering. Some people will go off and find the goldmines, and others will go off and find a barren wilderness.
Sometimes, you just have to "pick a technology" and see what happens.
Fifth: Cloud is key and APIs are their lifeblood
It saves money, saves time, provides instant scalability (if you know what you are doing) and reduces the complexity of servers to the level of a novice (which is not necessarily a good thing).
Understanding how cloud works and how it is to be utilised will make you invaluable. Nobody should ever be building stuff on their own servers nowadays, unless you are in the something like 1-3% of projects that require high amounts of server processing and memory management.
If you don't get cloud now, you'll be left behind.
APIs on top of the cloud will soon become the norm. Understanding what these are and linking technologies (primarily JSON) make this an area of massive interest. APIs are what makes cloud tick.
Sixth: If you want work, don't be just a programmer but a consultant and business brain
It is no longer enough to just be a programmer. You have to have an understanding and instinct of the business around what you are programming. That way, you can add value, and become more like a consultant (possibly a dirty word).
If you want to be the guy who sits in the office coding all day, and "making everything work" then fine. But realise that you will always be the "go to" person and the buck will stop with you.
Breaking out of that will mean understanding the business you are in and adding value outside of just tech.
Technology will never ever ever win. The technology you build is only a building block towards something else. Unless you are lucky to be outside the scope of financial constraints on projects, there will always be a commercial aspect to what you are building. So work out what that is, be aware and add value where you can.
Finally: Don't be too diverse
Being a programmer is getting harder. Too many technologies now to be aware of, and too many programming languages and programmers are out there. Just sticking with a technology will eventually mean you become obsolete.
Learn new tech, keep up with it, don't get left behind.