Most powerful language features to enable reliable software and fast iteration:

- immutability
- enums (sum types/variants)
- static types (real ones, not like java/C++)
- higher-order functions (eg map/filter)

Nothing else comes close

@paulbiggar what exactly is missing in static types of Java/c++?
Paul Biggar (@[email protected])

@[email protected] Null, and the role that dynamic casting and (for java) the Object type have in the ecosystem (one could say the same about void*, but it feels less pervasive)

Hachyderm.io
@paulbiggar you can add parametric polymorphism to the list
@clementd I guess I should just say "statically typed languages or gtfo" 😂
@paulbiggar @coderbyheart I now have a very hard time using a programming language where I can’t visualise and mentally work with the underlying calculus.
@paulbiggar exhaustive match expressions I also don’t wanna miss!
@gregor I guess we all just like functional languages 😂
@paulbiggar just as long as they aren’t ~too functional~
@gregor once the type theory starts, I'm out
@paulbiggar +++ type praxis is what I desire
@paulbiggar Here I am with #golang and #elixir both missing some. 😡
@TonyBologni and yet stuff still gets done!
@paulbiggar @TonyBologni This is the problem! People keep getting stuff done with these languages instead of descending into type madness and endless bikeshedding. It’s completely unreasonable. I demand bike sheds in every colour.
@SamirTalwar @paulbiggar @TonyBologni we sometimes forget that it is possible, even in Scala and Haskell, to get things done without highfalutin debates about how to push the type system to its max. Yet the great thing about that part of the community is that eventually they push the boundaries of what is ergonomic and possible for the get-it-done low-bro element (this would be me) over some years. So I do appreciate their efforts, even if I mostly ignore them in real time now. :)
@SusanPotter @paulbiggar @TonyBologni I work with those people! They are currently removing all of the nonsense they added over the last few years and replacing it with different nonsense. I’m really enjoying the show.
@SusanPotter @paulbiggar @TonyBologni (this is very unfair, they’re definitely improving things)
@SusanPotter @SamirTalwar @TonyBologni low-bro is gonna be my go-to phrase for this in the future
@TonyBologni and yet stuff still gets done!
@paulbiggar which languages have these?
@jjude OCaml, F#, Elm, Rescript, Darklang, Haskell
@paulbiggar all are examples of finding and enforcing invariants, a key skill/capability for any type of problem solving.
@danholmes that is extremely insightful. I'm going to think about this more
@paulbiggar some of DevOps CI/CD and many other things fit too. Changed something? Check the invariants still hold. Might be instant feedback from a compiler integrated into your IDE or fast feedback from your GitHub actions.
@paulbiggar type inference too maybe?
@aviaviavi @paulbiggar - without inference, pick your poison: RSI of explicit static types or runtime crashes when you discover a Cat is not a list of dogs
@paulbiggar I agree with you, but I'm curious why you say Java doesn't have real static typing? Because of type erasure? (I ask for education/curiousity, not to be oppositional).