{"id":1469,"date":"2015-10-15T18:53:28","date_gmt":"2015-10-15T17:53:28","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1469"},"modified":"2015-10-16T14:45:03","modified_gmt":"2015-10-16T13:45:03","slug":"hello-clojure","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/","title":{"rendered":"(Hello Clojure)"},"content":{"rendered":"<p>A few weeks ago I started learning <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clojure\">Clojure<\/a>. My experience so far has been fantastic.<\/p>\n<p><strong>Why Clojure<\/strong><\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1471\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/lisp-aliens\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png\" data-orig-size=\"256,223\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"lisp-aliens\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png\" class=\"alignright wp-image-1471\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png\" alt=\"lisp-aliens\" width=\"157\" height=\"137\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png 256w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens-100x87.png 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens-150x131.png 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens-200x174.png 200w\" sizes=\"auto, (max-width: 157px) 100vw, 157px\" \/><\/a>At <a href=\"http:\/\/socrates-conference.de\/\">SoCraTes<\/a> 2015, I attended a great workshop on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Haskell_%28programming_language%29\">Haskell<\/a>. While this is interesting if you are interested in learning functional programming, I found Haskell to be quite a pain. Not the language itself, but rather the environment. I spend too many hours trying to get proper IDE integration work work, and eventually decided to just try another language. Clojure has been on my to-try list for some time, and I&#8217;ve heard good things about it from several people I respect a lot. There are also a lot of really great talks by Rich Hickey, the creator of the language, on the internets. Together with the language being a <a href=\"https:\/\/www.youtube.com\/watch?v=HM1Zb3xmvMc\">LISP<\/a> like Haskell, being influenced by it, being more modern, and having Java interoperability, those factors made me try out Clojure.<\/p>\n<p><strong>Getting started<\/strong><\/p>\n<p>After getting Clojure, the first things I looked at where<\/p>\n<ol>\n<li>Can I execute something<\/li>\n<li>How do I get proper editor support<\/li>\n<li>How do I write and run a test<\/li>\n<\/ol>\n<p>Unlike with Haskell, I did not get stuck with one of these steps, before even getting to writing actual code.<\/p>\n<p>I got <a href=\"https:\/\/cursiveclojure.com\/\">Curvive<\/a>, which is a Clojure plugin for IntelliJ IDE. It has highlighting (doh) and many of the <a href=\"https:\/\/www.youtube.com\/watch?v=vt1y2FbWQMg\">more advanced IDE features<\/a>, such as refactorings. Clojure itself comes with <a href=\"https:\/\/clojure.github.io\/clojure\/clojure.test-api.html\">testing tools<\/a>, so you do not need to download some extra testing framework. To build projects and do various tasks such as running tests, there is <a href=\"http:\/\/leiningen.org\/\">Leiningen<\/a>, which I found pretty simple to get started with.<\/p>\n<p>To get started yourself, have a look at the excellent <a href=\"http:\/\/clojure.org\/getting_started\">getting started section<\/a> of the Clojure website.<\/p>\n<p><strong>FizzBuzz<\/strong><\/p>\n<p>Once I got my environment set up, I decided to try to solve FizzBuzz. You can find the result in <a href=\"https:\/\/github.com\/JeroenDeDauw\/clojure-fizz-buzz\">this git repo<\/a>, and see <a href=\"https:\/\/github.com\/JeroenDeDauw\/clojure-fizz-buzz\/commits\/master\">each iteration through the TDD cycle<\/a>, as I committed them step by step.<\/p>\n<p><strong>Clojure Koans<\/strong><\/p>\n<p>I don&#8217;t quite recall how I found the <a href=\"https:\/\/github.com\/functional-koans\/clojure-koans\">Clojure Koans<\/a>, though they are linked in the <a href=\"http:\/\/clojure.org\/getting_started\">getting started section<\/a> of the Clojure website. These Koans are a set of step by step exercises for learning Clojure. You start its test runner, and it will tell you there is something wrong with the First koan. After you solve the koan, it automatically moves on to the next. It runs every time you save, which makes things go really smooth.<\/p>\n<p>After doing FizzBuzz, I figured I&#8217;d need to have a look through the Clojure documentation to get a feel of the language basics. At that point I had not actually looked at any such docs or indeed did anything real in a LISP dialect. Going through these Koans is an alternative that is a ton of fun, and probably teaches you the basics better than just staring at some docs. I managed them mostly unassisted, though at times needed to look up certain things. Halfway though the koans or so, I found the <a href=\"http:\/\/www.clojurescreencasts.com\/koans-walkthrough\/01.html\">Clojure Koans Walkthrough<\/a>, which was very helpful in explaining things in a bit more detail and in some cases showing me better ways to solve the koans than what I had come up with.<\/p>\n<p>If you want to get started with Clojure, I highly recommend giving these koans a go. For more info, see the <a href=\"http:\/\/clojurekoans.com\/\">Clojure Koans website<\/a>, which I found after completing the koans \ud83d\ude42 You can look at <a href=\"https:\/\/github.com\/JeroenDeDauw\/clojure-koans\/tree\/nyan\">my solutions to the koans<\/a>, for which I made one commit per section.<\/p>\n<p><strong>Number Converter<\/strong><\/p>\n<p>After doing the koans I wanted to create some trivial application, to further learn Clojure, in particular to get out of the test environment bubble. I decided to create a little CLI application to convert numbers between arbitrary numerical systems that can be specified. This is something I did way back in my high school days, though then with a <a href=\"https:\/\/www.youtube.com\/watch?v=hkDD03yeLnU\">Visual Basic.Net GUI<\/a> app called <a href=\"http:\/\/sourceforge.net\/projects\/bncpro\/files\/1.1.0\/\">BN+ Converter Pro<\/a>. You can find the Clojure <a href=\"https:\/\/github.com\/JeroenDeDauw\/number-converter\">code on GitHub<\/a> and <a href=\"https:\/\/asciinema.org\/a\/27781\">view the app in action on asciinema<\/a>. The CLI UI is hardly smooth, though that is somewhat besides the point of the exercise.<\/p>\n<p><strong>Next steps<\/strong><\/p>\n<p>Next I&#8217;d like to do some additional katas, and am planning to look at <a href=\"https:\/\/www.4clojure.com\">4clojure<\/a>. I&#8217;m also trying to come up with an idea for a simple-ish application that would solve some real world problem. For instance creating a <a href=\"https:\/\/wikidata.org\/\">Wikidata<\/a> bot using the <a href=\"https:\/\/github.com\/Wikidata\/Wikidata-Toolkit\">Wikidata Toolkit<\/a>, which is written in Java.<\/p>\n<p><strong>See also<\/strong><\/p>\n<p>&#8220;<a href=\"https:\/\/medium.com\/this-is-not-a-monad-tutorial\/how-to-earn-your-clojure-white-belt-7e7db68a71e5\">How to earn your Clojure white belt<\/a>&#8221; is essentially a much better version of this blog post \ud83d\ude42 There are many great talks on the <a href=\"https:\/\/www.youtube.com\/user\/ClojureTV\/videos\">ClojureTV YouTube channel<\/a>, many of which are very interesting even when you have no intention of learning Clojure. And as I mentioned before, there are multiple awesome talks by Rich Hickey you can watch, of which &#8220;<a href=\"https:\/\/www.youtube.com\/watch?v=rI8tNMsozo0\">Simplicity Matters<\/a>&#8221; is probably my favorite.<\/p>\n<p><a href=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1470\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/should-learn-clojure\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure.jpg\" data-orig-size=\"376,325\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"should-learn-clojure\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure.jpg\" class=\"size-medium wp-image-1470 alignnone\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure-300x259.jpg\" alt=\"should-learn-clojure\" width=\"300\" height=\"259\" srcset=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure-300x259.jpg 300w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure-100x86.jpg 100w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure-150x130.jpg 150w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure-200x173.jpg 200w, https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/should-learn-clojure.jpg 376w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few weeks ago I started learning Clojure. My experience so far has been fantastic. Why Clojure At SoCraTes 2015,&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7,1],"tags":[376,377,378,315,379],"class_list":["post-1469","post","type-post","status-publish","format-standard","hentry","category-programming","category-uncategorized","tag-clojure","tag-functional-programming","tag-katas","tag-lessons-learned","tag-lisp"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>(Hello Clojure) - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"(Hello Clojure) - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"A few weeks ago I started learning Clojure. My experience so far has been fantastic. Why Clojure At SoCraTes 2015,&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2015-10-15T17:53:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-10-16T13:45:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"(Hello Clojure)\",\"datePublished\":\"2015-10-15T17:53:28+00:00\",\"dateModified\":\"2015-10-16T13:45:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/\"},\"wordCount\":804,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/lisp-aliens.png\",\"keywords\":[\"Clojure\",\"Functional Programming\",\"Katas\",\"Lessons learned\",\"LISP\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/\",\"name\":\"(Hello Clojure) - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/lisp-aliens.png\",\"datePublished\":\"2015-10-15T17:53:28+00:00\",\"dateModified\":\"2015-10-16T13:45:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/lisp-aliens.png\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/10\\\/lisp-aliens.png\",\"width\":256,\"height\":223},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2015\\\/10\\\/15\\\/hello-clojure\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"(Hello Clojure)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"(Hello Clojure) - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/","og_locale":"en_US","og_type":"article","og_title":"(Hello Clojure) - Blog of Jeroen De Dauw","og_description":"A few weeks ago I started learning Clojure. My experience so far has been fantastic. Why Clojure At SoCraTes 2015,&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2015-10-15T17:53:28+00:00","article_modified_time":"2015-10-16T13:45:03+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"(Hello Clojure)","datePublished":"2015-10-15T17:53:28+00:00","dateModified":"2015-10-16T13:45:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/"},"wordCount":804,"commentCount":0,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png","keywords":["Clojure","Functional Programming","Katas","Lessons learned","LISP"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/","url":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/","name":"(Hello Clojure) - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png","datePublished":"2015-10-15T17:53:28+00:00","dateModified":"2015-10-16T13:45:03+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2015\/10\/lisp-aliens.png","width":256,"height":223},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2015\/10\/15\/hello-clojure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"(Hello Clojure)"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-nH","jetpack-related-posts":[{"id":1911,"url":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","url_meta":{"origin":1469,"position":0},"title":"Simple is not easy","author":"Jeroen","date":"2017-01-02","format":false,"excerpt":"Simplicity is possibly the single most important thing on the technical side of software development. It is crucial to keep development costs down and external quality high. This blog post is about why simplicity is not the same thing as easiness, and common misconceptions around these terms. Simple is not\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":2877,"url":"https:\/\/www.entropywins.wtf\/blog\/2022\/09\/21\/advice-for-junior-developers\/","url_meta":{"origin":1469,"position":1},"title":"Advice for junior developers","author":"Jeroen","date":"2022-09-21","format":false,"excerpt":"Over the 15+ years of my development career, I have learned several things that significantly increase my effectiveness. In this post, I share those learnings with you. Structure: Generic Advice -- Important context and motivation for the technical advice Technical Advice -- The main course Recommended Reading -- Links to\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2022\/09\/code.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":2374,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/10\/24\/readable-functions-minimize-state\/","url_meta":{"origin":1469,"position":2},"title":"Readable Functions: Minimize State","author":"Jeroen","date":"2018-10-24","format":false,"excerpt":"Several tricks and heuristics that I apply to write easy to understand functions keep coming up when I look at other peoples code. In this post I share the first of two key principles to writing readable functions. Follow up posts will contain the second key principle and specific tricks,\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1496,"url":"https:\/\/www.entropywins.wtf\/blog\/2015\/12\/10\/only-smart-people-can-learn-to-code\/","url_meta":{"origin":1469,"position":3},"title":"Only smart people can learn to code","author":"Jeroen","date":"2015-12-10","format":false,"excerpt":"I've just read the interesting blog post Learn To Code, It\u2019s Harder Than You Think. This post outlines two mistakes the author thinks are made in the general thinking on where the difficulties lie in making more people become professional programmers. Firstly that it requires wealth or special privilege to\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1741,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/05\/25\/is-pair-programming-really-worth-it\/","url_meta":{"origin":1469,"position":4},"title":"Is Pair Programming worth it?","author":"Jeroen","date":"2016-05-25","format":false,"excerpt":"Every now and then I get asked how to convince ones team members that Pair Programming is worthwhile. Often the person asking, or people I did pair programming with, while obviously enthusiastic about the practice, and willing to give it plenty of chance, are themselves not really convinced that it\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Extreme Pair Programming","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/05\/ExtremePairProgramming.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":515,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/11\/05\/printhai-world\/","url_meta":{"origin":1469,"position":5},"title":"Print(&#8220;Hai world&#8221;)","author":"Jeroen","date":"2009-11-05","format":false,"excerpt":"Today I made quite some progress learning the basics of Python. After doing a traditional \"O hai earf\", I went over the different core data types, control flow and data structures. Next in line are modules, I\/O, exceptions and classes (yay!). I'm testing my understanding of the language in Aptana\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"Python","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/11\/python-logo.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1469"}],"version-history":[{"count":5,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1469\/revisions"}],"predecessor-version":[{"id":1476,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1469\/revisions\/1476"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}