A possible way of expressing Scheme let expressions, such as (let ((x 3) (y 5)) (+ x y)) is to use ES6 default parameters: ((x = 3, y = 5) => x + y)() It is possible to go one step further by defining an auxiliary let_ function as: const let_ = f => f(…

# Unit tests

"Unit tests prove that a solution works in a particular way, rather than asserting that it solves a particular problem." (J. Humble et al.)…

# C is a special-purpose language

"Pascal and C are special-purpose languages for manipulating the registers and memory." (P. Norvig)…

# We do not develop the domain

"We do not develop the domain. The domain is some realm of know-how of the business we are working in. What we design and implement is a model of a domain." (V. Vernon)…

# Naming

"Naming is perhaps the most powerful abstracting notion we have, in any language, for it allows any complex to be reduced for linguistic purposes to a primitive atom." (G. L. Steele Jr.)…

# Mathematical induction

"Mathematical induction proves that we can climb as high as we like on a ladder, by proving that we can climb onto the bottom rung (the basis) and that from each rung we can climb up to the next one (the induction)." (Concrete Mathematics 2nd ed.)…