It's almost the end of the year, which means that the usual flood of "Top 10", "Year in review" and other backward-looking articles are here. Retrospectives can be a lot of fun and even occaisionally insightful, but in my opinion they are looking in the wrong direction. So, in the spirit of looking forward to a new year, here's my top 10 list. Not things that happened in 2010, but things I want to learn in 2011. Some of these I have already started using but want to master, others are mysterious new toys that have grabbed my attention if not my time.
10. HTML5. The importance of HTML5 cannot be overstated, IMHO. With support for the Canvas object, video, geolocation, etc, etc, HTML5 is already changing the web in surprising and innovative ways. The best part? It's not a new language. All the tags I know and love are still there. There is still a lot to learn, but I don't have to start from scratch. In some ways (like the doctype), HTML5 is even simpler than earlier versions, a refreshing reversal of the usual cruft of complexity that builds up on a language over time.
9. Groovy. Groovy is one of a slew of new(ish) languages that run on the venerable and performant Java Virtual Machine. Groovy borrows heavily from Java's own syntax, flattening out the learning curve for developers that already know Java. So, it runs on the JVM, and it looks a lot like Java. What's the big deal with Groovy? Well, proper closures, for one. A great console, for another. One of the things I LOVE about coding in Python is that if I want to play around with some code I can just start up a Python console and go to work. Java's edit -> compile -> debug cycle seems positively crippling by comparison. Add in the fact that apps written in Groovy can leverage Java's gigantic library of existing components and you have a language that I have to add to my toolbox this year. Oh, and don't forgetGrails. I've built a couple simple apps with it and I think I'm in love.
8. The ins and outs of cross-platform mobile development. Compared to the whole of computing, mobile applications are still in their infancy. Without getting into the growing pains this market is going through (Apple's walled garden, Verizon Android crapware, etc), there is one big challenge as a developer. What platforms do you support? What language(s) do you develop in? Is it worth it to build both Android and iOS apps? Do you even have the resources to do so? Companies like Appcelerator aim to make this easier by creating cross-platform dev tools for popular mobile device platforms. I want to make my apps available to as broad an audience as possible without the headache of maintaining several codebases. This is a space to watch.
7. A NoSQL database. Most of the platforms I work with rely on relational databases. They work. MySQL / Oracle ( the two I work with most frequently) are mature, stable and perform well enough when properly tuned. But, like any tool, RDBMSs aren't the right solution for every problem. They can be expensive to scale quickly, and frankly I don't always need a well defined schema. Sometimes I just need a persistent store for some simple objects. Now that CouchDB is available as a client-side DB for Android, I can see quite a few interesting applications for this technology. If iOS support comes through then we have another choice for cross-platform data stores.
6. Arduino. What the heck is an embedded processor doing on a top 10 list for a web / mobile developer? Well, the Arduino is simply one of the coolest things I have ever seen. It's open source. It's cheap. It's easy to program. It's capable of surprising feats. I have an Arduino Mega sitting on my desk just begging for the right project. I had originally intended to use it as the brains behind an automated bottling line for my homebrew, but decided that kegging was much more practical :-). Right now it is hooked up to a 2 line LCD display and a couple of blinkenlights, just waiting for inspiration to strike.
5. GIMP. This is one of those tools that I already use constantly but wish I had a better handle on. The GIMP is a great image editor for the price (free), and I use it all the time for creating iPhone buttons, logos, splash screens, etc. If you just need to slice and dice some PNGs for the web it is a great option. In the next year I want to hone my design skills and GIMP-fu.
4. Tropo. Tropo is a telephony platform that runs in the cloud. If you want to add SMS or voice functionality to a web application, Tropo takes all the guesswork out. They build the infrastructure and provide the APIs, you build the cool stuff on top of it in your choice of Ruby, Python, JavaScript, PHP or Groovy or your language of choice by calling their REST API. Oh, and did I mention that it is free for developers?
3. Django. This is another one of those tools that I have worked with occasionally but haven't ever really mastered. In particular I want to use Django running on the Google App Engine to build some simple scalable web services. I haven't ever implemented a REST API in Django, but need to learn.
2. Alfresco. I use Alfresco constantly. It's a big part of my day job and I have even written /contributed to a few open-source components that exist in the Alfresco ecosystem. However, it's a huge product. It provides so much functionality that I feel like I only know / use 10% of what it is capable of. Maybe with another year of hard work I can bump that to 20%.
1. Time Management. As evidenced by the list above, I have more ambitions than time. To get all of this done I will need to focus on what is, in my opinion, the single most important tool that any developer or engineer can learn. This is one of those critical life skills that almost everybody has room to improve. If I only get one thing done next year, this should be it.
No comments:
Post a Comment