Thursday, March 10, 2011

What are the most in-demand programming skills for 2011 and beyond, & why?

Being good at code is always in demand, and it is far more important to be effective at reading code. To practice, you can take a library that does something you understand (say convert a csv into a data-structure) then strip out the comments and trace it. Extra points goes to the one that can do this under some kind of source obfuscation. I've met too many programmers who can't read code at a serious level, and I've met programmers that rely on superfluous comment; however, there is nothing except hope and trust that ensure the comment and the code are in parity.

No matter what, JavaScript is going to be the next C for the web. Everyone is going to know it. Due to its predominance, I wager there is going to be a boom in the programming language market searching for nicer languages to compile to JavaScript. See: http://en.wikipedia.org/wiki/CoffeeScript

I further wager that the whole difference between asynchronous programming and multi-threaded programming is going to be wrapped into a neat present with a nice bow-tie. Working with node.js (or twisted or event machine) will give you a leg up on new design skills as more businesses rely on node.js. Learn Asynchronous design.

NoSQL is just getting started, and I wager there is going to be evolution in who wins the developer market. I wager CouchDB (http://blog.mathgladiator.com/2010/11/how-i-use-couchdb.html), because I'm a betting man. I also wager someone is going to write (I've thought about it) a SQL for NoSQL. Once this is invented, I wager Oracle is going to buy that company or sue it into oblivion. Learn MapReduce.

Java/.NET wll be good for a long time, and it is the new COBOL. There are a couple of problems that may unseat them: Multiple cores with good parallelization, good asynchronous primitives, and stronger type systems (well, for the markets that need that type of stuff anyway). At least know either Java or .NET.

Java/. NET are always going to be ugly to someone, and that someone may invent something better (i.e. Ruby). It's important to jump in some bandwagons, so find something esoteric and learn it as a hobby, It could be big some day. You want to help make it big? Then build a business using it, and you will put your ass in the fire when things go wrong.

UX+Dev+Marketing is going to be key in the coming years, and I would keep abreast with those markets as you either may need it someday or you may want to sell them something.

Databases as we know them today are going to die... over the next ten years, so I would pick a NoSQL platform and start playing with the Idoms now. My picks are: CouchDB, Riak, Redis, and Cassandra.

Now, you could say that all code should be properly documented. Ok, well, tell that to the guy that left and you are a consultant coming in to add a feature. You are now screwed. If you can get effective at reading and understanding code, then you can easily charge $250/hr to fix really simple things in five to ten minutes (do lump sum billing and you are rewarded for being effective rather than get-it-done on a schedule, see http://en.wikipedia.org/wiki/Parkinson's_Law).

These are purely technical skills. You could amp up and start to learn where the industry is going by getting in touch with it. I recommend lurking on http://news.ycombinator.com/news. Once you see where business is kind of going, you can guess where the technology needs to go for businesses to get there. Predict business needs and you can predict technology.

1 comment:

  1. Great article.

    Do you have any advice for neophytes looking to break into the tech industry as developers?

    Should I just focus on learning the technologies you mentioned in the write up? Should I go back and get a CS degree or start with the enterprise stuff like Java/.Net? Would certificates help my cause?

    I don't have a background in programming per say. I worked as an environmentalist and then went on to get an MBA.

    Thanks for considering my question!

    ReplyDelete