Introduction

I frequently ask myself what languages are on top in my mind.  In the past I've loved almost everything from PowerBuilder to Perl to Java.  There are a couple of languages I've really disliked (looking at you Cobol) but I don't have to work with them much so its not much of a problem.  Anyway, here's what I would use to build something today.

Things I would use

Ruby

Ruby is very solid in my mind and is my go-to language for almost any job.  It's been criticized in the past as slow and awkward but those days are gone and today's Ruby is a joy to work with.  I love the syntax of the language and how everything seems to be named properly.  I rarely have to look up documentation as my first guess is usually correct.  It's REPL (irb / Pry) is beyond compare and almost removes the need to debug.  I once thought that nothing could rival the Java JAR ecosystem, but I think that Ruby Gems is more extensive, more modern, and beats it in almost every way that counts.

Go

Go has really peaked my interest in the last 6 months or so.  There are more and more people talking it up and several companies releasing major projects that are written in Go.  The upsides are plenty, from a fresh, clean syntax, to the out-of-the-box tools (gofmt, gofix, etc.), to the performance.  The community is very active and its backed by a major computing powerhouse (Google).  Still, its a fairly new and immature language and I think you would be hard pressed to get your company to start building mission critical apps in it.  Well, unless your company is forward thinking and willing to take some risks to get major awards.

Java

Java was in my toolbox for a long time but anymore I just really don't like using it.  Sure, it's fast and can run almost anywhere and has lots of libraries, but it just leaves me empty.  I think my feelings turned when Sun was sold to Oracle and I saw the writing on the wall.  Since then it just seems like the world has abandoned the language, along with Oracle.  The fact that most Java code is "enterprise"-ready doesn't really help matters.  Most of the Java code I see in the wild is ultimately flexible and ready to be used for almost any purpose.  It's also nested so deeply that it's extremely hard to follow the code logic and I'm afraid to touch it.  That said, it's not really the languages fault that people write it that way

Don't even look at me

PHP

What can I say about PHP that hasn't been said before?  I think it has uses in quick and dirty projects, but using it for anything of production value is just a fools errand.  Worse than that I firmly believe that writing PHP is bad for your programmer brain.  It teaches the wrong things and guides you down the wrong paths.  Hell, they put a "goto" operator into the language in 2009!  Jeff Atwood commented that the way to make PHP go away is to provide better alternatives, and I believe that Ruby is finally becoming that alternative.  Its easier to write, faster, and easier to deploy (Bundler).  Hosting solutions (Heroku) and cloud providers (AWS OpsWorks) are building one button deploy systems that match or exceed PHP's.

Wrap-up

Look, my point is that there is no one solution for every job.  Next time you start a project take a long hard look at the problem you are solving and pick the best tool.  Ruby is great for small utilities, miscellaneous web based work and (with Rails) the perfect solution for CRUD websites.  It even works for game programming and writing iOS applications.  I find Go a perfect fit for heavy duty server systems (image processing, number crunching, etc.)  Do what fits your job and makes you happy.