How Do You Learn To Program On All These Platforms?

I had been planning to write this post for months, but I never got around to filling in the details. However, Louis Gray wrote about the difficulty of learning to program for all of the different platforms. I figured that it was the perfect setup to this post. Louis explains the problem nicely:

While in the early 2000s, we would talk about deploying applications for Macintosh, Windows, or Linux, you now have to also consider writing applications for iPhone, Android, BlackBerry, Windows Mobile, Palm Pre, the iPad, or even if you are coding for Facebook or Twitter. While some code may be reused from platform to platform, development and deployment can be siloed, with different feature sets based on one’s computer choice, or different launch dates. And in competitive markets, you can often see one application gain traction for two platforms and its main competition take the others, in an unofficial divide and conquer strategy.

Surprisingly, he forgets the additional issue of web development, but that is just another platform to develop. The real question is how do you learn to do all of this development?

If you are in the field of software development, then you already know that it is constantly changing. One of the requirements of the job is to learn new technologies and find places where the new technology may help. Where do you find this information? There are several ways to keep your skills up to date:

  • Blogs and news sites: Google Reader is helpful when you are trying to keep tabs on various sources. Technology specific sites are a great way to determine what topics you might want to review.
  • Social aggregation sites: Sites like Slashdot, Digg, and HackerNews contain a lot of information but are not always the best sources for technology updates.
  • Community forums: Sites like StackOverflow and some of the technology specific sites provide a ton of information and in the case of StackOverflow, a great place to ask questions.
  • Search engines: Sometimes, simple searches yield the best results. Search engines will also point you to new sources of information, like a blog that you had not discovered.
  • Professional associations: Professional associations tend to have a poor reputation, but ACM and IEEE are the best place to find new research on advanced technology.
  • Books: Yep, those dead tree things that won’t go away. People seem to stop reading to learn after college.
  • Schools and training classes: Do not expect your employer to give you training, though it does happen sometimes. You can look at local schools to see if they have some training classes or even just take a normal semester-long course. Community colleges may not have advanced topics, but to learn something basic it is a very inexpensive option.
  • Conferences: General purpose conferences like SXSW are not the best places to learn, but other technology specific conferences, like JavaOne, may be a good place to learn about a new technology. Conferences are typically more expensive, so you may need your employer’s support to attend.

Managing the development of your application on various platforms is a different problem that is probably big enough for its own post. However, there are a few things to remember when deciding what platforms to support:

  • Who are your users? If your users are mainstream consumers, then you need to first target the web as your development platform. You really want to focus on what platforms your users will use most often.
  • Where are your users? Are your users all in the US? That could mean you can manage just deploying to Windows without worrying about internationalizing your product. When you are dealing with a truly international user base, the web is a great option.
  • How will they use your product? Foursquare is obviously meant as a mobile application. Facebook can be a web application, a desktop application or a mobile application. This can be a major driver for what secondary platforms you eventually support.
  • What computing resources do you need? If printing is a major feature of your application, you are tied to the desktop. Scientific applications are typically computationally expensive and would not perform well on mobile devices.
  • Is there a cost benefit? This is something that most people tend to ignore because they do not think about the business implications. If you want to have a mobile version of your application, and you do not want to restrict the application to just the iPhone, you need to learn multiple platforms. The question becomes, what is the cost of learning each platform and can you make a profit on each platform? If you can not make a profit by developing for BlackBerry, then there is no need to support it.

These are just a few tips and ideas on how to adapt to the pace of change in software development. I am sure I missed your favorite method of learning, or your favorite tip for supporting different platforms, so feel free to add them in the comments.