A confession: Python 3 has always made me kind of angry

December 25, 2012

I have a confession. Although I've written about how various aspects of Python 3 irritate me, I've never come out to admit something: Python 3 makes me kind of angry. Well, okay, let me hastily clarify that. What makes me angry is not so much Python 3 by itself (although various of its defects irritate me) but the apparent views of the Python developers about the relationship between Python 2 and Python 3 that were put forward when Python 3 was released.

(Now, there are a lot of levels of indirection here; my anger is the result of my perceptions of Nth-hand reports of attitudes and remarks. But ultimately this is about my reaction and why, so please add 'as I perceived it' all through this.)

The quick way to summarize this is what I heard when Python 3 came out is 'Python 2.7 is the end of the 2.x line, so get off now'. I very strongly perceived that the Python developers expected everyone to migrate their code to Python 3. As I've written about before migrating my existing code from Python 2 to Python 3 is a lot of work for no gain, yet the Python developers seemed to expect me to not just do this but to be happy about it. So the developers wanted me to do a lot of work just because they'd decided that they wanted to clean up Python in relatively trivial ways.

This made me resentful and angry directly and it also made me angry because it struck me as the height of language designer arrogance, where the designers prioritize what they see as elegance over backwards compatibility and other things that matter to programmers in practice.

(This attitude is not unique to language designers; it is found in any developer who breaks compatibility because they have some sort of better way to do things.)

Worse, not only was I and my existing code was being thrown under a bus by a bunch of smug developers but they were also more or less telling me that it was my own fault that the migration was so hard because most of my code didn't have tests. At the time, I'm pretty sure that I read things to the effect that 'code with good tests should have little problem migrating to Python 3', with the implications about code without good tests rather implied. To put it one unkind way, the attitude that good code and good programmers will have no problem with something hard is a smug Lisp weenie attitude, and if I liked that attitude I might use Lisp. I don't code in Python to be smug and pure, I code in Python to get things done, and to an extent I perceived Python 3 as being a hijacking of a pragmatic language to be smug and pure, to do things the 'right' way no matter the practical cost.

I accept that my anger is partly irrational. I don't think that the Python developers expected or wanted me to take Python 3 and their actions the way that I did, and to some extent my reaction is even unfair. Without actually changing much about the objective situation, I think that a different way of framing the Python 3 announcements would have made me a lot happier with Python 3; if I take the right attitude (and I think it's a realistic attitude), Python 3 is really no big deal. But unfortunately my anger exists and colours my entire interactions with Python 3. So it's high time for me to admit this so that, perhaps, I can move past it and come to appreciate and enjoy Python 3.

Comments on this page:

From at 2013-01-07 14:45:39:

Hi there,

You're right. Python developers aren't the first people to deprecate a heavily-used product. Is there anyone who has made an incompatible transition like this whom you can point to as a good example to follow?

As a developer yourself, I'm sure you're aware of the problems that constantly hound you from a bad decision you made. And you want to fix it, but it's hard because people are relying upon that old behavior, as frustrating as it is.

So, what do you do as a developer? What's a better way to shed the cruft of some bad choices while not making people angry and not having to keep adding new features to the code that has given you headaches for so long?


Written on 25 December 2012.
« Why we're almost certainly staying with ZFS
Does Python 2 need to evolve? »

Page tools: View Source, View Normal, Add Comment.
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Tue Dec 25 00:52:03 2012
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.