Language Wars: Introduction

A journey in search of the best programming language

Rafał Pocztarski
inFullMobile Blog
4 min readNov 8, 2017

--

Spending all days surrounded by experts in Java, Python, Ruby, C, C++, C#, Objective-C, Groovy, Swift, Kotlin, JavaScript and few other languages, I finally decided to find out which language is the best. This series is an attempt to ultimately settle the argument — once and for all.

Experts in any field, from carpenters to brain surgeons, tend to form strong opinions about the tools they use over time. Here at inFullMobile we’re not doing carpentry or brain surgery — though what we do can be thought of as a mix of those — we’re designing and building software for a multitude of platforms using countless number of tools, methods and languages.

When you have experts in all of those technologies working in the same open space, arguments are inevitable, and whenever an innocent argument turns into a heated debate, that’s precisely the moment when most knowledge is exchanged between the arguing parties. Those moments when you hear “are you serious that your language doesn’t even optimize proper tail calls?” are precisely what make people demand those very features in their languages, and the urge to show your opponent that your tool of choice is better is paradoxically giving fuel to your opponent’s demands and ultimately makes the competing technologies better in the long run.

For me, someone who’s been fascinated with programming languages since my early childhood, the arguments about the languages themselves, their syntax, semantics and overall capabilities, are especially interesting and that’s what I’d like to focus on in this series of articles.

I decided to start these series in order to compare different languages not by their theoretical foundations but by looking at the code that implements some simple but very specific requirements, written by experts in the respective languages, with some commentary on how well the language is suited for implementing a given task.

This series will be divided into topics. Every topic will include a detailed specification of functionalities to implement in the examples and every example will be an implementation of that topic in one language in a GitHub repository with everything needed to run it and test it by the readers themselves. The topics will range from well known algorithms to modern APIs.

I’ll be writing specifications for the topics and additionally, being a Node.js developer, I’ll be implementing examples in JavaScript, using both legacy and the latest syntax where it makes sense, with an occasional bonus of throwing in some really old languages like Scheme here and then, or using even older notations of lambda calculus — under a premise that if a modern language cannot efficiently express a concept that is trivial to express in a simple notation from the 1930s, then it definitely needs to be improved.

My teammates will be providing examples in Java, Python, Ruby, C, C++, C#, Objective-C, Swift and Kotlin, maybe even in Groovy, Haskell, OCaml, Prolog, and few other lesser known languages if I manage to force them to do so (comments under the article asking for specific languages will certainly help here).

I hope everyone will be able to immediately learn something interesting by reading and comparing those examples. In the long term I hope that this series will lead to the improvement of general understanding of programming languages or maybe even improvement of the languages themselves, and of course I’m sure that me and my team will be able to learn something new by writing those examples. It will certainly be a lot of fun for us.

Feel free to comment if you have any ideas or suggestions or if there are any specific topics or languages that you would like us to cover, or if you think that our implementations could be improved in any way.

Soon we will publish the first challenge and the implementations in various programming languages will follow. Stay tuned!

See next: Language Wars: Round 1 — Functions of Functionscomparing the basic syntax of a function definition and a function call in Java, Swift, Kotlin, Haskell, Scheme and two dialects of JavaScript.

Rafał Pocztarski is a Node.js developer at inFullMobile, an international digital product design and development studio based in Warsaw, Poland.

--

--

Rafał Pocztarski
inFullMobile Blog

⭐️ Senior TypeScript/Node.js Developer, Tech Lead at Beesafe by Compensa, Vienna Insurance Group. I build custom backend APIs for the InsurTech industry.