When we started kaChing’s architecture, one core design principle was set in stone: our systems would be language neutral. We strive to combine the best ideas from all languages and employ a good number of them on a day-to-day basis (Java, Scala, Ruby, Python, bash, Clojure, Erlang and so on). We use simple data formats to exchange information between sub-systems (JSON, Protobuf).
I recently stumbled upon Dr. Kathleen Fisher‘s essay “We Need More Than One; Why students need a sophisticated understanding of programming languages”. It perfectly captures the foundational value programming languages play in the study and practice of computer science.
Like natural languages, programming languages affect how we think. In particular, how we think when we communicate with computers. Each language comes with a natural domain of discourse. Ideas within or close to that domain are easy to express, while ideas further afield are harder. […] A language is not just defined by what it includes, but by what it leaves out as well.
Just like excellent verbal and written communication is essential, mastery of multiple paradigms in software engineering is crucial. Programming languages must be front and centre. Their study must evolve from learning Java, C and Perl to learning computational theories, with the understanding that mainstream languages as mere cosmetic instances of greater concepts. We don’t teach how to use Windows XP to CS majors; We teach virtual memory, semaphores and context switching. Why should we teach Java and C++ rather than π-calculus and parametric polymorphism?