1. Python was designed by testing syntax with novice users to see what they could adopt easily.[1] > 90% of current Python users weren’t born when it was created. They all had to learn, and Python is the easiest language to learn because Guido and his teammates, unlike $LANGUAGE_DESIGN_GOD, approach the problem as experimental scientists rather than auteurs.
2. Python is conceptually compact, dominated by hash tables with string keys. The initial leader in the ecosystem, Perl, is conceptually sprawling and difficult to reason about.
3. Python also took lessons from the Unix shell, a mature environment for accommodating beginners and experts.
4. Python had a formal process for integrating C modules from early on.
5. Python’s management has an elegant shearing layer structure, where ideas can diffuse in from anywhere.
6. $NEXT_GENERAL_PURPOSE_LANG (Ruby, Go) weren’t enough better to displace Python. Both were heavily influenced by Python’s syntax, but ignored the community-centric design process that had created that syntax in favor of We Know Best.
7. Speaking of open source entrepreneurialism, JavaScript has become a real rival thanks to the Web (and node), but it is handicapped by the inverse failure mode: where Go is dominated by a handful of Googlers, JavaScript was effectively unmanaged at the STDLIB level for a crucial decade, and now it can’t recover. (I’d also guess that having to write a module system that works well in the chaos that is Web clients and simultaneously the Unix world is a daunting design problem.)
9. Python got lucky that its inevitable screwups (Python3) didn’t quite kill it.
10. Swift and Kotlin both define programming as serving the compiler (specifically LLVM) rather than serving the coder’s problem. (I haven’t discussed Rust so far since it isn’t attempting to compete with 98% of Python use cases, but if you squint you can see it as going one step further than Swift and Kotlin and in effect forcing the coder to be a sort of human compiler who thinks in types and memory management. This is not a criticism of Rust, BTW.)
0. And behind all of this is Moore’s Law and the demographic explosion of programmers. Python was an implicit, perhaps unconscious bet that if you served people thoughtfully, the tradeoffs with serving the needs of contemporary silicon wouldn’t matter as much.
I can't stop thinking about this. WRT Perl specifically, it’s fascinating how the two competitors adopted Unix shell patterns. Python is handicapped to this day by not automagically snarfing up environment variables, etc. But Perl leaned hard into TECO-style gibberish and the meta-syntax that is regular expressions, confronting beginners with arbitrary complexity. It feels like Wall embraced the system administrator side of coding — the side that has an enormous capacity for tracking corner cases and managing impedance mismatches. Wall was trained, perhaps not coincidentally, as a linguist, a field where continent facts really matter. Guido, on the other hand, was an accomplished mathematician. (This is the Dwarf / Elf distinction from Cryptonomicon.)
It's hardly "inexplicable"... particularly if you're comparing it to Perl, a famously hard to read language.
* Python has clean and readable syntax that a complete beginner can understand -- it's really close to the pseudocode you might use for teaching.
* Python has a good standard library, so you can do a lot before you need to work out how to install more (and, reproducibility concerns aside, `pip install` is really simple once you get there)
* Because it was easy to pick up and easy to use for teaching, it took over some niches like stats in academia / data-analysis, where the people doing the work aren't professional programmers but just need something they can hack together. Once NumPy existed, people had minimal incentive to move away.
(Insert Marge Simpson "I just think it's neat" gif here.)
> If you survey the language landscape now, a language can be much better than Python but never get the chance Python did just because it happened to look a bit better than Perl. Which is absurd to me.
You’re struggling to understand Python’s success because in your head the primary reason Python succeeded was because it happened to be prettier than Perl, and you can’t wrap your head around why that’s enough. But it’s not enough. Python succeeded for many reasons.
My gut feeling is that it succeeded due to escaping scrutiny. I had heard enough critiques of the language from CL folks but the rest of the world was just happy to get a nicer Perl that could be used to glue together C code into useful apps and scripts.
With respect, lispers are probably not the best people to ask how to make a widely adopted language.
Regardless, you’re regurgitating exactly what I said. Your gut is that Python was just a slightly better replacement for Perl. This is at best one dimension. If you can’t broaden your perspective, then this thread full of examples and arguments for why Python became popular will be lost on you.
If you’re so confident in your assessment, why did you bother to ask?
> My gut feeling is that it succeeded due to escaping scrutiny.
You keep saying it, but from 2000-2010, what scrutiny did it escape, exactly?
Are you saying when universities dropped Java/C++ for the introductory course and replaced it with Python, they simply threw dice to pick the language?
Are you saying all the Perl programmers who kept saying "Python will never have the power of CPAN" didn't exist?
Are you saying Eric Raymond never wrote an essay on the virtues of Python?
Same as PHP, JavaScript, etc. Very easy to learn and fast start. They end up with large communities and the positive feedback loop of that.
On top of that, Python smartly focused on high level and allowed modules to be in lower level languages. Similar to Ruby but unlike Java and Javascript. At some point Ruby was more popular and cool, but it ended up with a toxic community, leaving Python to fill their niche. (Rust seems to be falling into the same trap, sadly)
I like to use Python for fast prototyping. But IMO, Python and similar languages end up being a terrible self-feeding black hole for most developers and they never truly learn other languages. Some even get stuck in a single framework. Many even refuse to learn SQL and enjoy reinventing wheels and shooting themselves in the foot with solved problems.
I think the reason python won was that it was easy to learn and read and was batteries included.
vs perl: People need to solve their problems, not fight with syntax
Theres a lot of network effects as well. The more people were using it, the more people will use it.
Perl had the batteries and it had CPAN. Python borrowed the best bits of Perl and enjoyed a reputation which overlooked its many flaws. If it had been scrutinized as much as Perl, we'd have realized it was just as bad but in different ways.
This makes no sense.. Python _was_ heavily scrutinized when it was introduced - the whole "Perl vs Python" comparison was pretty popular for a while, with either of those being declared winner, depending on the author.
If there is really a killer argument for Perl over Python that was overlooked in all those years, why don't you say that argument, or even better, write a blog post explaining why Perl is better than Python? Then we could discuss that instead of nebulous "different ways"/
Perl had charm, it was respected by hackers for the joy it brought people who 'got' it. It still remains a beautiful language that I regret not learning due to having a superior taste. Python had none of it. I still don't understand how it won, stealing the halo of a language while having nothing of the sort. The only argument you can make is boring is better imho.
> it was respected by hackers for the joy it brought people who 'got' it
Isn't that the crux of the issue? Perl was great if you're a hacker who 'got' it. For the remaining 95% of the population, Python worked.
Lisp/Scheme are also beautiful to those who 'get' it.
> I still don't understand how it won, stealing the halo of a language while having nothing of the sort.
Plenty of people have already told you. 95% of programmers do programming to get the job done. The linguistics grad student I knew 20 years ago did his work in Python because it was easy (he had no programming background). He would have simply changed his thesis topic if Python didn't exist. He would not have learned Perl.
> Isn't that the crux of the issue? Perl was great if you're a hacker who 'got' it. For the remaining 95% of the population, Python worked.
It’s really not the crux of the issue though. “Better than Perl for normal developers” is not a high bar. Most languages clear that bar whether they are successful or not. This is certainly not the only reason that Python became so successful.
Tangentially, in my experience Perl was great for one liners and small glue projects. I never saw significant, valuable works of code built in Perl even when I worked at a company (Yahoo) that widely used Perl. I am convinced that much of Perl’s beauty is in its cleverness and’s not in its utility for large projects.
> “Better than Perl for normal developers” is not a high bar. Most languages clear that bar whether they are successful or not.
Dial the clock back to 2002, and this statement is not true. Perl became popular not because of its beauty, but because of it being extremely effective glue. It was a language to get stuff done while writing little code.
Did you seriously start this thread just to ask people to confirm your bias?
In that case, yes. Perl is beautiful. Python sucks and only succeeded because idiot developers couldn’t see the beauty of Perl. Python is poorly suited at every job except stealing potential Perl devs.
I don't believe the "syntax win" scenario. Python is also ugly, due to the required indentation, like yaml.
I believe more in the ecosystem, specifically how the computer vision and machine learning movements have adopted python extensively as frontend language (the heavy weightlifting is still doing in C++).
The exploit of numpy has brought many many use cases into the language as well.
Indentation is there regardless, and is increasingly enforced by format-checking tooling which is more commonly an out-of-the-box offering for many ecosystems (gofmt).
So why not make it have syntactical meaning since it’s already there in 99% of cases?
It does feel weird at first but honestly it’s not something you’ll think about much after a while.
> don't believe the "syntax win" scenario. Python is also ugly, due to the required indentation, like yaml.
That's like, your opinion. Python was explicitly designed being easy to learn, borrowing heavily from ABC, which actually experimented with different syntaxes to see what works and what doesn't. The indentations apparently helps a lot with this, along with ':' before the introduction of indented blocks.
It's not about being beautiful or ugly, it's about being simple.
Python is simple to read / write and easier to reason about, especially for people that need a programming language to solve a problem but are not software engineers.
The reason it won, especially in data analysis, is because most data analyst are/were not software engineer and Python feels more natural to people.
The indentation is not a big problem when a decent text editor is used
That 'ugly' required indentation and whitespace also made Python easier to read, especially for newbies and casual coders. A standard visual structure and a syntax that is pretty close to executable pseudo-code lowered the barrier to entry for a lot of people and made Python feel 'approachable'. This perception that it was easy to use helped increase the network effects other have noted.
I was not exposed to much code before trying Python 2, and I always thought of the indentation and newlines as aesthetically pleasing and helpful. Same for yaml actually. Would argue that preferences on indentation etc. are just an acquired case.
"Ugly" is a very opinionated statement there. I personally find it's fine, and Python's required-indentation matches what I'd be doing anyway. It's no different to me than a project which lints indentation via something like gofmt.
I think the controversy around Python’s indentation helped it gain success. Regardless of how you feel about the choice, it’s a great opportunity for bike shedding and encouraged (and still encourages) a lot of talk about the language.
Because not many people prioritize syntax design like GvR. Even now if someone releases a new programming language most people will ask what features it has, how fast it is, how fast is the package manager etc. Because these questions are simple yes and no ones. Unlike syntax design choices.
Even if they ask about the syntax design people just dismiss their question with saying "syntax is not important". Python did the opposite, it focused on syntax over everything else. That caught on with beginners and now here we are.
Of course with AI Python got even more popular, but even before ChatGPT was released it was already dominant.
It was designed by a person with good taste, not by a committee. That's about it, there's nothing inexplicable or accidental about a well designed language rising to the top.
The excessive mentions of Perl are weird — it, along with PHP are prime examples of awful taste. Those are the languages that only gained any traction because they happened to be available at the time, not because they were any good.
You can't only look at it from the perspective of a software engineer. Ordinary people can read and write Python much more easily than a ton of other languages. It's very easy to get started, with basically no ceremony. Highly tolerant of user errors yet still allows one to grow with the language (nobody writes ABCs on their first day).
Python has issues, but those issues don't matter equally to everyone and every use case. Low barrier to entry, coupled with Metcalfe's law, explains a lot IMO.
I love Scheme, but not everybody does, and I can see why.
It felt pretty easy to read and write, had minimal surprises, and it made writing simple programs easy. The batteries-includedness was great.
It felt like it was designed by a smart guy for practical programming, rather than by a brilliant academic who was wed to purity for maximum elegance. It accepted some warts, but them in mostly ergonomic places.
It was dictated by people who could relegate map, filter, and reduce from builtins to the library. As much as I personally even liked map in particular (I am not super anti functional programming), it's nice to realize the designer had the taste to prefer longer but more explicit programs.
ys = [f(x) for x in xs]
ys = map(f, xs)
As much as I disliked that particular decision, there is no doubt to me that it is just designed for lower cognitive burden when doing simple/common things.
If you show both of those lines of code to a person in cs101 who has studied Java for a couple months but hasn't seen Python, I am pretty sure they are gonna understand the first line way quicker. Mostly consistent decision making like that leads to ergonomic, practical languages. And they win.
It fits in people's brains better. See also, pytorch vs tensorflow.
There is a network effect with programming languages. Once you get popular, more people write libraries and guides for that language, which in turn makes it even more popular.
If you were czar of the universe and could start from scratch, could a better scripting language be created? Sure. But that’s not the fact pattern, and Python isn’t bad enough at what it does to warrant starting over.
In short (all below is my opinion): it was popular in academia and got some corporate adoption, so when ML exploded in popularity it was a natural choice as the scripting language for ML tooling. On top of that it’s easy to pick up as a language, and it’s a general purpose language - there are lots of scientific tools like pandas written in it, there are web frameworks, etc.
Perl was too quirky for wide adoption and it stopped developing (Raku/Perl 6 took to long to develop), PHP was focused purely on the web, similarly JS. Ruby could have won, I like it more than Python, but outside of Japan it’s also mostly been associated with web development (because of Rails), it also lacked libraries that Python already had.
Nothing against Python but I still use Perl 5 because it works for what I need to do.
The Perl 6 redesign was announced in 2000 and it has been going on for 2 decades? Python is clearly a good programming language but the Perl 6 redesign took so long that many people gave up. Then it was renamed Raku in 2019 I think.
Python is easy to learn and has an extensive library catalog. It also has massive support available online. That's why I have chosen it in the past when I needed to write basic programs for work.
With the rise of LLMs, python is now even more attractive as LLMs really excel at writing it.
Against Perl? Over a decade ago. 10 years ago, the only places that required Perl were either hard engineering (i.e. non-programmer EEs) or those with legacy code bases.
Over everything else? Of course not. You don't do systems level work in Python.
The problems with Python are minor (other than packaging), and not a big enough pain to adopt another language. If you really could benefit from static typing, there are already existing languages that do the job well (C++, Rust, etc).
For the majority (including even some Perl fans), switching to Python was a significantly better experience. If you now show me a language better than Python, it's really only an incremental benefit. Sure, I prefer ML languages like F#, but the vast majority don't.
Python won because Google picked it over perl in the early 2000s, declaring that it was more uniform in having one preferred way to do things rather than allowing (in contrast to Perl) programmers having a zillion ways to do things.
Larry Wall, creator of Perl, coined the phrase, "make the easy things easy, and the hard things possible". But the things perl made easy were not always things that the market needed. Perl was very distrustful of enterprise disciplines and the perl culture "let a thousand flowers bloom" mentality (which they/we called "There's more than one way to do it"/(TMTOWTDI)) was not actually useful for organizations maintaining larger code bases/systems with large groups of mixed skill level people.
Python threaded that needle of centralizing a right way to do things (not just whitespaces) more effectively.
I also observed Scala suffering from similarly disfunctional "TMTOWTDI" dynamic in organizations I belonged to; different people had wildly different styles of solving even basic problems and it really made code hard to maintain even in smaller organizations where people came and went and new people were onboarded frequently.
Plus data science use cases saved Python's web/scripting lifespan in a way slightly analogous to AI/CUDA extending NVidia's 3D graphics-centric roots. (Although the python data science ecosystem nowdays does have some TMTOWTDI weaknesses that remind me of perl/cpan's choices of web development frameworks of the mid-2000s!)
I have recently gone all in on Python. Before I decided this, I was using Python for projects where I needed Pandas or numpy. I used React/TypeScript/Node for web applications. But, I moved to Django/HTMX.
The main reason is to avoid npm, but also, I wanted something with more built-in defaults (my web apps have simple needs). It has nothing to do with the language -- it's more the ecosystem for me.
I considered Ruby/Rails, but it didn't seem enough better than Python and can't replace the Pandas work I need to do.
Perl has so many ways to write the same code, no two codebases are the same - it's practically different languages. Back when I was programming Perl, I remember reading my own Perl scripts I wrote few years ago, and being annoyed with how they were doing everything all wrong... because in those few years, my Perl style has changed significantly. And others' scripts were even worse!
Plus, python had all those neat quality-of-life things useful for day-to-day scripting. For example actual function parameters, exceptions (no more "or die" after each open), pretty big stdlib (I _don't_ miss having to configure "cpan" on each new machine), repr() in language core, etc..
And yes, Python got lucky somewhat - there was a need for "Perl but easier to read and friendlier to new users", and Python has filled that need. And now that need is no longer open, so it's harder for newcomers to fill that niche. But that's life in general - Rust filled the niche of "No overheads like C++ but memory safe", Go has filled the niche of "Compiled systems language with GC" etc... And once a language gets popular, network effects kick in.
My 2c. And only my recollection. Back in the stone age, there were two that had significant mindshare: perl and python. Of course, there were others, and they had their day in the sun too (e.g. rexx, rebol, etc.). I suspect that python stood out, and developed momentum, because of its availability on, and integration with, Windows where many of today's senior devs were cutting their teeth. Particularly, I'd point out, Mark Hammond's contributions. Suddenly, you had an accessible language with a deep integration with the underlying OS. Perl had that too, if you were using one of the unices, but most eager devs weren't - back then, linux wasn't what it is today. Perl excelled at the traditional file-based (and filelike-based) tasks. It had a good niche in early web development using cgi. But, I think python was just both more accessible in general, and more useful in general than perl - without resorting to C, or C++, or another compiled language.
I don't know if you can point to a single feature, a lot of what makes a language successful is around context and placement (javascript being a great example of this).
I think there's a few key features for python that have definitely been a big help for it:
It's highly dynamic meaning you can get running with it before understanding every detail (no compile step, no static typing etc).
It may not be the best at everything, but is a decent choice for most things, making a good generic intro language for programming.
It has good interop with low level languages - this is a big deal for data science where a less technical (from a CS perspective) user still needs the performance of a language like C/Fortran/Rust/etc. Python's pattern of "use python as a high level api for libraries in those other languages" (as in numpy, pandas, polars, pytorch etc).
That last one has been a big deal recently, python has become the de-facto language for data science as a result of this.
Perl was my introduction to web programming in the 90s, and then I moved onto python and php.
Perl’s alien syntax and how there were multiple competing “best practices” put off newcomers and made it difficult to code review.
Perl also stagnated for quite some time due to the efforts to move to Perl 6, though python likewise stalled later it already had better traction at that point.
However I’d argue that Perl lost to PHP at least as much as it lost to python. PHP was revolutionary at the time for how easy and straightforward it was to do simple web programming which was one of the big use cases for Perl.
By the early 2010s there wasn't much of any use case that made sense to choose Perl. Sysadmin scripting was clearer to review and maintain in python and golang, web applications moved to php and frameworks written in languages that didn’t have the downsides of Perl.
IMO, Python rode some of the growth from the data and scientific computing computing. It was lower friction for many people partially due to the amount of blogs, and open source projects that were available. Pandas and Numpy made it quite easy to get up and running with a lot of analytics. pytorch and tensorflow were also there to facilitate this, made people able to get the benefits of the optimized C code but most users did not have to learn C. Eventually FastAPI came out for those looking to build products out of their data, and FastAPI had fantastic documentation and guides, which helped these same folks coming from data/scientific compute build working software. I suppose what I am describing are some of the network effects.
I often consider how many total human lifetimes must have been spent on nothing other than dealing with and/or mitigating something as seemingly banal as Python versioning & dependency management or line ending encoding snafus.
After all these years, I assume it must measure in the tens to hundreds of thousands?
It’s in those moments of consideration that I understand humanity hasn’t done a very good job grappling with its frailty and mortality. If we had, then we’d have a crowned a winner that didn’t subjugate us endlessly to the most vapid and Sisyphean aspects of programming. Python is a lesson in managing existential angst, which I now assume was the point of it from the very beginning.
Python optimized for C-interop (NumPy) just as data science exploded. While Perl won text processing, Python became the universal interface for C libraries. That ecosystem lock-in—not syntax—is why it won. It was the right glue at the right time.
> it happened to look a bit better than Perl. Which is absurd to me.
It's not absurd, it's a debatable point. I think being easy to read is definitely a desirable quality for any language, especially for adoption. Some are better than others in this field.
Python was viewed as an alternative to Perl mainly because they were used for the same kinds of scripts. The biggest difference at the time, how-many-ways-to-do-it notwithstanding, was that when a novice saw a Python script of 20-50 lines, they (felt like they) understood it without having to reach for a language reference. Readability at a glance for people who hadn't yet specifically learned the language was huge. "Executable pseudocode" was the operative phrase.
I started my data analysis journey using Perl and then Python. Perl had also a variety of libraries, online classes from O'Reilly's, samples online, CGI support, I moved to Python when installing some dependencies became troublesome and Perl versioning was not compatible between each other don't recall the details, since then been using Python extensibly since 2.7
Google used and endorsed it at a critical time back when the mainstream media machine was inflating their image. Even programmers like to ape celebrities and by extension Python was the choice of the sophisticated and well-read hacker in the know. It was just luck and dumb social reasons.
Python had a pretty big jump in 2008 when it was the first language supported by Google AppEngine. It was one of the big 3 languages used internally at Google. That's probably the first key domino in the chain.
I think an underrated aspect of Python's success is that is easier for non-SWE professionals to understand and use. Python is popular among software developers, but it is overwhelmingly popular among scientists.
No surprise that interpreted languages like Javascript, Perl, PHP and Python are disproportionately popular independent of pure language merit. The feedback loop is the killer feature.
First class package manager, first class numeric operations for scientific usages (numpy), garbage collection, uniform human-readable syntax. Basically seems like it learned a lot from Perl both good and bad, and put those lessons into usage with the scientific community first. Kids got used to it in school and wanted to use it after.
Its syntax is lowest common denominator. It’s incredibly easy for people from all walks of life to pick up. It’s “good enough” for just about every task.
But really it’s because Google, Dropbox, etc made it so. Same reason Java got popular. It’s hard to beat first class corpo support even if the actual language isn’t that great.
Google certainly had a honeymoon period with Python. They hired Guido to work on some internal apps (IIRC Mondrian?). They released the original App Engine before cloud was a buzzword supporting only Python. But at some point, the default easy-to-learn language at Google became Go, and it happens to be statically typed, preventing a large class of bugs from ever being compiled. There was a manifesto about how Python and all other dynamically typed languages were unsuitable for large-scale software engineering. Only small pieces of code are still using Python.
Ex-product manager of an IDE and language here. Languages, like just about anything, win because of what you can do with them: ie, value. Consider Ruby on Rails: it drove Ruby; the achievement was easily creating fullstack web apps, at just the right time. Consider VB: you could build UI apps. No languages win based on the language itself but what it lets you achieve. Usually, this is in the form of libraries:* ie, functionality that using the language lets you achieve. It's not the language, but where using the language lets you get to.
Python is a nice language, but so are others. I know of three main libraries -- three main "I can get stuff done" -- eras with Python, and I think these drove Python.
1. Beautiful Soup. Early/mid 2000s, web scraping and website / XML / HTML data manipulation were a thing; this library came along and made it easy. I'd heard of Python before on places like Slashdot; it was cool but Perl was more spoken of. Then, in my anecdotal experience, what I suddenly read about was not Perl or Python, but Beautiful Soup.
2. NumPy / SciPy. Python was apparently written with numerical computing in mind, and NumPy in its current form arrived a bit after BS. Early 2000s: stats and data vis folk were using R. By the 2010s, I was hearing about all these people that were not using R, but were using NumPy and SciPy.
3. AI. Until a few years ago, it was all SciPy, then with the current era, everyone is using Python -- for AI.
None of this is the language, per se. People were not 'using Python'; they were (say) using SciPy.
I think Python benefited hugely from having not a single "I can achieve stuff" value proposition, like VB did; it had three consecutively in a row.
These all had roots well before they became well-known. Enthusiasts, initial design, years of work and usage, and 'suddenly' out of nowhere everyone is using it. The common factor there is likely Python's design and community; there would be lower level reasons for Python's success than the things it let users achieve, and those would be, what incentivised or led to Python being used for those libraries (value enablers) in the first place. I can't speak to that; I wasn't there in the Python community in the 90s or 2000s.
[*] Not always: Rust's value is in its memory system and safety. That is not a library but inbuilt, yet that still is something you can do, a goal, value, something you achieve using the language and thus you turn to the language in order to achieve. Rust minus that would need some other reason to be used.
The Python leadership group is friendly towards beginners and people with non-traditional backgrounds, and they actively reach out and recruit those folks to participate. It's also one of the least toxic developer communities I know of.
That matters a lot in a field like data science or cybersecurity, which has a lot of people who don't have traditional SWE backgrounds.
The language is pleasant and readable to use and has a lot of features built in, which Perl did not, but I think that's much less critical than the network effect of being a (1) welcoming and pleasant community who (2) actively recruits new fields of people.
Because it's really enjoyable to use. If you are doing something where you can use Python, ie. you can afford the performance hit, it's hard to find reasons to not like it. Common Lisp has it all, but for some reason people can't cope with the parens. People just genuinely enjoy using Python.
Personally, I do not think there is a language in the ALGOL family tree with better syntax than Python. It removes just about all the BS: ceremony, boilerplate, curly braces, etc. Oftentimes as programmers we write out ideas as pseudocode... and that pseudocode is oftentimes coincidentally valid Python! I think this is a critical reason why Python has been so successful. It's simple and powerful at the same time.
May be that Python 2 to Python 3 migration was holding it back but it is remarkable that it shows positive strides or was relatively stable even within that transition period.
https://www.tiobe.com/tiobe-index/python/
By GitHub contributor counts, August 2025 marks the first time TypeScript emerged as the most used language on GitHub, surpassing Python by ~42k contributors
1. Python was designed by testing syntax with novice users to see what they could adopt easily.[1] > 90% of current Python users weren’t born when it was created. They all had to learn, and Python is the easiest language to learn because Guido and his teammates, unlike $LANGUAGE_DESIGN_GOD, approach the problem as experimental scientists rather than auteurs.
2. Python is conceptually compact, dominated by hash tables with string keys. The initial leader in the ecosystem, Perl, is conceptually sprawling and difficult to reason about.
3. Python also took lessons from the Unix shell, a mature environment for accommodating beginners and experts.
4. Python had a formal process for integrating C modules from early on.
5. Python’s management has an elegant shearing layer structure, where ideas can diffuse in from anywhere.
6. $NEXT_GENERAL_PURPOSE_LANG (Ruby, Go) weren’t enough better to displace Python. Both were heavily influenced by Python’s syntax, but ignored the community-centric design process that had created that syntax in favor of We Know Best.
7. Speaking of open source entrepreneurialism, JavaScript has become a real rival thanks to the Web (and node), but it is handicapped by the inverse failure mode: where Go is dominated by a handful of Googlers, JavaScript was effectively unmanaged at the STDLIB level for a crucial decade, and now it can’t recover. (I’d also guess that having to write a module system that works well in the chaos that is Web clients and simultaneously the Unix world is a daunting design problem.)
8. Python got lucky that data science took off.
[1] https://ospo.gwu.edu/python-wasnt-built-day-origin-story-wor...
I forgot two, er, three:
9. Python got lucky that its inevitable screwups (Python3) didn’t quite kill it.
10. Swift and Kotlin both define programming as serving the compiler (specifically LLVM) rather than serving the coder’s problem. (I haven’t discussed Rust so far since it isn’t attempting to compete with 98% of Python use cases, but if you squint you can see it as going one step further than Swift and Kotlin and in effect forcing the coder to be a sort of human compiler who thinks in types and memory management. This is not a criticism of Rust, BTW.)
0. And behind all of this is Moore’s Law and the demographic explosion of programmers. Python was an implicit, perhaps unconscious bet that if you served people thoughtfully, the tradeoffs with serving the needs of contemporary silicon wouldn’t matter as much.
I can't stop thinking about this. WRT Perl specifically, it’s fascinating how the two competitors adopted Unix shell patterns. Python is handicapped to this day by not automagically snarfing up environment variables, etc. But Perl leaned hard into TECO-style gibberish and the meta-syntax that is regular expressions, confronting beginners with arbitrary complexity. It feels like Wall embraced the system administrator side of coding — the side that has an enormous capacity for tracking corner cases and managing impedance mismatches. Wall was trained, perhaps not coincidentally, as a linguist, a field where continent facts really matter. Guido, on the other hand, was an accomplished mathematician. (This is the Dwarf / Elf distinction from Cryptonomicon.)
I feel like if #1 was done today, there is no way on god's green earth that whitespace would be used for code blocks.
It is far and away the most common footgun novices run into when I'm answering questions about why their code doesn't work.
It's hardly "inexplicable"... particularly if you're comparing it to Perl, a famously hard to read language.
* Python has clean and readable syntax that a complete beginner can understand -- it's really close to the pseudocode you might use for teaching.
* Python has a good standard library, so you can do a lot before you need to work out how to install more (and, reproducibility concerns aside, `pip install` is really simple once you get there)
* Because it was easy to pick up and easy to use for teaching, it took over some niches like stats in academia / data-analysis, where the people doing the work aren't professional programmers but just need something they can hack together. Once NumPy existed, people had minimal incentive to move away.
(Insert Marge Simpson "I just think it's neat" gif here.)
> If you survey the language landscape now, a language can be much better than Python but never get the chance Python did just because it happened to look a bit better than Perl. Which is absurd to me.
You’re struggling to understand Python’s success because in your head the primary reason Python succeeded was because it happened to be prettier than Perl, and you can’t wrap your head around why that’s enough. But it’s not enough. Python succeeded for many reasons.
My gut feeling is that it succeeded due to escaping scrutiny. I had heard enough critiques of the language from CL folks but the rest of the world was just happy to get a nicer Perl that could be used to glue together C code into useful apps and scripts.
With respect, lispers are probably not the best people to ask how to make a widely adopted language.
Regardless, you’re regurgitating exactly what I said. Your gut is that Python was just a slightly better replacement for Perl. This is at best one dimension. If you can’t broaden your perspective, then this thread full of examples and arguments for why Python became popular will be lost on you.
If you’re so confident in your assessment, why did you bother to ask?
> escaping scrutiny.
What more scrutiny can a language get than people writing large projects in it over time?
Yep folks just need some glue languages that doesn’t require a lot of time to learn. Python fits the bill perfectly.
> My gut feeling is that it succeeded due to escaping scrutiny.
You keep saying it, but from 2000-2010, what scrutiny did it escape, exactly?
Are you saying when universities dropped Java/C++ for the introductory course and replaced it with Python, they simply threw dice to pick the language?
Are you saying all the Perl programmers who kept saying "Python will never have the power of CPAN" didn't exist?
Are you saying Eric Raymond never wrote an essay on the virtues of Python?
Same as PHP, JavaScript, etc. Very easy to learn and fast start. They end up with large communities and the positive feedback loop of that.
On top of that, Python smartly focused on high level and allowed modules to be in lower level languages. Similar to Ruby but unlike Java and Javascript. At some point Ruby was more popular and cool, but it ended up with a toxic community, leaving Python to fill their niche. (Rust seems to be falling into the same trap, sadly)
I like to use Python for fast prototyping. But IMO, Python and similar languages end up being a terrible self-feeding black hole for most developers and they never truly learn other languages. Some even get stuck in a single framework. Many even refuse to learn SQL and enjoy reinventing wheels and shooting themselves in the foot with solved problems.
I think the reason python won was that it was easy to learn and read and was batteries included. vs perl: People need to solve their problems, not fight with syntax
Theres a lot of network effects as well. The more people were using it, the more people will use it.
Perl had the batteries and it had CPAN. Python borrowed the best bits of Perl and enjoyed a reputation which overlooked its many flaws. If it had been scrutinized as much as Perl, we'd have realized it was just as bad but in different ways.
This makes no sense.. Python _was_ heavily scrutinized when it was introduced - the whole "Perl vs Python" comparison was pretty popular for a while, with either of those being declared winner, depending on the author.
If there is really a killer argument for Perl over Python that was overlooked in all those years, why don't you say that argument, or even better, write a blog post explaining why Perl is better than Python? Then we could discuss that instead of nebulous "different ways"/
Perl had charm, it was respected by hackers for the joy it brought people who 'got' it. It still remains a beautiful language that I regret not learning due to having a superior taste. Python had none of it. I still don't understand how it won, stealing the halo of a language while having nothing of the sort. The only argument you can make is boring is better imho.
> it was respected by hackers for the joy it brought people who 'got' it
Isn't that the crux of the issue? Perl was great if you're a hacker who 'got' it. For the remaining 95% of the population, Python worked.
Lisp/Scheme are also beautiful to those who 'get' it.
> I still don't understand how it won, stealing the halo of a language while having nothing of the sort.
Plenty of people have already told you. 95% of programmers do programming to get the job done. The linguistics grad student I knew 20 years ago did his work in Python because it was easy (he had no programming background). He would have simply changed his thesis topic if Python didn't exist. He would not have learned Perl.
Perl was for hackers. Python was for everyone.
> Isn't that the crux of the issue? Perl was great if you're a hacker who 'got' it. For the remaining 95% of the population, Python worked.
It’s really not the crux of the issue though. “Better than Perl for normal developers” is not a high bar. Most languages clear that bar whether they are successful or not. This is certainly not the only reason that Python became so successful.
Tangentially, in my experience Perl was great for one liners and small glue projects. I never saw significant, valuable works of code built in Perl even when I worked at a company (Yahoo) that widely used Perl. I am convinced that much of Perl’s beauty is in its cleverness and’s not in its utility for large projects.
> “Better than Perl for normal developers” is not a high bar. Most languages clear that bar whether they are successful or not.
Dial the clock back to 2002, and this statement is not true. Perl became popular not because of its beauty, but because of it being extremely effective glue. It was a language to get stuff done while writing little code.
The only mainstream alternative was Python.
I see. There are two separate but related questions.
1. Why did Python replace Perl?
2. Why did Python become so extremely popular?
The answer to the first is because it’s better than Perl for so many engineers in so many cases. The answer to the second is much broader.
Did you seriously start this thread just to ask people to confirm your bias?
In that case, yes. Perl is beautiful. Python sucks and only succeeded because idiot developers couldn’t see the beauty of Perl. Python is poorly suited at every job except stealing potential Perl devs.
Feel better?
No.
Readability, explicitness, one way to do things are examples of great design taste. Perl was the opposite of all that.
I don't believe the "syntax win" scenario. Python is also ugly, due to the required indentation, like yaml.
I believe more in the ecosystem, specifically how the computer vision and machine learning movements have adopted python extensively as frontend language (the heavy weightlifting is still doing in C++). The exploit of numpy has brought many many use cases into the language as well.
Indentation is there regardless, and is increasingly enforced by format-checking tooling which is more commonly an out-of-the-box offering for many ecosystems (gofmt).
So why not make it have syntactical meaning since it’s already there in 99% of cases?
It does feel weird at first but honestly it’s not something you’ll think about much after a while.
> Python is also ugly, due to the required indentation, like yaml.
The fact that YAML also won in its configuration file niche doesn't give you pause?
> don't believe the "syntax win" scenario. Python is also ugly, due to the required indentation, like yaml.
That's like, your opinion. Python was explicitly designed being easy to learn, borrowing heavily from ABC, which actually experimented with different syntaxes to see what works and what doesn't. The indentations apparently helps a lot with this, along with ':' before the introduction of indented blocks.
It's not about being beautiful or ugly, it's about being simple.
Python is simple to read / write and easier to reason about, especially for people that need a programming language to solve a problem but are not software engineers.
The reason it won, especially in data analysis, is because most data analyst are/were not software engineer and Python feels more natural to people.
The indentation is not a big problem when a decent text editor is used
That 'ugly' required indentation and whitespace also made Python easier to read, especially for newbies and casual coders. A standard visual structure and a syntax that is pretty close to executable pseudo-code lowered the barrier to entry for a lot of people and made Python feel 'approachable'. This perception that it was easy to use helped increase the network effects other have noted.
I was not exposed to much code before trying Python 2, and I always thought of the indentation and newlines as aesthetically pleasing and helpful. Same for yaml actually. Would argue that preferences on indentation etc. are just an acquired case.
> Python is also ugly, due to the required indentation
As opposed to the not required indentation that literally everyone who writes code ever does anyways?
> believe more in the ecosystem, specifically how the computer vision and machine learning movements have adopted python extensively
What came first, the chicken or the egg?
Even for someone who has used more than one languages, I think Python is fine. It’s a lot prettier than the academic-HN preferred lispy languages.
"Ugly" is a very opinionated statement there. I personally find it's fine, and Python's required-indentation matches what I'd be doing anyway. It's no different to me than a project which lints indentation via something like gofmt.
I think the controversy around Python’s indentation helped it gain success. Regardless of how you feel about the choice, it’s a great opportunity for bike shedding and encouraged (and still encourages) a lot of talk about the language.
required indendation simplified a ton of readability problem with other languages for a regular user.
There was no easy for people who wanted to get something done in a simple interface.
Previously:
- Perl's decline was cultural - https://news.ycombinator.com/item?id=46175112 - Dec 2025 (460 comments)
- (!) Ask HN: Why did Python win? - https://news.ycombinator.com/item?id=37308747 - Aug 2023 (839 comments)
- Ask HN: Why is Python so popular for ML/DS? - https://news.ycombinator.com/item?id=16207834 - Jan 2018 (19 comments)
- Ask HN: Is Python dying? - https://news.ycombinator.com/item?id=11100251 - Feb 2016 (352 comments)
- Python is now the most popular introductory language at top U.S. universities - https://news.ycombinator.com/item?id=8001337 - July 2014 (362 comments)
- Ask HN: Why Python over Ruby? - https://news.ycombinator.com/item?id=682101 - July 2009 (196 comments)
- Ask HN: What does Ruby have that Python doesn't? - https://news.ycombinator.com/item?id=283639 - Aug 2008 (223 comments)
Because not many people prioritize syntax design like GvR. Even now if someone releases a new programming language most people will ask what features it has, how fast it is, how fast is the package manager etc. Because these questions are simple yes and no ones. Unlike syntax design choices.
Even if they ask about the syntax design people just dismiss their question with saying "syntax is not important". Python did the opposite, it focused on syntax over everything else. That caught on with beginners and now here we are.
Of course with AI Python got even more popular, but even before ChatGPT was released it was already dominant.
It was designed by a person with good taste, not by a committee. That's about it, there's nothing inexplicable or accidental about a well designed language rising to the top.
The excessive mentions of Perl are weird — it, along with PHP are prime examples of awful taste. Those are the languages that only gained any traction because they happened to be available at the time, not because they were any good.
You can't only look at it from the perspective of a software engineer. Ordinary people can read and write Python much more easily than a ton of other languages. It's very easy to get started, with basically no ceremony. Highly tolerant of user errors yet still allows one to grow with the language (nobody writes ABCs on their first day).
Python has issues, but those issues don't matter equally to everyone and every use case. Low barrier to entry, coupled with Metcalfe's law, explains a lot IMO.
I love Scheme, but not everybody does, and I can see why.
I learned Python circa 2000 as a 17 year old.
It felt pretty easy to read and write, had minimal surprises, and it made writing simple programs easy. The batteries-includedness was great.
It felt like it was designed by a smart guy for practical programming, rather than by a brilliant academic who was wed to purity for maximum elegance. It accepted some warts, but them in mostly ergonomic places.
It was dictated by people who could relegate map, filter, and reduce from builtins to the library. As much as I personally even liked map in particular (I am not super anti functional programming), it's nice to realize the designer had the taste to prefer longer but more explicit programs.
As much as I disliked that particular decision, there is no doubt to me that it is just designed for lower cognitive burden when doing simple/common things.If you show both of those lines of code to a person in cs101 who has studied Java for a couple months but hasn't seen Python, I am pretty sure they are gonna understand the first line way quicker. Mostly consistent decision making like that leads to ergonomic, practical languages. And they win.
It fits in people's brains better. See also, pytorch vs tensorflow.
Python was easy to read and write. Network effects did the rest.
Perl6 was a much greater mess than Python3.
I'm more surprised that Ruby didn't do better.
There is a network effect with programming languages. Once you get popular, more people write libraries and guides for that language, which in turn makes it even more popular.
If you were czar of the universe and could start from scratch, could a better scripting language be created? Sure. But that’s not the fact pattern, and Python isn’t bad enough at what it does to warrant starting over.
Years ago I wrote article on this topic: https://www.notonlycode.org/why-python-has-won/
In short (all below is my opinion): it was popular in academia and got some corporate adoption, so when ML exploded in popularity it was a natural choice as the scripting language for ML tooling. On top of that it’s easy to pick up as a language, and it’s a general purpose language - there are lots of scientific tools like pandas written in it, there are web frameworks, etc.
Perl was too quirky for wide adoption and it stopped developing (Raku/Perl 6 took to long to develop), PHP was focused purely on the web, similarly JS. Ruby could have won, I like it more than Python, but outside of Japan it’s also mostly been associated with web development (because of Rails), it also lacked libraries that Python already had.
Nothing against Python but I still use Perl 5 because it works for what I need to do.
The Perl 6 redesign was announced in 2000 and it has been going on for 2 decades? Python is clearly a good programming language but the Perl 6 redesign took so long that many people gave up. Then it was renamed Raku in 2019 I think.
Non-swe, classic engineer here
Python is easy to learn and has an extensive library catalog. It also has massive support available online. That's why I have chosen it in the past when I needed to write basic programs for work.
With the rise of LLMs, python is now even more attractive as LLMs really excel at writing it.
Win what?
Against Perl? Over a decade ago. 10 years ago, the only places that required Perl were either hard engineering (i.e. non-programmer EEs) or those with legacy code bases.
Over everything else? Of course not. You don't do systems level work in Python.
The problems with Python are minor (other than packaging), and not a big enough pain to adopt another language. If you really could benefit from static typing, there are already existing languages that do the job well (C++, Rust, etc).
For the majority (including even some Perl fans), switching to Python was a significantly better experience. If you now show me a language better than Python, it's really only an incremental benefit. Sure, I prefer ML languages like F#, but the vast majority don't.
Python won because Google picked it over perl in the early 2000s, declaring that it was more uniform in having one preferred way to do things rather than allowing (in contrast to Perl) programmers having a zillion ways to do things.
Larry Wall, creator of Perl, coined the phrase, "make the easy things easy, and the hard things possible". But the things perl made easy were not always things that the market needed. Perl was very distrustful of enterprise disciplines and the perl culture "let a thousand flowers bloom" mentality (which they/we called "There's more than one way to do it"/(TMTOWTDI)) was not actually useful for organizations maintaining larger code bases/systems with large groups of mixed skill level people.
Python threaded that needle of centralizing a right way to do things (not just whitespaces) more effectively.
I also observed Scala suffering from similarly disfunctional "TMTOWTDI" dynamic in organizations I belonged to; different people had wildly different styles of solving even basic problems and it really made code hard to maintain even in smaller organizations where people came and went and new people were onboarded frequently.
Plus data science use cases saved Python's web/scripting lifespan in a way slightly analogous to AI/CUDA extending NVidia's 3D graphics-centric roots. (Although the python data science ecosystem nowdays does have some TMTOWTDI weaknesses that remind me of perl/cpan's choices of web development frameworks of the mid-2000s!)
I have recently gone all in on Python. Before I decided this, I was using Python for projects where I needed Pandas or numpy. I used React/TypeScript/Node for web applications. But, I moved to Django/HTMX.
The main reason is to avoid npm, but also, I wanted something with more built-in defaults (my web apps have simple needs). It has nothing to do with the language -- it's more the ecosystem for me.
I considered Ruby/Rails, but it didn't seem enough better than Python and can't replace the Pandas work I need to do.
Python wins hands-down in having readable code.
Perl has so many ways to write the same code, no two codebases are the same - it's practically different languages. Back when I was programming Perl, I remember reading my own Perl scripts I wrote few years ago, and being annoyed with how they were doing everything all wrong... because in those few years, my Perl style has changed significantly. And others' scripts were even worse!
Plus, python had all those neat quality-of-life things useful for day-to-day scripting. For example actual function parameters, exceptions (no more "or die" after each open), pretty big stdlib (I _don't_ miss having to configure "cpan" on each new machine), repr() in language core, etc..
And yes, Python got lucky somewhat - there was a need for "Perl but easier to read and friendlier to new users", and Python has filled that need. And now that need is no longer open, so it's harder for newcomers to fill that niche. But that's life in general - Rust filled the niche of "No overheads like C++ but memory safe", Go has filled the niche of "Compiled systems language with GC" etc... And once a language gets popular, network effects kick in.
My 2c. And only my recollection. Back in the stone age, there were two that had significant mindshare: perl and python. Of course, there were others, and they had their day in the sun too (e.g. rexx, rebol, etc.). I suspect that python stood out, and developed momentum, because of its availability on, and integration with, Windows where many of today's senior devs were cutting their teeth. Particularly, I'd point out, Mark Hammond's contributions. Suddenly, you had an accessible language with a deep integration with the underlying OS. Perl had that too, if you were using one of the unices, but most eager devs weren't - back then, linux wasn't what it is today. Perl excelled at the traditional file-based (and filelike-based) tasks. It had a good niche in early web development using cgi. But, I think python was just both more accessible in general, and more useful in general than perl - without resorting to C, or C++, or another compiled language.
I don't know if you can point to a single feature, a lot of what makes a language successful is around context and placement (javascript being a great example of this).
I think there's a few key features for python that have definitely been a big help for it:
It's highly dynamic meaning you can get running with it before understanding every detail (no compile step, no static typing etc).
It may not be the best at everything, but is a decent choice for most things, making a good generic intro language for programming.
It has good interop with low level languages - this is a big deal for data science where a less technical (from a CS perspective) user still needs the performance of a language like C/Fortran/Rust/etc. Python's pattern of "use python as a high level api for libraries in those other languages" (as in numpy, pandas, polars, pytorch etc).
That last one has been a big deal recently, python has become the de-facto language for data science as a result of this.
Perl was my introduction to web programming in the 90s, and then I moved onto python and php.
Perl’s alien syntax and how there were multiple competing “best practices” put off newcomers and made it difficult to code review.
Perl also stagnated for quite some time due to the efforts to move to Perl 6, though python likewise stalled later it already had better traction at that point.
However I’d argue that Perl lost to PHP at least as much as it lost to python. PHP was revolutionary at the time for how easy and straightforward it was to do simple web programming which was one of the big use cases for Perl.
By the early 2010s there wasn't much of any use case that made sense to choose Perl. Sysadmin scripting was clearer to review and maintain in python and golang, web applications moved to php and frameworks written in languages that didn’t have the downsides of Perl.
python won because of enforced whitespace. It solved a social problem that other languages punted to linters, baking readability into the spec
IMO, Python rode some of the growth from the data and scientific computing computing. It was lower friction for many people partially due to the amount of blogs, and open source projects that were available. Pandas and Numpy made it quite easy to get up and running with a lot of analytics. pytorch and tensorflow were also there to facilitate this, made people able to get the benefits of the optimized C code but most users did not have to learn C. Eventually FastAPI came out for those looking to build products out of their data, and FastAPI had fantastic documentation and guides, which helped these same folks coming from data/scientific compute build working software. I suppose what I am describing are some of the network effects.
I often consider how many total human lifetimes must have been spent on nothing other than dealing with and/or mitigating something as seemingly banal as Python versioning & dependency management or line ending encoding snafus.
After all these years, I assume it must measure in the tens to hundreds of thousands?
It’s in those moments of consideration that I understand humanity hasn’t done a very good job grappling with its frailty and mortality. If we had, then we’d have a crowned a winner that didn’t subjugate us endlessly to the most vapid and Sisyphean aspects of programming. Python is a lesson in managing existential angst, which I now assume was the point of it from the very beginning.
Python optimized for C-interop (NumPy) just as data science exploded. While Perl won text processing, Python became the universal interface for C libraries. That ecosystem lock-in—not syntax—is why it won. It was the right glue at the right time.
> it happened to look a bit better than Perl. Which is absurd to me.
It's not absurd, it's a debatable point. I think being easy to read is definitely a desirable quality for any language, especially for adoption. Some are better than others in this field.
Python was viewed as an alternative to Perl mainly because they were used for the same kinds of scripts. The biggest difference at the time, how-many-ways-to-do-it notwithstanding, was that when a novice saw a Python script of 20-50 lines, they (felt like they) understood it without having to reach for a language reference. Readability at a glance for people who hadn't yet specifically learned the language was huge. "Executable pseudocode" was the operative phrase.
I started my data analysis journey using Perl and then Python. Perl had also a variety of libraries, online classes from O'Reilly's, samples online, CGI support, I moved to Python when installing some dependencies became troublesome and Perl versioning was not compatible between each other don't recall the details, since then been using Python extensibly since 2.7
> Python is most dominant language on the planet
JavaScript would like a word!
English laughs at their supposed dominance.
Math peers through a microscope and smiles at all the Earth languages. So cute.
To me it was Django that made python a choice of language to develop on. On top of it , not dealing with pointers of c++ made it much simpler to use.
Google used and endorsed it at a critical time back when the mainstream media machine was inflating their image. Even programmers like to ape celebrities and by extension Python was the choice of the sophisticated and well-read hacker in the know. It was just luck and dumb social reasons.
Python had a pretty big jump in 2008 when it was the first language supported by Google AppEngine. It was one of the big 3 languages used internally at Google. That's probably the first key domino in the chain.
I'd like for Julia to fill its niche myself.
I think an underrated aspect of Python's success is that is easier for non-SWE professionals to understand and use. Python is popular among software developers, but it is overwhelmingly popular among scientists.
The elegant syntax that is close to plain English sets it apart.
(It’s not so pretty these days though with all these type hints and other cruft that’s been added in the last ten years.)
No surprise that interpreted languages like Javascript, Perl, PHP and Python are disproportionately popular independent of pure language merit. The feedback loop is the killer feature.
Well if you talk to Go programmers they value their fast feedback loop too. It doesn’t just have to be interpreted languages.
Did it win? Against just Perl, or everything else?
So much easier to pick up than Perl. Even for an experienced programmer, let alone a new learner. And the rich standard library.
First class package manager, first class numeric operations for scientific usages (numpy), garbage collection, uniform human-readable syntax. Basically seems like it learned a lot from Perl both good and bad, and put those lessons into usage with the scientific community first. Kids got used to it in school and wanted to use it after.
Its syntax is lowest common denominator. It’s incredibly easy for people from all walks of life to pick up. It’s “good enough” for just about every task.
But really it’s because Google, Dropbox, etc made it so. Same reason Java got popular. It’s hard to beat first class corpo support even if the actual language isn’t that great.
Google certainly had a honeymoon period with Python. They hired Guido to work on some internal apps (IIRC Mondrian?). They released the original App Engine before cloud was a buzzword supporting only Python. But at some point, the default easy-to-learn language at Google became Go, and it happens to be statically typed, preventing a large class of bugs from ever being compiled. There was a manifesto about how Python and all other dynamically typed languages were unsuitable for large-scale software engineering. Only small pieces of code are still using Python.
Ex-product manager of an IDE and language here. Languages, like just about anything, win because of what you can do with them: ie, value. Consider Ruby on Rails: it drove Ruby; the achievement was easily creating fullstack web apps, at just the right time. Consider VB: you could build UI apps. No languages win based on the language itself but what it lets you achieve. Usually, this is in the form of libraries:* ie, functionality that using the language lets you achieve. It's not the language, but where using the language lets you get to.
Python is a nice language, but so are others. I know of three main libraries -- three main "I can get stuff done" -- eras with Python, and I think these drove Python.
1. Beautiful Soup. Early/mid 2000s, web scraping and website / XML / HTML data manipulation were a thing; this library came along and made it easy. I'd heard of Python before on places like Slashdot; it was cool but Perl was more spoken of. Then, in my anecdotal experience, what I suddenly read about was not Perl or Python, but Beautiful Soup.
2. NumPy / SciPy. Python was apparently written with numerical computing in mind, and NumPy in its current form arrived a bit after BS. Early 2000s: stats and data vis folk were using R. By the 2010s, I was hearing about all these people that were not using R, but were using NumPy and SciPy.
3. AI. Until a few years ago, it was all SciPy, then with the current era, everyone is using Python -- for AI.
None of this is the language, per se. People were not 'using Python'; they were (say) using SciPy.
I think Python benefited hugely from having not a single "I can achieve stuff" value proposition, like VB did; it had three consecutively in a row.
These all had roots well before they became well-known. Enthusiasts, initial design, years of work and usage, and 'suddenly' out of nowhere everyone is using it. The common factor there is likely Python's design and community; there would be lower level reasons for Python's success than the things it let users achieve, and those would be, what incentivised or led to Python being used for those libraries (value enablers) in the first place. I can't speak to that; I wasn't there in the Python community in the 90s or 2000s.
[*] Not always: Rust's value is in its memory system and safety. That is not a library but inbuilt, yet that still is something you can do, a goal, value, something you achieve using the language and thus you turn to the language in order to achieve. Rust minus that would need some other reason to be used.
Python ultimately won because of its community.
The Python leadership group is friendly towards beginners and people with non-traditional backgrounds, and they actively reach out and recruit those folks to participate. It's also one of the least toxic developer communities I know of.
That matters a lot in a field like data science or cybersecurity, which has a lot of people who don't have traditional SWE backgrounds.
The language is pleasant and readable to use and has a lot of features built in, which Perl did not, but I think that's much less critical than the network effect of being a (1) welcoming and pleasant community who (2) actively recruits new fields of people.
Because it's really enjoyable to use. If you are doing something where you can use Python, ie. you can afford the performance hit, it's hard to find reasons to not like it. Common Lisp has it all, but for some reason people can't cope with the parens. People just genuinely enjoy using Python.
Personally, I do not think there is a language in the ALGOL family tree with better syntax than Python. It removes just about all the BS: ceremony, boilerplate, curly braces, etc. Oftentimes as programmers we write out ideas as pseudocode... and that pseudocode is oftentimes coincidentally valid Python! I think this is a critical reason why Python has been so successful. It's simple and powerful at the same time.
pytorch, langchain, streamlit, fastapi, and on and on ...
There are many clear reasons imo.
If you look at https://www.tiobe.com/tiobe-index/, Python's growth really started in 2018 which was before langchain, streamlit, and fastapi.
May be that Python 2 to Python 3 migration was holding it back but it is remarkable that it shows positive strides or was relatively stable even within that transition period. https://www.tiobe.com/tiobe-index/python/
> Python is most dominant language on the planet
By GitHub contributor counts, August 2025 marks the first time TypeScript emerged as the most used language on GitHub, surpassing Python by ~42k contributors
https://github.blog/news-insights/octoverse/octoverse-a-new-...
Science
In a phrase: Worse Is Better
Hopefully RAM prices continue to increase so that we are forced to rediscover the lost art of software efficiency and optimisation.
It's the lost art for us. LLMs will probably rediscover it for its overlords (but no need - they have all RAM and GPUs already).