Archives

lisp

Paul Graham wrote (13 years ago) that you can learn a lot about startups by reading their job listings [1].

The companies looking for C++ or Java developers were generally slow-moving and useless, because programming in Java is like throwing down a boat anchor. The ones looking for Perl or Python programmers could prototype quickly. A startup looking for Lisp hackers would be most formidable.

But now with so many Platform-and-Infrastructure-as-a-Service offerings to facilitate quick deployment, rapid prototyping has become the default. Anyone with a modicum of computer knowledge can put together a mobile web app in a day.

We can still learn a lot from startup job listings based on their programming skill requirements:

Ruby on Rails – The startup’s main product involves web development and is unlikely to introduce technical computing. Ruby as a language is more symbolic than lexical, and teams that employ Ruby tend to be visual and creative.

Python – Built for data analytics and scientific programming. The developers are practical, probably academic, and appreciate structure and consistency. The frontend almost certainly looks like crap.

Node.js – A language created so that frontend developers could also build server-side functionality. The company is full of hipsters in skinny jeans who don’t really know how to code, but I’m sure the UI is beautiful.

Then there are the languages designed for high-performance computing and concurrency: Go, Clojure, Scala, Erlang, Haskell (in order of trendiness).

Companies who list these skills don’t actually need programmers who are well-versed in esoteric languages; they just want programmers who care enough about programming to learn an esoteric language [2].

Like this:

Your thoughts are limited by your vocabulary. When I’m extremely pissed, sometimes English just won’t cut it and I wish I could express my anger in a Germanic tongue. Those who are fluent in multiple languages are able to formulate some really expansive thoughts.

I always wish I had taken the time to learn more languages when I was younger. My dad tried to teach me Japanese and my boyfriend tried to teach me Dutch, but I only learned enough of each to insult one’s mother before getting bored and moving on.

I now try to compensate by learning more programming languages. Each language has its best practices and boundaries. Some ideas are prohibitive in one language but frictionless to express in others. As a result, programmers of a given language will approach problems with the mindset they’ve become accustomed to.

C++ requires programmers to be thoughtful whereas Python encourages hacking. Lisp makes programmers feel like God. Perl is useful if you’re trying to throw off Chinese spies. I formulate my thoughts in Python but I wish I could think more like Lisp. Lately I have been forced to think in Java and it might be making me retarded.

I created a collection of minimum spanning tree solvers (Kruskal’s Algorithm) in 8 programming languages. I present each one as an image to visualize what a language looks like to a non-native speaker.

I gave everyone the benefit of predefined set operators.

A more rational programmer might compare run time and compile time. But processors are fast enough already. If I’m staring at code 12 hours a day, I want it to be beautiful, because ultimately that’s what my thoughts will look like.