Programming Languages as Constraints
Constraints provide freedom.<p>This is not Orwellian newspeak.  In a Turing Machine, everything is possible.  But nobody wants to program in it because it&#x27;s too hard.  Same thing with assembly.  Everything that the CPU can do, you can do in assembly.  But everyone wants out of assembly if at all possible.  Why?  Because the price for the freedom was too high.<p>Same thing with jumping to any line in a program.  Sure, there are times when it could make your life easier, but they aren&#x27;t very many.  And what&#x27;s horrible is when someone a decade ago, who doesn&#x27;t even work there anymore, used it to make <i>their</i> life easier, and you have to figure out their bit of &quot;cleverness&quot;.  It&#x27;s worth not being able to do that in order to keep that from being done to you.  (This is the way civilized society works, by the way.  I give up the freedom to kill random other people in order to not live in a society where I worry a lot about random other people trying to kill me.)<p>Within the constraints (&quot;I can&#x27;t do X&quot;), you find two kinds of freedom.  First, &quot;I no longer have to worry about somebody else doing X in code that I need to work on&quot;.  Second, &quot;I gain Y&quot;.<p>For an example of the second kind, garbage collection means that I no longer have to keep track of when I should free memory.  By giving up something (the ability to allocate and free memory myself), I gained freedom.  This is a net win <i>if I don&#x27;t need the thing I&#x27;m giving up</i>.<p>You&#x27;re not trying to write something specific.  Give up the things you don&#x27;t need in order to write the program you&#x27;re trying to write, if doing so reduces the number of things you have to do in order to write that program.  Give up something you weren&#x27;t going to use anyway in order to have less that <i>you</i> have to do.  That&#x27;s a win.