This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
|The analogy is comparing writing programs to buying goods:
|writing a program with static types is equivalent to buying
|with cash, and writing a program with dynamic types is
|equivalent to buying with credit.
|The "cost" in either case is mental energy and time. When I
|write a program with static types I spend a lot of effort up
|front, guided by the type system and compiler, to handle edge
|cases and generate a totally correct solution. I have to
|fully-understand any libraries I'm using and characterize
|the problem in terms of types.
|When I write a program with dynamic types, I typically get
|something I can run much faster, but then I struggle through
|compose/test/debug cycles until the program is eventually
|correct. The energy cost here is spread out (potentially
|over days or weeks) instead of happening earlier.
|The correct program is the thing I am buying in this analogy,
|not the currency I'm spending.