January 9, 2016

How Programming is Like Cooking

Peter Naur, famous in the programming world for his contributions to ALGOL and the Backus-Naur Form (BNF) notation for expressing grammars, passed away last week. (For those who are not in the programming world, ALGOL’s grammatical syntax inspired most of today’s most popular programming languages, like C, C++, Java, and Python). As a very young millennial programmer, I’d of course heard Naur’s name from the BNF notation, but didn’t really get to appreciate just how prescient his work was at the time. ...

November 22, 2015

IaaS and PaaS Explained: A Food Analogy

The other night, I was meditating about my various options for deploying applications at work, including “Infrastructure as a Service” (IaaS) and “Platform as a Service” (PaaS). Amidst my musing, I came up with an analogy for explaining the difference between these various ways of deploying programming solutions, in addition to the much more conventional approaches which were used formerly (and are often still necessary). The Analogy Suppose you want to get into the food services industry. You have many decisions to make, but chief among them is deciding two related things. ...

November 17, 2015

The Clojure “Reductions” Function

Tonight, while attempting a problem at 4 Clojure (problem number omitted so as not to give too many hints), I was struck by the following problem: What if I need a Clojure function which can take a sequence of functions and can sequentially call them on some seed value? I’m specifically looking at something like: (defn some-fun [seed-val & funs] ; Keep passing the calculated value through, while also appending to sequence (list ((first funs) seed-val) ((second funs) ((first funs) seed-val)) ...)) I ended up hacking something together using iterate, but which wasn’t terribly elegant. ...

November 5, 2015

Clojure Zippers Emulate Object-Oriented Programming?

Yesterday, I posted about using Clojure zippers to solve the problem of automatically generating a Table of Contents. During my work with Clojure’s implementation of zippers, I noticed something interesting. The zipper function creates (and returns) a new zipper object. Its parameters are the following (lifted straight from the documentation): branch? – a function that takes a node of the zipper and returns a true/false if it is capable of having children (even if it currently does not). children – a function which, given a node in the zipper which is a branch, returns a seq (sequence) of its children. make-node – a function which, given a node and a sequence of its children, returns a new branch node with the supplied children. root – the root node of the data structure (which can also be any valid tree that the zipper to be constructed understands). At first, this was a bit impenetrable. Why doesn’t the zipper just know how to zip over its data? How many types of zippers are there, exactly? ...

November 5, 2015

Coding: Debugging the Gender Gap

On Monday, I had the chance to view a private screening of the newish documentary “Code: Debugging the Gender Gap”. The premise of the documentary, lifted straight from IMDB: CODE documentary exposes the dearth of female and minority software engineers and explores the reasons for this gender gap and digital divide. The film highlights breakthrough efforts that are producing more diverse programmers and shows how this critical gap can be closed. CODE asks: what would society gain from having more women and people of color code, and how do we get there? ...

© Jeff Rabinowitz, 2025