5 New Year's Resolutions for Programmers

Several years ago, I recommended several New Year's resolutions for programmers. Those resolutions are a great place to start, but it's time to update those resolutions.

The goal of all these resolutions? To keep current, learning about the latest technologies out there, and what you can do with them. Without further ado, here's the list.

1. Get up to speed on C++11

C++11 is the new C++ standard that came out this year, and it's great! The new features in C++11 are very exciting, including, to name just a few, variadic templates and lambda functions. Learn more in my series on C++11.

2. Write an app a cloud computing platform

Cloud computing platforms like Amazon Web Services, Windows Azure, and Google App Engine allow you to write "Internet- scale" websites without having to own your own data center, which grows in importance every year as more users join the Internet and Internet access speeds increase, allowing far more web surfing. Some services, such as Google App Engine, even remove much of the administrative burden, in principle allowing you to write apps that scale effortlessly.

Amazon Web Services appears to be the most flexible of the platforms, while Google App Engine requires the least initial investment and lowest burden of administration. At any rate, take some time to learn your options; this this thread at Stack Overflow makes some great points.

3. Write an app for a mobile device

It doesn't take more than a few minutes in the subway to notice that smartphones are everywhere, and the more I see the iPad, the more I like it. Clearly developing for mobile devices is going to be a huge deal. There are several platforms you could develop for right now although iOS and Android appear to be the most promising. One interesting option for cross- platform C++ development on iPhone and Android is the Airplay SDK. You can develop for the iOS family of apps for free, in C++, on both Windows and Mac. For a small fee, you can also develop for Android and other devices.

If you want to focus exclusively on iPhone, you should start with the developer's site. I've heard good things about these tutorials, but you should read the comments to catch omissions from the original tutorials. I have heard good things about Beginning iPhone Development: Exploring the iPhone SDK by Dave Mark and Jeff Lamarche from Apress. (Thanks to my friend Anna Callahan of Raizlabs for recommending iPhone resources.)

4. Write a Facebook-integrated app

Despite all the brouhaha about Facebook apps violating users' privacy, applications remain a huge part of the Facebook experience and Facebook has, some claim, surprassed even Google in terms of traffic. Facebook apps have been around for a while, and given the explosive growth of Facebook, it seems like a good bet that they will continue to be relevant for a long time. Facebook Connect promises to revolutionize the way that users interact with websites. A good starting point for Facebook development is this list of links.

5. Write a browser Add-on

Many users live in their browsers nowadays, including me. Being able to write a program that serves your exact, personal needs is both very gratifying and potentially useful to others who have a similar need. always found it best to learn to program by deciding to implement a feature that I want. And there are plenty of improvements that can be made to browsers.

One important distinction here is between an add-on or extension and a plugin. A browser plugin is typically a DLL that implements either the NPAPI or ActiveX--e.g. Flash or SilverLight--that allows a webpage to display new kinds of content. An add-on, on the other hand, is typically used to modify the user's browser experience in some way, perahps changing how a user interacts with web pages or the browser itself (such as adding a toolbar), and they typically involve browser specific APIs.

You can learn about developing extensions for Firefox or read about developing extensions for Google Chrome. If you're interested in IE, you can read more about IE browser extensions on MSDN.

One final thought

Many of these areas overlap--nowadays many companies are building applications for a wide range of devices--you might need a web presence, an iPhone app, and a browser plugin to create a complete user experience. A great example of this kind of product is LastPass, a password manager that has a website, several browser add-ons and several applications for different mobile devices. Making even a few of these New Year's resolutions will help you keep you up-to-date on some of the latest, most interesting new technologies.