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.)…

Overloading

"If we look at mathematics, it has been greatly driven by overloading. Extensions of a notion of numbers from natural numbers to integers, to rational numbers, to Gaussian integers, to p-adic numbers, etc., are examples of overloading. One can easily guess things without knowing exact definitions. If I see an…

Creational use cases

"When dealing with "creational" use cases, try to find another aggregate or factory you can move that responsibility to. Sometimes the factory is just a static method (good for "context"/"intent" capturing), sometimes it's an instance method of another aggregate (good place for "data" inheritance), sometimes it's an explicit factory…

Yet Another Scheme Tutorial

The goal of this tutorial is to provide enough knowledge and ability on Scheme programming language to read SICP, which is one of the best text book on computer science. The book uses Scheme to explain subjects.…

Polymorphic types

“The requirements of a polymorphic type, by definition, come from where you use the type, not from the type itself.” (S. Parent) "When I use inheritence, I build the use of my object into my object. On the contrary, what I want to do is separate the use of my…