> Do you want to invest your time worrying about types or actually programming?
Another order reversal: type systems allow you to focus on programming, instead of hunting around for bugs because somebody 50 levels up the call stack passed you a value that doesn't support the interface it needs to support.
This is an endless debate of course, just wanted to throw in a typed pl fan's opinion in the mix.
Except that is false. Bug prevalence is empirically orthogonal to type system.
See Xmonad
Or are you saying that Xmonad is not buggy? But then I don't understand how it relates to empirical orthogonality at all.
For example, in F# types maintain program correctness but get out of the way. They're not about obstinate bureaucracy but a way for the compiler to remind me "dude, this is not doing what you earlier specified it should do" and then I observe that yes, I've forgotten some corner case, do a small modification to the type definition and the whole damn thing works.
If types are getting in the way then the language is not very good (by my definition C++ is not very good and I mostly earn my living writing it).
When the type is right, the implementation is trivial.
Type-theoretic monstrosities point towards incomprehension of the problem.
Tackling two problems is a triviality, an engineer worries about more.
A modern language does not hide the machine code, but abstracts it.
A type cannot be abstracted, a type is the abstraction.
Without types you end up with a different sort of monstrosity - the corner cases that you get when comparing ints to strings in Javascript, for example.
However, where static languages are lacking is in supplying proof of the rules associated with these operators. In the case of equality, that would be associativity, reflexivity and transitivity.
The factors that make Python, Ruby, Javascript, etc. popular aren't nearly as amenable to formal mathematical analysis.
Programming is inherently the art of making something specific to a use. Types help that in that you limit what the code operates on, which makes the code you write simpler, because you have less ambiguity.
Just like the underlying machine code is hidden in modern languages, types should be totally abstracted away when programming in a high level language.