I continued my year of growth in January and February, learning to program in yet another new language, and taking some MOOCs to try and explore areas I've never really explored before.
My partner challenged me to take a course on Artificial Intelligence, offered as a MOOC on EdX. I started a couple of weeks ago, and so far so good. It's been interesting and challenging to learn about a side of programming that I've never really considered before. In its first weeks, the course focuses on searching algorithms – trying to build code that works out a logical and efficient path from a start state to a goal state. In a sense, this is something that we all do as developers - we attempt to find a way to solve a particular problem and build an algorithm to do so. However, the algorithms I've used in the past have been wildly simplistic; a set of if/then or case statements that examine a set of known potential options. In this course, the options aren't necessarily known to the program examining them until they're encountered, which is something you can't really code against using the techniques I've been using over the past 15 years.
One aspect of this course that was daunting was that it required a working knowledge of Python. I've never coded in Python before, so I had to undergo a crash course in the language, its syntax, and its various quirks. It was an interesting experience, because there are some things in Python that are really alien to me (and a few things that are familiar, having now worked with Swift). Perhaps the oddest thing is Python's use of whitespace. I've always made effective use of whitespace in my code as an organizational tool; it's simply easier to read through pages of code and keep track of the logic if I'm indenting responsibly. In Python, however, whitespace is part of the syntax, and required for defining conditionals and loops. Python doesn't make use of curly brackets for this - you know you've exited the loop when you outdent again.
I'll be taking the AI course for the next few weeks, and I expect to be thoroughly challenged as I dive into the deep end of Python.
When this course is over, I'm going to be moving towards learning C#/.NET. I've stayed away from Microsoft's web platform, aside from a brief foray into ASP in 2003, since the technologies I've been working with professionally have all been LAMP-based. But it seems to me that there is a significant number of companies working with C#/.NET, and it'd be a good idea for me to add that into my professional repetoire. It'll also serve my clients well at my current position, since I can increase the type and amount of software I can support and advise on. To that end, I have a nice new Windows box on order (the first to enter our house in nearly 5 years) that'll serve as a Windows development box. I'll be looking for a worthy companion to Panic's Coda on Windows; if you have any suggestions drop me a line, @staticred on Twitter.
Image credit: Michael Cordedda (Flickr)