A confession: Python 3 has always made me kind of angry
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.