Once upon a time, I dated a Belarusian girl. We were young and full of endless energy and passion and
adventure. We spoke English most of the time (our native language) but she spoke Belarusian
with her mother and I thought it would be a fun idea to pick up a few words. I studied in my spare time
and occasionally surprised her with a new word or phrase out of the blue, which always seemed to
amuse her. I had a very good memory and I could pick up and retain lots of information in a very
short time. One weekend, I learned all the days of the week, the names of months, numbers, and other
common terminology about time. I told her in the evening that I was going to study it, and the next day
I was able to converse with her about dates and times (albeit with a broken and poorly pronounced vocabulary,
which only further added to her amusement). I was only spending 30 to 40 minutes each day on my
language study but speaking it regularly was helping a lot with retention.
Once we separated, I stopped studying the language. In a shockingly short amount of time, I realized I was forgetting a lot of common words which I had been using and had assumed were ingrained in my memory. Of course, this isn’t really suprising at all, it’s exactly how the human brain works. Use it or lose it, that’s the human brain’s modus operandi. Even though I knew this fact to be true, this was my first time confronting it in such a personal way.
Language attrition is quite common for second languages when you don’t use them regularly. It’s much rarer with
your native language. You’re always immersed in your native language. You speak it, you hear it,
you think in it. And this is true for programming languages as well as spoken and written languages. If your
job is to write javascript code and you’ve been doing it for many years, you’re thinking in javascript. You’re not
thinking of concepts and algorithms in the abstract and then translating to javascript, you’re thinking in
javascript idioms and conventions. If your algorithm requires a copy of an array with transformed data,
you’re not thinking about allocations and copies and loops and lifetimes. You’re thinking Array.map().
Python developers even have a word for this for their language: Pythonic.
Programmers have always had their “native tongue” programming language, and they often know a few other programming languages as their “second language”. You might be a Go programmer primarily, but you usually have to know bash, maybe some python, a bit of javascript, and perhaps even some C. You won’t think in those languages idiomatically, but you’ll be able to read and write well enough to suit your needs. And learning the idioms and conventions of all your second languages might not be worth your time if it means less time writing Go.
With AI coding on the rise, there’s a new “programming language” that people are increasingly using for all of their needs: natural language. Need a web server? A quick script? A custom editor plugin for your company? Describe it to the coding AI in English and it will choose an appropriate underlying programming language (unless you specify a preference). Need some changes? Tell the coding AI in English again. You’re effectively programming in natural language and the LLM is compiling it to a “lower level” language. You can stick to only natural language for writing, iterating, debugging and maintaing your program, or you can interact with both the natural language interface (the coding AI) as well as the programming language (the output code). Or you can vary the ratio for each project. The more you use natural language with coding AIs, the more fluent you will become in it and the more idioms and conventions you’ll discover. Maybe the AI produces better output if it’s asked to plan first. Maybe it writes better frontend code in Svelte instead of React. Maybe it writes better data transformation code in Ocaml. Maybe you have to say “Pretty Please” once in a while.
For the past 1-2 years, a lot of programmers seem to be on this exact journey. They’re exploring what conventions work best for this new way of programming, learning what is idiomatic natural language AI coding. For many, natural language is slowly becoming their primary programming language, their “native tongue”, while traditional programming languages are becoming their second languages. They can still read it, understand it, write it. But they’re thinking in it a lot less than before. And for many programmers, perhaps that skill will atrophy altogether in a few years.
When they need an algorithm which requires copying an array and transforming the data,
they won’t think about allocations and copies and loops and lifetimes.
And they won’t think of Array.map(). They’ll think “I have data in this format and I need it in this other format.
I also need to preserve the original data. Plan first, then write it in Ocaml. Pretty Please.”