[racket] Code that double checks is good, bad, other?
I think someone from the Felleisen extended family of researchers will
have something to say on types (both theory and practice) when they get
a chance.
Two very general comments, IMHO:
* Type checking (static, runtime, mixed, other) is one of many
mechanisms and disciplines that can influence correctness and
maintainability. It's often a very useful tool, but one of many.
* Nontrivial software development is craft with constant decision-making
and balancing at many levels. You're always dynamically balancing
trade-offs in performance, productivity, agility, maintainability,
degree of correctness, reliability, available technology, collaboration,
etc., relative to your requirements, resources, and interdependencies.
You never have perfect information, and "best practices" are not always
best (and sometimes very wrong). And each of those topics has its own
complicated space within it. With Racket, what you balance includes
static type checking, and you have a few options there.[*]
[*] Though none of them currently exactly what I'm thinking of as the
general-purpose ideal. But still more flexibility than you'll find
elsewhere.
Neil V.