Remix.run Logo
kaashif 5 hours ago

> Python only just barely survived the jump from 2 to 3.

I really don't think this is true at all.

Python 2 to 3 took a really long time, it was a real struggle, lots of people stayed on 2 for a really long time.

But I really don't think Python was close to dying the same way Perl has/is. There was no risk of Python not "surviving" in my opinion.

There was always a clear way forward and people were actually moving. The mass migration of millions or billions of lines of code from 2 to 3 actually happened and has many high profile million+ line migrations, like Yelp or Dropbox.

There was never anything similar for Perl 5 to 6, totally different situation.

foofoo12 4 hours ago | parent | next [-]

> I really don't think Python was close to dying

It absolutely was. What saved it was:

1. The data science / AI crowd that was gathering momentum any many only used Python 3.

2. No popular alternative. Perl got python as an alternative.

Python was also a good, simple language and had a good healthy culture. But it's nothing sort of a miracle that it survived that biblical software calamity.

matthewmc3 3 hours ago | parent | next [-]

You forgot perhaps the most important one:

3. six

`six` was instrumental in repairing the Python schism by giving people a way to incrementally move their 2.7 code to Python 3, and write code that was compatible in both. The six project didn't exist at first and the path to Python 3 was too painful without it. Six solved all that by smoothing over built-in libraries with different casing between versions, incompatible core libraries, the addition of unicode strings, print changing to a function, etc, etc. Perl 5 to Perl 6 (aka Raku) never got that.

masklinn 2 hours ago | parent [-]

Six was one component but not the only one. Python 2.7 also backported a number of early Python 3 features, Python 2 features were reintroduced in basically every P3 version until at least 3.5 (although after 3.3 they were pretty minor), and a lot of extensive migration guides were written (my main bible was eevee's).

In my experience, six was a relatively minor part, and you could get by with your own little compat file for just the stuff you needed, even on relatively big projects. I even found it beneficial to do so because instead of just slapping six.moves everywhere you'd have to re-evaluate some of the old decisions (e.g. at $dayjob at the time we were using all of urllib, urllib2, and requests for HTTP calls, not using six provided strong motivation to just move everything to requests). This also made for a lot less churn when removing Python 2 compatibility.

saurik an hour ago | parent [-]

> Python 2 features were reintroduced in basically every P3 version until at least 3.5

If they had just done this from the beginning there wouldn't even have been such upgrade drama in the first place... like, as an obvious example, removing u'' syntax for unicode strings immediately at 3.0 was just idiotic: if it weren't for some dumb decisions like that one there would have been almost no upgrade discontinuity at all (a la Ruby 2's Unicode reboot, which concerned a lot of people but was a nothing-burger next to the insanity of Python 3).

nine_k 4 hours ago | parent | prev | next [-]

Python 2.7 was kept very much alive, with a number of small improvements from the 3.x branch backported to it.

Big players, like Django or SQLAlchemy, kept versions both for 2.x and 3.x for quite some time. This allowed for a smooth transition, when all of your dependencies finally had good versions for 3.x.

The difference between Python 2.x and Python 3.x was not dramatic. I would say it was mostly cosmetic up until 3.5 when async landed. Even with these small changes, the splitting of byte strings and character strings alone (an obvious move towards sanity) was plenty annoying for many projects.

Communities and ecosystems are fragile; sharp turns can easily break them.. Even careful maneuvering, like the Python 2 → 3 transition, put very visible strain on the community. A crazy jump that was Perl 6 was not survivable, even though Raku may be a fine language.

mixmastamyk 4 hours ago | parent | prev | next [-]

I was not affected by Py3 at all. First I completely ignored it for five years while it gestated. Then started kicking the tires when 3.4 dropped on a LTS. When 3.6 with better dicts and f-strings landed I moved over with barely a whimper, since I'd had a decade to get things upgraded to 2.7 first.

None of my projects needed to worry much about char encoding, and I'd used logging extensively starting under 2.6 or so.

tptacek 3 hours ago | parent | prev | next [-]

Long before the AI/data science breakout, we were noticing in our consulting practice (2016-2020) a sharp dropoff in Ruby at startups, and Python as the modal language (by the time I left in 2020, it would have gone Python -> Node -> Ruby).

So no, I don't think AI saved Python; it was fine before then.

smohare 2 hours ago | parent [-]

2016 already puts one far into the AI explosion. The current hype cycle, with LLMs as a service at the forefront, arguably makes python less relevant than in it was in the mid 2010’s. The current crop of “AI Engineers” can use whatever languages they want for the most part. In 2016 most practitioners were leveraging a lot more of the standard scientific computing frameworks afforded by python.

tptacek 2 hours ago | parent [-]

Python was the lingua franca of data science by 2016, but AI and data science was clearly not the reason startups were building in Django and Flask --- the data science teams were always a morass of Jupyter notebooks and pickle blobs.

MoonWalk 3 hours ago | parent | prev | next [-]

I don't know. Isn't Python still viewed as a mess now? I was thinking of taking the time to learn it as the best way to write cross-platform utilities, but encountered a lot of negative sentiment about its ecosystem. And all the environment managers you seem to need for it are a turn-off.

Granted, this is coming from a relative noob who read and followed a couple of "how to set up Python properly" articles and that's about it. But I pretty much decided to spend my time on JavaScript, despite its cumbersomeness for implementing simple utilities.

kstrauser an hour ago | parent [-]

It's vastly improved now. With uv, many times you can download a new utility off GitHub and run it with `uv run foo.py`, including fetching its dependencies.

culi 2 hours ago | parent | prev | next [-]

IMO javascript was a valid alternative. Easy to learn and easy to run. That's the main things needed for academic work

Python had a history of tooling/libraries that made it well ingrained into academia

maleldil an hour ago | parent [-]

Javascript didn't have the same FFI story with C/Fortran as Python. That's what allowed libraries such as numpy, scipy, pandas, etc. to flourish.

skylurk 3 hours ago | parent | prev | next [-]

> No popular alternative

I can easily imagine a scenario where Julia could have taken the data science crowd and Node.js could have taken everyone else. People like Python, I guess.

foofoo12 an hour ago | parent [-]

Before JS had promises, JS code was plagued with the callback pyramid of doom. You needed an advanced masters degree in masochism to endure that. I don't think Python devs would have liked that.

dist-epoch 4 hours ago | parent | prev [-]

You're contradicting yourself - if Python had no popular alternative, what would have new people used instead and what would existing code have migrated to?

true2octave 2 hours ago | parent | prev | next [-]

I know companies with a big Python 2 stack that rather preferred to rewrite in typescript than migrate to Python 3

I turned down one of those companies because I didn’t want to deal with that migration in 2021

LexiMax an hour ago | parent [-]

I will never forget Mercurial's postmortem on their experience with the Python 3 transition. They had very few kind words to say about the process.

https://gregoryszorc.com/blog/2020/01/13/mercurial's-journey...

Part of me even wonders if the transition had any role to play in why Mercurial gradually lost whatever foothold it had in the DVCS ecosystem.

tacker2000 18 minutes ago | parent [-]

Very interesting article.

I too was rather upset about the Python 2->3 shenanigans and I was working on much smaller projects.

notepad0x90 an hour ago | parent | prev | next [-]

If Golang was around, it might have killed python then I think. To many, the 2->3 jump made little sense. I honestly wish they just started a new language instead.

I still to this day stumble upon code I have to use 2.7 on, thankfully things like pipx make it easy these days. but still,switching back and forth could be a pain.

But you're right, it wasn't like Perl 6. People moved to python and php mostly from perl. what were going to move to from python 2? Ruby?

jcranmer 44 minutes ago | parent [-]

Python 2.7 was EOL'd at the start of 2020, and serious effort to move from 2 to 3 didn't start until around 2018, by which time Go was a very major player.

foobarian 4 hours ago | parent | prev | next [-]

Can you imagine if the PSF had been working on Python 4 in parallel, with more backwards compat shifts or even a radically modified syntax?

I think another saving grace was, when considering Python 3, one's choice was between "easy-ish migration to best in class" and "difficult rewrite into second-best". Meanwhile with Perl 5/6 it was "two moderately hard migrations into metastasized shell-script has-been language" and "difficult rewrite into best-in-class with lots of upside".

kvemkon 2 hours ago | parent | prev | next [-]

> Python 2 to 3 took a really long time

It took AdaCore so long to port the plugin system of the GNAT Studio (GPS) to Python 3 (which seems to be a fraction of the whole code base), that even conservative Debian had to remove the whole GNAT-GPS package.

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1082332

sleepybrett 3 hours ago | parent | prev | next [-]

The delta between python 2 and 3 was much smaller than the delta between perl 5 and 6. Perl 6 might as well be a totally different langue which is probably why they renamed it to Raku, to stop people thinking that it was the same language.

zahlman 4 hours ago | parent | prev | next [-]

> There was always a clear way forward and people were actually moving.

I was always of the impression that people were very reluctant to move even though the benefits were clear and the movement not nearly as difficult as people claimed. But I still hear people complain about, for example, how you can't run CPython 2.x bytecode on a modern CPython runtime even though you can't run CPython 3.13 bytecode on a CPython 3.14 runtime, either and that hasn't slowed anyone down at all.

masklinn 3 hours ago | parent [-]

> the movement not nearly as difficult as people claimed.

Original was really rough because the core team had gone in the wrong direction on migration, and the Python io module was hell as well.

By 3.3-3.4 it was relatively smooth sailing but that took a lot of work from the community and core team both (reminder that Python 2.7 was released after 3.1, backporting a number of features to make compatibility easier, and old features were reintroduced as late as 3.5).

zahlman 3 hours ago | parent [-]

I started on 3.2 and found it reasonably smooth (dealing with encodings in 2.x was also not pleasant IMX if you also cared about universal newline support at the same time), but I will definitely cede that 3.0 and 3.1 were Not Ready.

dist-epoch 4 hours ago | parent | prev | next [-]

Python continued growing fast during the 2 to 3 transition, it was nowhere near dying. It was one reason it took so long, people were starting new Python 2 projects 5 years after Python 3 was released. Only around 2017/2018 the default for new projects kind of became Python 3.

orev 2 hours ago | parent [-]

Python 2 was used for such a long time because many modules only worked on 2, which was a direct result of the compatibility being broken. There was a catch-22 for a long time that nobody would upgrade to 3 because nobody else would.

raverbashing 3 hours ago | parent | prev [-]

I agree

If anything might have killed python it was not python 3 per se but shipping a "beta" version of Py3 as 3.0

Python 3 only got usable really around 3.3 or maybe 3.4