James Bennett has posted a very informative defense of Python 3, in reaction to my more negative article.
I learned things from it, as from many of the comments on my post. I even agree with most of what he says, but it hasn’t really changed my opinion, because it seems like we’re not talking about the same things.
From the standpoint of writing Python code, Python 3 sounds great. It’s so nice not to have to deal with crufty APIs that don’t make sense anymore, or half-baked mechanisms like the original string class.
But from the standpoint of using Python libraries, I still think this is terrible. Any time I want to use a library I’ll have to check whether it works with the version of Python I’m on. I may find that a library I use, and need updates to, will no longer support Python 2.x going forward. And the porting and branch-maintenance process will definitely take time out of library developers’ schedules, slowing down other work.
(Since James had several great quotes in his article, here’s one making my point: In Elbonia, cars have always driven on the left side of the road. Finally, the government decides that it’s time to harmonize this with the country’s neighbors, and announces that Elbonia will change to the more standard right-side driving. But they’re going to phase it in: next Monday, trucks will switch to driving on the right, and the Monday after that, the cars will switch. Rim-shot! The weakness of this analogy is that the sensible choice for Elbonia—making everyone switch at once—doesn’t exist for something as distributed and anarchic as a programming-language community.)
For me, the second issue predominates. I’m more of a library-user than a hardcore Python coder. In fact, on balance, I like the core Python language less than Ruby. What won me over were the libraries: there are a lot of really well-designed, well-documented, highly modular libraries out there that I’ve really enjoyed using. (Genshi, to name just one, is the best templating engine I’ve ever used.)
So my perspective of the Python 3 release is that it heralds a difficult period, where library development and maintenance may slow, and grazing the Python ecosystem will become more difficult. Hopefully this won’t last too long. But the worst-case scenario is that this forking process may discourage enough software developers to reduce the popularity of Python in the long term. That’s bad not because popularity is important in itself, but because a vibrant community is important for maintaining forward progress, and because popularity brings useful things like books and tools.