When explaining how a programming concept or tool works, I try to frame the discussion in a way that familiar to the other person. I often ask: “Besides C++/Matlab, what language do you use ?”.
Work-In-Progress: the final version will be moved to the main blog.
Understanding Software engineering subcultures
Many languages promote a certain way of doing things, and even advanced practionners can ignore whole topics of software engineering. MATLAB users don’t know anything (should they?) about serialisation, C++ programmers resist package managers (for many good reasons), R users write scripts but not applications… I may be exaggerating, but software engineering is awefully complex, and each field has its own blind spots and focus.
The day I discovered databases I thought to myself “what else have I been missing?”
Seeking exposure to many subcultures and acquiring a breadth of knowledge is a good way to become a better engineer. It allows you to tackle more problems by yourself, collaborate better with other people and take decisions faster (spend that time on API design, execution and polishing)! The more people you talk with, the more you see the big picture and make impactful contributions in your organisation.
What each language taught me
I wrote 10 languages in the title. Obviously I am not an expert in all (“what’s the syntax for
for-loops again?” ), and as explained above it’s not the point.
It all started with some Visual Basic. I realized I could actually create. I didn’t have much to create though: after a few experiments I didn’t code for years. I didn’t see any use for it, and as an occupation I preferred running, friend and swimming. High school!
I found myself learning Java, and using it in school projects. To be honest, I didn’t use it that much more than VB, but I discovered programming
had rules, odd best practices, and a depth of complexity you could dive into.
I bought a big Java book, created some UIs, and used complicated object-oriented features.
I don’t write Java nowadays. Mind you, I still read the occasional open source code, but it’s not the ecosystem I am invested into. I keep hearing about the performance, the JVM tooling and cool hosted languages (a lisp ! a research language !), but unless I end up in a Java company I don’t plan on changing
It doesn’t help that there’s so much poor Java. Too often I read Java code and desperately follow along to find the few lines that actually do something .
Being boring and predictable are important qualities for a language…
Someone at the Ministry of Education decided that while sitting in front of a computer was a good, learning a normal programming language was below us maths students. Therefore we learned how to use Maple, a symbolic programming language.
All I learned in those bi-weekly sessions was how to invoke obscure functions in the right order to compute partial fraction decomposition or solve exercises less interesting than the ones we did with a pen and paper. While I was happy to find something more powerful than my calculator (TI-89 FTW), it was a lost opportunity to learn computing or discover problems you can only approach with a computer.
Even worse, equalling code with mathematics is a misconception than keeps many students out of great careers. Focusing on “solving” also demphasized how important minutia and teamwork are to successful projects[^mapple].
[^mapple]: To be honest, it didn’t have to be that way. I could have chosen to take the computer science specialisation, and learned OCaml. This could have been great! Sadly I was preparing competitive exams… And since my strongest classmates chose that track, and since it had only 1/3 the quota in the schools I wanted, picking it didn’t sound strategic.
R is a language aimed at statisticians. It has many quirks, but if your job involves fitting sophisticated models, crunching data or creating analytical reports, it’s an amazing tool.
I got hooked into R. I used it to create my first applications, even found consulting opportunities. With R I formed my first (high!) expectations of what development/notebook environments should provide.
Notably, R was the first introduction I had to package management. I learn the joy of installing fancy models and powerful utilities in a click, getting bleeding edge versions from GitHub…
Aside from the convenience, R’s third party package make it clear that a language’s standard library is not where the innovation happens. Around R, the folks at RStudio developed the “tidyverse”, a collection of powerful packages making data analysis a joy. I realized how important a language’s ecosystem can be to make and keep it relevant.
R has 10 different ways of doing object oriented programming. I never clicked with any. Instead, the cool kids just write functions, and pipe then all one into the other. Learning it felt exotic – and yet familiar: we all know and love shell pipelines. I haven’t gone overboard since and, say, switched to Haskell, but learning about and looking for functional features in other languages improved my code.
Doing one-off data analyses with R is a bliss. Today I also have to worry about containers, dependency conflicts, lock files, reproducibility, vendoring… Once with ggplot2 I had the grammar of graphics to create crazy plots in seconds. Now I tediously craft custom interactive plots for the Web. The extra polish is worth it, but it’s not as fun!