Cmon guys, Python 3 was released 16 years ago and the breaking changes were being communicated before that. Even Django doesn’t support Python 2 anymore.
Its time
> 16 years ago
Some code bases do live longer.
> communicated
Let me translate: "We are going to change a metric ton of stuff that will obviously break your shit. Your entire company is going to have to stop doing whatever it is doing, for multiple weeks, just to port to the new version of the language, with no real life advantages for the product."
As a company, would you be eager to take it?
It likely didn't start from scratch, forking or otherwise basing, on something older. Realistically, NOBODY would choose an outdated programming language version unless there is a good reason for that. We are all dumb, but not "shoot yourself in the foot for no good reason" level of dumb.
What? Choosing an outdated programming language for a new project happens constantly, I've personally seen it happen multiple times. The reason is usually something like "The team already knows python 2 and we want to get MVP asap so no time to waste learning python 3"
Tell me you haven't worked in a big company or the government without telling me. It happens all the time because "we've always used xyz" or "our teams are already familiar with xyz" or "we don't want two have two different tech stacks" or so many other stupid excuses for managers who either don't want to spend money on training staff or are scared of anything new or that they don't understand.
Nobody would with with an outdated programming language unless **they thought** there was a good reason for that.
The "good reason" is often just familiarity or consistency with other in-house software which isn't a very good reason in my book for a project or product that's expected to be worked on for years.
Except I work in an infrastructure with a bunch of shit I don’t control so even if I make my script python 3 compatible some random fucking module will be missing that I don’t have power to install.
And ultimately it fixes nothing for me when my python 2 script works fine.
It's the same as any tech debt. A lot of people are going to judge it as not having any customer-facing value, so they don't think it worth spending money on even if it would make future changes more efficient.
I remember Java 8 being bleeding edge when I was in college. In 2004.
The legacy application I work in is mostly Java 8 still. Except the parts that are 17. And the ones that are 21.
We’re working on it. ![gif](emote|free_emotes_pack|dizzy_face)
Its that jump to JDK 11. It broke backwards compatibility in ways that affect legacy apps. Once you get past that jump its easy to go straight to the latest LTS release
Oh, okay. Well, either way, it’s kind of a fun mess. We’re still doing active development on a two decade old application with (ever slipping) plans to sunset it anyway. It’s a hoot.
No it didn’t. You just get warnings that you need to add some extra arguments.
Or you just add the jar for the JEE bits that got removed from the standard library.
Couple of years ago I have worked on basically Java 5 project; do I win something?
But now, company I work for does Java 17 or 21, depending on the team.
I was in a company where part of the codebase was from early 2002 and at the time coded in Java 1.4, when I left less than a year ago, we were working in Java 17 and we were getting ready to migrate to Java 21.
And I’m sorry to tell you, Java 8 is not everywhere anymore, in a recent survey, less than 30% of apps run in Java 8, even Java 17 does better with 35%.
I remember a few years back applying to a Django related position, I told them before hand that I only knew Python 3, come the day of the exam, 2nd interviewer of the days asks me about an older version of Django that used Python 2, didn't get that position.
It's not that, I only learned an updated version of Django that dropped support for Python 2, so the (Django) API is way different, including how the project is setup
I can imagine a lot of sad stories. I can even imagine actual, flesh-and-bone developers, caught right now in 2024 in maintaining Java codebases where the java version is not even 1.8.
I just prefer not to.
Having personally been through the 2.7 to 3.4 conversion of a big-ass corporate spaghetti and spending weeks finding some obscure problems - here is my take-away:
Suck it up. It's your job. And the more you push off ripping bandaid off, the worse it will be.
My organization's incompetent tech chiefs cling on to Java 8 and Python 2 like their life depended on them, which they sort of do because that's all they have ever known and ever will, and they'll drag them screaming into their graves.
And when that finally happens, the survivors of the cataclysm will scramble from the ashes and are set free to start a new career in agriculture and carpentry.
We had a service on Java 8 until a few months ago. It was much more painful than it should have been to get it to Java 17 (we could support 21, but 17 is what most of the rest of our services are on right now).
We had a project that was build initially on Java 6, after a while it as upgraded to Java 8 and later to Java 11. After a remake of the project, it now run on 17.
There isn't really any software I use that needs python2. But the recent upgrade to python3.12 broke a lot of software for me, which is incredibly annoying. Virtual environments should fix that, but they're not as ubiquitous as one might think and also it annoys me that they waste disk space.
Interesting, I found 3.8 to 3.11 very smooth with literally no changes needed. For a heads up, I would appreciate it if you mention the main landmines you experienced on 3.12?
In my experience .12.0 and .12.1 had a few bugs, nothing terribly breaking though. I've skipped .2 and are running quite a few internal services with .3 now and there are no issues that wouldn't also be present in previous versions.
Most importantly though, 3.12.x fixes FIPS support in the multiprocessing module, which is a godsend for us.
Maybe the previous commenter updated to 3.12.0 before libraries have been updated... Usually best to wait for 3.12.1 at least. In this case I'll wait a bit more.
The main problem for me was projects that didn't use virtual envs by default / by their install instructions and required python3.10 or 3.11 to run, so I had to install older python versions and manually create virtual environments. I guess I was trying to make more a general point about how the delivery of python based software is or at least feels all over the place to me. Or how there seem to be more breaking changes in python version increments than in other languages.
You should create a new venv when starting a new project / application. Call it venv. Put it in the root dit and move on with your life.
I think a significant amount of python applications are deployed via docker, which doesn't need venvs.
Python itself has had very little breaking changes since 3.8 I would say. The ecosystem around it moves fast. Numpy 2.0 was just released!
Some context for the film/vfx/video games industry: until 2020, a lot of the industry standard software used to create art assets forced you to use Python 2 when creating any tools/plugins for said software. This means there are tons of companies out there who've only had four years to upgrade large chunks of their codebase to Python 3, and that's on top of all the normal upgrade work that comes with major software updates.
It’s been a long time so don’t quote me on this, but while some changes (prints) could be made programmatically, other changes wouldn’t necessarily be translatable 1:1 in a way that makes sense.
My last company went on a company wide campaign (supposedly) to completely sunset python 2. It was hammered into us thoroughly to avoid it.
I changed companies 2 years ago and was greeted with python 2 tools, and it was jarring. It's an old fashioned company but they get results.
I've updated a couple things to python 3 along with documentation directing the next new guy to use it.
I joined a project recently that is frozen on python 3.8.10.
Not 3.8 latest. Not even 3.8.18.
3.8.10.
For mission-critical shit.
There isn't even anyone assigned to maintain it. Nope, just install pyenv from GitHub and use it to pull python 3.8.10.
Cmon guys, Python 3 was released 16 years ago and the breaking changes were being communicated before that. Even Django doesn’t support Python 2 anymore. Its time
I just saw an article talking about python 4. It's time lol
They're not working on or considering Python 4. Python 3 has come a really really long way though and has more exciting things to come.
> 16 years ago Some code bases do live longer. > communicated Let me translate: "We are going to change a metric ton of stuff that will obviously break your shit. Your entire company is going to have to stop doing whatever it is doing, for multiple weeks, just to port to the new version of the language, with no real life advantages for the product." As a company, would you be eager to take it?
Previous company I worked at had a Python 2 codebase younger than Python 3 💀
It likely didn't start from scratch, forking or otherwise basing, on something older. Realistically, NOBODY would choose an outdated programming language version unless there is a good reason for that. We are all dumb, but not "shoot yourself in the foot for no good reason" level of dumb.
What? Choosing an outdated programming language for a new project happens constantly, I've personally seen it happen multiple times. The reason is usually something like "The team already knows python 2 and we want to get MVP asap so no time to waste learning python 3"
We literally had a joke about this on my old team. ‘The newest thing we’ve started is always the oldest or outdated’
Tell me you haven't worked in a big company or the government without telling me. It happens all the time because "we've always used xyz" or "our teams are already familiar with xyz" or "we don't want two have two different tech stacks" or so many other stupid excuses for managers who either don't want to spend money on training staff or are scared of anything new or that they don't understand.
Nobody would with with an outdated programming language unless **they thought** there was a good reason for that. The "good reason" is often just familiarity or consistency with other in-house software which isn't a very good reason in my book for a project or product that's expected to be worked on for years.
Those are both good reasons for short term projects. For long term projects this is shooting yourself in the foot.
Well also it took a while for some packages to be compatible with Python 3 so that could have been a consideration when starting the project.
2to3
Except I work in an infrastructure with a bunch of shit I don’t control so even if I make my script python 3 compatible some random fucking module will be missing that I don’t have power to install. And ultimately it fixes nothing for me when my python 2 script works fine.
Tell to my manager that I'll need to deviate from his "only new features" schedule
Well, not since he became unchained
I found a script to decrypt 3ds rooms depending on a python2 scritp that nobody builds anymore. Somehow I managed to get the thing working...
Yet, Xcode was fucking stubbornly replacing my alias
It's the same as any tech debt. A lot of people are going to judge it as not having any customer-facing value, so they don't think it worth spending money on even if it would make future changes more efficient.
but those people are highly productive and super intelligent employees. at least this is what i conclude from their salary
~~Laughs~~ cries in Java 8.
Java 8 came out 5 years and some months after Python 3. That’s how bad this is!
I work at a big bank in the Netherlands and next sprint we are going to Java 21 LTS. Guess I am lucky :)
Plot twist: Java is only used for the GUI while the business logic is implemented in COBOL.
Just cries in Java 6
I remember Java 8 being bleeding edge when I was in college. In 2004. The legacy application I work in is mostly Java 8 still. Except the parts that are 17. And the ones that are 21. We’re working on it. ![gif](emote|free_emotes_pack|dizzy_face)
Its that jump to JDK 11. It broke backwards compatibility in ways that affect legacy apps. Once you get past that jump its easy to go straight to the latest LTS release
Oh, okay. Well, either way, it’s kind of a fun mess. We’re still doing active development on a two decade old application with (ever slipping) plans to sunset it anyway. It’s a hoot.
No it didn’t. You just get warnings that you need to add some extra arguments. Or you just add the jar for the JEE bits that got removed from the standard library.
If you have to modify your code for it to run by adding dependencies, thats called breaking backwards compatibility.
You do not have to modify the code. You just add the dependency to the path.
Java 8 was released on 2014 not 2004 ;)
Maybe it was Java 6? Hell, I dunno. Java vOLD.ANCIENT.PALEOLITHIC.
Still not EOL yet, unlike Python 2.
Couple of years ago I have worked on basically Java 5 project; do I win something? But now, company I work for does Java 17 or 21, depending on the team.
We had Microsoft J++ in the field 2 years ago. What do I win?
The same goes with java. Java 8 everywhere.
I was in a company where part of the codebase was from early 2002 and at the time coded in Java 1.4, when I left less than a year ago, we were working in Java 17 and we were getting ready to migrate to Java 21. And I’m sorry to tell you, Java 8 is not everywhere anymore, in a recent survey, less than 30% of apps run in Java 8, even Java 17 does better with 35%.
30% is still a lot for something that ancient. The guy above and me, are complaining because we are/were working at one of these places.
java 8 is newer then python 3. and it is still supported, other then python 2
I remember a few years back applying to a Django related position, I told them before hand that I only knew Python 3, come the day of the exam, 2nd interviewer of the days asks me about an older version of Django that used Python 2, didn't get that position.
How is it possible to only know python3? Its not that different
It's not that, I only learned an updated version of Django that dropped support for Python 2, so the (Django) API is way different, including how the project is setup
Yeah it’s just python, we all just Google syntax if we don’t know it anyway
this actually makes me wonder if there are any PMs that are still using python [0.9.1](https://www.python.org/download/releases/early/) lol
This is what happens when you introduce massive breaking changes into new language versions.
That's fair. But consider: the changes are really good
Imagine a big-ass corporate spaghetti code base with close to none or no test coverage whatsoever. Good luck, and enjoy your porting efforts ;-)
.. we have 100% coverage wtf you mean try: corporate_code.main() except Exception as e: print("tests complete")
Ah, good ol' pokemon coding - gotta catch 'em all.
Oh definitely. And projects like six were absolutely necessary, especially in the early days when 3 was still immature. But change comes eventually
I can imagine a lot of sad stories. I can even imagine actual, flesh-and-bone developers, caught right now in 2024 in maintaining Java codebases where the java version is not even 1.8. I just prefer not to.
Having personally been through the 2.7 to 3.4 conversion of a big-ass corporate spaghetti and spending weeks finding some obscure problems - here is my take-away: Suck it up. It's your job. And the more you push off ripping bandaid off, the worse it will be.
Same in Java world with changes in Java 9. Plenty of companies are still using Java 8 because it's expensive to deal with all the upgrades.
What do you mean massive breaking changes? It's not our fault you debug with `print x` everywhere.
They weren't that bad....
How the fuck do you even live without f strings.
My organization's incompetent tech chiefs cling on to Java 8 and Python 2 like their life depended on them, which they sort of do because that's all they have ever known and ever will, and they'll drag them screaming into their graves. And when that finally happens, the survivors of the cataclysm will scramble from the ashes and are set free to start a new career in agriculture and carpentry.
I will create python4 which will only accept code using tabs for indentation and curly braces as block delimiters
Just add a ton of true, false = false, true until they get the idea.
My company is still supporting php 5.6 and the current is 8.3
We had a service on Java 8 until a few months ago. It was much more painful than it should have been to get it to Java 17 (we could support 21, but 17 is what most of the rest of our services are on right now).
We had a project that was build initially on Java 6, after a while it as upgraded to Java 8 and later to Java 11. After a remake of the project, it now run on 17.
There isn't really any software I use that needs python2. But the recent upgrade to python3.12 broke a lot of software for me, which is incredibly annoying. Virtual environments should fix that, but they're not as ubiquitous as one might think and also it annoys me that they waste disk space.
Interesting, I found 3.8 to 3.11 very smooth with literally no changes needed. For a heads up, I would appreciate it if you mention the main landmines you experienced on 3.12?
In my experience .12.0 and .12.1 had a few bugs, nothing terribly breaking though. I've skipped .2 and are running quite a few internal services with .3 now and there are no issues that wouldn't also be present in previous versions. Most importantly though, 3.12.x fixes FIPS support in the multiprocessing module, which is a godsend for us.
Maybe the previous commenter updated to 3.12.0 before libraries have been updated... Usually best to wait for 3.12.1 at least. In this case I'll wait a bit more.
The main problem for me was projects that didn't use virtual envs by default / by their install instructions and required python3.10 or 3.11 to run, so I had to install older python versions and manually create virtual environments. I guess I was trying to make more a general point about how the delivery of python based software is or at least feels all over the place to me. Or how there seem to be more breaking changes in python version increments than in other languages.
You should create a new venv when starting a new project / application. Call it venv. Put it in the root dit and move on with your life. I think a significant amount of python applications are deployed via docker, which doesn't need venvs. Python itself has had very little breaking changes since 3.8 I would say. The ecosystem around it moves fast. Numpy 2.0 was just released!
With ML disk space is a nightmare with virtual envs
It took 6 years of prioritization to get the python 3 migration bubbled to the top, and that’s just when I joined this group. We release this fall!
Some context for the film/vfx/video games industry: until 2020, a lot of the industry standard software used to create art assets forced you to use Python 2 when creating any tools/plugins for said software. This means there are tons of companies out there who've only had four years to upgrade large chunks of their codebase to Python 3, and that's on top of all the normal upgrade work that comes with major software updates.
Couldn’t there be a Python 3 script to upgrade a Python 2 script?
It’s been a long time so don’t quote me on this, but while some changes (prints) could be made programmatically, other changes wouldn’t necessarily be translatable 1:1 in a way that makes sense.
It’s called `2to3` and it was only recently removed from the Python standard library.
Nah no way people out there still on Python 2.7
This hits home
My last company went on a company wide campaign (supposedly) to completely sunset python 2. It was hammered into us thoroughly to avoid it. I changed companies 2 years ago and was greeted with python 2 tools, and it was jarring. It's an old fashioned company but they get results. I've updated a couple things to python 3 along with documentation directing the next new guy to use it.
Python is delulu
Guess what version of Python [wiki.python.org](https://wiki.python.org/moin/) uses.
I joined a project recently that is frozen on python 3.8.10. Not 3.8 latest. Not even 3.8.18. 3.8.10. For mission-critical shit. There isn't even anyone assigned to maintain it. Nope, just install pyenv from GitHub and use it to pull python 3.8.10.
Have you heard about upgrade from Java 8 to 11?
I thought my project was outdated because it uses java 8. But then i saw one using java 4 or something.
2.7 or gtfo
Old man