2 ms·
It's interesting we've gotten to this place where the discussion happens like it is on this forum, where acceptance of strong static typing is pretty high. 10
by cmrdporcupine 3y ago
It's interesting we've gotten to this place where the discussion happens like it is on this forum, where acceptance of strong static typing is pretty high.
10 years ago the bias was strongly the other way. And in many shops I've worked in, there was an intense hatred of having to declare types.
I like to think it's the development of better/smarter type systems in mainstream programming languages (vs say Java which is what was dominant then), as well as maybe maturing of software engineer practices.
But I also fear it's just the trend-pendulum ticking.
That and I notice a lot of Python jobs out there, which is an ecosystem I've kept away from for the last 10 years precisely because my professional experiences with large dynamic-typed late-bound Python codebases was terrifying. Beyond NumPy & ML related projects, I fear that this might be indicative that the "types are just getting in my way" crowd is still very influential...
Finally I also think it's important to distinguish two concept that get mixed up -- type vs binding: static typing vs dynamic typing and early-binding vs late-binding. It so happens that most languages that emphasize static typing emphasize early-binding, and vice-versa; but it's entirely possible to have very strong types but still introduce sloppy late binding decision behaviour that ends in all sorts of runtime exceptions. Java is/was notorious for this. Reading configuration files to drive application behaviour, or doing things like the Rust Axum framework's "axum::extract::State" stuff, which can blow up at runtime; they're not strictly type issues, but get mixed up in some of the things people are talking about here.
- syndicatedjelly 3y agoWhat were the arguments back then that supported the opposite bias?
- cmrdporcupine 3y ago"Move-fast & break things." "Test-first-design & aggressive unit testing is the solution." To be charitable, perhaps that the type system was getting in the way, physically of what they wanted to accomplish conceptually. I actually think it has more to do with object-oriented programming as it was propagated through C++ and Java. We were told (and believed) that OO abstractions would solve many software complexity problems. The focus of a lot of programming work was/is on bringing these OO design patterns into play. In large part the OO thing is about a kind of dynamic dispatch. And yet languages like Java imposed a very rigid way of doing OO, and made some of the patterns awkward to express. So if you believe in your heart in the promise of OO, but find that your OO experience is relatively handicapped by your static type system, one then blames the type system. Ruby was maybe the best example of where this line of thought was going/coming-from? I think we are getting past this by getting (somewhat) past OO as a dominant design methodology. But also by adopting languages with richer static type systems.