Programming Languages
Since January of 2006 I have been working with Ruby and Ruby on Rails. In mid 2008 I started working on a large distributed system and began using Erlang extensively. By now many people have heard of Ruby and Rails, but Erlang is still relatively unknown. Which is a shame because Erlang is a great language and it allowed my team to build a complicated distributed system without many of the headaches that such systems usually entail. I love working with both Ruby and Erlang and I have found that they complement each other nicely. I find myself thinking in a functional mindset these days. This isn’t a direct consequence of learning Erlang, I was interested in functional programming prior to that, but working with Erlang full time has given me an opportunity to really dig into the functional paradigm. I want to learn Haskell, but the Haskell syntax looks like line noise to me. I have also considered studying ML which features algebraic typing but looks a little less weird.
Before all of that I worked with Java extensively and became a Sun Certified Java Professional in 2004. I think the Java community is great and there are some excellent Java tools out there, but I find the language itself to be lacking. Many of the “patterns” that float around the Java community are workarounds to mimic features that are missing from the language. I was constantly fighting against Java’s shortcomings and that is what led me to Ruby, and later to Erlang.
In the early years of my career I wrote mostly C++, transitioning to .NET when it became available and I had the opportunity. I still write C code from time to time, mostly when writing extensions for Ruby or Erlang. In and amongst all of that I have hacked some Javascript, Perl, Python and PHP when the need arose.
I am comfortable with the mechanics of HTML and CSS. I can create a functional and reasonably attractive web application, but I am not a graphic designer by any stretch of the imagination. I have built many websites with Rails (and other technologies before that) and enjoy working in the medium.
Platforms
I am a UNIX guy through and through. My current preference is to develop on Mac OS X and to deploy to Linux. Currently I use Ubuntu Linux for most of my personal and professional work. Ubuntu is my current favorite since it is kept up to date and works well as a desktop and as a server. I have also used Debian, RedHat Enterprise Linux and Fedora Core when necessary.
Way back in the day I used to run FreeBSD on my home server. It was fun, but Linux is more widespread and less work these days. The bigger community helps. My first big job out of college involved managing Solaris servers and when I was in college I used VMS and OSF/1.
I was a die hard Windows user for a long time. Particularly after the release of Windows NT 4. Linux and FreeBSD were very poor on the desktop at that point and the classic Mac OS felt confining. Ultimately, the release of Mac OS X changed all of that…finally a robust UNIX OS with a usable desktop.
Tools
Every developer eventually develops a toolset that they fall back on.
I currently use Git for version control. I have used Subversion extensively in the past, but I like the flexibility that a distributed version control system brings. I host public Git repositories on Github and I use GitX on OS X.
For coding I use TextMate most of the time, but occasionally I will fire up Emacs when I think I need something more powerful. I always end up going back to TextMate. I don’t feel the need to use an IDE anymore, but when I was doing a lot of Java programming, I was a big fan of Eclipse.
Hobbies
I learned a while ago that you have to get out from behind the keyboard every now and then. I enjoy brewing beer and make a pretty good Scottish heavy. I have also been known to brew mead and cider when I want to do something different. I don’t brew as often as I would like, usually 3 or 4 times a year.
I have been a history buff since I was a teenager and I enjoy historical documentaries and books. I am less interested in modern history and tend to focus more on the middle ages and earlier. I also love good sci-fi books and movies. Everything from grand space operas to movies with giant robots and big explosions. But then, who doesn’t love giant robots and big explosions?
Speaking of big explosions, the one hobby that seems to take up the most time is gaming. I own both an XBox 360 and an Playstation 3, although the PS3 is a recent acquisition intended mainly for watching BluRay movies.
Fiat Developmentum
Fiat Lux is a Latin phrase that means “Let there be light”. It is the command spoken by God in the book of Genesis to create the light of day. The phrase seems to carry with it connotations of magic and mysticism.
Fiat Developmentum is thus psuedo Latin intended to mean “Let there be software”. To outsiders software development can seem a bit mystical and magical. By borrowing from the well-known Latin phrase, the name “Fiat Developmentum” means to capture some of that feeling.