It’s almost the end of the year 2009. This year is special because I’ve never dealt with so many languages in a year. Objective C, Python, Java, C++, PHP, JavaScript, Haskell, Prolog, Ruby, C#, and probably more. Some of them were for work, some for school, and others were for my personal projects. I have plenty of stories for each language, but I’ll try to keep them brief.

### Objective C

CQube iPhone edition was released back in March, and as you know Objective C is the language you use for iPhone application development. Objective C is a strict superset of C, so it didn’t take too much effort to learn. Rather, I spent most of time to learn the Cocoa framework. All those magic keywords like @property, @synthesize, and @dynamic were nice to have.

### Python

I love Python. I used Python for many different things; from disposable command line utilities to implementation of Apple Push Notification service. I also used this language to conduct a classified operation. After I learned Haskell, which is what I’m going to talk about in a minute, I started enjoying use of higher order functions such as map, reduce, filter, and so on.

### Java

I also use Java a lot. I built a Java mobile application at my work. I also built a nearest neighbor search engine, an HTTP based real time communication framework, and a Luca compiler. There are probably more, but these are the ones I remember. There are few things that I really wish to have in Java: automatic getter/setter, operator overriding, and delegate. Could someone give me these as a Christmas gift? ;-)

### C++

To be honest with you, I’m kind of scared of this magic language. I would say it’s quite difficult and takes a considerable amount of practice to use this language properly and effectively. Well, in my compiler class, I had to use either C or C++ to implement a Luca interpreter with indirect threading.

### PHP

I’m not a big fan of this language. Ironically, this is probably one of the top three languages that I spent most time with so far. I had a web application development job over the summer. It was a lot of PHP programming. I also had to build server side components at my current work. I wanted to use Python, but apparently not many people know Python. So, I had stick with whatever language that most people can deal with.

### JavaScript

You would imagine using JavaScript to manipulate the DOM structure of a web page. But, this is not the only case. I used this language to build a Firefox extension (thanks to Justin Samuel’s Firefox extension development tutorial). I can’t tell you what it is though because it’s a part of a classified operation.

Haskell changed a lot of things in my point of view of programming. All the functional programming features and its imperativeness really blew my mind. Basically it made me a better developer in general. Even though I have no intention to use Haskell in production environment, I will be using things I learned from this language.

### Prolog

Cody Jorgensen:

Why can’t I get an element from the god damn list?

### Ruby

It was very joyful to learn Ruby as I already know how to use Python. Ruby is very similar to Python in many different aspects as C# is similar to Java. I see blocks and the yield keyword as a giant lambda function, and I kind of like it. One thing I like from this language over Python is that there’s end keyword so that you don’t have to be super careful about indentation. Because of this, there’s no need to make a new template language in web application framework such as Ruby on Rails, whereas it is necessary in Python based frameworks such as Django. Oh, it’s also very nice to have built-in regular expression features.

### C#

We decided to switch from Nokia’s Symbian to Microsoft Windows Mobile platform at my work. I was hoping the Java code I’ve been writing works just fine on the Windows Mobile, but few things didn’t really work out well. So, I decided to re-write the whole application in C#, and I did it over the last weekend. I wouldn’t be able to make all these happen without Visual Studio’s great help. Not to mention I didn’t have to re-write all the server side components.