the case for history
I came across this interesting blog post on second-order thinking as a means for good decision making. It begins with this:
In it they mention Chesterton’s Fence:
Spend enough time around tech circles and you’ll be quick to realise we’re often the “modern type of reformer”. I certainly was in my early career. Indeed, there is unlimited frustration when dealing with code patterns that do not make sense today, “ugly” code, code with “pointless” shortcuts and so on. However, those opinions are borne without understanding. They are reactions of the here and now with no consideration for the history of how we got here. The case for history is simple: it drives understanding — you know why the fence was built.
Back when I started learning about Linux, I was frequently frustrated by the names of constructs. Take for example, these Linux error names:
Error name | Description |
---|---|
EACCES | Access Error - Permission denied to the resource |
EINVAL | Invalid Argument - Argument passed is not valid |
ENOENT | No entity - The file or directory does not exist |
EINTR | Interrupted - The function call was interrupted |
At face value, these error names seem arbitrarly constructed. Why not give them sane names:
ErrorAccess
, ErrorInvalid
, ErrorNoEntity
, ErrorInterrupted
. Linux is based on UNIX, an
operating system created in the 70s. At that moment in history, many C compilers had a character
limit of 6 for external identifiers1. The error names are a direct consequence. EACCES
left
out the last S
just to meet the 6 character limit. Within a moment, the frustration turned to
understanding. Coming across other constructs, the functions creat
and fcntl
for example, became
a frustration-free experience. I knew why the fence was built.
Software evolves, it’s an artifact with life. Design decisions made in the past were influenced by the context of the times. That it’s outdated but still in use is a testament to its staying power. Our responsibility is to interrogate the history of the work before our eyes, instead of lamenting on it’s supposedly unjustified lack of quality. And it may indeed be a lack of quality but more times than not, there will be a justification for its state.
The case for history is the case for understanding. The side-effect of understanding is peace.
-
The C89/C90 standard required a minimum of 6 characters for an external identifier (e.g a function name or constants). Many compilers didn’t care to support more than the minimum. ↩︎