{"id":2894,"date":"2010-01-08T19:35:20","date_gmt":"2010-01-09T00:35:20","guid":{"rendered":"http:\/\/blog.kenperlin.com\/?p=2894"},"modified":"2010-01-08T19:35:20","modified_gmt":"2010-01-09T00:35:20","slug":"programming-without-math-part-12","status":"publish","type":"post","link":"http:\/\/blog.kenperlin.com\/?p=2894","title":{"rendered":"Programming without math, part 12"},"content":{"rendered":"<blockquote><p>\n<i>&#8220;A bladeless knife with the handle missing.&#8221;<\/i><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &#8211; C. C. Lichtenberg\n<\/p><\/blockquote>\n<p>As I&#8217;ve been implementing my little &#8220;programming language for everyone&#8221; in stages, the question has recently arisen as to whether to introduce variables early on &#8212; basically the idea of saying &#8220;I&#8217;m going to call these things by some name, and then later when I refer to that name, I will still be talking about these same things.&#8221;<\/p>\n<p>At first I was resistant.  After all, an assignment statement such as &#8220;x = y + 3&#8221; &#8212; a centerpiece of traditional math-oriented programming &#8212; seems very disconnected from the day-to-day experience of most people.  I think it&#8217;s not so much that the concepts are so difficult, but rather that such statements deal with abstract entities that cannot be seen or directly experienced.<\/p>\n<p>And yet we do have something quite like this in real life.  The reason that the above quote from Lichtenberg is so delightful is that it makes us think consciously about something we all take for granted on a very deep level &#8212; the identity of objects.  Consider, for example, the dog who lives in my neighbor&#8217;s apartment.  This dog might change drastically through the years.  He might grow from a little puppy to a huge beast, or get into a fight and lose an ear, or one day grow ill and lose half of his fur.  Yet through all of these changes he&#8217;s still the same dog.  In a room full of dogs, even dogs that looked very similar, he would be the only one who is <i>him<\/i>.<\/p>\n<p>We deal with this concept all the time.  You or I might change so drastically over time, in appearance or behavior, as to become unrecognizable. Yet we are still, unquestionably, <i>ourselves<\/i>, in a way that no other individual could ever be.  These concepts of identity &#8212; the naming of things &#8212; are so fundamental to our human way of thinking that they are built directly into all natural languages, for as far back in time as anyone has been able to trace the evolution of natural languages.  They are not technological aspects of humanity, but rather part of our innate biology &#8212; a product of the way the human brain has evolved to understand and generate communicative speech and gesture.<\/p>\n<p>And so I&#8217;ve come to the conclusion that a programming language for everybody needs to embody the concepts of identity and assignment of identity.  You need to be able to give a name to a thing or a person &#8212; or to a group of things or people.  Then no matter where the named thing goes, or how much it changes, you can refer back to it later.  <\/p>\n<p>Speaking of names, an astute reader sent me an email pointing out that it might be too early to fix a name &#8212; even as appealing a name as &#8220;Pie&#8221; &#8212; to a project that is still so much in flux.  Naming things too soon can tie you down to ideas that later turn out to be wrong.  I&#8217;m going to take his advice and keep the question open for now, rather than committing to one name so soon.  Although it could turn out that my problem is not so much with the word &#8220;Pie&#8221;, as with the word &#8220;commitment&#8221;. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;A bladeless knife with the handle missing.&#8221; &nbsp; &nbsp; &nbsp; &nbsp; &#8211; C. C. Lichtenberg As I&#8217;ve been implementing my little &#8220;programming language for everyone&#8221; in stages, the question has recently arisen as to whether to introduce variables early on &#8212; basically the idea of saying &#8220;I&#8217;m going to call these things by some name, &hellip; <a href=\"http:\/\/blog.kenperlin.com\/?p=2894\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Programming without math, part 12&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/2894"}],"collection":[{"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2894"}],"version-history":[{"count":1,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/2894\/revisions"}],"predecessor-version":[{"id":2895,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/2894\/revisions\/2895"}],"wp:attachment":[{"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2894"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}