Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I feel like with typescript and pydantic taking center stage it seems that the dynamic vs static typing debate finally comes to a close.

More and more Java seems to be not that bad after all.



Maybe it has gotten less bad but Java was the main counter-argument and foe to static typing: a poor and inexpressive type system coupled with significant verbosity, Java required a lot of buck and provided very little bang for it. And that is just the langage, ignoring the horrendous best practices.

I very much credit Java for having turned a generation away from static typing, dynamic typing did get buoyed by a combination of moore’s law and good press but could never have done it without Java having smothered the other side and being dreck.


Something went very wrong then, given Go's existence, making Java feel like a PhD level language.


Java never felt like phd level language except for a phd in sucking.

Go does have a poor type system, but it has nowhere near the verbosity of early aught Java: local type inference, free functions, any number of (public) types in the same file, closures, type definitions (terse and easy newtyping), iteration (if only for builtin types until 1.23), etc...

And that's without considering the cultural side of requiring two different implementations of every type (one interface and one impl) or XML-oriented programming for bindings "improved" by unreliable parsers going through method comments.


The PhD level remark is by comparison with Go's remarks on all programming languages that go beyond its lame type system, including Java's.

"The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt."

"It must be familiar, roughly C-like. Programmers working at Google are early in their careers and are most familiar with procedural languages, particularly from the C family. The need to get programmers productive quickly in a new language means that the language cannot be too radical."

We are all well aware of the blue collar goals of Java 1.0.

Now we are at Java 23 EA, where the distance to Go's type system is even greater.

We have Go's failure to learn from history of programming languages, ironically following Java's missteps on generics (reaching out to the same Haskell folks that helped with Pizza compiler), with warts of its own with magic string formats for timestamps, const iota dance for enumerations, magic types and tagged structs.

Had Rust become mature one or two years earlier, and most likely Docker and Kubernetes would have pivoted from Python and Java respectively into Rust instead, with Go's fate being the same as Limbo.


This is an interesting take. Go is great because it balances performance, expressiveness, ease of use, and bug prevention probably better than any other language. I’m very happy Go is the container-world language instead of Rust, rust is just a pain.


Go is great, because its authors happened to have a manager that allowed them to work on their side project to avoid using C++ at Google, and eventually it took off thanks to Docker and Kubernetes pivoting to Go, and their related success in the industry.

Had it not been the case, and it would have been as successful in the industry as Oberon-2 and Limbo, its two main influences, and (simplifying the actual historical facts) previous work from the authors.


It's never been a dynamic vs static typing. It was a bout the willingness to incur the cognitive, syntactic and effort overhead of static typing.

Copilots have removed the effort overhead. Python's conciseness limits the syntactic overhead. Lastly, the emphasis on primitives and simple types limits cognitive overhead.

Static typing is winning precisely because it avoids the issues of 2010s-era Java.


Next steps: immutable data structures and functional programming. #haskell #hereWeCome


> immutable data structures

Data pipelines & ML workflows are already pseudo immutable and pseudo functional.


It is now bad even as a typed language


It was always bad as a statically typed language, and it was a lot worse back then.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: