There was a huge sense of community around Python, that I didn't really see elsewhere in the programming world. It started with these scientific libraries. Python wouldn't be what Python is today without NumPy. It was nice to see in the last years the boost of the Python scientific community, with basically anything machine learning using Python as the DSL.
Though there was a developer who was forced to quit a while ago.
If the first question you’re asking yourself looking at a code base is “what version is this/do I know this version” then that language is not facilitating you.
The successful languages are ones where “the community” prioritises backward compatibility. Java, C, Python have backward compatibility spanning decades. There’s a few discontinuities (lambdas in Java 8, Python 3, C++) but in most cases there’s a clear mapping back to the original. Python 3 is an exception to this but the migration window was something like 15 years…
Busy engineers, scientists and academics have little interest in keeping up to date with language features. A computer and a programming language are a tool for a job and the source code is just an intermediate artifact. These are your “community”, and the stakeholders in your success.
There are hardly any non-toxic programming communities out there. And if you value backward compatibility over everything else you can look at C and C++.
It's not community, it's meddling, toil, and folly.
Raku is the most modern PL s metric
Until the "cool kids" started meddling, it was a lovely village. It had a strong focus on beginners and teachers.
I dunno it was 20 years ago I jumped ship when they tried shoehorning object oriented semantics into it. Eugh.
I disagree. The scientific libraries were just one of many niches, and an awkward one at that. One could equally say "it started with xml libraries" or "it started with file-handling libraries" or "it started with http libraries" -- all of which were in the Standard Library very early, unlike the horrible-to-build numpy/scipy. All of these made the language popular initially across a number of different crowds. Numpy/scipy reached traction relatively late when Python was already well-established in niches like sysadmin, web, education, 3D, and many others. By 2001 we already had multiple web frameworks, Zope, even WSGI...
It is occasionally annoying how this or that crowd tries to appropriate Python's success, hence flattening its purposes and aims.
Most developers have left or have been driven out. The remaining ones do corporate projects that generally underdeliver.
Doesn't mean I have to deny them the right to exist because they don't have a "community*".
* more like a religion for some programming languages.
Some of the clique have been fired later and now CPython is basically a hollow shell with some corporate projects still going on.
Back then it felt like a bit of a club, one that forms around a common hobby. Nowadays it feels more like the "community" of a high-school graduation class. Sure there is community there, but its mostly one of folks randomly thrown together into classrooms.
Folks like Raymond Hettinger would today be totally drowned out in the listicle-style attention seeking times.
> in the web world
I would put that more broadly though, it was web, data-science, there was a point when it became the universal scripting language, and part of me kind of hoped that the crowd would move to nodejs for all of it, so that Python can become more peaceful again. But I guess there is no going back, we went from dinghi to cruise ship, and when the crowd leaves, it will just be a deserted cruise ship.
Perl6 had been renamed to new language, Raku.
The point is that, unlike in the Bitcoin block size debacle, you don't have people who are pulling in different directions because it directly impacts their bottom line if Python does X or Y. There's no one who particularly profits from there being a GIL.
The Python community is welcoming, many come for the language and stay for the community. It's not, of course, free of politics or drama, but it's very far from what you describe. Local communities are very strong, CPython core community seems to always be trying to improve to me.
Even Tim Peters, who I really hope is part of the documentary, is an enthusiastic participant, both helping with gnarly CPython issues and providing assistance to newbies.
If you look at the Fellows list[0], you can see that many important names aren't active in the community anymore (I don't know the reasons for each one), but many more are either active or in (very) good terms with the community.
The CoC was and is a net positive, the diversity efforts even more so. Last Saturday I was at a local Python conference and the local community has welcome both, to great success and improvement.
This can in turn fuel development of the platform therefore helping keep it relevant.
In recent times we call this “the network effect” and it applies to more than just social media.
Nobody is pro-GIL per se. But a lot of people were pro-No-Single-Threaded-Performance-Desegregation. The first GIL-removal patch was submitted all the way back against python 1.4, and regular attempts have been made ever since, but it wasn't possible to remove the GIL without making the single threaded performance of existing python code worse, so Guido and co. refused to accept them.
the perl community fractured into those that wanted to avoid a breaking change (since they feared the kind of pain that Python 2 => 3 would later encounter) and those that wanted to evolve the language with things like a Type system and Object Oriented coding as standard
the fracture became a chasm when it became obvious that perl6 was taking years and that there was no migration path from perl5 to perl6 - users began to explore options and often Python was top of the list
this was exacerbated by the use of perl6 as the name ... later (much later) the name was changed to raku ... but by then the perl language was a shadow of its once dominant self and CPAN (the perl module library) lost a lot of folks doing maintenance and improvements so that began to bitrot
fear lead to anger, anger lead to hate
[btw raku is now very nice with all these features and still the great feel of classic perl and has a small but active and friendly community]
https://talkpython.fm/episodes/show/513/stories-from-python-...
from __future__ import annotations
> just looking at source code gives you no indication if you can run it with your installed python version requires-python = ">=3.9" $ python3.13 -c 'from __future__ import awesome_feature'
File "<string>", line 1
SyntaxError: future feature awesome_feature is not defined
the very idea of "future feature is not defined" is insaneoAnyway, I'd guess what they intend is
try:
from __future__ import fever_dream
except SyntaxError:
fever_dream = None
because python really gets off on conditional imports use v5.40;
....
That's explicit, tied to a specific version, and executable code which can be scoped to a single source file.(I'd argued for that feature for years with my `Modern::Perl` feature bundle; glad to see that can be deprecated now.)
By what measures?
In 2000 I joined a new startup and was shown Python 1.5.2 by the startup's chief architect/scientists. He'd come from Infoseek where he'd used it there to help build parts of the company.
Now, I loved Perl. I was one of those annoying geeks with "RSA in 4 lines of Perl" T-shirt. I'd write JAPH programs for fun. But I appreciated how much "smaller" Python was than Perl. I was able to learn pretty much all of its rules in an hour? I didn't have to worry about all the crazy ways Perl programs could express themselves. (Is this scalar context or array context?[^1] Is this script using my or local? What the heck does this crazy line I didn't write do again? Oh wait, I wrote that line!)
So anyway, this startup was using Python and now so was I.
That startup is long gone, but I'm still using Python daily in my career.
And I've never used numpy.
Perl was/is great, but it's just too quirky to have the broad appeal of Python.
[^1]: "It's all about context": https://archive.ph/IB2kR
Further, the changes were made for very good reasons, such as allowing beginners to accept user input on day 1 without opening ACE exploits in their programs, and having plain double-quoted string literals actually produce a string rather than an immutable byte buffer that vaguely assumes a generic code-page encoding, except for the contexts where it will complain if it's not plain ASCII (admittedly, this is still an improvement over trying to handle text in C with only the standard library), and making sure that decoding operations don't produce encoding errors and vice-versa, and making `isinstance(1<<64, int)` give the expected `True` result, and making `except` syntax make sense, and making sure there aren't two fundamentally different kinds of user-defined class.
And by making these changes, we actually got Python 3 in about 2.5 years (4.5 if you allow for the first couple of releases having some issues figuring out the string literal transition and other such details — I agree they were premature) and were able to offer another 11 (9) for everyone to migrate. Whereas with Raku the entire 13.5 (more like 15.5) year period was spent on design and implementation, and now there hasn't been a new stable release for almost 5 years.
A major new version of Perl ships regularly. A few weeks ago the latest major new version shipped. From the 2025 changes document:
> Perl 5.42.0 represents approximately 13 months of development since Perl 5.40.0 and contains approximately 280,000 lines of changes across 1,600 files from 65 authors.
Skipping back 5 major new versions (to 2020):
> Perl 5.32.0 represents approximately 13 months of development since Perl 5.30.0 and contains approximately 220,000 lines of changes across 1,800 files from 89 authors.
2015:
> Perl 5.22.0 represents approximately 12 months of development since Perl 5.20.0 and contains approximately 590,000 lines of changes across 2,400 files from 94 authors.
2010:
> Perl 5.16.0 represents approximately 12 months of development since Perl 5.14.0 and contains approximately 590,000 lines of changes across 2,500 files from 139 authors.
There's been well over 10 million lines of code changed in just the core Perl codebase over the last 25 years reflecting huge changes in Perl.
----
Perl 6 ... isn't backward compatible
Raku runs around 80% of CPAN (Perl modules), including ones that use XS (poking into the guts of the Perl 5 binary) without requiring any change whatsoever.
(The remaining 20% are so Perl 5 specific as to be meaningless in Raku. For example, source filters which convert Perl 5 code into different Perl 5 code.)
----
But you are right about one thing; no one you know cares about backwards compatibility, otherwise you'd know the difference between what you think you know, and what is actually true.
What the hell is this? Even if nobody I know cares about backwards compatibility, how does this relate to whether my knowledge is true or not?
Apologies for trivializing perl5's progress in the past 25 years, but come on, chill out dude.
Unfortunately, python's developers seem to have demonstrated tremendous contempt for the users of the language, and for existing code bases.
Other languages (though not all.... <cough, swift>) have actual language specifications and standards (that even keep working as runtime systems evolve), and are not so keen on throwing users and their code off a cliff.
Platforms should absorb pain so that their users don't have to, and avoid introducing breaking changes that multiply pain across an entire user base.
Apple (also known for arrogance combined with contempt for their developers) also gets this wrong, and routinely breaks iOS and swift apps every year.
Open source implementations are fine, though the "if you don't like it fork/make your own" argument is, typically a way of sidestepping criticism rather than a practical solution.
But one of Python's greatest weaknesses is that there is no formal language specification. All you have are implementations and their documentation.
Can you give a concrete example of a problem you encountered while porting 2->3 code caused by a poorly chosen default in 3?
> compatibility features and libraries
You mean like `lib2to3`? Or all the backports 2.7 got, e.g. what's listed at https://wiki.python.org/moin/StandardLibraryBackports ? Or the `__future__` system? Or third-party support like `six` (still immensely popular, though presumably only in CI)?
> the print statement (which could have coexisted with a print() function)
No, it absolutely could not have. Not with the same name, and making the name refer to the function was the point. The print statement syntax was inelegant, quirky and confusing. For example, parentheses can affect the meaning in unusual ways:
$ py2.7 -c 'print (1,); print 2'
(1,)
2
$ py2.7 -c 'print 1,; print 2'
1 2
Besides which, outputting text has no more logical reason to use a dedicated statement form than inputting text.> python's developers seem to have demonstrated tremendous contempt for the users
I don't understand how you have come to infer such an attitude. Any suspicion that they are introducing breaking changes on a whim will be immediately quashed by reading the discussion behind any of those breaking changes. (Not to mention what happens with the rejected proposals.)
> and avoid introducing breaking changes that multiply pain across an entire user base.
What breaking change was introduced in Python 3.x during your history of using it that caused a nontrivial problem for you? How many years do you believe you were given to account for it?
Or is "perl 6" not even a thing to ask about, and "raku" is what was to be "perl 6" became?
if you want raku, then you can install from rakudo.org or rakubrew.org
C++ is still faster than PyPy3, but not 10x faster. That is good enough for me to not deal with the messy C++ syntax.
It could have fairly trivially for the vast majority of use cases (no space between print and parenthesis if you want to call the function) but apparently that would have made some python maintainers unhappy. So it was ripped out and a breaking change was introduced with no recourse (not even, say, from __past__ import print_statement or something).
This is part of what I mean by demonstrating tremendous contempt for the user base and for existing code.
This would be unlike anything else in any ALGOL-extended-family language, never mind Python.