Windows 8

10 skills for developers to focus on in 2012

Quick: Throw out last year's list of must-learn dev skills -- it's already obsolete. This new list will help you rethink your skill set to avoid falling behind.

Software development had a few years of relative calm. But now the rollercoaster is back on track and it's picking up speed, as HTML5 gains a foothold and Windows 8 threatens to significantly change the Windows development landscape. If you want to stay ahead of the curve, you should consider learning at least a few of these 10 software development skills.

1: Mobile development

If you don't think it is worth your time to learn mobile development, think again. Global shipments of Android phones in 2011 are almost equal to PC sales. Add in the other big-name mobile devices (iPhones, iPads, and even the "dying" RIM devices), and what you see is that mobile devices now dwarf PCs in sales. What does this mean? If you make your living from software that can run only on a PC (which includes Web sites that don't work or are hard to use on mobile devices), now is the time to learn mobile development.

2: NoSQL

I appreciate a well-designed relational database schema as much as the next person, but they just are not appropriate for every project. We've been using them even when they aren't the best tool because the alternatives haven't been great. The last few years have seen the introduction of a wide variety of NoSQL database systems. And now that major service vendors (like Amazon and Microsoft) support NoSQL as well, there is no technical limitation on their use. Are they right for every project? No. Are they going to replace traditional databases? In some projects, and for some developers, definitely. This is the year to learn how to use them, as they will only become more prevalent in the year to follow.

3: Unit testing

We've seen unit testing go from being, "Oh, that's neat" to being a best practice in the industry. And with the increasing use of dynamic languages, unit testing is becoming more and more important. A wide variety of tools and frameworks are available for unit testing. If you do not know how to do it, now is the time to learn. This is the year where it goes from "resume enhancement" to "resume requirement."

4: Python or Ruby

Not every project is a good fit for a dynamic language, but a lot of projects are better done in them. PHP has been a winner in the industry for some time, but Python and Ruby are now being taken seriously as well. Strong arguments can be made for Ruby + Rails (or Ruby + Sinatra) or Python + Django as excellent platforms for Web development, and Python has long been a favorite for "utility" work. Learning Python or Ruby in addition to your existing skillset gives you a useful alternative and a better way to get certain projects done.

5: HTML5

HTML5 is quickly pulling away from the station. The impending release of IE 10 is the last piece of the puzzle to make the full power of HTML5 available to most users (those not stuck with IE 6 or IE 8). Learning HTML5 now positions you to be on the forefront of the next generation of applications. Oh, and most mobile devices already have excellent support for it, so it is a great way to get into mobile development too. And don't forget: HTML5 is also one route for UI definitions in Windows 8!

6: Windows 8

Windows 8 should be released sometime in 2012, unless the schedule slips badly. While Windows 8 may very well get off to a slow start, being the top dog in an app store is often based on being the first dog in the race. The first mover advantage is huge. It is better to be in the Windows 8 app store at launch time than to take a wait-and-see approach. Even if Windows 8 sales disappoint, it's better to be the only fish in a small pond than a fish of any size in a big pond, as recent app sales numbers have shown.

7: RESTful Web services

While I personally prefer the convenience and ease of working with SOAP in the confines of Visual Studio, REST is booming. Even Microsoft is starting to embrace it with OData. JSON really was the final straw on this matter, relegating SOAP to be for server-to-server work only. Unless your applications can run in isolation, not knowing REST is going to hold you back, as of 2012.

8: JavaScript

Before the Windows 8 Developer Preview, it was easy for non-Web developers to look at JavaScript as a Web-only language. No more! JavaScript is now a first-class citizen for native desktop and tablet development, thanks to the Metro UI and WinRT API in Windows 8. XAML + C# or VB.NET may be a good way for you to get things done, but if you want to maximize what you can get out of your knowledge, HTML5 and JavaScript are the best bet. They give you Web and Metro/WinRT, and you can also use them for some of the cross-platform mobile systems out there, like Appcelerator's Titanium product.

9: jQuery

If you are going to do any kind of Web development where you are working directly with HTML, jQuery is becoming a must-know skill. While there are plenty of credible alternatives, jQuery is quickly turning into the de facto tool for rich UIs with HTML.

10: User experience

Other than getting that first mover advantage in new app stores, there is little to differentiate many applications on a feature basis; it's a crowded field. User experience, on the other hand, is a different story. Creating a great user experience is not easy; it starts before anyone even downloads your application and continues through to the uninstall process. In the age of instant $0.99 and free app downloads, and ad-supported Web apps, the barriers to switching to another application are mighty low. If your user experience is poor, do not expect much business.

More developer resources

About

Justin James is the Lead Architect for Conigent.

17 comments
WashingHands
WashingHands

* I think that NoSQL is a little overhyped. Most experienced developers I know are not that excited about it because they see the disadvantages and are less prone to immediately hopping onto any bandwagon they see. That being said, it can be beneficial in certain contexts. * I think that mobile is the big trend of the future. Its now within the realm of possibility to do a lot of serious work on a tablet or even a phone. A few more years from now, I would not be surprised to see these tablets completely overtaking traditional PC use. * Look back to one of the oldest languages making a comeback. I don't know if its this year or down the road, but whether its Clojure or Arc or something else, Lisp is eventually going to make a serious comeback just because it has expressive power that is unmatchable by any language. * JavaScript, as the language of the web, is here to stay for a while. And while jQuery is ridiculously dominant right now, I see the potential for another library to hit the sweet spot with not only managing DOM manipulation but also focus on structuring larger projects with maintainable code. jQuery doesn't do the latter and there are some great libraries that do the former and latter. So despite its current dominance, it feels a little like PHP in that most people use it, but eventually some new stuff might overtake it.

ctskilld
ctskilld

With declining market value and failure to stay current. A real 2012 strategy is to win the RIM target market. The reluctance to jump off the dying dinosaur is our conditioning nature. The idea is to change the thinking and create/steer them in a direction that Will put them back in the race, on top again or back on track. Those millions of potential clients won a race (talk about dinosaurs...remember the palm pilot) and were on top. So, if were a betting man... and my guess is they want to win another race

william.byrd
william.byrd

This is not the year that unit testing moves from nice to have to must have on the resume. That was back when they invented the first programmable computer. Any developer worth a damn is assumed to be familiar with unit testing (complete integrated systems testing might be a different story) If you have been in this business any length of time, and you are just getting around to learning how to unit test, I really do feel sorry for all of your former employers and I am glad I have never had to follow up and maintain or enhance any of your code.

Dhilipkumar88
Dhilipkumar88

I joined last weak. I am working in PHP , Joomla and Druple. I will be my future. Is it have any scope. How can i survive in IT. how to learn these language. Pls Help me

Professor8
Professor8

Unit testing is a sad sham compared to what it used to be, much more primitive than in the days of serial communications to the display. I mean, come on!, the ratio of LOC to errors has been fairly constant for a long time. We make as many errors in our unit tests, especially now that it's just more of the same kind of code, and in the actual production software, twice the code generates twice the bugs, which means it drives down net productivity. "The cloud" and SAAS are just recycling of old ways... at lower quality and with far more/worse negatives added. JavaScript is just plain evil. Want to break a web site? Re-implement it to rely on JavaScript. Python's kind of OK.

cenots
cenots

I've been on the sys admin and helpdesk side of I.T. for a long time, but I have been a part of our Web team as well, mostly doing HTML / CSS / JavaScript stuff. My question is, if I wanted to make the leap and learn more (AJAX, HTML5, CSS3) where do I go? Where do you all go? Do you just buy books and read? Does your company send you off to learn (like Learning Tree or something?) do you go to school? Just curious where do most serious developers go when they want to pick up a new skillset...

apotheon
apotheon

I'm actually on track to know probably eight or nine of those by something like mid-2013 (and I already know about half of them at least a little -- or to a level of professional competence in some cases). Win8 development is the only hole -- and, depending on what kind of software I end up writing in the next 18 months, it's possible I might even have to learn a little bit of that just for portability purposes. Chances are good, though, that my only connection to Win8 development will be writing platform-neutral libraries that other people with Win8 dev skills can use. As a friend once complained to me, "The only thing worse than X Window System programming is Windows programming," and I don't foresee that changing any time soon. What I've seen and read of Metro is that it's a bit like one of those increasingly popular IDE/Framework/multilanguage development toolsets that looks and feels like a toy plastic hammer that people are expected touse to build houses -- and the development model aims at houses as difficult to build as a good, sturdy earthquake-proof structure, but ends up with all the charm and convenience of those plastic houses people buy and put in the backyard for the kids.

karan1070
karan1070

Hi TsarNikky That;s right now most of the developers are focusing on TAB and Ipad rather then laptops. The main compilation is in building the new and advance features for TAB.

TsarNikky
TsarNikky

So many developers and OS manufacturers (read Microsoft) have become obsessed with tablets as being the "ultimate new thing." Be careful! Latops and desktops will be around for a very long time. Tablets may be fine for "touch and tap" applications; but certainly can't and never will be able to replace a full-size keyboard for serious data entry.

apotheon
apotheon

quote: Its now within the realm of possibility to do a lot of serious work on a tablet or even a phone. A few more years from now, I would not be surprised to see these tablets completely overtaking traditional PC use. How does this keep coming up? A major revolution in UI design for mobile devices -- including something better than touchscreens for the actual physical UI -- will be necessary for us to see "tablets completely overtaking traditional PC use." The current mobile UI paradigm is quite simply inferior in a major way to more traditional UIs for critical tasks like composing business documents, dealing with numbers, and . . . well, basically every task that makes up the core of an office worker's job. Until we can match the efficiency, flexibility, and power of the keyboard-and-mouse input interfaces, we're stuck with "traditional PC use." Even the absurd notion that docking stations will somehow replace the "traditional PC" won't help, because the major benefit of mobile computing is that you do not have hardware tied to specific locales -- and docking stations just give you a way to feel just as constrained when you want to get real work done, but the tablets you'd use with those docking stations provide the added bonus of greatly reduced computing power. A much more likely scenario is either of: 1. seamless syncing of certain subsets of working data between a tablet and a workstation system or two at endpoints where real work gets done 2. laptops that double as tablets without being particularly more bulky than current tablets

apotheon
apotheon

Yes, any developer worth the title should have unit testing in his skillset. In fact, it should be such an assumed skill by now that it should not have to be on the resume. It's only recently becoming a must-have, though, for the purpose of getting a job -- because we're probably lucky if even half the professional developers out there have ever done it, and hiring managers are even less informed about the importance of unit testing (and, in particular, test-driven development).

apotheon
apotheon

The benefits of unit testing are many and significant. What are you smoking? One of the benefits of test-driven development is that it gives you some regression testing for free. Another is that it serves as a way to double-check what a given block of code is supposed to do, thus helping get up to speed when you're new to a project or have forgotten what you were doing with some old code. Another is that it forces you to think about your implementation somewhat without forcing you into a waterfall BDUF approach to software development. Another is that it catches whole new bugs you weren't even aware might arise while you're developing code. Another is that it encourages good software design because there's such a broad overlap between good software design and designs that work well with unit tests. Another is . . . I could go on for hours. I can only assume you've never really given it a serious try. Maybe you prefer waterfall BDUF, or just hacking away until you have a snarl of hair for a codebase. "Cloud" and SAAS are important use-cases. They aren't things that should be used everywhere, or even in most cases (yet; "cloud" systems have some potential for nearly universal application, though a lot of how it's done has to be rethought first), but there are definitely cases where they're the best options for the task at hand. If you don't work within such circumstances, fine, but that doesn't mean nobody else does. There are huge problems with JavaScript, not least of which being the fact it has one of the most brain-dead type systems known to man. Many of the problems can be worked around, though, such as graceful degradation for clients without JavaScript support and some significant care taken when dealing with numeric types. We shouldn't have to work around them, but it can be done -- and sometimes it needs to be done, because JavaScript is pretty much the only widespread means of getting "real" client-side scripting with web technologies. I agree about Python. It's not even all that important to learn it. I'd recommend Ruby first, and a couple of other languages, unless you have a specific need for Python. Even for professional reasons, knowing Python isn't a big deal: most shops that require you to use Python also assume you can learn it on the job, as long as you also know other programming languages and generally suit the requirements of working there in other ways.

apotheon
apotheon

Honestly, "we" (that is, serious code geeks) tend to go to the web for this stuff -- generally by way of Google. That's especially the case for web technologies (as opposed to pure programming stuff, like learning Ruby and/or Python or picking up some test-driven development skills, where there are a lot of excellent books worth reading). In particular, you might want to take a look at sites like http://w3schools.com to get started, find some community resources (mailing lists, et cetera) to use for when you have questions, and find your way from there based on your own specific needs.

Justin James
Justin James

Yes, the desktop computing paradigm will be with us for quite some time, but there's really no skills for that development work that anyone doing the work already needs to learn going forwards. Even with the upcoming Windows 8 release, there is literally nothing new for "legacy" Windows desktop developers. J.Ja

Justin James
Justin James

That really covers it. This question comes up a LOT, and really, there's no mystery to it. I would NOT pay for "training", the amount of time it takes to learn a basic level of competency would cost a small fortune. J.Ja

apotheon
apotheon

11. Productivity UI Development for Laptops and Desktops Honestly, almost all UI work over the last decade or so has been heading down a screamingly steep downhill luge ride as far as productivity-enhancing design is concerned. In short, the more "modern" the UI, the less you can get done with it, the more confusing it gets for any but the simplest and most pointless uses, and the less efficient it is even for the things you can do once you get used to it enough to actually figure out how to accomplish something. Oh, yeah . . . and beyond the UI (though I think UI decisions end up dictating a lot of this), applications get more and more prone to favoring gimmicky, useless (or even harmful) "features" over flexible core functionality. Example: Scriptable? Yeah! You can script button-clicks! No way do you get a comprehensive API or command line interface, though. (Wait . . . really? This stuff is so stupid I couldn't make it up. I've seen that approach to application scripting built into some applications.)

apotheon
apotheon

Paying for "training" with something like HTML, CSS, and basic markup-embedded JavaScript is a waste of money. It's like going to class to learn stuff like mail merge in MS Word -- a skill one could pick up in an hour (at most) of experimentation.

Editor's Picks