Game Design, Programming and running a one-man games business…

Programming in just ONE language should be lauded.

I recently read about the news that garbage collection support, which was added to C++, is now actually being removed from it. Apparently most people didn’t use it, or even knew it was officially added, so it is no great loss. It always shocks me to read articles about C++ with a version number, because as far as I am concerned, C++ has no version number and never will, in the same way that a language such as English has no ‘version number’. I’m 54 and its pretty rare that I add a new word to my English vocabulary, and its even rarer for me to learn something new about C++ that I start to use in my code.

Back in the early days of modern computing. I worked in IT. My CV was basically: CNA, MCSE. That was it. That was all you needed to earn £54k a year 30 years ago in IT. There were basically 2 big computer systems, run by Microsoft and Novell, and your IT dude ideally knew them both. That was a long time ago now, and the amount of buzzwords and brand names the average IT admin has to put on their linkedin profile is probably quite ridiculous. However, I think its worse in the land of software engineering.

Again, go back a while and you were probably pretty employable if you could just mention C and C++. Then Java became a big deal, then a bunch of other stuff appeared. I have no idea whats cool now, but it feels like Python, Rust are much in demand. Then you have to add all of the recent methodologies. Do you know Agile and Scrum? How familiar are you with AWS? Whats your AI/ML skills like? PyTorch? Do you know the buzzword technologies that will get you hired this year? You better get a job quick, because the buzzword technologies will change every 2 years. Did I say 2? I meant ever year. No sorry, month.

I recently found myself thinking about poetry and code. My wife writes poetry, so I am exposed to this stuff. As a writer, she spends a lot of time… a LOT of time deciding what words to use in a sentence. Its a big deal. Sentence-by-sentence writing is an absolute skill that takes most people there entire life to perfect. Its worth noting that few poems are praised because they use the latest hip words. Good writing is not a matter of having a large vocabulary. Needlessly obscure word-choice is rightly seen as pretentious and alienating.

We really need to take some of that perspective and apply it to code

Take this sentence: “It is a truth universally acknowledged, that a single man, in possession of a good fortune must be in want of a wife.”

Thats considered literary genius, and it is. But its not using arcane language. Every word is commonplace. And idiot could have put that sentence together! but it took Jane Austen, and considerable experience, and huge skill to do it. We do not mock Jane Austen because she could only write in English. We do not mock her because she only wrote from a woman’s point of view. We do not mock her because all her novels were contemporary, in a similar setting, set in a single country, with a linear narrative. We accept all of those limitations and accept that she brings incredible skill to use a limited set of tools to create genius.

Imagine a modern programmer trying to get their first novel published. “English, yup I could write it in English, French, Italian, Chinese or South Korean if you like? I can do all the genres, yup, no problem. I can do first or third person if you like, and I’m familiar with fractured narrative or linear. If you want it funny I can do that, or harrowing, or in short story form too if thats what you are looking for.”

Madness

For some reason, people think that ‘proficiency’ in a programming language is something as superficial as being able to say ‘hello’ or order a beer in another language. This is insane. I am able to say ‘Hello’ ‘Thankyou’ and ‘Sorry’ In Korean, but you wont see me apply for a job writing Korean-language fiction.

If you have under ten years experience in using a programming language, let me be blunt and tell you that you don’t REALLY know that language. 20 years is better. 30+ years is ideal. Do you really think you speak French like a native after speaking if for a few hours a day for a few years? Of course not. Thats laughable. And here is the thing: A mistake in a language can cause confusion and maybe embarrassment, but unless you are a lawyer writing contracts, its not CRITICAL. Miss-using C++ can cause rockets to crash, reactors to overload, and god knows what else.

Why do we accept a superficial understanding of a language that is safety critical, but expect mastery of a language by anyone paid to use English?

I know C++. Thats it. A little bit of php, but a trivial amount. I use container classes and std::string from STL but thats it. A very few macros. My C++ vocabulary, even after 28 years using it, is tiny. The amount of std library stuff I know is very small. And yet… I can type C++ with as much confidence and speed as I type this blog post. In fact I can write C++ faster, with fewer mistakes than I can English. In many ways, I am MORE fluent in C++ than English. I code almost every day, and love it. I feel absolutely that I know what I’m doing, after 28 years, and a subset of C++.

The world is full of people claiming to have that fluency with 12 languages, and they are often literally half my age (I’m 54). This is utter bollocks. None of those people should be allowed ANYWHERE near mission critical code, or any code even tangentially involved with safety or security. I am sure that they ARE doing those jobs, every single day, because they all confidently think they are experts, and the people hiring them do not know any better. It a recipe for disaster, and its why year-after-year, software gets WORSE. Windows 11 runs dramatically worse than Windows 3.11 did, and it does it on hardware ludicrously faster. Skype is running at about 0.1% of its potential efficiency, has scrollbars that do not function as well as windows 3.11 did, and uses easily 100 times the RAM it needs.

Your computer is an absolute trainwreck of clusterfucks crashing into a dumpster-fire of wasted resources. All the people involved in arranging the trainwreck think they are multi-skilled geniuses, but hardly any of them have any real understanding of the code they write.

It doesn’t have to be that way.

We don’t appreciate Picasso based on how many colors he used, or how many styles he knew. We don’t berate any musician for only knowing one style. In Japan, people who make the SAME SUSHI DISH their entire lives, without variation, are considered legends, and experts. Its the norm in South Korea for restaurants to only serve one dish (but do it WELL).

I beg of you: If you are involved in recruiting software engineers, for the love of god only employ people who have real, genuine experience, measured in years but preferable decades, for stuff where you expect them to be able to code from day 1. No, they will not ‘pick it up quickly on the job’. Hiring interns or juniors is different, obviously.

I know I’m an old man yelling at a cloud, but sometimes old people know a lot about the cloud. I’ve been coding since I was 11, and its taken me this long to realize that programming languages should be treated like any other language. It might not be a popular view, but I want to put it out there. Experience really matters.


14 thoughts on Programming in just ONE language should be lauded.

  1. Hey Cliff, I think the spirit of you’re point is spot on but it’s not the whole story.

    I started coding way back when in Amiga BASIC, worked for years in C and C++, moved to java and C#, avoided javascript as much as I could but still worked in Spring and React. I’ve built websites in HTML and PHP, apps in MFC, WPF and .NET. Done database in SQL, Access, Hybernate, Postgres with GIS and Mongo. And yet I got lectured on my last project for asking architecture related questions for not being a “Full Stack” developer. I also am a master at ActionScript too FWIW…

    Some things are easier to do in one language or another and sometimes that’s the reason to use it. Most often though it’s a management decision that the programmers have little say in it.

    The point though is that it’s not the language that’s important; it’s the underlying understanding of the processes involved and the tools used to achieve your programming goals.

    One of the first classes I took for CS was a Data Structures 101 at a community college (for fun at the time). We didn’t use a computer at all in the first half of the class, it was all done working out on the blackboard linked lists, sorting algorithms, hash tables and such. It was great, one of my favorite cs classes. We worked through nodes and arrows and ‘Next of P goes to…” for everything. Because of that I KNOW data structures. If I need a linked list I can implement it in a half dozen ways in pretty much any language in my sleep and I can tell when it makes sense just to use the language provided version.

    TLDR: It’s not (just) that you’re really good at C++, it’s that you’re really good at figuring out how to solve programming problems and you know lots of gotchas inherent in the libraries you use. Learning the syntax is a small and unimportant (mostly) part of the process. I’d bet if you were forced to start using only java starting tomorrow you be back on your stride in a month. The BIG problem is that lots of programmers know languages but don’t know programming.

  2. I do genuinely think that the majority of ‘programmers’ now have no idea how a linked list works, and would not be capable of coding one. But like you, it was a part of my basic introduction to modern programming. (When I was a kid I learned BASIC, but that was way simpler).

    1. The Douglas Adams “if you’re so clever, you tell us what color it should be” equivalent:

      node *p;
      p= head;
      while(p != NULL)p=p->next;

      But where are the unit tests?

      Where are

  3. > its taken me this long to realize that programming languages should be treated like any other language

    Treating monolingualism as a point of pride, not a source of embarrassment, has to be one of the most English takes ever, tbh :D

    In most places, only knowing one language is a good indicator that you’re not even very good at that one.

    1. Most places these days produce code that runs thousands of times slower than it should. Then there’s the bugs they ship with. Jack of all trades, master of none, is a plausible explanation.

  4. Not that it was your point, but most wealthy men in the West before the 19th century, including Shakespeare, would’ve been at least bilingual due to the prevalence of Latin and Greek in education.

    In fact, many of the words Shakespeare ‘invented’ were just Latin words borrowed into English or Latin and Greek suffixes and prefixes smashed into English words. Kind of like how the C++ standard keeps smashing odd features into the language.

    1. H.P. Lovecraft had knowledge of Latin and Greek, but his knowledge of English was so extensive, you need a dictionary to read him.

  5. Sometimes I try other languages but keep returning to C++. I don’t like garbage collection, or dynamic compilation. The only thing that bugs me about C++ is its slow to compile when using templates.

    1. That’s one reason to minimise use of new-fangled features like templates, which have their place but are no panacea.

  6. I appreciate the discussion here, but I see things a bit differently. It’s important to remember that what we often consider “right” or “wrong” in technology and language is actually more about the “best practices for a given scenario.”

    1* Having a rich vocabulary, whether in English or programming languages like C++, is indeed valuable. However, the use of specialized words or functionalities should be context-dependent. Like the various types of screws designed for specific purposes, the same goes for linguistic and programming tools. Additionally, the evolution of language and technology naturally leads to multiple solutions for the same problems. German, that prioritize concatenate ideas instead of creating different words for a specific meaning: “Handschuh” is “hand shoe” or…. glove!

    2* you are very well-known to be fond of “full stack developing”, refusing using engines, libraries and helper tools. It’s a personal preference. A successful game can be from RPG Maker or pure OpenGL C++ stack. OpenAI’s devs need to know the inner works of Python? I personally “USD 60 Billion valuation” doubt it.

    3* It’s undeniable that there is software with design issues stemming from inexperience. But software development is a team effort, with various layers that individuals can specialize in. Not knowing the minutiae of linked lists isn’t a critical flaw if one’s focus lies elsewhere in the stack.

    4* As others have highlighted, exposure to different fields can be enlightening. Sticking to English and C++ alone may limit one’s perspective, as exploring other human or programming languages can offer fresh insights and approaches.

  7. I did JavaScript for 3 years and it really made me appreciate C/C++, so it was valuable in that sense.
    I use Unreal Engine at the moment, and it has automatic garbage collection.
    I find that it completely solves the slow, creeping and easy to spot problem of memory leaks but replaces it with arbitrary, confusing and difficult-to-reproduce bugs where it mistakenly decides that you aren’t using something any more, deleting it and maybe/maybe not nulling the pointer for you mid-code.

Comments are currently closed.