Why I Don't Study Programming Languages

2022-02-16

Original Text from 2021.06.27

Here, “programming languages” specifically refer to the concrete implementation forms of programming languages, not the design philosophy or language features.

At least in the short term, I will maintain and stick to my current views and practices.

Update on 2021.08.08

Yesterday, I met a post-2000s female student at a role-playing game event. She was there as a participant but also worked part-time as a DM at the store. It made me reflect on what I was doing when I was 20 years old.

The link to my old blog has always been at the bottom of my blog, but I seldom check it. Reflecting a bit more seriously, I suddenly understood why I looked down on my classmates’ programming skills when I graduated, why I could face my colleagues on at least equal footing when I started working, why I remained unfazed even when my coding ability was questioned during interviews recently, and why I now disdain learning the formal aspects of programming languages.

Standing in front of the bookshelves at the National Library, I couldn’t help but recall the days I spent in the library during my university years.

Update on 2021.08.29

I’m back to add more on this topic. /facepalm

On QQ Space, I saw a post by a university classmate who is quite the geek. His recent post was about “relearning Advanced Programming in Unix,” and the previous one was about a video of a technical conference on Bilibili. I once tried to attend some technical conferences and meetups but later realized that apart from benefiting the speakers, the audience was just tagging along. You can’t really expect to learn much from them. Conferences are more about being part of a circle.

Regarding Unix programming or programming languages, I genuinely like them. I can imagine the joy of writing commands to achieve the desired results, which is a primitive source of happiness for a programmer. If I wanted to learn this content, I now have reliable sources of information, effective and clear methods, and given enough time, I could comprehensively and systematically master these topics and their details.

However, I always feel that I should focus on more “advanced” or “higher-level” things. I don’t even know what “advanced” and “higher-level” mean here, but I always feel that there are more important things I need to understand and master, and I can’t afford to spend time on these things.

Update on 2022.02.16

Recently, I encountered a problem at work that might be unsolvable. It involves rewriting a Golang smart contract in Solidity to run on Ethereum. Part of it is based on Bulletproofs (a type of zero-knowledge proof) to prove the integrity of files. Setting aside whether Solidity’s expressiveness can implement Bulletproofs, zero-knowledge proofs have always been my blind spot. I can’t write them in any language, and the source files contain magic numbers, a binary file, and a seed list whose origins I don’t know.

Of course, work problems should be solved at work. This made me ponder some issues and feel confused. For instance, what kind of person can write a Bulletproofs implementation? Why can’t I? Where is the gap, and how big is it? What is the learning cost of Bulletproofs, and how high is the threshold?

A few days ago, I asked about this in a chatroom (https://t.me/c/1711254099/593):

Hi everyone, I’d like to take this opportunity to ask for your opinions.

Recently, while learning about zero-knowledge proofs, I found the principles quite difficult to understand. To implement a system like Bulletproofs in code (https://cathieyun.medium.com/building-on-bulletproofs-2faa58af0ba8), merely knowing programming languages and how to program is not enough. Some additional (cryptographic) prerequisite knowledge is required.

This made me think that a programmer’s job, or designing software or protocols, crucially involves applying programming skills to various fields, and mastering programming languages might be the most basic skill.

In the article “Demystifying Computer Science,” it is mentioned that the article covers all aspects of computation. Bulletproofs, at its core, is computation too, but much more complex, right?

Therefore, I’m not sure about this view: computer science is actually at a relatively “fundamental” level, and studying programming languages is a highly specialized task that is not suitable for most people? Even if someone is very skilled in programming, they still need to spend a lot of time learning about other fields.

This was in a chatroom dedicated to discussing programming languages, so my message emphasized the concept of programming languages. Immediately, someone replied (https://t.me/c/1711254099/595):

I think different programming languages are similar to basic materials like steel and wood. If I want to make a stool, I can use wood by simply understanding its properties. If I want to make a knife, I can use steel, also quite straightforward. But if I want to make a car chassis, I need to understand more about steel properties and mechanics. Building a skyscraper requires learning about architecture and combining material properties with architectural knowledge. Computer + audio knowledge = digital music; computer + graphics + design knowledge = Photoshop, etc.

He vividly compared the relationship between programming languages and domain knowledge. A few days later, another person agreed with my view (https://t.me/c/1711254099/757):

For the definition of computation, I’d like to quote from Yin’s blog: computation is “mechanical information processing.”

Programming languages are tools/methods for expressing “computation.” In SICP’s words, they “capture how-to knowledge.”

So, knowing programming languages allows one to express domain knowledge. Studying programming languages aims to create better tools (to enhance expressiveness).

Even if someone is very skilled in programming, they still need to spend a lot of time learning about other fields.

Totally agree.

In short, being able to write code is not enough! Knowing only programming languages is insufficient!

Update on 2022.03.05

To what extent should programming languages be studied? My view is, study them to a usable extent. For different people, “usable” has different meanings and needs to be weighed by oneself.

A few days ago, I watched a video about personal development, which should be the first result if you search on YouTube. It mentioned a few sentences, roughly meaning, “When you’re looking for a job, don’t worry about what you will get, but about what you will become.”

If you want to become a programming language expert, devote all your efforts to studying programming languages. If you want to become a specialized senior developer, focus on the technical direction of your position. If you have no goals or ambitions elsewhere, lower your programming skill requirements and “don’t study programming languages.”

So the most important question is, what kind of person do you want to become?