Lessons from SICP: what is iterative programming?

SICP insight of the day: iterative programming doesn’t require a for loop. Tail recursion is iterative programming. It looks very close to recursion, but the distinction is: a program is iterative if everything it needs is stored in a few state variables. In an imperative style the state is stored in mutable variables. In a …

Read moreLessons from SICP: what is iterative programming?

Bring the data to the code, or the code to the data?

Object-oriented code was conceived as message-passing between objects. Service-oriented architecture emphasizes delegation to another system. The entire web is a whole bunch of requests flying around. There is one clear way to be efficient about this: stop waiting for results. When we’re writing imperative code, we want to write the operations in the order they …

Read moreBring the data to the code, or the code to the data?

One level deeper

It is often said that the developer should understand one level deeper than she’s working. If she’s writing Java, she should know how the JVM works. If he’s using a container, he should know conceptually what’s going on inside the container. This statement is true for more than just runtimes and frameworks, but all the …

Read moreOne level deeper

VCS as Biographer

Git gives us all this amazing power to control what we commit and when. We can even go back and modify commits to rewrite history. This power is dangerous. What’s the point of having it? The reason is that our version control history tells a story of our project. It is up to us what …

Read moreVCS as Biographer