How to learn programming from this book

Sections8
  1. General Purpose Languages
  2. Why Different Languages Exist
  3. When community is the deciding factor
  4. When language design is the hard limit
  5. The takeaway
  6. Accept That Different Languages Exist
  7. Design of This Book
  8. Why C++

General Purpose Languages§

C++, Java, JavaScript, Python, Go, Rust, Fortran, and MATLAB are all general-purpose languages. This means that, technically, they can be used to build anything imaginable — from an Operating System, Game Engine, Arcade Machine, or Vending Machine, to more modern things like the web, banking systems, and so on.

Meanwhile, languages like HTML, Markdown, and LaTeX are not general-purpose. They are domain-specific languages. HTML is designed specifically for marking down the structure of a website. LaTeX is designed specifically for rendering text-rich visuals like textbooks or PDFs. They are not meant to be used for general programming, and trying to use them outside their domain would be painful.

Why Different Languages Exist§

Put simply, throughout history, we know that a single language cannot be excellent in every single field, even among general-purpose languages. But here is the key insight that most beginners miss: it is rarely the language itself that is bad at something — it is usually the community around it.

A language's strength in a particular field is shaped by two forces:

  1. Language design — the actual rules and features built into the language.
  2. Community and ecosystem — the libraries, tools, documentation, and culture that people have built around it.

Of these two, the community is usually the dominant force. Let's look at some examples.

When community is the deciding factor§

It is possible to build an OS with Python, but you will not find an industry-standard operating system that uses Python at any level. Why? Not because Python the language is incapable of expressing OS logic — it can. But Python's runtime is slow, and more importantly, the Python community has never invested in building OS-grade libraries and tooling.

Interestingly, Java is in a similar technical position — it also runs on a virtual machine rather than compiling directly to native code. Yet Java is used in operating systems. Android uses Java and Kotlin extensively in its application framework layer (the part of the OS that handles apps, system services, and the user interface), even though the kernel underneath is Linux, written in C. The reason Java reached this level while Python didn't isn't about language capability — Python could technically serve the same role. It's about community: Google and the Android ecosystem invested heavily in building a Java-based framework layer, while the Python community never did.

At the kernel level — the deepest core of the OS — C and C++ remain dominant across Linux, Windows, and macOS, because kernel development demands the low-level memory control and performance those languages provide.

The same logic applies to C++ and web technology. C++ is not "bad at web" because the language can't do web — it absolutely can. But the JavaScript community has spent decades building an enormous ecosystem of web frameworks, libraries, and tooling that C++ simply cannot compete with. On top of that, C++ historically lacked a proper package manager, which made it harder for the community to even organize and share web libraries in the first place. So C++ stays out of the web not because of inability, but because of ecosystem.

This pattern is universal. C++ is never used for scripting, even though C++ interpreters exist. JavaScript is never used for high-FPS game engines, even though Node.js lets it run without a browser. MATLAB is never used for web servers, even though it's technically capable. In every case, the language can do the job — the community just never built the ecosystem for it.

And about machine learning and data analysis — Python remains the absolute king. This doesn't mean C++ can't do data analysis. Python dominates here for two reasons: strong community support, and a language design that happens to make data handling slightly easier. Both forces aligned in Python's favor.

When language design is the hard limit§

Sometimes, though, the language itself does create a genuine constraint. Take Rust and game hacking (writing cheat engines). Rust is general-purpose, but because memory and ownership safety is enforced at the language level, it is genuinely hard — not impossible, but hard — to write a cheat engine with it. Cheat engines need to read and write memory that doesn't belong to them, and Rust fights you every step of the way on that.

This is why C/C++ remains the absolute king for writing cheat engines: the language doesn't care if you access memory that should not be yours. It is up to the developer to handle ownership and safety. Here, the language design itself is the deciding factor, not just the community.

The takeaway§

So when you hear "language X is bad at Y," ask yourself: is it the language design, or is it the community? Most of the time, it's the community. And that means the "best language for a task" can shift over time as communities grow and shrink — which is exactly why Rust is now starting to enter web technology through WebAssembly, even though JavaScript ruled uncontested for decades.

Accept That Different Languages Exist§

Once you accept that different languages exist and consciously know about it, it becomes clear that to learn a language, the quickest and most logical way — with no harm — is to just memorize the syntax while working through practical projects, without asking why it is designed the way it is. Just like an average native English speaker in England or America will not ask why the word "language" means "a structured system of communication using spoken sounds, written symbols, or signs". "语言" in chinese, "idioma" in spanish, "Hol" in Klingon all have the same meaning just in different langauge. Native speakers just use it and learn it throughout conversations, because it is how we communicate.

Unless you are a linguist or historian, but that is irrelevant to communication.

Design of This Book§

Therefore, once we have the basics down (learning the ABCs), we will not be going down the rabbit hole of the language itself. Rather, we will be working through examples and examples, learning the language along the way.

Why C++§

Because it is the lowest level we can get while having cross-platforness, it can be run on mac, linux, windows, android, whatever. But assembly ( one step lower level ), cannot do that.

C? For anyone who heard about C language, C is technically lower level than C++, but a carefully crafted C code can be compiled with the C++ compiler, so mastering C++ is already mastering a mojority of C.

Discussion

no comments
Commenting as a guest — sign in to comment as yourself.

No comments yet — yours could open the discussion.