3 languages

I need to clarify my interests. I keep getting calls from recruiters who want to hire me to do Perl or database management. So, I am trying out an experiment in self-analysis by describing my enthusiasms as they relate to specific programming languages. I am currently interested in the web software applications of Ruby, JavaScript, and Clojure.

It isn’t all about programming languages. There are topics and concerns that span software development and computer science. But PLs are one great way to summarize one’s experience and efforts. And I’m a language nerd, so I like PLs as ends in themselves. So, here is my little essay on the 3 languages I like most right now, and, more importantly perhaps, what I want to do with them in the coming months. This is my summer of hustle, and this post is part prelude, and part wishful thinking, about all the things I’d like to tackle.

Ruby

Without Ruby, my life as I live it would be impossible. I spent 2 years in the last decade trying to be a freelance developer and XP proponent with Java/J2EE as my main language. It was miserable. My wife remembers it as the dark time. What Ruby changed was two-fold: it demonstrated that I could learn a simpler, more expressive language that was a joy to use and share with others, and it gave the world, including me, Ruby on Rails. I can make a living consulting, writing code from home, using RoR because it makes me more productive and makes my code more expressive than I thought was possible during the dark times.

The Ruby community is also a tremendous asset for the language. I am working on a gem for mustache use in Rails. I’ve gotten so much help from hackers near and far that it really only took a few days’ worth of effort. This helps build up my courage to try more.

More Ruby projects

I would like to learn a lot more about evented Ruby in EventMachine and Thin. I’m very interested in concurrent programming. I’d like to get some experience coding asynchronous web applications and services with these Ruby tools.

I think Ruby needs a killer app for Data Science if it is going to continue growing in relevance. Rails isn’t peaking yet, but it will. To keep giving joy to developers, Ruby needs to answer the needs of a new realm of programming. There are things out there like neo4jr_social that wrap tools in other languages, and this makes sense. After all, Rails didn’t have to provide a Ruby implementation of an RDBMS, just a good way to abstract and drive one.

Finally, I’d like to explore functional programming in Ruby. I’m especially tempted to try implementing Chris Okasaki’s functional data structures in Ruby. Because, as Yehuda Katz pointed out in his keynote address at RailsConf, Ruby makes impossible things possible. Also, with fibers and enhanced support for lazy evaluation in Ruby 1.9, it may be time to look seriously at functional data structures in Ruby. These structures would probably also make it more interesting to work with asynchronous processes and data science problems.

JavaScript

Oh yeah. Seriously. I credit Brendan Eich, JS’s creator, with making a home for functional programming to hide out during the Java years. Much maligned as the language is, it is the PL of the World Wide Web. And it has first class functions, closures, prototypical inheritance, and dynamic typing. Developers came for the image rollovers, but some stayed to build frameworks that use higher-order functions and sophisticated metaprogramming to offer developers truly rapid application development. JavaScript is currently the PL for building deliriously simple, flexible, and powerful solutions to problems many people were just willing to live with: JSON, node.js, Ajax.

JavaScript projects

I am eager to do something with Node and fab. I think there’s great potential for asynchronous task handling with these tools. Again, I suspect this could be part of a Data Science analysis platform. Or it could support an asynchronous app within a multiple-application web service. When Node interfaces with web workers, an exciting proposed feature of HTML 5, it could become a compelling platform for in-browser distributed functionality. All without threading.

I am also interested in building my own JS client-side framework, cherry-picking my favorite stuff from the dominant and emerging platforms. There is a school of thought that holds you should roll your own tools like this so that you’ll understand exactly what’s going on. This would also be a great excuse to take a close look at frameworks from jQuery—which I use daily—to Sencha—the recently energized combination of ExtJS and touch-oriented JS—to new things like the Reactive Extensions and raganwald’s combinators plugin.

Clojure

Clojure is a high-performance language in two ways. Its Lisp syntax, dynamic typing, and macros increase your level of performance by setting the signal-to-noise ratio of your code asymptotically high. It runs on the JVM, using the inlining and profiling powers of VMs like HotSpot to make your code scream; Clojure also lets you use threads sanely and safely to hit multiple processors. Clojure stole the show at RailsConf this year. You can see and hear Bob Martin, at the end of his keynote, announcing its arrival as the Future of Computing in a concurrent world.

Clojure projects

Here I go again with the Data Science. I think Clojure is a natural choice for data analysis. At the very least, we need an implementation of algorithms like those demonstrated in Programming Collective Intelligence and Algorithms for the Intelligent Web. We have a beautiful statistics and visualization library in Incanter, and I think an applied set of analysis tools could be neatly built on top of it.

I’m also trying to help out with Michael Fogus’s trammel project, an implementation of design by contract programming a la Bertrand Meyer in Clojure. This project has already taken me close to the heart of Clojure’s lambda implementation.

Conclusion

I notice that little of this sounds like classic web programming. I’m more interested in problems like performance, scaling, data modeling, and data analysis than in UI programming or ORMs. I still like that stuff, actually, but I seem more intrigued by less visible challenges. I hope I can get far enough into some of these projects to clarify my interests further.