News for hackers. Stuff that matters.
Re:Writing Python Like Rust by ddejohn on Wednesday June 28, 2023 @10:56PM (#36515792)
My current role is at a company with a few hundred thousand lines of un-typed, undocumented, mostly un-tested Python. I get a small allowance of "tech debt busting" time, and it's absurd how many bugs I find just by trying to suss out the types on a given code path. It's maddening work.
Re:Writing Python Like Rust by jeroenhd on Wednesday June 28, 2023 @11:24PM (#36515959)
My experience of porting Javascript code to Typescript (or calling into Javascript from Typescript and figuring out the correct types to pass) is very similar.

Thousands of files all become filled with very obvious bugs once you enable a basic type checker, which then helps brand Typescript as "too much effort" by those who normally write Javascript because now they need to deal with their buggy code. Luckily you can just explicitly cast all of your types without checking and hope that nobody notices!

When you ask people to get their typing right, someone will use buzzwords like "rapid prototyping" and remind you that features are more important than fixing the existing product as long as nobody complains about the bugs, and that's that. Also, Typescript is hard, apparently.

Untyped legacy code sucks. It's one of the reasons I detest working with languages like Javascript, Python, and PHP. At least Python and PHP have types these days, making Javascript objectively inferior.

Re:Writing Python Like Rust by valzam on Thursday June 29, 2023 @12:51AM (#36516425)
"having type annotations" and "having types" are two very different things. The people who say TS is too hard/not worth are most definitely not adding type annotations to Python/PHP code.
Re:Writing Python Like Rust by wirrbel on Thursday June 29, 2023 @01:16AM (#36516582)
The other way around you have the "it compiles, so I don't need tests" crowd in statically-typed languages.
Re:Writing Python Like Rust by erik_seaberg on Thursday June 29, 2023 @01:41AM (#36516755)
This might sort of work if everything from the domain gets a disjoint type, but stringly-typed code is a lot more common and the type system barely matters.
Re:Writing Python Like Rust by HdS84 on Thursday June 29, 2023 @02:02AM (#36516901)
I am currently firefighting for a customer who has a medium Sized application in c#. Started around 2019 so not ancient, but every programming, architecture and technology choice was wrong.

Sure it compiles. But often it crashes without rhyme or reason and for some reason, customers hate it.

First thing I did was to get it from .net 4.8 to .net 7 and enable all available errors checkers and style linters.

The other howled, but their builds stopped because they could no longer check-in crap. That helped. But fixing this is more work than what this would have needed if they had done it right the first time.

Funny examples: reinvanted rabbitmw badly using raw TCP and XML. Better hope your network is good, If the messages arrive at the same time, they are merged and the app crashes. So there are lots of time.sleep(50) calls to avoid that. Why is that app slow?

The iot devices can only address 254 states. The UI for that allows ulong devices. It's never checked, but if the vast fails, the app just crashes.

Re:Writing Python Like Rust by Shrezzing on Thursday June 29, 2023 @07:51AM (#36519193)
> First thing I did was to get it from .net 4.8 to .net 7

This might not have been a great idea, I'm fairly surprised nobody stopped you before you went through with it.

4.8 is the "final" version of .NET Framework. It's pretty much the longest "Long Term Support" offer Microsoft will ever give for a platform, realistically they'll be supporting it into 2030 and beyond. I'd not start any new projects in it, but upgrading away from it probably wouldn't be the first thing I'd do on a new project.

From .NET5, the framework moved to fundamentally different approach. It's effectively a different framework with the same NET branding on it. Most organisations who decided to move from 4.X to 6.X went through a near total rewrite because the paradigm shift is so massive, lots of organisations decided to stick with the pre-5 versions. The architecture and technology choices probably make a lot more sense in the pre-5 version of .NET, and it's unsurprising that your colleagues are frustrated with this decision, irrespective of the quality of their code.

On top of the move between .NET paradigms, you've moved away from a long-term-support version. NET7 is an 18month short-term-support interim release between two Long Term Support 36month versions .NET6 and .NET8. By moving to 7, you've trapped the company into an early & rapid upgrade path to .NET8 as soon as it comes out in Nov 2023, rather than giving the full 12 month buffer you'd have got if you moved to .NET6, which is in Long Term Support until Nov 2024. You moved the application off of a rock-solid framework with near infinite long-term-support, onto a framework that'll be deprecated before in four months, and out of support entirely in ten.

If I were you, I'd probably not be bringing this decision up in any performance reviews or interviews at new companies.

Re:Writing Python Like Rust by HdS84 on Friday June 30, 2023 @02:19AM (#36531197)
I honestly do not get what's your problem.

We moved from 4.8 to 7 because a) the better compiler warnings helped to reduce the amount of shit people where able to check-in AND highlight problems in the existing codebase (beyond "well, it looks like written by the lowest bidder offshore guy drunken on Friday night") and provide management with metrics they could understand (two warnings per LOC is part of your problem). B) it deepened our hiring pool, because it's easier to find people willing to work with current technologies than legacy. C) it allowed us to pull in various modern libraries (BLe especially) which made whole swathes of swamp code irrelevant. D) allowed us to establish a sane Ci/CD Pipeline more easily which we needed to reject bad stuff. F) we ship this product every few months, so not being on lts is not really a problem.

Re:Writing Python Like Rust by smcl on Thursday June 29, 2023 @08:59AM (#36519781)
"It compiles so I don't need tests" is IMO more likely to be seen in relation to Haskell or Rust. Now with C# (and other popular languages) you may encounter big applications that don't have any kind of automated tests, but I don't think people are proudly declaring that compile=OK among this crowd.
Re:Writing Python Like Rust by HdS84 on Friday June 30, 2023 @02:13AM (#36531149)
I did not encounter this before also.

But this crowd believed it obviously. The chief perpetrators already left when I got there, so I could not ask directly. Zero tests, zero documentation and a coding style like somebody tried to write pure C in c#.

Re:Writing Python Like Rust by smcl on Friday June 30, 2023 @05:25AM (#36532335)
Oh dear, that sounds quite painful!
Re:Writing Python Like Rust by HdS84 on Friday June 30, 2023 @05:40AM (#36532424)
I like fire Fighting jobs, you always see some new insanity.
Re:Writing Python Like Rust by smcl on Friday June 30, 2023 @08:22AM (#36533610)
I actually get what you mean. There's something kinda rewarding about reducing chaos in a tangled system like that. At a certain point (as long as you're careful) you kind of can't go wrong, every little improvement incrementally makes the world a little bit better and the application a bit easier and more predictable to work with.
Re:Writing Python Like Rust by cjfd on Thursday June 29, 2023 @04:48AM (#36517983)
Are there many people like that?

In actuality, writing software that is some quality is so hard that one needs all help one can get. One absolutely needs type checking and is just not professional without. One absolutely needs automated tests and is just not professional without. One absolutely needs manual/exploratory testing and is just not professional without.

Re:Writing Python Like Rust by wirrbel on Thursday June 29, 2023 @07:28AM (#36519011)
In my experience this depends a lot on the organizations. If the organization's expectation is that sometimes, no tests would be ok, then quickly these people emerge who think that writing tests slows them down.

If culture is that tests are necessary, then these people hide and write their tests (or actually learn that test-writing makes sense).

I am in an organization currently that values testing overall, but being in a regulated industry its almost a little over-done, the result of that is, that for prototypes, tools, etc. the rules are weakened, leading to this weird situation where "of course we write tests, but this was just our prototype, that runs in production, for 3 years" seems to work in some departments...

Re:Writing Python Like Rust by formerly_proven on Thursday June 29, 2023 @07:45AM (#36519137)
Despite being unprofessional smelly amateurs, dynamically-typed scripting languages delivered and continue to deliver amazing amounts of business value. Which is really the only thing a business cares about, as professionals know.
Re:Writing Python Like Rust by MrJohz on Thursday June 29, 2023 @04:05PM (#36525966)
I mean, you can do good work with Visual Basic and an overworked Excel spreadsheet, but it will probably be worth your while to find some alternatives.

Just because something works, doesn't mean we can't improve it, and just because we can deliver value with one tool, doesn't mean that we couldn't be delivering more value with other tools.

Re:Writing Python Like Rust by roflyear on Thursday June 29, 2023 @10:36AM (#36520933)
Yes, absolutely. Or they insist on only integration tests that take hours to run and are horrible to maintain.
Re:Writing Python Like Rust by hdjfkxmdnrkfkn on Thursday June 29, 2023 @06:51AM (#36518773)
You always need tests... No its buts or maybes
Re:Writing Python Like Rust by MereInterest on Thursday June 29, 2023 @03:01AM (#36517303)
This might be dependent on the size of your codebase, but it can be useful to start by running checks locally, using the static analysis to find bugs, then submitting the fixes independent of the static analysis. That way, by the time you propose enabling static analysis on all commits, it doesn’t scare people away.

Granted, this has the potential of the opposite problem, convincing detractors that static analysis didn’t find much, but that can be avoided by keeping a list of the bugs that were resolved ahead of time.

Re:Writing Python Like Rust by classified on Thursday June 29, 2023 @07:08AM (#36518886)
> Also, Typescript is hard, apparently.

For people who know nothing but JavaScript and dynamic typing, it could be.

Re:Writing Python Like Rust by ehutch79 on Thursday June 29, 2023 @09:43AM (#36520288)
Not being typed in a untyped/weakly typed language like JS, is NOT a bug.

Just because something is 'legacy' doesn't mean it's crap. It cauld be well thought out and easily maintained.

I've been dealing with a straightforward legacy api in JS. Trying to port it to typescript, the hard part is typing classes with dynamic propertied based on a schema. Has worked great in production for years. Well tested. I have to rewrite it to make it workin typescript apparently. going from about 10 line files to 50+ just for typings. Im sure i'm doing something wrong, but i've asked and it seems my code is wrong? despite having worked great for me all this time.... Yes i'm salty

Re:Writing Python Like Rust by jeroenhd on Friday June 30, 2023 @01:43PM (#36539122)
You can use weak typing and dynamic programming to accomplish some impressive feats, just like you can write bug-free C code without undefined behaviour. It's difficult, especially when the code base grows over a couple of years, but it can be done.

That said, some people see TypeScript as "Javascript, but with types in the definitions", but it's more than that. Sure, the core of it is that you're adding types to your code, but with things like KeyOf<>, Partial<>, Pick<> and other such utilities the TypeScript system is a lot more powerful than that of many statically typed languages.

Typing dynamic JS with TS can be tough because complex dynamic typing requires a lot of assumptions that often are half-truths from a programming language point of view. "When x.foo is a Number then x.bar.baz is a String with at most two characters" can be expressed in Typescript but it's very verbose and requires some digging through the Typescript docs to get right.

Describing types does add more lines of code, but that's not necessarily a bad thing. What you're doing is taking the implicit assumptions based on your dynamically typed program and expressing them in a way that can be verified. Assuming you don't invent completely new types in every single function, the initial typing workload is high but it becomes a lot easier over time, especially if you use your Partial/Pick/keyofs well.

What I found to be helpful is that the ?. operator has been added to Javascript quite some time ago (legacy JS doesn't normally use it) which means you can define properties that don't exist in the beginning but are set down the line to be of type `foo: string | undefined` rather than invent implementations of interfaces for every modification step of the program, using it through `bar.foo?.baz` rather than `bar.foo.baz`, and maintain the exact same assertions your program had before.

Alternatively, using `!` when you're absolutely 100% sure some parameter has been filled in (`bar.foo!.baz!`) can help convince the transpiler of assumptions that can't easily be expressed in code.

Re:Writing Python Like Rust by l0b0 on Wednesday June 28, 2023 @11:03PM (#36515840)
Bringing a non-trivial code base up to even half-decent standards can be a monumental task, and because such code bases are inherently overly complex and risky to change there's only so much you can do without breaking production constantly. It's a lose-lose proposition, which is why I'd never want to be "the programmer" at some place like that, no matter the pay.
Re:Writing Python Like Rust by synergy20 on Wednesday June 28, 2023 @11:21PM (#36515940)
django has 500K lines of python and it's considered well written and stable, so it's possible to do python with large code base I think. oddly, django does not seem to be even using type hints, new features such as dataclasses was not found from the source base either, still it just works well somehow.
Re:Writing Python Like Rust by dsissitka on Wednesday June 28, 2023 @11:57PM (#36516146)
I was curious:

  SLOC    Directory       SLOC-by-Language (Sorted)
  232099  tests           python=232099
  102470  django          python=102470
  424     docs            python=424
  158     scripts         python=142,sh=16
  21      top_dir         python=21
  0       extras          (none)
  0       js_tests        (none)
  
  Totals grouped by language (dominant language first):
  python:      335156 (100.00%)
  sh:              16 (0.00%)
  
  Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."
Re:Writing Python Like Rust by deepsun on Thursday June 29, 2023 @03:01AM (#36517297)
Wow, 2.3x for tests/src ratio. I remember some recommendation for Java to have around 0.9x ratio, otherwise too much tests maintenance.

Depends on the project of course, e.g. SQLite has an insane ratio.

Re:Writing Python Like Rust by cies on Thursday June 29, 2023 @07:51AM (#36519192)
Could also be that Java's typing already accounts for some part of what would need to be tests in Python code...
Re:Writing Python Like Rust by deepsun on Thursday June 29, 2023 @03:34PM (#36525596)
Exactly, that's what I meant. E.g.

    if very_rare_condition:
       raise MyRareException
Java wouldn't compile (no exception instantiation), but Python would work fine in production until the rare condition happened (but not captured above, as it's a class, not instance). Cases like that justify 100% tests coverage in Python, but not Java.
Re:Writing Python Like Rust by simonw on Thursday June 29, 2023 @12:00AM (#36516163)
That's because a great deal of Django was written before type hints or even dataclasses existed.
Re:Writing Python Like Rust by Hamuko on Thursday June 29, 2023 @04:23AM (#36517817)
And type hints aren't really that mature yet. If you look at the `typing` module's documentation in Python 3.11, there's 23 occurrences of the string "Changed in version". And the Python 3.12 version of the same document adds 9 more. Type hinting in Python is constantly evolving.
Re:Writing Python Like Rust by walthamstow on Thursday June 29, 2023 @10:25AM (#36520772)
That's the main reason we haven't adopted it at my place. We do have types of args and returns in docstrings though and it is enough for IDEs to do checks and suggestions from those types.
Re:Writing Python Like Rust by Turskarama on Wednesday June 28, 2023 @11:48PM (#36516087)
This is why I can't help but mentally roll my eyes when people say that static typing makes programming slower.

It makes writing the happy path slower, but is writing the happy path _programming?_

By the time you have a program which is complete and (at least mostly) bug free, the static typing has saved you hundreds of hours.

Re:Writing Python Like Rust by l0b0 on Thursday June 29, 2023 @12:09AM (#36516203)

  > It makes writing the happy path slower, but is writing the happy path _programming?_
Most managers and even some programmers seem to think so. Build the thing with no quality control, ship it, deal with the fallout, repeat. Bad programmers think this is normal, good programmers ensure that any fallout is rare.
Re:Writing Python Like Rust by smif on Thursday June 29, 2023 @12:49AM (#36516408)
I don't know if it's necessarily bad programmers. Think about this analogy, there's a blacksmith that can make swords but if you want it done well, it's gonna take more time/money. That same blacksmith can choose to take on customers that insist that he make the sword quicker and cheaper (and probably shittier).

He's not gonna be the one using the sword and he can make it clear up front about the tradeoffs. If it shatters in use and the customer gets maimed, oh well, they were warned. Sometimes the market is flooded with people who just want cheap swords made fast and the blacksmith needs to pay the bills too right?

Re:Writing Python Like Rust by MereInterest on Thursday June 29, 2023 @03:43AM (#36517585)
One problem with this mentality is that customers need to search more and more to find blacksmiths that provide anything other than cheap swords. They may reasonably conclude that this is just the nature of swords, and that there’s no such thing as a sword that withstands more than one or two blows. Eventually, even people who want good swords accept that they won’t be able to find a blacksmith who makes them, and settle for cheap swords instead.

In effect, https://en.wikipedia.org/wiki/The_Market_for_Lemons

Re:Writing Python Like Rust by smif on Tuesday July 04, 2023 @02:33PM (#36590820)
That's a fair point, but I don't think it's a problem with the blacksmith per se. You can't really expect every blacksmith to hold themselves to an arbitrary high standard and turn down work when they're possibly one or two missed payments away from financial ruin.

I would say if their society can grant them the safety to turn down work for cheap swords at their discretion without the risk of having their life ruined through a down period that is lacking high-quality work orders, then maybe you might have a case for also holding the blacksmiths accountable to a higher standard of work.

Accepting and taking on the risks associated with highly selective work orders has it's own intrinsic value and should be rewarded somehow. If it's not, then why would anyone do it?

Re:Writing Python Like Rust by jim-jim-jim on Thursday June 29, 2023 @12:53AM (#36516445)
Funnily enough, languages with sufficiently advanced type systems can focus almost exclusively on the happy path thanks to functor/applicative/monad.

--

It seems that this comment is controversial and I'm not sure why. I'm referring to the ability to do something like

    h <=< g <=< f
in Haskell, compared to a much longer explicit error checking equivalent in Go etc.
Re:Writing Python Like Rust by robertlagrant on Thursday June 29, 2023 @06:41AM (#36518710)
What does that do?
Re:Writing Python Like Rust by jim-jim-jim on Thursday June 29, 2023 @08:33AM (#36519526)
It's more general than this, but in this example it's a chain of three functions, f, g, h, each of which can fail in the same way. The precise failure behavior is encoded in the types themselves, so there is no need to check for it explicitly in the code. If `f` doesn't work, then `g` won't run, and the failure will be handled as expected by the functions' return types. Maybe they'll return an error message or maybe they'll be a "null" sort of value; the types will tell you, but the chaining syntax itself will always be the same.

It's far more common to see this chaining done with `do` blocks but I wanted to keep it all on one line.

This lends itself to a clean and optimistic sort of programming. You just write what you want to happen, chained within the broader context of some exception that might occur. So I agree with the parent that static typing makes things faster and easier, but I would argue that most unhappy paths don't require unique attention, and that it's language smell to make you care about them.

Re:Writing Python Like Rust by robertlagrant on Friday June 30, 2023 @09:37AM (#36534651)
Thanks! It's hard to imagine how this would work in a complex example that has multiple error paths, but I understand what you mean in the case of same types/one error case. Railway Oriented Programming and all that.
Re:Writing Python Like Rust by lixtra on Thursday June 29, 2023 @12:55AM (#36516463)
> It makes writing the happy path slower, but is writing the happy path _programming?_

The happy path is just fine for many cases.

Your home isn’t built to withstand a determined attacker with a tank. But we live in a happy world and a lot of stuff exists because people can cut corners.

Good managers/programmers know where they can be sloppy and where they have to be super careful.

The beauty of technical debt is that it only has to be repaid in case of success.

Re:Writing Python Like Rust by beoberha on Thursday June 29, 2023 @01:12AM (#36516561)
This is an interesting example. There are plenty of rules that must be followed when building a home. Equating type checking to a home being able to withstand a tank is a poor example IMO due to the potential of the scenario actually occurring. You’re going to have type checking errors. You’re never going to have someone coming at your home with a tank. A much better example is a significant amount of rain or wind. You might have that storm once every few years but you’ll be glad you built it to withstand it when it comes.

I’m being generous tbh. In my experience, though I work on pretty critical software, the unhappy path is a fairly critical path and must have some intentional barriers built before being shipped to customers.

Re:Writing Python Like Rust by IshKebab on Thursday June 29, 2023 @01:51AM (#36516833)
The dynamic type checking analogy of house building is eyeballing support dimensions and then rebuilding walls when they fall down. Fine for a shed, but if it's a building I'm living in I would like a structural engineer to do some calculations to check it's ok before I use it.

Maybe that's the difference between programming and software engineering! Engineers care if their stuff breaks.

Re:Writing Python Like Rust by pjmlp on Thursday June 29, 2023 @06:03AM (#36518462)
Software Engineers that took a proper engineering degree care as well.
Re:Writing Python Like Rust by pjmlp on Thursday June 29, 2023 @06:00AM (#36518437)
"If a builder builds a house for someone, and does not construct it properly, and the house which he built falls in and kills its owner, then that builder shall be put to death."

-- Hammurabi's Code, Babylon 1755–1750 BC

Modern construction law isn't as brutal, still liabilities will be questioned if corners were cut, and brought to court.

In many cases, programming is still at the level of driving chariots with steam engines.

Re:Writing Python Like Rust by gpderetta on Thursday June 29, 2023 @06:10AM (#36518524)
Aside from your very relevant point, most programs indeed need to withstand a determined attacker.
Re:Writing Python Like Rust by setr on Thursday June 29, 2023 @07:19AM (#36518948)
Most programs can barely withstand an expected user
Re:Writing Python Like Rust by gpderetta on Thursday June 29, 2023 @08:43AM (#36519620)
need vs can. I think we all agree that 90% of all programs are crap.
Re:Writing Python Like Rust by alpaca128 on Thursday June 29, 2023 @08:57AM (#36519768)
Debugging a happy path can quickly become a very unhappy exercise if there are no typechecks. Sure types can slow down things now and then, but if it catches just a few bugs it may already be worth it.
Re:Writing Python Like Rust by eweise on Thursday June 29, 2023 @01:07AM (#36516528)
plus modern statically typed languages have type inference so I don't buy the argument that the happy path is faster in dynamically typed languages.
Re:Writing Python Like Rust by Ennea on Thursday June 29, 2023 @05:26AM (#36518229)
I think writing the happy path can be a very important part to programming, yes. I know some programmers who don't need to see immediate results when writing their software, but me personally? I can't really do without it. It helps keep my drive up being able to prototype things quickly, and helps shape the software I am writing, too. Low level languages feel unwieldy to me. Things that are relatively easy in languages like Python get more complex, but I suppose it's also the lack of experience with such languages. Where do I start, though, when doing anything feels so slow to me? :) Difficult problem for sure...
Re:Writing Python Like Rust by harha_ on Thursday June 29, 2023 @05:36AM (#36518301)
It depends on what you're doing and also your subjective opinions. If you are writing software with a decent amount of lines and it's even somewhat important, you obviously want the typing benefits. On the other hand, if you're prototyping something personal and don't care about minor type errors in the slightest, it's nice and quick to do the job with javascript or python 3.
Re:Writing Python Like Rust by crabbone on Thursday June 29, 2023 @07:46AM (#36519149)
> This is why I can't help but mentally roll my eyes when people say that static typing makes programming slower.

No sane person says that. Also, static typing is not a thing (or at least, what you call "static typing" doesn't mean anything).

Type checking can be static. And in this context it means that it happens before the program is run, so it doesn't affect the speed of the program.

Your conjectures about how static typing (but probably actually checking) saves time developing is also nonsense. Static checking is helpful for analyzing programs, of course, but isn't the primary driver behind program quality, not even the second most important one. But, most importantly, quality typically only adversely affects the time to market. Working towards more correct programs will make the whole process slower and more expensive. Perhaps, at some very bottom of the quality pyramid you can find examples of the opposite -- when the program is so bad that it actually negatively impacts time to market and that metric can be improved by marginal effort in quality control... but if you are out of the swamp, this doesn't work anymore, and any increase in quality will negatively impact ttm, cost, number of employees needed etc.

Re:Writing Python Like Rust by s6ro on Thursday June 29, 2023 @03:34AM (#36517520)
Ah memories... I once had 100K Python 2.x codebase to maintain. No docs, no tests and then being required to add features. Had to use the debugger[1] to make sense of the codebase and types, formats etc. Sheer madness and such a waste of time...

To this day, I'm baffled by the dynamic language folks who cannot get their head around how strictness/rigor (via a good expressive type system) actually makes maintenance easier and more importantly: cheaper.

[1] https://github.com/inducer/pudb

Re:Writing Python Like Rust by holri on Thursday June 29, 2023 @04:23AM (#36517820)
It is no problem to write buggy unmaintainable code in a strongly typed language. It is also perfectly possible to write clean and maintainable code in a duck type language.
Re:Writing Python Like Rust by bronxpockfabz on Thursday June 29, 2023 @04:30AM (#36517867)
https://github.com/beartype/beartype

I wish more people started using Beartype, it makes Python bearable

Re:Writing Python Like Rust by BiteCode_dev on Thursday June 29, 2023 @05:47AM (#36518355)
That's more of a cultural thing. Because Python is easy to get into, and you can be productive very fast, a lot of people with little experience in programming start to build things that are out of their reach.

They just don't know it, and the people hiring them don't either.

It's not a new phenomenon, we got the same when Java arrived, then PHP, etc.

Every time something makes things easier, you get a wave of beginners set to create things they are not qualified to do. And because you now need software for everything, leaders also get into positions where are not qualify to make some decisions about it. You pair unqualified leaders with unqualified devs, and you get this.

And it's now easier than ever to be in this position, also you are more pressured than ever to get into this position.

I've worked on plenty of big Python systems myself, it's not the tech per se (it has the usual pros and cons game like every language), but Python is the language used "when you don't know programming".

Which is ironic, because when I started to use it in Python 2.4, only passionate devs used it because it was niche, and we had the opposite effect.

Re:Writing Python Like Rust by pjmlp on Thursday June 29, 2023 @05:58AM (#36518425)
It is BASIC all over again.
Re:Writing Python Like Rust by st4lz on Thursday June 29, 2023 @07:57AM (#36519250)
> Every time something makes things easier, you get a wave of beginners set to create things they are not qualified to do. And because you now need software for everything, leaders also get into positions where are not qualify to make some decisions about it. You pair unqualified leaders with unqualified devs, and you get this.

How easy it is to call other people not qualified because they have different opinions.

I've seen more projects failed because the only thing the devs cared about was an abstract code correctness, which made even basic PRs getting polished for weeks. I don't think you need to worry too much about types or tests if you are just doing a prototoype to validate ideas or your user base is 0.

Re:Writing Python Like Rust by BoppreH on Thursday June 29, 2023 @06:39AM (#36518693)
I've always wondered if we shouldn't be pushing more for type inference with flow analysis. I consider static type checking a must, but the voices opposing type annotations have some valid points: it pollutes the source code, slows down prototyping, and only catches a limited class of errors.

A static checker with global type inference could be a middle ground. Pylance/Pyright already does that for most VS Code users. A more advanced form of this could track types that are too tedious for humans, like list emptiness, bounds, string alphabet, functions that can raise exceptions, idempotence, side effects, etc.

Those types can then be shown in the IDE, according to user preference.

I have a feeling that with enough caching this could be done with ok performance, but I hear that useful error reporting is an unsolved problem.

Re:Writing Python Like Rust by classified on Thursday June 29, 2023 @07:06AM (#36518871)
So much for all those "you don't need static typing" / "dynamic typing is better" arguments.
Re:Writing Python Like Rust by flohofwoe on Thursday June 29, 2023 @07:33AM (#36519050)
Are the 'bugs' actually triggered in the real-world usage of the code, or are they just 'potential bugs' which would be triggered given specific inputs that don't happen in the current usage of the code?

Might seem like nitpicking, but the 'probability of a bug being triggered in the future' is an important metric for figuring out if large scale refactorings are actually worth the risk of introducing new bugs.

(disclaimer: I'm coming from the static typing hemisphere, but adding type information to a code base that was originally written with dynamic typing in mind sounds like it might actually make readability of the code worse - that's at least my verdict after trying to do exactly this in a Python code base, while the experience with Typescript was slightly better so far)

Re:Writing Python Like Rust by eyko on Thursday June 29, 2023 @09:12AM (#36519906)
Can't speak for the parent commenter but their situation felt familiar. I'm in a new role where I'm contributing to a very large Python codebase (first commit from over a decade ago) and whilst there's a lot of more recent code written with type hints, they're not enforced and they're not always reliable or consistent. On my second contribution, I introduced a bug that pyright immediately spotted after I upped the checks from basic to strict. Our Sentry reports a lot of non-critical bugs that are being triggered in production that in many cases are _already_ highlighted by the type checker. It's just a big enough codebase that it's not practical to attempt to fix them all.

If I were starting a project today in Python, I would definitely try setting up my tooling and processes to enforce type checking to at least some extent. Fortunately, we have a lot of guardrails that recover from the typical exceptions that occur in those cases, but as I experienced first hand, it's very easy to introduce new bugs when relying only on my intuition for those difficult-to-spot cases. Tooling definitely helps there.

My previous role had me writing TypeScript and Rust so there's always the temptation, or bias, to advocate for strict typing everywhere, but I'm conscious that it's neither practical nor feasible in large codebases with hundreds of contributors (most of whom may be more accustomed to dynamically typed languages).

Re:Writing Python Like Rust by crabbone on Thursday June 29, 2023 @07:38AM (#36519087)
Just imagine how much more bugs you add...

Also, imagine how much more productive you would've been if you instead of doing what you are doing you'd do something worthwhile, like, design the program or organize the testing better.

I've heard so many nonsense claims like yours both in proprietary projects and in open-source ones, and not a single time did the code base became better. In most cases a small(-er) pile of garbage became a bigger pile of garbage.

Re:Writing Python Like Rust by keithalewis on Thursday June 29, 2023 @09:38AM (#36520212)
Are you implying people writing code should have some training in how computers actually work? Heretic!
Re:Writing Python Like Rust by bilsbie on Thursday June 29, 2023 @09:44AM (#36520303)
> trying to suss out the types on a given code path.

Are there any tools for that? If not could one be made? Sounds almost like an advanced linter.

Re:Writing Python Like Rust by bilsbie on Thursday June 29, 2023 @09:47AM (#36520334)
That sounds impressive but I feel like this might be a misunderstanding of Python.

You can break almost any python code by passing in the wrong type. The code throwing runtime type-errors IS the type checking.

The danger is only if the code happily operates on the wrong types and returns incorrect results.

Re:Writing Python Like Rust by cmrdporcupine on Thursday June 29, 2023 @10:03AM (#36520488)
It's funny how the pendulum swings. 10-15 years ago sticking your neck our and advocating for static types was like painting a target on your back. Everything was about dynamic languages, Ruby was the coolest of cool, and people who waved the placard of high level types, type inference, etc. from the ML/Haskell cool were seen on the whole as impractical academic ivory tower types, cloistered around Lambda The Ultimate...

When I advocated for the importance of static typing for software robustness the response I got from many other industry people I knew was that this was the job of intensive unit testing. That the supposed loss of rapid turnaround that came with static types wasn't worth it, and that test-first-design solved this problem.

Now Typescript and Rust are common place, and we have Pythonistas annotating their programs with types. I'm happy, but maybe a bit bitter about the past :-)

Re:Writing Python Like Rust by roflyear on Thursday June 29, 2023 @10:36AM (#36520919)
I work at a company that has a fucking nightmare of a C# project. It's total hell to work on. I don't think the language makes much of a difference.