In my post looking forward to 2008, I mentioned that I wanted to take more time this year to learn new technologies, particularly outside of the Microsoft communities. With all of the push in .NET towards dynamic languages right now, why not look to some of the dynamic languages that have been out there being used for years?
I know what you’re thinking - looks like David here decided to learn Ruby. I mean, that’s what everyone is using, right? Ruby and Ruby on Rails? Nahhh, I’m actually learning Python! Probably the key factor for me was the Python Challenge. I follow MoW’s Powershell blog and he’s started up a series on working through the Python Challenge using Powershell. I had heard about the challenge before, but hadn’t really looked into it much, but this was enough to prompt me to get over there and try it out. (I am planning on still learning Ruby, though - I’ll just go through the challenges with Ruby later)
I resisted the urge to try to find an IDE for Python and just code it up in a text editor. It has forced me to get more familiar with the syntax as a result. The Python site has a great tutorial for starters as well as some good documentation on the available modules. The hardest part for me is to not write the code like I write C# or VB. For one of the challenges, you have to take a given string, a given mapping, and then translate the string to get the instructions to move to the next challenge. I wrote a basic loop over the characters in the string, converted them to their ordinal values, performed the translation, and then converted them back to characters. It worked, but it wasn’t the best way to do it in Python. Python provides this great function called string.maketrans. Also, the map function is amazing. It is sort of like the List<T>.ForEach method except that it reads a lot better (though lambda expressions in C# make it a little better). I’m starting to understand the power behind the whole map/reduce idea that Google is so big on. List comprehensions are really cool, too.
Anyway, so far, I’m to the 5th challenge (with some help from Google, the Python tutorials, and the challenge forums at times) and it is pretty cool. One of the most enlightening things about going through the challenge is that, as you complete one, you can go look at submitted solutions on the wiki. It is a great way to evaluate if you solved the challenge the “right” way or not. It is a great learning experience. One way I’m trying to apply this knowledge is that I’m running the challenges in both CPython (Python that runs on C, the standard I think) and IronPython.
Another thing I’ve done to try to see how other development communities work is that I’ve installed Ubuntu 8.04 (the alpha) on my laptop. I’m now dual booting Vista x64 and Ubuntu and it is pretty nice. I have two favorite things about Ubuntu so far - the ridiculous customization that you can do with it (compiz is amazing) and the package manager. Seriously, the fact that you don’t have to pull up a browser to download apps and install them is a massive plus over Windows. In fact, you can just run a simple apt-get command if you want. Don’t worry, though, I’m not planning on switching from Vista anytime, soon. Ubuntu is great and I’ll be keeping it on the laptop, but I still like Vista, too. Right, right, blasphemy, I know. They’re both great operating systems as far as I’m concerned. One takes an entire DVD and seems like a resource hog (not as bad anymore) and the other fits on a CD and requires editing conf files, downloading “restricted” drivers, and sitting at the command line to get video and wireless working :-) Seriously, neither are perfect. It has been nice seeing both sides of the fence, though.