Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    B

    Brian Carper

    briancarper.net · Personal blog · on HN since 2008

    Brian Carper writes about Clojure, Lisp, Vim, and Ruby, including a series on building an RPG in Clojure.

    Visit blogHN submissions
    ProgrammingLanguages & CompilersGames
    What HN says

    HN links his post comparing keyword arguments in Ruby, Clojure, and Common Lisp, and his Clojure game development writing.

    Stats for nerds
    48HN people shared it
    54linked in comments
    2.1Kstory points
    May 2016last shared
    2010people per year2016

    Top posts on HN

    1. 1
      Making an RPG in Clojure (2010)
      1 person · 191 points · first shared 2016 · 39 comments on HN
    2. 2
      Emacs isn't for everyone
      1 person · 160 points · first shared 2010 · 133 comments on HN
    3. 3
      Practicality: PHP vs Lisp
      1 person · 157 points · first shared 2010 · 152 comments on HN
    4. 4
      Keeping bash history in sync between multiple terminals
      1 person · 151 points · first shared 2012 · 34 comments on HN
    5. 5
      Advertising is devastating to my well-being
      1 person · 135 points · first shared 2010 · 144 comments on HN
    6. 6
      Clojure: 1, Common Lisp: 0
      1 person · 112 points · first shared 2009 · 68 comments on HN
    7. 7
      Advertising is devastating to my well-being
      1 person · 96 points · first shared 2010 · 46 comments on HN
    8. 8
      Making an RPG in Clojure
      1 person · 87 points · first shared 2010 · 12 comments on HN
    9. 9
      I am an edge case
      1 person · 85 points · first shared 2010 · 48 comments on HN
    10. 10
      I'm turning into a Lisp snob
      1 person · 70 points · first shared 2009 · 92 comments on HN

    What HN people wrote when they linked it

    • nickikAug 2011

      In any language you can build a interpreter/compiler for any other language but thats not the point. The point is that you can do random AST transformation at compiletime.

      You think of macros as a kind of pay of for s-exp syntax. I have to say that even without macros I would think s-exp syntax is nicer. Sure in Ruby you can do alot when you play around with that suger stuff but this stuff often doesn't come free. See this blogpost for an example of what I mean: http://briancarper.net/blog/579/keyword-arguments-ruby-clojure-common-lisp

      Depending on what you do you are writting a lot of macros. In lisp the interface to a library is almost always in a DSL style witch makes them easy to use. See this list here: http://stackoverflow.com/questions/3968055/are-there-any-clojure-dsls. In your own Application your maybe not going to need them that often depending on what you do.

      What you discribe is just a macrosystem. Having macros in a language with syntax is duable (look at Dylan or Plot) but you will find that getting everything nice and easy to use is much harder then you think. If CoffeeScript has a macrosystem great. I don't really know CoffeeScript well enought. Could you provide me with some nice examples of how people use this in CoffeeScript?

      If I where you I would just learn enought lisp that you can trie it out yourself.

    • willismichaelJan 2014

      Thanks! Same here in terms of "mostly a fun experiment". A while ago Brian Carper blogged about early attempts at developing a little RPG in clojure: http://briancarper.net/blog/520/making-an-rpg-in-clojure-part-one-of-many

      His post indicated that he initially tried the "every entity is an agent" idea, and had performance problems with it - although maybe his real problem was that the entire world was a single ref, and all of the agents would bash on that ref.

      Another question, do you have any kind of reverse-lookup table implementation? I see that you're using component-based entities, do you have any way to quickly query your world for entities that match some arbitrary criteria, rather than iterate over all entities in the entire world? I ask because my game idea would involve potentially tens of thousands of entities, and I'm trying to figure out a way to build game logic mini-systems that can quickly find a subset of game entities and perform some function on them. For example "In the spring time find all fruit-bearing trees of a minimum age and spawn unripe fruit on them", or "every 15 seconds find all poisoned characters and deduct 1 health point"

    • bitsaiJun 2015

      Mmm, I've never used Ruby or Rails professionally, so I can't really speak to that. Prior to Clojure, I mostly worked with C++, Java, C#, and Python.

      At its core, Clojure is basically just data and functions. Once the switch flipped in my mind, I found that to be simpler and more straight forward than any of the languages I worked with before.

      When the majority of your code is side-effect-free, pure functions (and Clojure makes it very easy to structure your code this way), it becomes very easy to reason about. And very easy to test, with minimal ceremony!

      P.S. When I was learning Clojure, I kinda devoured all the resources I could find. A couple interesting looks at the language from the perspective of Rubyists:

      http://briancarper.net/blog/536/clojure-from-a-ruby-perspective

      http://confreaks.tv/videos/rubyconf2009-clojure-for-ruby-programmers

    • dxbydtMar 2013

      >Python..is immensely more readable than..Lisp

      fwiw, it is immensely easier to build a parser for (= z (+ y x)) than for z=x+y

      you might ask, why should that matter ?

      Ad outside the eyeglass store:
      why do we have ears ?
      so we can wear spectacles!

      The point being, we first evolved as creatures with ears and later on devised spectacles so we could wear them over the ears. But we've now taken the ears so much for granted we think of spectacles as the innovation! Parsing should have been the whole point, but we now prize readability. We then add fluffy monikers like "serious perseverance" and "Lisp dumbness" to further tilt the balance in our favor.

      http://briancarper.net/blog/442/lisp-syntax-doesnt-suck

    • mcnMay 2011

      Someone (sorry for not noting your name) suggested dimming/graying the parentheses in lisp modes and gave this elisp snippet to do it. I find that I prefer reading lisp with dimmed parentheses.

      (defface paren-face
      '((((class color) (background dark))
      (:foreground "grey20"))
      (((class color) (background light))
      (:foreground "grey70")))
      "Face used to dim parentheses.")

      (add-hook 'scheme-mode-hook
      (lambda ()
      (font-lock-add-keywords nil
      '(("(\\|)" . 'paren-face)))))

      I also came across a blog post[1] which includes a slightly more complete solution.

      http://briancarper.net/blog/492/

    • cemerickApr 2011

      I don't see any resistance to change; it's more like Clojure folks are generally going to demand that changes be unequivocally positive. I remember the fixed-position args in Scala function literals being particularly irritating in certain circumstances; whatever one's gripe about the chosen sigils, being able to write #(%2 %) is damn handy.

      This widespread Scala/Clojure rift is a myth AFAICT, outside of various spitball fights on Twitter.

      Oh, and if you want to have userland reader macros in Clojure, have at it: http://briancarper.net/blog/449/clojure-reader-macros ;-)

    Related

    Best In Classbestinclass.dk46 people

    Reddit/HN clone in Clojure

    Best In Class
    Personal · last shared 2020
    Think Relevancethinkrelevance.com69 people

    My Clojure Workflow, Reloaded

    Think Relevance
    Company · last shared 2020
    Chas Emerickcemerick.com35 people

    100% time

    Chas Emerick
    Personal · last shared 2025
    Rigsomelightrigsomelight.com16 people

    The Frameless Geodesic Dome I currently live in

    Rigsomelight
    Personal · last shared 2025
    LispCastlispcast.com108 people

    React: Another Level of Indirection

    LispCast
    Personal · last shared 2022
    Smash Companysmashcompany.com44 people

    One-on-one meetings are underrated, whereas group meetings waste time

    Smash Company
    Personal · last shared 2024
    David Nolenswannodette.github.io98 people

    The Future of JavaScript MVCs

    David Nolen
    Personal · last shared 2025
    Learning Clojurelearningclojure.com15 people

    An Introduction to the Lambda Calculus (2015)

    Learning Clojure
    Personal · last shared 2020