An experiment in publishing code and words about code on a small scale.
Switch branches/tags
Nothing to show
Pull request Compare This branch is 569 commits behind raganwald-deprecated:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Homoiconic is an experiment in publishing code and words about code on a small scale. When I write, I add files to the homoiconic git repository, organized by date. Code is included in the posts and also in the folder with the posts that discuss them, so it's easy to download what you like. You can even download the entire site as an archive!

Homoiconic is really simple: Snippets of code and words about snippets of code. I am avoiding words by themselves. And the words exist to amplify and explain the code, rather than the code existing to illustrate the words. This is the opposite of most of the posts you find on traditional (circa 2004) blogs.

what can I read right now?

Asking me what to read is like asking the chef what's good on the menu. It's all excellent, of course! That being said, I have a few personal favourites:

Many people link to my series on combinators: Kestrels, The Thrush, Songs of the Cardinal, Quirky Birds and Meta-Syntactic Programming, Aspect-Oriented Programming in Ruby using Combinator Birds, The Enchaining and Obdurate Kestrels, Finding Joy in Combinators, Refactoring Methods with Recursive Combinators, Practical Recursive Combinators, The Hopelessly Egocentric Blog Post, and Wrapping Combinators.

Of course, you can simply read the archives. They're organized by date, so the most recent writing is at the bottom, not the top.

is there anything else to read?

When I want to write about something that doesn't have any code in it, I try to resist the temptation. When resistance is futile, my words appear on posterous. I used to write a traditional blog called raganwald.

can I subscribe?

Not in the traditional sense. If you're into git and like fine-grained updates, you can follow homoiconic here on GitHub or subscribe to commit messages letting you know what I've added or updated in your feed reader. The latter option is likely to be moderate volume, as I like to make edits and corrections as I go.


My writing used to be heavily philosophical, with lots of advocacy and questioning. I still consider the why of things much more meaningful than the how, but it's time to focus on the how rather than the why. I'm making this little writing place a "no trolling zone." I will try to avoid preaching, and the obvious corollary is that I will also avoid worrying about whether people agree or disagree. Instead, I will try to simply share little pieces of code as it comes to me.

There is no advocacy on here. I frequent a few scuba diving forums. One annoying part of scuba culture is that it can be very polarizing. A bunch of people over here say there is only One True Way to dive, right down to using the exact same equipment as each other. Another bunch of people over there disregard the conventional wisdom and choose to dive solo, attracting criticism from young and old. The forums discovered a long time ago that running flame wars simply drove members away, so they have instituted "no trolling" zones within their boards, places where people can discuss the how of solo diving, or sidemounting, or DIR, without getting into a battle of whether such a thing is a good idea or not.

So, one of the reasons there is no advocacy is that I am hoping to increase the signal-to-noise ratio. That being said, what is noise to one person is music to another, so I have no problem with people using their blogs or community sites like Hacker News to express their feelings.

The other reason there is no advocacy is that I am invoking the "Transit Cop Cop-Out" on myself:

I used to commute into Toronto on the GO train. They have an honour system: you can buy a monthly pass or purchase tickets that you punch yourself before boarding. Roving transit cops check your ticket, and if you didn't punch it you get a $90 fine. Of course, the miscreants have a litany of excuses "I forgot," "I left my pass in my other tuxedo," and so forth.

When you ride every day you get to know the cops well. One of them told me that he had a policy of letting people off Scot-free if they told him a story he hadn't heard before. He told me that the last novel excuse he had heard was from a woman who claimed her nails were too wet to reach into her bag, remove the ticket, and punch it before boarding. Nice. He said he let her off on the grounds of novelty and chutzpah.

I have already said a number of things about abstractions, functional programming, meta-programming, metaprogramming again, brevity, and much more. But I don't want to say any more on subjects like these until I can think of something novel. It may be awhile. In the meantime, share and enjoy.


At the moment, there are no comments. This is a blog about code, not words. I welcome bug reports and other code-centric feedback by email. I would be delighted to post your snippets and examples. And you know... This is hosted on Github. So you can always fork my unblog, commit an update, and send me a pull request.

That is a lot more work than just submitting a comment. I'm sorry, it's a trade-off. I lose a lot of good feedback, but I also shed myself of a damaging temptation to pander to the crowd. When blogs become "conversations," they also tend to converge on a common group-think. All I can tell you is that if you have a change you want to make or an observation you want to add, go ahead and make it.

is this code clever?

Whoa, Nellie! Easy with the word "clever." Being interested in some of the things that interest smart people is not the same thing as being smart. Especially in my case. So before rushing off to use each and every technique presented here, be mindful of the fact that programming requires judgment, it isn't a perfectly logical process of solving problems using whatever tools, materials, and techniques happen to be within reach. You don't want to provoke responses like this:

Why do I have a feeling that the professional code you write would be too "clever" for most developers to understand? --devinus

My goal is to be able to say that thinking about the code and ideas presented here is a useful way to learn and grow, whether you use any of this code or not.


Criticism of my ideas is always welcome and will often get a link or a quote from me. As for criticism of me the person based on what I write, here's a comment snarfed from Reddit:

Hey, I know you! You're that guy who misuses the technical infrastructure provided by for free for a certain use case for the propagation of his vain nonsensical bullshit in a transparent and pathetic attempt to come off as some kind of lo-fi guy who is too modest to consider himself worthy of a real blog.

If you're going to get personal, general, and permanent, consider this the standard to reach. See if you can't be more scornful, more insightful, or wittier in your criticism.

credit where credit is due

I originally set up a blog at, but I spotted David Baldwin's blog, and I knew right away that a blog that is about the how of code ought to be hosted on Github.

I am Reg Braithwaite. You can reach me by email. My first name is reg, and that works fine for sending email to I look forward to hearing from you.


Follow me on Twitter. I work with Unspace Interactive, and I like it.