← Back to context

Comment by exceptione

9 hours ago

Pretty good list, but a hidden assumption is that the reader works in an imperative style. For instance, recursion is the bread and butter of functional and logical programming and is just fine.

The most important advice one can give to programmers is to

  1. Know your problem domain.
  2. Think excessively deep about a conceptual model that captures the 
     relevant aspects of your problem domain.
  3. Be anal about naming your concepts. Thinking about naming oftentimes 
     feeds back to (1) and (2), forming a loop.
  4. Use a language and type system that is powerful enough to implement 
     previous points.

I got this sense as well, particularly from the section about assertions. Most of the use cases they describe (e.g checking function arguments and return values) are much better handled by an expressive type system than ad-hoc checks.

  • If you can, yes.

    But that last 10% of checking may be really hard to encode in types. It may be especially hard to do so in the language that you want to use for other reasons.