(no title)
imran-iq | 2 years ago
A much better example would be something like go or java where 10 year old code still runs fine with their modern tooling. Or an even better example, perl, where 30 year old code still runs fine to this day
imran-iq | 2 years ago
A much better example would be something like go or java where 10 year old code still runs fine with their modern tooling. Or an even better example, perl, where 30 year old code still runs fine to this day
wmorgan|2 years ago
As an author of software, sometimes you make mistakes, and those mistakes are often of the form, "I permitted the user to do something which I didn't intend." How do you correct something like that? In the Java world, the answer is "add newer & safer & more intentional capabilities, and encourage the user to migrate."
In the Python world, this answer is the same, but it also goes further to add, "... and turn off the old capability, SOON," which is something that Java doesn't do. In the Java world, you continue to support the old thing, basically forever, or until you have no other choice. See, for example, the equals method of java.net.URL: known to be broken, strongly discouraged, but still supported after 20+ years.
Here's an example of the difference which I'm talking about: Python Airflow has an operator which does nothing -- an empty operator. Up through a certain version, they supported calling this the DummyOperator, after an ordinary definition for "dummy." But also -- the word "dummy" has been used, historically & in certain cultures & situations, as a slur. So the Airflow maintainers said, "that's it! No more users of our software are permitted to call their operators DummyOperator -- they now must call it EmptyOperator instead!" So if you tried to upgrade, you would get an error at the time your code was loaded, until you renamed your references.
This decision has its own internal consistency, I suppose. (I personally would not break my users in this way). But in the Java world it wouldn't even be a question -- you'd support the thing until you couldn't. If the breakage in question is basically just a renaming, well, the one thing computers are good at is text substitution.
So overall & in my opinion anyway, yes, it's very much true that you can upgrade Java & Java library dependencies much more freely than you can do the same sorts of things with Python.
xvector|2 years ago
Man, some companies and people have far too much time to waste.
matt123456789|2 years ago
subtra3t|2 years ago
English isn't my first language but I haven't seen "dummy" being used as a slur, in any conversations I've engaged in or any books I've read. For me its connotation is more of a playful nature. When I think of slur I don't think of "dummy", I think of the r word and the like.
At least I can get the reasons for github's change to "main" for the default branch in a git repo. Maybe I don't agree with it but I can at least see how some people would interpet the word "master" in a negative way. I can't say the same for the word "dummy" though.
pjmlp|2 years ago
hmottestad|2 years ago
toasted-subs|2 years ago
In python you can specify the version. The popular ML libs in Java are actually still broken and have been for years.
pdonis|2 years ago
I'm not sure what you mean. Python 2 to 3 was a breaking change, but that was just one change, not "constant breaking changes".
If you stick with one major version no old code breaks with a new minor version (e.g., you can run old 2.x code under 2.7 just fine, and you can run old 3.x code under 3.12 just fine). The minor version changes can add new features that your old code won't make use of (for example, old 3.x code won't use the "async" keyword or type annotations), but that doesn't make the old code break.
bryancoxwell|2 years ago
davedx|2 years ago
This happens a lot for me.
lmm|2 years ago
No you can't lol. There were major breaking changes from 2.4 -> 2.5, and smaller but still breaking ones for 2.5 -> 2.6.
wruza|2 years ago
I know it may be more complex or trivial than I think, or tied to very few specific packages, but that’s the point – I have to figure it out where I shouldn’t need to. In contrast, I’m sure that no matter which latest version of Node I have, it will work.
I mean I was, up until Node 19/20, where they broke the loader, so ts-node doesn’t work anymore and the suggestion is to re-learn something called tsx. F that nonsense.
JohnFen|2 years ago
heurist|2 years ago
pdonis|2 years ago
I don't see why not. I have been writing Python for close to 20 years now, and I still have code from my early days with it that runs just fine today.
pvaldes|2 years ago
toasted-subs|2 years ago
Your just trying to get people to use languages which are less useful in practice (other than Java).
Aeolun|2 years ago
I don’t know about you. But even when I try to run 3 year old Java code with a new SDK it’s always broken somehow.
vbezhenar|2 years ago
The only exception is Java 9 which removed some Java EE dependencies from JDK, but that's easily solved.
Just an example: I'm running application on Java 21 which uses Oracle 9i driver that was compiled for Java 1.4 and it works fine.
hmottestad|2 years ago
lmm|2 years ago
ahoka|2 years ago
baq|2 years ago
blakesley|2 years ago
Don't get me wrong: Python hasn't overcome its tooling problem, so there's still that barrier. But once your team agrees on a standardized tool set, you should be able to coast A-OK.
behnamoh|2 years ago
toasted-subs|2 years ago
I had a similar problem moving apps from earlier versions of Java a decade ago.
frizlab|2 years ago
from-nibly|2 years ago
TheNewAndy|2 years ago
Even the cpython2 interpreter is no longer supported by the original authors, but that doesn't stop someone else from supporting it.
tsss|2 years ago
fliggertiggy|2 years ago
C# has been pretty good as well.
But at some point you're going to need data for your app and that's where you'll get surprised. That Yahoo currency data you used to get for free or Wikipedia's mobile API? Gone ten years later.
zx8080|2 years ago
pjmlp|2 years ago
Still way better than Python, though.
toasted-subs|2 years ago
Worst of all, it's always a clear "use the latest version and it will work". With python using the latest version almost always works, and you can import the previous functions if you really want to use the new interpreter on old code.
Maybe this is because most of the time with python you barely have external libraries. Similar to Java, but in Node.js it's like asking for trouble.
unknown|2 years ago
[deleted]
unknown|2 years ago
[deleted]
082349872349872|2 years ago