Programs v Software

My friend Sean has this painfully accurate riddle: Q: What’s the difference between problems and issues? A: Problems can be solved. Here’s another one – Q: What’s the difference between programs and software? A: Programs can be completed. A software system is never done, it always needs upgraded and tweaked and fixed and enhanced and … Read morePrograms v Software

Learning to program? It’s time for Pairing with Bunny!

My sister Rachel wants to learn to program. “Will you teach me?” Sure, of course! Teaching someone to program turns out to be harder than I thought. It’s astounding how many little tricks and big principles I’ve absorbed over the years. It’s way more than can be passed on in a few years. Gotta start … Read moreLearning to program? It’s time for Pairing with Bunny!

Logs are like onions

Or, What underlying implementation is clojure.tools.logging using? Today I want to change the logging configuration of a Clojure program. Where is that configuration located? Changing the obvious resources/log4j.properties doesn’t seem to change the program’s behavior. The program uses clojure.tools.logging, but that’s a wrapper around four different underlying implementations. Each of those implementations has its own ideas … Read moreLogs are like onions

Contingencies

People aren’t born knowing what to do in all situations. We learn based on what does go wrong, based on the contingencies we do encounter. Gradually. A chess program must have all situations programmed ahead of time, an algorithm for everything physically possible. A human player encounters a situations, then finds a solution – maybe … Read moreContingencies

A victory for abstraction, re-use, and small libraries

The other day at Outpace, while breaking some coupling, Eli and I decided to retain some information from one run of our program to another. We need to bookmark how far we read in each input data table. How can we persist this small piece of data? Let’s put it in a file. Sure, that’ll … Read moreA victory for abstraction, re-use, and small libraries

REST as a debugging strategy

In REST there’s this rule: don’t save low-level links. Instead, start from the top and navigate the returned hyperlinks, as they may have changed. Detailed knowledge is transitory.This same philosophy helps in daily programming work. Say a bug report comes in: “Data is missing from this report.” My pair is more familiar with the reporting … Read moreREST as a debugging strategy

Property tests don’t have to be generative

Now and then, a property test can be easier than an example test. Today, Tanya and I benefited. There’s this web service. It returns a whole tree of information, some of it useful and some of it is not. { “category”: “food”,  “children: [ { “category” : “fruit”,                … Read moreProperty tests don’t have to be generative