Skip to content

Programming Language Landscape

Preface

Why are there so many programming languages? Which one should you learn? This chapter takes you from "language evolution" to "programming paradigms" to "how to choose," building a panoramic understanding of programming languages. Bottom line first: there is no best language, only the most suitable language for the scenario.

What will you learn from this article?

After completing this chapter, you will gain:

  • Rational technology selection: When facing "what language to learn," make judgments based on project requirements rather than blindly following trends
  • Deep paradigm understanding: Understand that "object-oriented" and "functional programming" are different ways of thinking, not just syntax differences
  • Historical evolution perspective: See 70+ years of language evolution — from hand-writing 0s and 1s to natural language generating code
  • Foundation for further learning: Build a foundation for understanding new language design philosophies and making technology selection decisions
ChapterContentCore Concepts
Chapter 1Language EvolutionFrom machine language to high-level languages
Chapter 2Programming ParadigmsImperative, object-oriented, functional
Chapter 3Language SelectionScenario-driven selection method

0. How Do Humans "Talk" to Computers?

Imagine you need to communicate with a robot that only understands binary:

  • Directly typing 0s and 1s — Most primitive, extremely inefficient; one wrong 0 or 1 and everything breaks (machine language)
  • Using mnemonics insteadMOV AX, 1 is much easier to recognize than 10110000 00000001 (assembly language)
  • Using near-natural languageint sum = 1 + 2; humans can read it directly (high-level language)

Programming languages are the bridge for human-computer communication, evolving for over 70 years toward "closer to human thinking."


1. The Evolution of Programming Languages

Click around below: Explore the evolution of programming languages from the 1940s to today

Programming Language MapEvolution · paradigms · type systems · language comparison
1940s
Machine language
Binary
1950s
Assembly and early high-level languages
AssemblyFortranLispCOBOL
1970s
Systems programming era
CPascalSmalltalk
1980s-90s
OOP and the Internet
C++JavaPythonJavaScript
2000s
Modern languages
C#GoScalaRuby
2010s+
Next-generation languages
RustSwiftKotlinTypeScript
2000sModern languages
Language design focused more on developer productivity and safety. Go was created for cloud-native infrastructure.
GoConcurrency-friendly and used to build Docker and Kubernetes
RubyRails brought a major productivity boost to Web development
Core idea:Programming languages have evolved from machine code to modern high-level languages, steadily moving closer to human thinking.

One-Sentence Summary

The trend in programming language evolution: increasingly close to human thinking, increasingly safe, increasingly efficient. From hand-writing 0/1, to assembly mnemonics, to C's structured programming, to Java's object-oriented approach, to Rust's memory safety — each generation of languages solves the pain points of the previous one.


2. Programming Paradigms: Ways of Thinking About Problems

Programming paradigms are not language features but ways of thinking — just as writing has different genres like poetry, novels, and essays.

2.1 Imperative — "Tell the computer step-by-step how to do it"

c
int sum = 0;
for (int i = 0; i < n; i++) {
    sum += arr[i];
}

2.2 Object-Oriented — "Encapsulate data and behavior into objects"

python
class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        print(f"{self.name} says woof!")

2.3 Functional — "Compose with pure functions, don't modify state"

haskell
sum = foldl (+) 0
-- Same input always produces the same output

2.4 Declarative — "Just say what to do, not how to do it"

sql
SELECT name FROM users WHERE active = true
-- The database decides the most efficient way to query

In Practice

Most modern languages are multi-paradigm. Python supports both object-oriented and functional programming; JavaScript does the same. Don't fixate on "which paradigm is best" — choose the most appropriate approach for the problem.


3. Type Systems: Traffic Rules for Data

Strongly TypedWeakly Typed
StaticJava, Rust, TypeScript — SafestC, C++ — Efficient but requires caution
DynamicPython, Ruby — Flexible and safeJavaScript, PHP — Flexible but error-prone

Key question: What does "1" + 1 equal?

  • JavaScript (weakly typed): "11" — silently converted for you
  • Python (strongly typed): TypeError — forces you to think clearly

Want to dive deeper into type systems? → Introduction to Type Systems | Introduction to Compiler Principles


4. Compiled vs Interpreted

CompiledInterpretedJIT
ProcessTranslate everything first, then runRead and execute line by lineInterpret first, compile hot spots later
SpeedFastestSlowerMedium
DebuggingRequires compilation waitInstant feedbackInstant + optimization
RepresentativesC, Rust, GoPython, RubyJava, JavaScript

5. How to Choose a Programming Language?

Choose by Scenario

ScenarioRecommended LanguageReason
Web FrontendJavaScript, TypeScriptBrowsers only understand JS
Web BackendGo, Java, Python, Node.jsMature ecosystems
Mobile DevelopmentSwift (iOS), Kotlin (Android)Official recommendations
AI / DataPythonPyTorch, Pandas are all in Python
Systems ProgrammingC, RustDirect hardware control
Cloud NativeGo, RustDocker/K8s are written in Go

Learning Path Recommendation

  1. Python — Simplest syntax, entry point for the AI era
  2. JavaScript — Essential for web development, covers both frontend and backend
  3. TypeScript — Adds a type system to JS, experience static typing
  4. Go or Rust — Understand compiled languages and low-level concepts

6. Summary

Key Points

  1. Language evolution: From machine language to high-level languages, increasingly close to human thinking
  2. Programming paradigms: Imperative, object-oriented, functional, declarative — each has applicable scenarios
  3. Type systems: Static/dynamic, strong/weak — affect safety and flexibility
  4. Execution models: Compiled is fast, interpreted is flexible, JIT combines both
  5. No silver bullet: Choose languages based on scenarios rather than pursuing the "best language"

Next steps for learning: