I’ll use this opportunity to say something about what I perceive as a tension in programming language development and communities in general; I think it might help people see where “the other side” may be coming from. So this comment will be rather meta.
In programming languages there is an inherent tension between supporting the most modern and best ideas on one hand and stability on the other. Neither approach is inherently wrong, and they are usually good, or at least chosen, in different stages of the language’s lifetime.
For a lack of better names, let’s call the ends of the spectrum “enterprise” and “bleeding edge”.
To take an example from outside Python, I think Java was very modern, cool and fun to use the time it was first developed. But Java has definitely targeted the “enterprise” segment that values stability and backwards compatibility. This comes inherently at a cost of not being the most modern and cool language, and often not being the language of choice for new projects. This is fine and likely the choice the developers of Java made if they consciously realized it’s a trade-off between those two.
That’s also why many languages have managed to stay in many ways more programmer friendly and cool: Either they came later and thus had a more modern starting point; they were more willing to change and thus not become a tool of choice for enterprise uses; or they didn’t even develop to a point where there would be enterprise users wishing for stability.
Python is, in my mind, not quite at the same end of the spectrum as Java. I have at times experienced new Python releases breaking old code, often for a very good reason, like the recent distutils removal. Yes, that is painful too. I find Python often provides a nice balance. Sufficient resistance to breaking things also tends to force people with an itch to scratch to explore solutions that don’t break anything or as much, but I think it has also been demonstrated that Python is willing to break things that are considered problematic enough for the whole (like distutils).
Now, I think advocacy or resistance to (reasonably) proposed ideas can perhaps be divided into a few components that get summed for the final attitude:
- The “general appetite for change”, i.e. the position on that spectrum;
- The “I don’t want this particular change” component, which comes to play when proposed changes break things you like (technically, or even socially, like “my users would demand type annotations”) and you don’t care about the benefits;
- Noise (randomness) caused by communication being inherently difficult especially once a language has developed to a point where different people use it so differently that it’s hard for them to even understand each other.
What I’d love is for people to be conscious about the trade-offs they are advocating for; perhaps it’s helpful to try to think where you personally believe Python stands in this, where you would personally prefer it to stand, and why someone has a different preference.
If people want to know where I stand on the issue of this thread so they don’t need to speculate my agenda based on above, here it is, but hidden because it’s an aside: