Although I've done a lot of coding in my life, it has never really been the focus of my work. I sort of pick it up when I need it, gain an appreciation for whatever language I need to get the job done, and then set it aside. As a result, I have been proficient in a huge array of languages, everything from C++ to VHDL to Fortran 77 to PIC assembly. The only programming language I'd say I'm really good at right now is Perl. For whatever reason, I keep coming back to perl because it's so easy for me to code something up fast with it. I learned it in 1998 back at Imaginet, and somehow I keep finding little code projects that could use it, and so I stay current in it. I'm probably better in perl now than I ever was in any other language.
But perl is dying. Also, its applicability is hugely limited. While it can be shoehorned into roles where something like Java or C# might be more appropriate, it is unquestionably an ugly hack to do so and the performance is always embarrassing.
I feel compelled to modernize my coding toolkit so that I won't turn into an old coding curmudgeon like certain Lisp hackers I know (ahem). However, the reason I've stuck with perl for so long is because it is actually quite effective for doing most of the stuff I casually code for. Python seems to be the rising star of seat-of-your-pants text-handling languages, but do I want to invest the time and effort just to replace perl with a very similar and only marginally improved language that suffers from the same limitations? In case you were wondering, I will not be considering php, as I find it to be a thoroughly offensive language from a computer science perspective. It is the vulgar cockney of computer languages.
So why not upgrade to something fancy—an object-oriented language with good GUI support, good compilers and decent performance? The learning curve has always kept me away, since I mostly code for short hacks that crop up at the last second and I just want to be done with as soon as possible.
I guess what I need is a project that will require me to graduate to a modern computer language to the point where I can stick with it, and end up using it to code the little hacks that crop up from time to time. Otherwise I'll just keep cranking out perl scripts to do things that they shouldn't be used for, feel bad about it, and cry myself to sleep in the corner.
Oh gentle readers, what do you code in for casual home coding projects? Any advice?
ps:
(defun fib (n)(if (<= n 1)1(+ (fib (- n 1))(fib (- n 2)))))


If you're going to deploy this code to a server somewhere, I'd go for a JVM language. There are so many great ones to choose from (Groovy, JRuby, Clojure) and deployment is pretty easy. If you don't want to deal with JVM startup time (i.e. you mostly want scripting) then straight Ruby or Python are probably your best bets.
I'd ditto Jesse's recommendations of Ruby or Python. I've been leaning Python these days for quick stuff.
But maybe take a quick peek at...
- Go.
- OCaml.
F# is too platform-specific. Scala is the kitchen sink but has some cool features.
PHP!
Hey. Where did everyone go?
I used to use perl or matlab for my casual needs, and I have switched to python (mostly) and haskell (rarely). I maintain perl fluency and turn to it when the task is small and involves regular expressions but no logic.
Perl data structures always gave me a headache, and I am glad to be spared from going there.
I noodled around on projecteuler.net for a week long visit with the inlaws, which is when I learned what haskell I know. They (the inlaws) don't like me much any more, but I'm not sure the haskell can be blamed for that
Your comment form ate my rant. Short version: settle on Java (the framework) or .Net. Java is your only option if you're wed to Linux but .Net is better overall if you're not. From there, the languages are interchangeable. Functional languages are great at making you feel clever but suck at solving problems. Your best bets for languages are C# on .Net or something imperative on Java (the framework) like JPython; I would avoid Java (the language).
Insert some jokes about Java the Hutt and Java the Coloring Book.
I highly recommend python. Although it may seem like it fills the same niche as perl, I think it is a much more generally applicable language. These days it is the language I reach for first for most tasks. Whenever I am forced to work in something other than python, I find myself missing its conciseness, expressiveness, simplicity, and excellent standard library.
If you're set against python, I'd second the above recommendations for Ruby. Especially if you are working on web apps. Ruby has a great community, and shares many of the good features of python. It's easy to learn, and still quite powerful. Also, JRuby makes deployment of Ruby apps across platforms easy.
Other languages to consider:
- Erlang (good for distributed systems)
- Javascript (yeah, it's kind of a shitty language, but it's your only choice for interactive web apps, and is gaining traction on the server-side with node.js)
- Scala
- Clojure (although if you already know and like lisp, there's not so much to learn here).
I also highly recommend this book: http://www.pragprog.com/titles/btlang/seven-languages-in-seven-weeks
Based on the stuff I know you've done for fun and will probably be doing again, I'd strongly consider Python with PyQt for gui stuff. This or c++ with Qt will give you a cross platform system that "just works", be it Win32 stuff or *nix. The downside of c/c++ is everything with strings. Wanna parse a line in a text file? Pain in the you know what compared to PERL or Python.
.NET means your stuff is guaranteed to never run on UNIX or UNIX like OS's which greatly limits the appeal for me.
I'd stay away from anything for web coding unless you plan on doing a lot of web development. Java, well, is just Java. It was a key player in my path toward understanding object orientation, however it may have just as well been Python. The only thing going for it is that it's the language of choice for Android coding (although there is nothing stopping you from using c++ with the Android NDK).
I'd say Python, but that won't give you the GUI stuff, unless you use Open GL or something.
Pick a project and use Python on the server, and Adobe Flex on the client. Contrary to popular belief, Flash/Flex isn't going anywhere.
Commodore Basic 2.0. If it can't be done with 5k of memory it's not worth doing.
I actually don't have a comment. Irony noted. Can I just email you? Old Friend, Jen