{"id":1089,"date":"2020-09-25T23:30:21","date_gmt":"2020-09-26T03:30:21","guid":{"rendered":"http:\/\/aristotle2digital.blogwyrm.com\/?p=1089"},"modified":"2020-09-24T21:29:03","modified_gmt":"2020-09-25T01:29:03","slug":"leaky-abstraction","status":"publish","type":"post","link":"https:\/\/aristotle2digital.blogwyrm.com\/?p=1089","title":{"rendered":"Leaky Abstraction"},"content":{"rendered":"\n<p>Last month\u2019s column promised more on Na\u00efve Bayesian\nClassification with a specific look at the performance with synthetically\ngenerated gemstone data from the little universe of James McCaffrey\u2019s creation.&nbsp; But, deadlines being deadlines, life being\nlife, and distractions and technological failings aplenty means that that\npromise will need to be deferred until next month.&nbsp; A new idea crept in and, because it was so\napropos, it refused to get out until it was expressed in writing.&nbsp; And so, here we are, with an article on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Leaky_abstraction\">leaky abstraction<\/a>.<\/p>\n\n\n\n<p>I hadn\u2019t heard of this term until the end of August when I\ncame across an article, written about <a href=\"https:\/\/missing.csail.mit.edu\/2020\/version-control\/\">version control\nusing Git<\/a>, that mentioned it and then suddenly the light came on.&nbsp; Based on context, I basically figured out the\ngeneral gist but it wasn\u2019t until I actually did some research on the web and\nread the Wikipedia article that really knew how to talk about it.&nbsp; Here, finally, was a term for the angst I so\noften felt around the technology of the future \u2013 technology that was supposed to\nmake things better and represent an improvement but which made life harder and\nmore opaque; sometimes dramatically so.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"277\" src=\"http:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/git-logo-2.png\" alt=\"\" class=\"wp-image-1088\"\/><\/figure><\/div>\n\n\n\n<p>The experience was a lot like suffering for years with a\nchronic condition, which you could not name or treat, only to visit a new doctor\nwho not only believed something was wrong but knew what it was and how to\ndiagnose it.&nbsp; Suddenly, you go from suspecting\nthat it may all be in your head to being on the road to recovery or management with\nthe mental relief of knowing you really were ailing the whole time.&nbsp; &nbsp;&nbsp;<\/p>\n\n\n\n<p>In a nutshell, leaky abstraction is the term used to\ndescribe a common user experience with a tool whose interface makes the user\nexperience an exercise in deducing how the development thinks about the problem\ntheir tool is addressing rather than using the solution they provide.&nbsp; While there is an even more formal definition,\na set of examples comparing and contrasting (a la <a href=\"https:\/\/en.wikipedia.org\/wiki\/Goofus_and_Gallant\">Goofus and Gallant<\/a>\nin Highlights but with the opposite order) serves much better.<\/p>\n\n\n\n<p>On the side of the angels is the modern automobile.&nbsp; One doesn\u2019t need to know any physics or\nengineering to operate them.&nbsp; Starting\nthe engine is effortless with no knowledge required of Newton\u2019s law, mechanical\nadvantage, fluid dynamics, thermodynamics, metallurgy or engineering\nprinciples.&nbsp; One doesn\u2019t need to know if\nthe brakes are direct mechanical or hydraulic, or are computer controlled to be\nable to stomp on them to stop quickly.&nbsp;\nThe human-machine interface is intuitive.&nbsp; Want to go to the right, turn the steering\nwheel the same way.&nbsp; Want to go fast,\npush the gas pedal down.&nbsp; It is true that\nwhen things go amiss you are slightly better off if you know something about\nhow the vehicle is designed but even in these relatively rare cases there is an\nentire support network built around making the process easy (albeit potentially\nexpensive).<\/p>\n\n\n\n<p>On the other side is Git.&nbsp;\nOne needs to really know how Git\u2019s data model works.&nbsp; The term \u2018<a href=\"https:\/\/en.wikipedia.org\/wiki\/Directed_acyclic_graph\">directed acyclic\ngraph<\/a>\u2019 entered into my vocabulary because I am reliably told that the only\nway to really understand Git is to understand DAGs (e.g, the blog post <a href=\"https:\/\/medium.com\/hackernoon\/understanding-git-branching-2662f5882f9\">here<\/a>).&nbsp; But I am not interested in discrete math; I\nsimply want to version control software.&nbsp;\nI appreciate it is a hard problem but so is designing a car or a laptop\nor a smart phone.&nbsp; Those systems move in\nthe direction of simplicity but Git seems happy embracing a user experience\nthat is best summarized by the following XKCD cartoon.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"956\" src=\"http:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/git_2x.png\" alt=\"\" class=\"wp-image-1087\" srcset=\"https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/git_2x.png 661w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/git_2x-207x300.png 207w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/figure><\/div>\n\n\n\n<p>I\u2019ve tried to like Git, really I have.&nbsp; When Github came online I was an early\nadopter precisely because I recognized the importance of saving to the\ncloud.&nbsp; I even am grandfathered in with a\nusername that isn\u2019t an email address.&nbsp;\nAnd I am grateful to Github for providing that platform.&nbsp; And I find Octocat to be a cute mascot (especially\nin his MegaMan guise).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"896\" src=\"http:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat.jpg\" alt=\"\" class=\"wp-image-1086\" srcset=\"https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat.jpg 896w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat-150x150.jpg 150w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat-300x300.jpg 300w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat-768x768.jpg 768w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat-810x810.jpg 810w, https:\/\/aristotle2digital.blogwyrm.com\/wp-content\/uploads\/2020\/09\/megacat-54x54.jpg 54w\" sizes=\"auto, (max-width: 896px) 100vw, 896px\" \/><\/figure><\/div>\n\n\n\n<p>But, weighed against all that benefit is the detest I have\nfor the Git mechanics best exemplified by the biting part of the last word\nballoon.<\/p>\n\n\n\n<p>Too many times I\u2019ve been bitten by Git.&nbsp; <\/p>\n\n\n\n<p>My first regretful experience came early on.&nbsp; By accident, I committed a large file that\ntook my commit over the 50 MB limit Github had (perhaps it still does \u2013 don\u2019t\nknow don\u2019t care).&nbsp; It was a careless\nmistake but I was tired doing real work.&nbsp;\nI only realized my mistake when I tried to push from the local repo to Github.&nbsp; No matter what hocus pocus I tried I couldn\u2019t\nget Git to forget about that commit.&nbsp; Eventually\nI stumbled upon a magical incantation that remedied the situation but to this\nday I don\u2019t know what it was.<\/p>\n\n\n\n<p>Chagrinned by this incident, I tried to become better at Git\nbut the arcana just left me cold.&nbsp; I\u2019ve\ntried &nbsp;experimenting with Git under the\nargument that the best way to learn wasn\u2019t to RTFM but to actually do.&nbsp; Along these lines, I created phantom project\nstructures with files that are stubs and tried my best to move and reshuffle\nand rename and undo.&nbsp; One expert (see I\nwas reading) argued that Git could track file moves with explicitly being told but\nit didn\u2019t always work.&nbsp; Another expert\nsaid renaming would be a breeze.&nbsp; And so\non.&nbsp; Numerous pieces of advice but in the\nend only vice.<\/p>\n\n\n\n<p>A critical reader, especially of the haughty programmer\ntypes, are no doubt enraged with my lack of discipline to see an understanding\nof Git through to the end.&nbsp; But I would\nask of them, do you understand the quantum mechanics that allows your beloved\ndigital age to work.&nbsp; Judging by my\nexperiences teaching the subject the answer is a resounding no.&nbsp; People, in general, and programmers, in particular,\nare bad at understand quantum mechanics.&nbsp;\nSuppose that to operate a computer one had to understand semiconductors,\nquantum wave functions, and Fermi-Dirac statistics (just to name a few).&nbsp; How many homes would boast a computer?&nbsp; Suppose you had to understand orbital mechanics\nand General Relativity to use a GPS-based navigation system.&nbsp; How many people would stay home (especially\nthe haughty programmer types) for fear of getting lost.<\/p>\n\n\n\n<p>No, I am neither lazy nor stupid.&nbsp; I am smart enough to know that software can\ndo better that the leaky abstraction that Git foists on its user community.&nbsp; I am cautious enough to use the magical\nincantations precisely so that I don\u2019t get bloated commits or detached heads or\nwhatever.&nbsp; And I am industrious enough to\nput my time to better use than understanding the Git data model.&nbsp; If only I were as cute as Octocat I would be\nset.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last month\u2019s column promised more on Na\u00efve Bayesian Classification with a specific look at the performance with synthetically generated gemstone data from the little universe of James McCaffrey\u2019s creation.&nbsp; But,&#8230; <a class=\"read-more-button\" href=\"https:\/\/aristotle2digital.blogwyrm.com\/?p=1089\">Read more &gt;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1089","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=\/wp\/v2\/posts\/1089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1089"}],"version-history":[{"count":0,"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=\/wp\/v2\/posts\/1089\/revisions"}],"wp:attachment":[{"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aristotle2digital.blogwyrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}