Paradigms, Not Languages

2015-10-16   |   tags: programming languages , paradigms , cross pollination , communities

I've been on a bit of a tear of different tech meetups/secret nerd illuminati brainshare meetings recently in NYC and it's exciting to see where programming in general is leading, especially when it comes to cross-pollination of ideas across communities.

The other day I was at ny-scala on a talk about macros in Scala, and I quipped to a friend that we're just now rediscovering what Lisp (or any other language with first-class macro support) programmers have known for years: the scarily sharp power of metaprogramming.

Then, on a lark, and particularly because I knew someone speaking at it, I attended BrooklynJS, which was a bit of a curveball for me since it's completely different from what I do in my daily hustle and grind. I found it particularly interesting not just because of the foreignness of the topics (and they out there!) but also because of the similarities to what I've seen elsewhere. Concepts like functional purity, referential transparency, and promises for async flow control were being thrown around casually, which I thought was super heartening to hear - clearly we're onto something here!

And, while giving a mini crash course to Scala for some colleagues at work, I leaned heavily on relating Scala features to ES2015 (e.g. Scala anonymous functions look exactly the same as arrow functions, and const in ES2015 is like val in Scala). Again, cross-pollination at work here and helping me out.

I've long been interested in learning a multitude of programming languages (of which include Clojure and JavaScript) to add to my toolbelt, but all the while I hadn't realized the value of the transferable nature of paradigms and that they have a much wider reach than any specific language. Things like first class (and anonymous) functions, nonblocking asynchronity, purity, immutability, statelessness, and etc are all hot concepts today but in reality have been around for awhile - they only get 'rediscovered' by budding programmers like yours truly.

I think this whole exercise of software engineering we throw ourselves into is really all about learning paradigms and not specific languages whether we realize it or not. This is similar to how some would say software engineering is generally more about solving problems and not the esoteric machinations of a particular implementation variant ABC of algorithm XYZ or how the syntax of language A is better than language B*. And I'm sure someone has had this very thought or said this before, and that I'm only just now discovering this for myself like the explorers 'discovered' the New World.

Open your mind and try to learn something new, I promise you'll find something familiar.

  • Language/editor/OS/phone wars are a dumb, mindnumbing race to the bottom. Stop it.