Sententiae viri ex temporibus duobus

Teaching Ruby Over JavaScript


Chris Granger recently published a post that asserts “Coding is not the new literacy.” He points out that “literacy” is defined as the “laying” of characters into units that bear meaning (letters to words, words to sentences, sentences to thoughts). But “literacy” is a proxy noun for something vastly more important: a technology for storing information such that it survives across people, ages, cultures.

I recall Ovid whose prophetic close to the “Metamorphoses” was:

And now the work is done, which neither Jupiter's wrath, nor fire, nor the
sword, nor greedy time can better part[this work] will be

(Translation mine)

Literacy was magic because the laying of letters yielded immortality. Ovid supposed that his work’s immortality would require mouths, ore legar populi (“recited in the mouths of the population,” recitation as mimetic preservation), but with the advent of cheap yet durable writing technology, immortality could be more cheaply gained by means of finding home in the books of the populus (publication as mimetic preservation).

But what if we could make the component pieces of abstract thinking similarly immortal?

That’s exactly what programming and its concomitant activity coding are.


“Programming” is the skill wherein we calm our distracted minds into expressing a sharable, abstract computation activity that solves a problem. “Coding,” similar to “literacy” is the mechano-visual skill whereby one expresses the solution. “Programming,” therefore is one: fungible, transcendent, and unbound to any particular language. “Coding,” by contrast, is necessarily bonded to an “implementation language.”

As a teacher my pedagogical approach privileges teaching “programming” over “coding.” Yet I must wrestle with this difficult conundrum: to teach “programming” I much teach students “coding,” and that means I have to choose a language of implementation.


I recommend Ruby. If my goal is to teach “programming,” then I want a language that has a clear syntax, has very few surprises and allows the student to focus on the “Tao of Programming” and not the “WTF of function-level scope?” A friendly syntax allows students opportunity to work at understanding “programming” before understanding the multiform and delightful ways that different styles of “coding” can provide more or less expressive, concise, or clever ways of achieving crafting the same “programming” unit.

As my colleague, Anne, once pointed out: “It’s easier to explain to someone what a mansion is after they know what a hut is.” If they’ve never seen either, you’re in a check-and-egg situation. To me, Ruby provides the maximal perception of programming while keeping the syntax, surprises and tangles of “coding in Ruby” out of the way.

Also, experienced Ruby hands know that thanks to lambdas, blocks, and Procs, Ruby can be adapted to reach extremely sophisticated utterances while its introductory interfaces remain friendly.

Why Not C?

One might suggest that C reveals the fundamentals of the machine in a small, approachable, logically consistent fashion. C also has the virtue of being like Plato: all further work is largely a response to the framework he / it established. I recall a conversation with Aaron Hillegass in Rome where he supposed that he would teach his (then!) young sons C as a first language.

I can’t disagree with the beauty of C as a first language: it invites engagement with the machine, invites understanding of memory, and can be understood, beautifully, as a series of markings-off of lengths on a single length of tape (no coincidence when one of its primary storage media was, uh, tape).

Nevertheless, to write a primitive CGI script in C a student will quickly step into the challenge of string parsing in C, they will have to write separate handlers for GET and POST, etc. Lacking experience with discipline around modularity, managing complexity, and pointers, the “programming” lesson gets lost in the “coding” ephemera.

The method I teach under tries to educate rapidly in a small unit of time. For such a program C seems unnecessarily clumsy. One of C’s many virtues is clarity for those who already know how to program, to presume that for a student is a disservice. I recall Larry Wall, creator of Perl, once saying that he learned the C language in a trivial amount of time, but learning its standard library took a non-trivial amount of time.

Why Not JavaScript?

JavaScript is a language whose growth seems to be on a hockey-stick of growth. That it is part and parcel of a widely-distributed development platform (the browser) with an integrated REPL (developer tools) would seem to make it seem preferable to Ruby whose dependency / version manager toolset options present a complicated hurdle to the beginner.

While JavaScript’s development environment bootstrapping is enviable, I feel the language has a number of strong drawbacks. First, it’s rather verbose. If I never have to type function again, it will be too soon. But I consider that con to be trivial compared to the following drawback: to accomplish simple work (say mapping over an array) a number of implicit mental models are required to already be in place. Further there are some scary bugaboos lurking in minds where those mental models are imperfectly present. Consider:

  twice_as_large = [1,2,3].map{ |x| 2 * x } #=> [2,4,6]


  var twice_as_large = [1,2,3].map(function(i) {
    return i * 2;
  }) //=> [2,4,6]

While an experienced programmer may see no significant shift, consider the implicit understanding in the JavaScript example:

  • Anonymous functions
  • Function as first class data i.e. is not executed
  • return i * 2 is not in the same context as [1,2,3] was
  • Arity is not enforced and desired data may be present but not “captured” by a parameter
  • arguments as a hidden construct (part and parcel of arity)
  • etc.

The Ruby example does the same work but has, in my view, far fewer punji pits laying in wait for the tyro. Based on its implicit assumptions around simple work, JavaScript strikes me as being a sub-optimal first. As an audience member at the first NodeConf, nothing was more humanizing and ego-salvaging as watching Ryan Dahl muttering over a livecoding bug disparage whoever decided to implement Node in Javascript.


Thus, for the moment, I recommend using Ruby as a primary teaching language. While Ruby is the coding language I recommend students start with, owing to it’s ability to get out of the way and help students learn programming, I believe it is the optimal choice. Having seen and felt the Tao of Programming, I’m positive that learning to code any other language is a vastly simpler task.

Streams and the Soul of the Machine


For the last year I have been teaching passionate beginners about programming at DevBootCamp. In this time I have come to realize that one of my primary tasks as teacher is to process the patterns and idioms of the computer and of programming languages (as I have experienced them) and rareify them into metaphors that my students can grasp experientially and/or emotionally. Having found an emotional or experiential connection to the rareified metaphor, they are able to condense it back into the universe of text-on-screen where I show the praxis of the metaphor.

The primary advantage to this approach, as I see it, is that even if the praxis of “what to type” or “what is the computer doing” is unclear, having a series of metaphors whereiwth to communicate or reason about the praxis greatly faciliates understanding.

Given my own philosophical bent, one question I have been pursuing in discussion with my students is this: “What is the the metaphor that describes data’s nature?”

Data’s Sine Qua Non

It all started rather simply. I was a bit chagrinned to see my students reaching for incorrect tools (e.g. sublime) when attempting to get information from their server logs or from large files. Realizing it was my duty to make sure that machine navigation was as well covered as SOLID programming principles, I assigned work on researching the Unix primitve utilities: cat, head, tail, sed, et al.

These utilities’ functions are generally described as the following:

Name Description
`cat` Display the contents of a file on the screen
`head` Display the first 10 lines of a file on screen
`tail` Display the last 10 lines of a file on the screen
`less` Display a “page” of screen data from a file

While this synopsis certainly works for those learning to use a Unix system, it fails philosophically as one starts to learn more of the features of some of these commands.

Who Made This Cover for ‘the Stranger’

It is commonly said that you can’t judge a book by its cover. Most people have a story where this wasn’t true and here’s mine.

Cover of The Stranger by Albert Camus

Help me internet! Who designed this cover?

This amazing cover to Camus’ “The Stranger” got me to read this book and my life was never the same afterward. But before I tell the story of its impact on me I must ask: “Does anyone know about who made this cover or who this troupe on the cover is?”

This cover was one of my first exposures to conceptual art. I had never seen anything like this: the make-up, the absurd yet regimented uniforms, the implication of “theatah.” I had to know more. I went out and bought my own copy of the book for a few dollars at a local used book store and read the strange work whose famous beginning Today mother died. Or perhaps yesterday, I’m not sure clearly signaled to me that I wasn’t in the realm of school-sanctioned literature anymore. The cover feels French (certainly likely giving Camus’ Algerian-French heritage) and recalls some of the set design of Jean-Pierre Ponnelle and thus dates it to the late 60’s early 70’s, but cover art information is not included in my copy with this art. If anyone knows, please @-message me on Twitter!


I won’t say that I liked the book, I won’t say that I liked the protagonist, Mersault, but the worldview behind the character was rich and read like a thought experiment about what it would be like to have emotions stripped from you, what the burden of murder might be, and what might make life worth living.

It was my introduction to Camusian Existentialism and the book left a monumental wake in my life. Owing to the cover and the book I would learn French and buy a copy of “L’Étranger,” read it in its native idiom and still come up short in an attempt to qualtify and compartmentalize it. My inability to compartmentalize it and box it up lead me to search for more answers and, utlimately, lead to my Philosophy BA.

I would love to know who made this cover though.

Move to New York Update

It’s been about 16 days since I announced our pending move to New York, so I thought it would be a good time to give an update.

On the 10th of this month Lauren and I had the great pleasure of attending my cousin’s wedding in Los Angeles. It was a wonderful affair in the open air patio at the Oviatt Penthouse. There we were able to see my sister, brother-in-law, mom, aunts, uncles, cousins and their spouses. It was a wonderful visit to LA: sunny and hot, but not too hot with a warm glowing evening that lay rich upon the night-crawling denizens of West Hollywood.

Thence we flew to NYC JFK and spent the next week looking for a new home. We worked with a wonderful broker named Alexa Williams with Elliman. She took us around to a beautiful property in the Battery: high above other skyscrapers we could look down and across Manhattan’s stock exchange districts. From the sky deck we could look out over the East River, look toward Staten Island and see the Statue of Liberty…it was a dream.

But it wasn’t for us. It was too corporate, too far from a safe green space, too close to my work, and, frankly, for an Austin / San Franciscan type, just too darn busy. We also tried another gorgeous property in Greenwich Village. But again, for a couple with a poodle the terrain was too small and too far from the green that our little Byron loves so much.

Sadly, the spaces just didn’t feel right. We were back to square one. We found a broker who specialized in Brooklyn and the Prospect Park area and she said she knew of a unit that was just about to hit the market. We were invited to come out and check it out. When we entered it we just knew that it was the one.

It’s a 3rd floor, walk-up, 1 bedroom in the Park Slope neighborhood. It’s most special feature is that it’s one block away from Prospect Park. The space is freshly refurbished with new appliances throughout. We spent the rest of the trip arranging cash and paperwork but when we got back on the Virgin flight back to LAX we had a signed contract for our habitation beginning on November 15, 2014.

One crucial and very, very big piece of our relocation has been locked in. The next steps are packing, moving, and becoming landlords ourselves. Gulp. Today we went and picked up the collapsed boxes of another couple in San Francisco who just moved apartments. We loaded up my car with their boxes and dumped them in our living room floor. Now comes the boxing part of the move.

We’re going to be getting out of here a few days ahead of the 15th.

Moving to New York

Lauren, Byron and I are moving to New York…

…and we are blissed out about it. We had a wonderful experience of the city and its people while we were there this summer and we want to go back and experience more of what NYC has to offer.

"Lauren and I atop the Empire State Building"

Details after the jump.


During my hiatus I didn’t mention the fact that we bought a dog. We bought a gorgeous moyen poodle from Karbit Poodles. We had been tossing around the idea for years but I just think we finally felt that the time was right.

"Mr. Red Collar Boy"

Why a Poodle

Poodles are a good match for allergy sufferers (me) and they’re very intelligent, trainable, and athletic which was a strong requirement for Lauren. Like most people I had that French foo-foo conception of a Poodle but that’s not true! A Poodle is a working dog: bred to be an assistant to subsistence fishermen in marshy estuaries (like the Thames). It was in this environment that the arms race for intelligence started and thus the poodle is a highly intelligent breed that lives to serve.

I didn’t know they were so versatile and intelligent, but as we researched the breed, the more we wanted to meet one. I found some breeders in Northern California, but none of them had puppies. One of the breeder did tell me that a breeder in Reno had just had a litter and that I could go meet those puppies and that, at worst, “it’d be a beautiful drive this time of year.” I contacted Karin, the proprietor, and she sent us pics of her beautiful litter and we immediately fell in love with Mr. Red Collar Boy.

More pictures and Q&A after the jump….

Catching Up to 2014

My last update was about this time year ago. At that time I was starting to feel a need for a change professionally. I had been working doing Rails and JavaScript at and I was thinking that I might want to pursue something different. I loved the team there though so it wasn’t particularly urgent for me to leave but then Fate made a move.

I received an email from a recruiter (nothing new) but this one had actually taken a look at my work and at my conference talks and wanted to know if I had ever considered putting my skills and interests into teaching. He also asked if I would be willing to talk to some of the staff at

The Panhandling Game

Like most modern, large cities, San Francisco has no shortage of homelessness or panhandlers. What I was unaware of was the level of organization.

I had to do a mid-afternoon run to Walgreens to drop off some photos to be developed. While I was standing there the manager was detained by a guy pressuring him to “cut me a deal, man” such that the juice that was on sale would have a similar price discount applied to another juice. The manager insisted that that was not possible and after a bit of a give and take the customer relented and went on his merry way.

As luck would happen the price-conscious patron was headed to the corner by my office to meet up with his wife and daughter. As he approached the little girl, adorably perched on a retaining wall edge yelled: “It’s Daddy! I want kisses!”

“My goodness,” thought I, “the man was doing it for his family!” I was touched by the dream of a scrappy family minding the dimes and quarters in this Maybach and Cristal city. I headed back to the office slightly warmer from the emotional sunshine.

A few hours later it was time to leave and as I reapproached the same corner. There I saw the wife and the adorable daughter. Daughter was swinging on mom’s leg, mom held a cup out, a sign was up asking for change.

As I lingered reconciling what I was seeing with what I had seen, I peeked quickly but keenly through the tall grasses in the garden behind the aforementioned retaining wall. There I could hear Daddy sniffling.

I suppose he was there to lurk out of scene to make sure that the girls weren’t interfered with in their money-making.

I walked away a bit more jaded than I was before.

I came to a woman seated on the sidewalk with two dirty tots sitting next to her on a flattened cardboard box. The cup was out. An older gentleman in a find hat passed them and turned back with a dollar in his hand.

To the poor or to the pimps?

Read: ‘Sum’ by David Eagleman

Based on an interview with Eagleman that I heard on To the Best of Our Knowledge, I thought I would give his book, Sum a read. The book offers in its first four chapters a layperson’s guide for understanding consciousness and provides an introduction to the neuroanatomical features of the brain. The book then portrays how the brain operates as, to borrow from Doris Kearns Goodwin, a “team of rivals” of which consciousness quite often has no control. Thereafter Eagleman makes a thoughtful presentation on how society ought punish and judge in a world where the assumption of free will, a concept at the heart of jurisprudence since antiquity, appears shaky by virtue of the previous discussion.

While the opening chapters offered little innovation compared to other pop neuroscience texts, their rudiments allowed the exciting explorations around law and culpability to be presented in the latter chapters.

Translating Giordano Bruno

I have finished translating (although I’m not sure the level of proficiency) the first quarto page of Bruno’s “On the Shadows of Ideas.”

It’s been a real treat to get back into Latin.1

You can see my progress at my Github hosted blog site dedicated to the translation: Translating Bruno’s DE VMBRIS IDEARVM.


  1. “Treat” coming from the ancient Latin word meaning “profound pain” requiring a half-dozen of grammatical references, grimoires, and dictionaries.