Vai al contenuto principale
Bethemesh
StoriaStoria dell’informatica

Python: readability, batteries included, and a global ecosystem

From ABC to Python’s steering council, discover how readability, extensibility, and community governance shaped the language.

Pubblicato 17 agosto 2026Lettura : 16 minDi Bethemesh Team
Principiante
Python represented through readability, batteries included, and a global ecosystem
Mostra indice
  1. Before Python: the ABC experience
  2. Christmas 1989: a personal project
  3. Why the name Python?
  4. 1991: the first public release
  5. Indentation as syntax
  6. “Batteries included”
  7. Modules, packages, and reuse
  8. Python 1.0
  9. From CWI to CNRI
  10. PEPs: documenting change
  11. Python 2.0
  12. The Python Software Foundation
  13. PyPI and the package ecosystem
  14. Python on the Web
  15. Python 3: choosing to break compatibility
  16. Python 2 versus Python 3
  17. NumPy and scientific computing
  18. Jupyter and interactive computing
  19. pandas and data science
  20. Python and artificial intelligence
  21. How Python can be fast without always being fast
  22. The GIL
  23. A language for education
  24. Automation and scripting
  25. The evolution of typing
  26. Guido van Rossum as BDFL
  27. The Steering Council
  28. A global community
  29. Python compared with Java, JavaScript, and C++
  30. Criticism of Python
  31. Why Python succeeded
  32. From personal project to global infrastructure
  33. Key takeaways
  34. Frequently asked questions
  35. Who created Python?
  36. Why is it called Python?
  37. Is Python compiled or interpreted?
  38. What is the difference between Python 2 and Python 3?
  39. Why does Python use indentation?
  40. Why is Python popular in AI?
  41. Is Python object-oriented?
  42. What is PyPI?
  43. Does Guido van Rossum still lead Python?
  44. Why does Python remain important?

Python is now used in fields that once seemed far apart: system scripting, Web applications, data science, education, automation, artificial intelligence, and scientific computing. Its versatility can make it seem as though it was designed from the beginning to become a universal language.

Its origins were much more modest.

Python began in the late 1980s as a personal project by Guido van Rossum, then a developer at CWI, the Dutch research center for mathematics and computer science. His goal was not to replace every other language, but to create something pleasant to use, readable, extensible, and powerful enough for everyday programming.

Over the following decades, that emphasis on clarity would become one of Python’s strongest identities.

Before Python: the ABC experience

To understand Python, it helps to begin with ABC.

At CWI, Guido van Rossum worked with the team developing ABC, a language designed to be easy to learn, with clear syntax and high-level abstractions.

ABC was intellectually influential but saw limited adoption.

Van Rossum retained several of its strengths: readability, convenient built-in data types, and syntax with less visual noise than lower-level languages.

He also saw its weaknesses. ABC was relatively closed, difficult to extend, and poorly integrated with Unix and libraries written in other languages.

Python would inherit ABC’s concern for clarity while deliberately correcting its lack of extensibility.

Christmas 1989: a personal project

During the Christmas holidays of 1989, Guido van Rossum began writing a new interpreter.

He wanted a language that could bridge the gap between shell scripts and larger programs.

Its syntax should remain readable, but it also needed to interact easily with the operating system and existing code.

Extensibility became fundamental.

Python would develop a particularly close relationship with the C language: its reference implementation, CPython, is written in C and supports native extensions.

Why the name Python?

Despite the familiar logo, the language was not named after the snake.

Guido van Rossum was a fan of the British comedy group Monty Python and wanted a short, distinctive, slightly irreverent name.

He chose Python.

Monty Python references remained common in documentation and programming examples for years.

1991: the first public release

In February 1991, van Rossum announced Python on Usenet.

The early language already contained recognizable features such as functions, exceptions, modules, lists, and dictionaries.

It was interpreted and interactive. Developers could test an expression immediately at a prompt and use the same concepts in larger programs.

That short distance between an idea and a visible result became a major strength.

It also encouraged a style of development that still characterizes Python today: experiment first, inspect the result, then gradually turn the successful experiment into a reusable program. The interactive interpreter made the language useful not only for finished applications, but also for exploration, debugging, teaching, and one-off tasks.

Indentation as syntax

One of Python’s most visible characteristics is significant indentation.

Many languages delimit blocks with braces or keywords. Python uses indentation itself.

This can surprise programmers coming from C, C++, or Java, but it serves a deliberate purpose: the visual structure of a program should match its logical structure.

Bad indentation is therefore not merely unattractive; it changes the meaning of the code or makes it invalid.

Python turns a readability convention into a language rule.

The decision has sometimes been controversial, particularly among developers accustomed to braces. Yet it also removes an entire category of formatting disagreements: programmers may choose how to format many details, but they cannot make the visible block structure contradict the program’s actual structure. That close relationship between presentation and meaning became a concrete expression of Python’s broader emphasis on readability.

“Batteries included”

Python quickly became more than an interpreter.

Its standard library offered modules for files, text, dates, networking protocols, data formats, compression, testing, processes, and many other tasks.

This philosophy is often summarized as “batteries included.”

A Python installation should already contain a useful toolbox for solving common problems without immediately searching for an external dependency.

That approach made the language particularly attractive for learning and automation.

The standard library also reduced friction for professional developers. A script could parse command-line arguments, open compressed files, communicate over HTTP, manipulate paths, process structured data, and run tests without first assembling a large collection of third-party packages. External libraries would later become one of Python’s greatest strengths, but the standard library provided a dependable common foundation.

Modules, packages, and reuse

Python adopted a straightforward module model: a file can become an importable unit of code.

Modules can then be organized into packages.

This encourages reuse and made it increasingly easy to build an external ecosystem.

Python’s success would therefore come not only from the language itself but also from making code sharing simple.

This modularity also helped Python scale beyond small scripts. A project could begin as a single file and later be separated into modules and packages as its responsibilities grew. That gradual path from a quick experiment to a structured application fits Python’s philosophy particularly well.

Python 1.0

Python 1.0 was released in 1994.

The language already had a community and continued to acquire features.

Functional-programming concepts appeared while its object model developed.

Python is multiparadigm: it does not force every problem into one programming style, even though objects play an important role.

Our article on object-oriented programming places that model in its wider historical context.

From CWI to CNRI

In 1995, Guido van Rossum moved from the Netherlands to the Corporation for National Research Initiatives (CNRI) in the United States.

Python development continued there.

The community expanded as the Internet made collaboration easier, and Python began to spread beyond its original circle.

Growth also raised a governance problem: how should an increasingly important language evolve without depending entirely on informal decisions by its creator?

PEPs: documenting change

In 2000, Python introduced a mechanism that would become central to its development: Python Enhancement Proposals, or PEPs.

A PEP documents a significant proposal concerning the language, its library, its processes, or its governance.

This makes decisions explicit and preserves the arguments behind them.

Some PEPs became famous.

PEP 8 defines widely used style conventions.

PEP 20, the Zen of Python, records aphorisms about the language’s philosophy, including “Readability counts.”

PEPs helped transform Python development into a documented community process.

They also created a durable historical record. A developer can often discover not only what Python does, but why a feature was accepted, rejected, or designed in a particular way. For a language maintained over several decades, that institutional memory is especially valuable.

Python 2.0

Python 2.0 was released in October 2000.

It introduced features including list comprehensions and improved garbage collection for reference cycles.

But Python 2 also began an era that would eventually expose one of the hardest problems in language design.

As adoption grew, historical decisions became increasingly difficult to correct without breaking existing programs.

The Python Software Foundation

The Python Software Foundation (PSF) was created in 2001.

The nonprofit organization protects Python-related intellectual property, supports the community, and helps fund development and events.

The PSF gave Python an institutional foundation independent of any single employer or the personal circumstances of its creator.

That independence became an important long-term advantage.

It also helped reassure users that Python was not simply a proprietary product whose future depended on the strategy of a single vendor. Companies could build important systems around the language while the wider community retained an institutional structure devoted to the project itself.

PyPI and the package ecosystem

No standard library can cover every possible need.

The Python Package Index, or PyPI, became the central repository for Python packages.

Together with pip, it made installing external software remarkably easy.

A few commands could add a Web framework, network client, scientific library, or automation tool.

This produced a powerful feedback loop: more packages made Python more useful, and greater adoption produced still more packages.

The package ecosystem eventually became so large that choosing and maintaining dependencies became a challenge of its own. Virtual environments, dependency files, build standards, and newer packaging tools all emerged partly to manage that success. Python’s packaging story has therefore been both a major strength and a recurring source of complexity.

Python on the Web

Python became an important server-side Web language.

Django, released as open source in 2005, provided a comprehensive framework for building Web applications.

Flask later popularized a more minimal approach.

FastAPI brought modern API development and extensive use of type annotations.

Python did not compete with JavaScript for its historical role inside the browser. Instead, it became one of the major choices on the server.

Python 3: choosing to break compatibility

Python’s biggest technical turning point arrived in December 2008 with Python 3.0.

The developers chose to correct several historical inconsistencies even though some changes were incompatible with Python 2.

That was a risky decision for an already successful language.

Among the visible changes, print became a function and text handling was reorganized around Unicode.

The result was a more coherent language, but migration proved much slower than expected.

The change was particularly significant for text processing. Python 3 made a clearer distinction between human-readable Unicode text and raw byte sequences, an important improvement for software operating in an increasingly international and networked world. The cleaner model reduced ambiguity, but applications that had relied on Python 2 behavior often needed deliberate changes.

Python 2 versus Python 3

For more than a decade, two Python generations coexisted.

Many applications and libraries remained on Python 2 because migration required time and introduced risk.

Library maintainers sometimes had to support both versions.

Tools and conventions emerged for writing compatible code.

The transition became a classic lesson in software compatibility: fixing a design can be technically desirable while imposing enormous costs on a mature ecosystem.

Official support for Python 2.7 finally ended on January 1, 2020.

Python 3 became the undisputed modern branch.

The episode also influenced how the project approaches compatibility today. Modern Python generally prefers incremental evolution and deprecation periods rather than another large ecosystem-wide break. The long Python 2-to-3 migration demonstrated how strongly a successful language is constrained by the software already built with it.

NumPy and scientific computing

Scientific computing became one of the strongest drivers of Python adoption.

Pure Python is not always fast for intensive numerical loops.

But Python excels as an orchestration layer around optimized native libraries.

NumPy provides multidimensional arrays and efficient numerical operations implemented largely in native code.

SciPy adds scientific algorithms.

Matplotlib became a standard visualization library.

Python thus provides an accessible high-level interface over high-performance components written in languages such as C, C++, and Fortran.

This architecture fulfills the extensibility goals present from the language’s earliest days.

It also explains an apparent paradox in Python’s reputation. Researchers can write concise, high-level Python while numerical kernels execute in highly optimized native code underneath. Python becomes the language in which the computation is described and assembled, even when it is not the language performing every machine-level operation.

Jupyter and interactive computing

Interactive notebooks became another major development.

IPython and later Jupyter allowed executable code, prose, equations, and visualizations to coexist in one document.

This model fits research, teaching, and exploratory analysis particularly well.

A scientist can describe a method, run the calculation, and display the result in the same environment.

Python became not just a programming language but a scientific workspace.

Notebooks also changed how computational work could be communicated. Results, explanations, charts, and executable steps could travel together, making analyses easier to demonstrate and reproduce. This model spread well beyond academic research into data analysis, training, documentation, and prototyping.

pandas and data science

pandas introduced data structures designed for tables and time series.

Together with NumPy, Jupyter, and visualization libraries, it helped make Python a major platform for data science.

Analysts could load a CSV file, clean data, aggregate it, plot it, and prepare a model without changing languages.

That continuity of tools was a major advantage.

Instead of forcing analysts to move repeatedly between a spreadsheet, a statistics package, a plotting application, and a general-purpose language, Python could increasingly cover the complete workflow. Specialized tools remained valuable, but Python provided a common environment in which the different stages could be automated and reproduced.

Python and artificial intelligence

Python’s recent growth is closely connected to machine learning and AI.

Libraries such as scikit-learn make classical algorithms accessible.

TensorFlow and PyTorch use Python as a primary interface while heavy computation is performed by highly optimized components, often on GPUs.

Again, Python acts as a coordination language.

Its concise syntax helps researchers express ideas quickly while lower layers provide performance.

This balance helped make Python dominant in many AI workflows.

The ecosystem also benefited from network effects. Research papers, tutorials, pretrained models, notebooks, and new libraries were frequently published with Python interfaces. As more researchers adopted those tools, supporting Python became even more important for new AI projects, reinforcing its position.

How Python can be fast without always being fast

Saying “Python is slow” is true in some contexts and misleading in others.

CPython generally executes pure Python code more slowly than optimized native C or C++.

But Python applications can delegate expensive operations to native libraries.

NumPy can operate on millions of values without running a Python loop for each element.

This architecture preserves a productive high-level layer while using low-level performance where it matters.

The GIL

CPython has historically used the Global Interpreter Lock, or GIL.

It simplifies aspects of interpreter memory management but limits simultaneous execution of Python bytecode by multiple threads within one process.

The limitation is often misunderstood.

It does not mean Python cannot perform concurrency or parallel work. Applications can use multiple processes, overlap I/O operations, or execute native extensions outside the lock.

The issue remains important, and modern Python is exploring and implementing optional free-threaded execution models.

This work is technically delicate because decades of Python extensions and assumptions about CPython’s runtime behavior must continue to function. Removing a long-standing limitation is therefore not simply a matter of deleting a lock; it requires changes throughout the interpreter and ecosystem while preserving the compatibility users expect.

A language for education

Python’s readability gives it a special place in education.

Beginners can display a value, manipulate a list, or define a function with relatively little syntax.

That does not make Python a language only for beginners.

The same syntax can support professional tools, Web services, data pipelines, and scientific software.

The continuity between learning and production is one of Python’s unusual strengths.

A student can learn variables, loops, functions, and data structures without first confronting extensive boilerplate. Later, those same foundations remain relevant when using professional libraries and frameworks. This helps explain why Python became common in schools, universities, coding courses, and introductory computer-science programs.

Automation and scripting

Python also became an everyday tool for administrators, engineers, and developers.

Renaming thousands of files, calling an API, transforming JSON, automating a deployment, or generating a report can often be done in a short script.

The language occupies a useful space between compact shell commands and large structured applications.

That position closely matches one of the original motivations for its creation.

The evolution of typing

Python is dynamically typed, but its ecosystem gradually added type annotations.

They allow developers to describe expected types without necessarily turning Python into a mandatory statically typed language.

Tools such as mypy and IDE analyzers can use this information.

Annotations also became central to frameworks such as FastAPI.

Python therefore retains dynamic flexibility while offering more support for maintaining large codebases.

Importantly, type hints were introduced in a way that largely preserves Python’s traditional execution model. The interpreter does not normally enforce them at runtime. Teams can therefore adopt static analysis gradually, applying stricter rules where they provide value without changing the fundamental nature of the language.

Guido van Rossum as BDFL

For many years, Guido van Rossum carried the humorous title Benevolent Dictator For Life, or BDFL.

He had the final word on some language decisions.

That model worked while the project remained closely connected to its creator, but Python eventually became too large to depend permanently on one person.

In 2018, after a difficult debate around PEP 572 and the := operator, van Rossum stepped down from the BDFL role.

Python needed a new governance model.

The Steering Council

After van Rossum’s departure, the community considered several governance proposals.

It ultimately adopted an elected Steering Council.

PEP 13 defines the model.

Python could now continue evolving without simply replacing its original BDFL with another permanent leader.

The transition was significant: a project started by one developer had become institutionally capable of outliving its founder’s leadership.

Van Rossum remained an influential member of the broader Python world, but the language no longer required a permanent individual arbiter. Governance itself had become part of the project’s engineering: decisions needed a process that could remain legitimate as contributors, companies, and technical priorities changed.

A global community

Python would not be what it is without its community.

PyCon conferences, local groups, open-source projects, documentation, forums, and educational initiatives spread the language worldwide.

The community also places considerable emphasis on welcoming new contributors.

Technical disagreements still exist, but community culture became part of Python’s identity alongside the language design itself.

Python compared with Java, JavaScript, and C++

Python occupies a different position from other major languages.

Java emphasizes a structured JVM platform, static typing, and a huge enterprise ecosystem.

JavaScript has a unique position as the browser’s native programming language.

C++ provides fine control over resources and performance.

Python emphasizes development speed, readability, and the ability to connect existing components.

Those trade-offs explain both its extraordinary popularity and why it is less suitable for some real-time or memory-constrained systems.

This is an important distinction because popularity does not make a language universally optimal. Python often wins when developer time, experimentation, ecosystem access, and maintainability matter more than predictable low-level resource control. Other languages remain preferable when latency, memory layout, binary size, or direct hardware interaction dominate the requirements.

Criticism of Python

Success does not eliminate weaknesses.

CPython performance can be limited for pure-code computational workloads.

Dynamic typing can move some errors to runtime.

Environment and dependency management have historically caused confusion.

The GIL restricts some multithreaded execution models.

And the language’s flexibility can lead to very different coding styles across teams.

The ecosystem continues to address these issues through typing tools, packaging improvements, linters, formatters, and interpreter changes.

Tools such as Black, Ruff, pytest, modern language servers, and increasingly standardized project metadata have also made professional Python development more consistent. The language’s simplicity at first contact is therefore complemented by a sophisticated engineering toolchain for larger projects.

Why Python succeeded

Python’s success does not come from one breakthrough.

Readable syntax lowers the entry barrier.

An interactive interpreter accelerates experimentation.

Native extensions allow Python to act as a friendly interface to high-performance libraries.

PyPI makes an enormous package ecosystem accessible.

Its community spans the Web, education, automation, research, and AI.

Python became a connecting language, linking people, disciplines, and technologies that might otherwise use entirely different tools.

From personal project to global infrastructure

When Guido van Rossum began Python during the Christmas holidays of 1989, he could not have anticipated its future role in data science or artificial intelligence.

Yet several early choices proved remarkably durable: readability, extensibility, high-level data types, and rapid experimentation.

The ecosystem amplified those qualities.

Python demonstrates that a language can become dominant not by winning every technical benchmark, but by offering an unusually effective balance of simplicity, power, and interoperability.

Key takeaways

Python began at CWI in late 1989, created by Guido van Rossum after his experience with ABC.

The first public version appeared in 1991.

The language emphasized readability, significant indentation, high-level data structures, and extensibility.

Python 2.0 arrived in 2000, and the Python Software Foundation gave the project institutional support.

Python 3.0, released in 2008, deliberately broke some compatibility to correct historical design problems. Migration from Python 2 lasted more than a decade.

Meanwhile, PyPI, NumPy, SciPy, pandas, Jupyter, Django, and countless other libraries turned Python into a global platform.

Data science and artificial intelligence accelerated its adoption further.

After Guido van Rossum stepped down as BDFL in 2018, an elected Steering Council took responsibility for governance.

Python evolved from a personal project into community infrastructure used across nearly every area of computing.

Frequently asked questions

Who created Python?

Python was created by Guido van Rossum at CWI in the Netherlands. He began the project in late 1989 and released it publicly in 1991.

Why is it called Python?

The name comes from the British comedy group Monty Python, not from the snake.

Is Python compiled or interpreted?

In CPython, source code is compiled into an intermediate bytecode and then executed by the interpreter’s virtual machine. Other implementations can use different strategies.

What is the difference between Python 2 and Python 3?

Python 3 corrected several historical inconsistencies through incompatible changes. Python 2 has been unsupported since 2020.

Why does Python use indentation?

Indentation makes block structure visually explicit. Python makes it part of the syntax so visual and logical structure remain aligned.

Its syntax supports rapid experimentation, while libraries such as NumPy, scikit-learn, TensorFlow, and PyTorch execute heavy computation in optimized native code.

Is Python object-oriented?

Python fully supports object-oriented programming but is multiparadigm and also supports procedural and functional styles.

What is PyPI?

PyPI is the central repository for Python packages, commonly installed with pip.

Does Guido van Rossum still lead Python?

No. He stepped down as BDFL in 2018. Python now uses community governance with an elected Steering Council.

Why does Python remain important?

Its readability, huge ecosystem, interoperability, and adoption in automation, the Web, science, and AI make it unusually durable.

Fonti e riferimenti

  1. 1.Python — History and License
  2. 2.CWI — 25 Years of Python
  3. 3.PEP 13 — Python Language Governance

Raccolta

Linguaggi di programmazione

  1. 01Grace Hopper: from early compilers to COBOL
  2. 02John Backus: FORTRAN, BNF, and the rejection of machine code
  3. 03Dennis Ritchie: the C language at the heart of Unix
  4. 04FORTRAN: proving that a compiler could compete with assembly
  5. 05The C language: making systems portable without hiding the machine
  6. 06Niklaus Wirth: from Pascal to Oberon, designing through simplicity
  7. 07Bjarne Stroustrup: designing C++ without giving up performance
  8. 08Pascal: learning to program by making structure visible
  9. 09C++: from C with Classes to a general-purpose language
  10. 10Object-oriented programming: objects, messages, and reusable abstractions
  11. 11Guido van Rossum: creating Python to make code readable
  12. 12Brendan Eich: JavaScript, from Netscape prototype to Web standard
  13. 13James Gosling: the engineer behind Java
  14. 14Python: readability, batteries included, and a global ecosystem
  15. 15Java: write once, run anywhere
  16. 16JavaScript: the language that made the Web interactive
  17. 17Ken Thompson: from Unix to Go, simplicity as a method
  18. 18John McCarthy: Lisp and the idea of programming with symbols
  19. 19Alan Kay: Smalltalk and the computer as a personal medium
  20. 20Barbara Liskov: the abstraction that made software modular
  21. 21Robin Milner: ML, machine-assisted proof, and languages of interaction
  22. 22Brian Kernighan: AWK, Unix, and the art of explaining code
  23. 23Anders Hejlsberg: from Turbo Pascal to C# and TypeScript
  24. 24Larry Wall: Perl, the language that connected the tools of the Internet
  25. 25Yukihiro Matsumoto: Ruby and programmer happiness
  26. 26Rasmus Lerdorf: PHP and the democratization of the dynamic Web
StoriaStoria dell’informaticaPrincipiante

Java: write once, run anywhere

From Project Green to OpenJDK, discover how Java built portability around bytecode, the JVM, and a long-lived ecosystem.

17 agosto 202612 minLeggi

Questo articolo ti è stato utile?