Inspired by Samuel Tardieu's post, I want to do a year in review of all the languages I have used this year. A lot of times we prima donna programmers complain about anything and everything. I really enjoyed the positive outlook of Samuel's post and want to take note of my experiences with similar attitude.
Bread & Butter
- Python - My language of choice for the year. Whether prototyping, experimenting, developing a Facebook application, maintaining a test framework I wrote for my workplace, or implementing cryptographic algorithms for a security course, Python continued to serve me well. Between a copy of "Python Essential Reference" and PyPI, I feel there are very few problems beyond my means thanks to the power of this beautiful language and its surrounding community.
- Java - As a student, I pounded out many a line of Java throughout the wee hours of the morning in my capstone classes. Java seems to be the New Age language of academia and I can speak it universally to my classmates and professors as a lingua franca. I've noticed that my Java programs tend to structure themselves well without much effort thanks to the strong object influence forced by Java and expansive standard library and Collections classes. Also used at two collegiate programming competitions which is an entirely different experience than normal software development where the large standard library again came in handy.
- C - I launched a good sized networking project in C as my first big project in the language and contributed a number of portability fixes to the libevent project. Fast to compile, fast at runtime, and full low level control, C is a great language for Unix Systems Programming. I greatly expanded my knowledge of the POSIX interfaces this year and really enjoy programming at this level. I've noticed that some principles from other higher order languages have rubbed off on my C style; namely, data hiding and well formed/adaptable interfaces (see the post right before this one).
- C++ - Been putting this one off because of all the FUD and intimidation at the sheer size of it. C++ is pretty much the Latin of our field and is used in everything from safety-critical Jet aircraft systems, to GUIs, to games, to JITs, to cutting edge research. As some of the pundits say, C++ is the language for "Demanding Applications". If you consider Java as the Flight Engineer of a large aircraft, C++ is definitely in the Pilot seat. You have full control and high visibility of what is going on, but if you aren't careful you can crash and burn. I've probably progressed to the advanced beginner stage where I can use it as a better C but haven't endured the trials and tribulations of an expert in the art of C++, nor read important references like Scott Meyers' "Effective C++" series. I really like the power and efficiency of the STL and plan on knowing enough C++ to use it when called upon.
Breaking New Ground
- VHDL - After a required Electrical Engineering course, I was exposed to the entirely different paradigm of programmable hardware (FPGAs). This was an eye opening experience. Fundamentally, digital design is concurrent. There may be valuable lessons here for both academic and professional Computer Science and I need to explore more here. In 2011, I'd like to buy my own FPGA development board and work through the design of a simple CPU to gain further appreciation of hardware and VHDL or Verilog.
- PHP - The first language I seriously learned and used some 12 years ago (I dabbled in Perl before that at the ripe age of 8, and probably Lego Logo a year before that :-P ). I've been keeping an eye on it and it seems some of the Framework movement that stole a lot of developers away to other languages has sprouted mature analogues in PHP land. No longer just C for the web, PHP 5.3 continues the lineage of the 5-series as a serious object-oriented language for web development that is basically universally available and dead simple to scale. The extent of my PHP coding in 2010 was limited to maintaining some programs I'd written in years past (aside from merely installing/using PHP products like this blog).
On to 2011
- D - D2 has me really excited. For some intents and purposes, it seems like an evolution of C++ with a healthy removal of backward compatibility. Embracing fast compile times, integrating concurrency and message passing, allowing easy interfacing to C libraries, and more mean this is a language capable of "Demanding Applications". Perhaps most intriguing is the use of the language proper for metaprogramming and compile-time programs. I have Andrei Alexandrescu's book on my shelf and have thumbed through it a few times. The fact that he is involved speak volumes of D's potential and his book looks superbly written. 2011 means working my way through the book and working on at least one sizable project in D.
- Erlang - Erlang has been on my radar for a couple years now. The fact that the OTP has roots in the demanding and critical realm of telecom means this is a serious language and seems to deliver interesting take on concurrency. Erlang has already proven itself effective for XMPP servers and Message Queues. This may yet be one of the best languages around for scalable networking applications and I'd like to get some hands on experience with it in 2011.
- Haskell - I don't know much about Haskell other than playing around with TryHaskell. What I do know is that Haskell has a fairly mature Software Transactional Memory and that alone interests me. I've also heard the optimizing compiler is pretty good. Through investigation is due in the second half of the year.