A Few Thoughts About Various Programming Languages

In my role leading development shops, I am constantly having to learn and evaluate new programming languages and tools in order to keep us current as well as in order to discover better ways to accomplish goals. As a developer, I am also constantly learning simply because I want to get better at what I do, I love what I do, and learning new languages is a fun and rewarding undertaking. From time to time, someone writes a blog entry or gives a conference presentation about the importance of knowing more than one language... of not being a 'one trick pony'. I was reading Sean Corfield's recent blog post about Clojure and realized that I've never written about my recommendations or opinions of various languages that I've used or evaluated... until now. In no particular order, here are several of the technologies that I know and my thoughts about them:
  • Python
    • I've recently been spending a decent amount of time learning and using Python - it's very fast and powerful, and is syntactically one of the most concise and elegant languages I've ever seen... it's VERY readable and the more I use it, the more I like it. Python is definitely one of my favorite languages.
  • Java
    • I've used Java off and on since 1995, and somehow keep ending-up having to use it on projects from time to time. The language has gotten larger, faster, and for the most part, better over the past decade and a half - I found the language improvements in Java 5 particularly useful in that they clearly tried to make it easier to do what you want in your code. That said, I don't find Java programming particularly clever or challenging and on many projects I see, deployment is a terribly painful process. Java applications tend to have ridiculous file/directory structures and I'm not a huge fan of how strict it is. Java is everywhere and does have a huge job market, so it's worth knowing for those reasons... but it would never be my first choice of languages to use based on any merits other than the large talent pool and number of open source projects.
  • PowerShell
    • Powershell is probably the coolest new thing I've seen in a long time. For those of you unfamiliar with it - it's a fully OO scripting environment for Windows (runs on .NET) and is free from Microsoft. The syntax is slick and simple, and the power you can pack into a single line of code makes it a no-brainer for anyone who needs or wants to administer a Windows network or machine. With powershell, windows finally has a shell that's better and more powerful than those available on nix systems. Bottom line: if you use Windows you REALLY should learn Powershell.
  • PHP
    • PHP is yet another free technology - we use PHP and CF for most of our projects, and I like PHP a lot. A long time ago, some people called PHP "poor man's ColdFusion"... well, I think it's more true today than it was back then. It's simple, lightweight, and fast... and development times really aren't much longer than with CFML provided you're not trying to do something that CF does out of the box that there's no PHP module to do. I don't see it having many advantages over CF aside from price, the huge talent pool, and the number of open source projects. There's a good job market for PHP but those jobs don't typically pay as well, so I'd learn it because of it's popularity but I wouldn't choose a career focused exclusively on it.
  • Flex/ActionScript
    • I've used Flex since beta 1, and I enjoy seeing how it evolves with each new release. I don't particularly like programming with ActionScript for the same reasons I don't like Java - but unlike Java, I do love the end result you get with Flex... enough to want to do it. No technology to date that's tried to compete with Flash has been compelling enough to use in lieu. There's also a great job market for Flex - especially here in New York City, and it's one of the top 3 or 4 technologies I'd recommend learning to anyone who wants a successful web development career right now.
  • ColdFusion
    • I've used CF since the beginning and continue to use it heavily. It's not the best performing technology available but it performs well enough for most needs. No, it's not free, but development/debugging time is rapid enough to easily justify the cost. These days, CF's closed architecture and code base is a real turn-off for me personally, but it's the lack of talent (and the poor quality of most "talent") that is it's only solid turn-off from a business perspective. The native support for Flex is probably its most compelling unique feature... that, and it's rapid development nature. It's a good choice when you want a very robust user-friendly platform in a turn-key solution.
  • LISP
    • LISP is, hands down, personally my favorite language. Five or six years ago I set-out to spend 6 months of my free time teaching myself LISP, and I enjoyed it so much that I just never stopped. The syntax took a little getting used to, and emacs takes even longer to get used to - which is probably the most annoying part of learning LISP (I haven't found a better free IDE for LISP yet). LISP is beautiful in the simplicity of its design - most notably in the interchangeable nature of code and data. It is definitely the most expressive and flexible language I've used - as well as the most powerful. Be warned; it takes a while to un-train yourself and learn how to really harness the power of LISP (particularly of macros and, if you're new to it, thinking in functional terms). I also, surprisingly, find the implementation of OOP in LISP (CLOS) much nicer and cleaner than that of any other language. I strongly recommend learning LISP. Not because there's a huge job market for it (there isn't) but because it puts other languages into perspective and because it WILL make you a better developer (I've learned more from 'tinkering' with LISP than any other language).

So, those are the main languages I've played with and developed feelings for recently (within the past 2 years). It's worth noting that there are other languages I left off for brevity. I've also been getting back into JavaScript these days - I have a new appreciation for it's functional nature and closures, and I think JQuery is pretty slick. I've taken a pretty good look at Objective C - it's a decent language but not worth learning unless you want to do a lot of Apple development. I've also played around with Clojure - which is essentially a pseudo-LISP implementation for the JVM - I liked it, but prefer to use 'pure' LISP... though it's attractive being able to write LISPy code that I can run on a JVM, since Java is everywhere. There are a few other languages I haven't had time to take a good enough look at yet but hope to very soon. Specifically, I'm interested in looking at Scala and Caml... and I've begun learning some Haskell and hope to dig into that a little deeper.

Comments
Cool writeup. Learning new languages is one of those things that every developer should be doing. For me, I love seeing so much of the functional model (from the likes of lisp) moving over into the mainstream.

Another language worth tinkering with is erlang. It just does things in such a different way from everything else that you'll pick up a lot from it generally.
# Posted By Aidan kane | 5/12/10 3:12 AM
just a quick one about CF - remember there are two free and open source alternatives now, so you may want to change your notes about CF.

Also you're getting a lot of spam comments on your blog, notice the wholesale motorcycle spam that has almost taken over your comments.

larry
# Posted By larry lyons | 5/12/10 4:24 PM
I'd add JavaScript as a main item in your list although you do mention it the post.
# Posted By johans | 5/12/10 9:43 PM
Simon,

I've read your previous blog entries on ColdFusion and your thoughts on its closed-source nature. I was wondering if you'd share your thoughts on the CFML advisory board now that its been around for a little while and if you think that the "core" CFML language is headed in the right direction because of it?
# Posted By Ryan Anklam | 5/14/10 10:27 AM
after recently working with php, actionscript and javascript...I am focusing on the Flash Builder technology...and glad to see you recommend it for web dev at this time. jc
# Posted By John Crann | 5/14/10 12:45 PM
Thanks for the write-ups, Simon. It's really interesting to see your pros / cons on these various technologies. Python's been on my radar for awhile, but I haven't taken the time to dig into it. Sounds like both Python and LISP are distinctly worth looking at.
# Posted By Jason Fisher | 6/3/10 5:10 PM
java is the leader of these lanugae,it majoy in network program
# Posted By grills | 8/25/10 10:44 PM
This site is hosted by HostMySite and runs off of BlogCFC - thanks, Ray.