{"id":12102,"date":"2015-08-27T14:41:55","date_gmt":"2015-08-27T18:41:55","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=12102"},"modified":"2018-01-03T10:10:22","modified_gmt":"2018-01-03T15:10:22","slug":"java-is-magic-the-gathering-or-poker-and-haskell-is-go-the-game","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2015\/08\/27\/java-is-magic-the-gathering-or-poker-and-haskell-is-go-the-game\/","title":{"rendered":"Java Is Magic: the Gathering (or Poker) and Haskell Is Go (the Game)"},"content":{"rendered":"<p><a href=\"https:\/\/michaelochurch.wordpress.com\/2015\/08\/27\/java-is-magic-the-gathering-or-poker-and-haskell-is-go-the-game\/\">Michael O. Church<\/a>:<\/p>\n<blockquote cite=\"https:\/\/michaelochurch.wordpress.com\/2015\/08\/27\/java-is-magic-the-gathering-or-poker-and-haskell-is-go-the-game\/\">\n<p>Of course, all of this that I am slinging at OOP is directed at <em>a culture<\/em>. Is object-oriented programming innately that way? Not necessarily. In fact, I think that it&rsquo;s pretty clear Alan Kay&rsquo;s vision (&ldquo;IQ is a lead weight&rdquo;) was the opposite of that. His point was that, <em>when complexity occurs<\/em>, it should be encapsulated behind a simpler interface. That idea, now uncontroversial and realized within functional programming, was right on. Files and sockets, for example, are complex beasts in implementation, but manageable specifically <em>because<\/em>&nbsp;they tend to conform to simpler and well-understood interfaces: you can <code>read<\/code> without having to care whether you&rsquo;re manipulating a robot arm in physical space (i.e. reading a hard drive) or pulling data out of&nbsp;RAM (memory file) or taking user input from the &ldquo;file&rdquo; called &ldquo;standard input&rdquo;. Alan Kay was not encouraging the proliferation of complex objects; he was simply looking to build a toolset that enables to people to work with complexity when it occurs. One should note that major object-oriented victories (concepts like &ldquo;file&rdquo; and &ldquo;server&rdquo;) are no longer considered &ldquo;object-oriented programming&rdquo;, just as &ldquo;alternative medicine&rdquo; that works is recognized as just &ldquo;medicine&rdquo;.<\/p>\n<p>[&#8230;]<\/p>\n<p>Where is this whole argument leading? First, there&rsquo;s a concept in game design of &ldquo;dryness&rdquo;. A game that is <em>dry<\/em> is abstract, subtle, generally avoiding or limiting the role of random chance, and while the game may be strategically deep, it doesn&rsquo;t have immediate thematic appeal. <em>Go<\/em> is a great game, and it&rsquo;s also very dry. It has white stones and black stones and a board, but that&rsquo;s it. No wizards, no teleportation effects, not even castling. You put a stone on the board and it sits there forever (unless the colony is surrounded and it dies).&nbsp;<em>Go<\/em>&nbsp;also values control and elegance, as programmers should. We want our programs to be &ldquo;dry&rdquo; and boring. We want the problems that we solve to be interesting and complex,&nbsp;but the code itself should be so elegant as to be &ldquo;obvious&rdquo;, and elegant\/obvious things are (in this way) &ldquo;boring&rdquo;.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Michael O. Church: Of course, all of this that I am slinging at OOP is directed at a culture. Is object-oriented programming innately that way? Not necessarily. In fact, I think that it&rsquo;s pretty clear Alan Kay&rsquo;s vision (&ldquo;IQ is a lead weight&rdquo;) was the opposite of that. His point was that, when complexity occurs, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[1611,27,418,361,84,71],"class_list":["post-12102","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-alan-kay","tag-craft","tag-game","tag-haskell","tag-java","tag-programming"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=12102"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12102\/revisions"}],"predecessor-version":[{"id":12103,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/12102\/revisions\/12103"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=12102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=12102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=12102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}