I’ve set upon the idea of picking up a new skill this year. Over the past couple of years I’ve let my Ruby on Rails skills atrophy as I haven’t been working on any Rails applications professionally, and the Rails world changes too quickly to keep up with if you aren’t immersed in it every day. Instead I’ve been using a lot of Java, PHP, HTML, CSS, and SQL, with a dash of client-side JavaScript when needed. In 2011, it’s time to pick up something new or take a new look at something old. Here are the options I considered.
Ruby on Rails is something I already know, or at least knew, and I’m sure I could pick it back up quickly. However, I still don’t have a good Ruby on Rails project on the horizon, and so it would be just as much a pain to keep as it has been. I wouldn’t mind having a new Rails project to work on, but until one comes along, I’m going to leave it alone. I would consider working on my Ruby skills, but it’s hard to use Ruby for general purpose scripts at work because our servers all run Red Hat Enterprise Linux, which uses some old version of Ruby and is apparently impossible to upgrade. Ruby on Rails, I love you, but it’s a pass for 2011.
I am intrigued by big data projects. I’d love to dig into Hadoop or other tools that can be used to manipulate large data sets, but at the same time, I already work with some fairly big data sets at work and find that I can mine the data out of them that I need with SQL. In other words, while this area intrigues me, I don’t have any interesting problems to solve right now. Without that, it becomes tough to get motivated to really dig in and learn this stuff.
Another option is to learn a new (to me) programming language, like Clojure or Scala. Doing so would be great in terms of mental stimulation, but probably less great in terms of practical application. We’re not going to start using either of them at work this year, so I’d probably spend months learning one of them and then forget nearly everything I’d learned before I ever got to turn back to them for practical reasons.
Android or iOS are other options. Mobile development is huge right now, and I have a lot of ideas for apps I’d like to build. I could probably pick up Android development fairly easily since I already know Java. The only reason not to do it is that I am not a great user interface designer, and the best mobile apps are triumphs of interface design. I certainly have time to become a solid mobile developer, but without someone else’s design to implement, I think I’d just be unsatisfied with the results of my work. I may still try to pick up some mobile development skills, but they’re not going to be my primary focus this year.
The choice I settled on is JavaScript and Node.js. I already know JavaScript, but I wouldn’t consider myself a strong JavaScript programmer. I can generally solve the problems I’m asked to solve in JavaScript, but I find myself using a lot of libraries that there’s no way I could write on my own, and it’s easy to get lost in complex scripts. Not only is Node.js interesting in its own right, but learning about it gives a good chance to learn pure JavaScript as opposed to JavaScript simply as a way to manipulate Web pages. I’ve said before that HTML, CSS, JavaScript, and SQL are the most transferrable skills for Web developers. JavaScript is the weakest of those skills for me, and I need to get better at it. That’s the plan for 2011.
How Steve Jobs brings hope to the world
Andy Crouch, A World Without Jobs:
A thought provoking piece on Steve Jobs and finding hope in a secular world.