November 22, 2015

IaaS and PaaS Explained: A Food Analogy

8 minute read

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

2 minute read

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 6, 2015

Teaching Binary Using the Socratic Method

2 minute read

Yesterday, I saw this article shared on Reddit’s programming subreddit. I can’t due justice to the article, so I won’t even try to summarize it. (Definitely read it before reading on here.) However, I think it’s worth sharing because it highlights one of the most fundamental things that we take for granted when trying to teach friends or family something (not all of us are trained teachers). Not every new concept is actually so complex and layered that it can’t be easily intuited by someone with basic knowledge. Often, we simply don’t go about motivating the understanding properly. ...

November 5, 2015

Clojure Zippers Emulate Object-Oriented Programming?

3 minute read

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

2 minute read

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