Programming Language Family Tree
Two kinds of family ties
Languages are related in two distinct ways, and it helps to keep them separate:
- Influence, a design lineage. Python borrowed readability from ABC and list handling from Lisp, but no Python code came from them.
- Implementation, what a language is built in. Python's reference interpreter, CPython, is written in C. That is a concrete dependency, not just inspiration.
Most "family tree" diagrams only show influence. This atlas tracks both, which is why C sits at the center of so much of the graph: dozens of languages were inspired by others but are implemented in C.
The roots (1950s)
The first high-level languages established the paradigms everything else descends from. Fortran (1957, John Backus at IBM) pioneered imperative scientific computing and proved a compiler could match hand-written assembly. Lisp (1958, John McCarthy) introduced functional programming, garbage collection, the REPL, and the radical idea of treating code as data. COBOL (1959, Grace Hopper and CODASYL) brought English-like syntax to business computing, and still runs much of the world's banking.
The ALGOL line and the birth of C (1960s–70s)
ALGOL introduced block structure and lexical scoping, the grammar of nearly every modern language. That line ran through BCPL to B and then to C (1972, Dennis Ritchie at Bell Labs). C became the implementation language of choice for operating systems and runtimes, it is what Unix, and later Linux, are written in. Its descendant C++ added object orientation and templates, and C became the runtime language for Python, Ruby, PHP, Lua, and many more.
The functional and object-oriented branches (1970s–90s)
Two influential branches grew in parallel. On the functional side, ML introduced powerful static type inference, leading to Haskell, OCaml, and later F#, and OCaml is where the first Rust compiler was written. On the object-oriented side, Smalltalk defined pure OOP and the modern IDE, shaping Python, Ruby, and Objective-C. Java (1995) then took managed runtimes and garbage collection mainstream with the JVM, and JavaScript (1995) brought dynamic scripting to the web.
The modern era (2000s–2020s)
Today's languages synthesize all of these threads. Go (2009) revived the simplicity of C with built-in concurrency. Rust (2010) combined ML-style types with systems-level control and memory safety without a garbage collector. Swift and Kotlin modernized mobile development, and TypeScript added a type system on top of JavaScript. Each one is a remix of decisions made decades earlier.
Follow the threads yourself
Pick any language and trace it both ways: what it borrowed, and what it is built from. See the full influence map, the compiler implementation relationships, or read how a language comes to compile itself.
Explore the Family Tree in Graph →