Chouser
Who is Chouser?
I’m a father, husband, follower of Christ, and programming enthusiast. Some people call me Chris Houser.
Where and when did you start programming?
My brother bought a TI-99/4A home computer when I was about 5 or 6, and within a year I was writing simple BASIC programs made up mostly of PRINT statements and the occasional INPUT.
Best thing about Clojure
People usually come to Clojure with pain or frustration from some other environment, and whatever feature it provides that makes that pain disappear becomes the Best Thing Ever. Commonly this is dynamic development, broad concurrency support, or the huge set of libraries available. But for me, I think I’m still most often pleased by the seq abstraction. The way that so many data sources can be exposed as seqs, that seqs are so clean (no iterator to break when you change the collection it’s walking), and so many beautiful functions can manipulate seqs — it may not
be as sexy as the STM but I love how simple my solutions often
end up being.
Tell us something we don’t know about Clojure
Maybe some people don’t know this… Every time you call ‘into’ to pour a seq into a map collection, a mutable version of the map, called a transient, is created internally so that key/value pairs from your seq can be added very efficiently. Of course the map returned to you in the end is immutable, preserving all the safety of Clojure’s persistent collections.
Here, a transient is made from the empty map {}:
(into {} (for [c ["Susan" "Barbara" "Ian" "Vicki"]] [c (count c)]) )
Then the keys (names) and their values (string lengths) are fed in as a sequence, the transient is updated with each pair, and finally an immutable map is returned:
{"Susan" 5, "Barbara" 7, "Ian" 3, "Vicki" 5}
If you recognize those names, perhaps you’d be willing to lend me a copy of the latest season? I haven’t seen any of it yet.
Webapps use Clojure?
Sure, why not?
Clojure vs Scala/Ruby/Python/Java?
Ruby and Python play too much in the world of mutable objects. That never used to bother me, in fact I have in the past very much enjoyed each of them, but now I find their mutable objects a bit scary. How can you be sure the functions you call aren’t changing things when you’re not expecting it? How can you even begin to consider multiple threads touching the same objects at the same time?
Scala provides immutable locals and collections, so you can program more safely if you choose to. But it is 100% statically typed, and those static types are deceptively complex. Type inference reduces the number of type declarations you have to *write*, but does nothing to reduce how much you have to *know*.
I have never much liked Java. Since Clojure depends on it so heavily, I have come to appreciate some aspects of it — the robust and actively developed libraries, both open- and closed-source, the power and ubiquity of the JVM. But Clojure also currently suffers from many of Java’s weaknesses — classloader complexities, painfully sluggish startup times, weak integration with Unix environments. I’m looking forward to Clojure, at least in some form or other, escaping those weaknesses.
What does your typical day look like?
It involves a whole lot of sitting in front of my computer. Often there’s reading. Sometimes there’s typing.
What do you do in your free time?
I like to roll around on the floor with my kids, spend time with my wife, and try to build up my sentry gun before the scout-rush arrives.
Current favorite apps?
Why is software such a mess? All apps annoy me. Vim would be great if viml were Clojure. Emacs would be great if viper were vim. I would use Sawfish if it supported tabs and tiling, instead I use ion and am annoyed there aren’t clickable close buttons in its window title bars. I use gmail, even though each rule can only do one thing. I use Thunderbird even though I still don’t understand its message-formatting behavior.
Okay, that’s clearly unfair. For the record, code I write annoys me every bit as much. So let’s see, something positive…
A window manager with tabs and tiles. Seriously. Get one. ion3 will do if you don’t find another you prefer.
Powerful text editor. If you’re writing code, or email, or a book, it’s worth investing some time and/or money to find one that helps you keep getting better and faster the more you use it. Vim fits the bill.
Small picture for your Workplace?
Favorite: Language, JS Framework?
My favorite language is C++. Wait, that can’t be right…
I haven’t used any JS framework besides Zimbra enough to have a useful opinion. My experiences with the Zimbra JavaScript toolkit were not particularly positive — there must be something better out there (this says nothing about their web app, which may be great for all I know). I’ve dabbled a bit with jQuery, which looks promising.
Name something that has inspired you recently?
Michael Fogus, my co-author — the breadth of his knowledge and his unrelenting work ethic are a constant inspiration.
What do you prefer (and why)? Freelance work or full time employment?
I’ve never done freelance work full time, so I’m not sure what that would be like for me.
What are your personal projects and goals for 2010?
Finish the Joy of Clojure. Work out more often. Pray more regularly. See if we can eradicate all Java code from the Clojure code base, replacing it with Clojure.






I think I have that same phone on my desk! Hehe.
Unless, im very much mistaken, those were first 4 Dr who companions back in the 60′s
I have the same keyboard :)
@Ron: right-o!