Rebutting the “Hole Hawg” Fable
Estimated reading time: .
A Twitter thread I wrote about the concept of dangerous tools.
ContentsBackstory
Original context: User @alicegoldfuss asked why gets()
is terrible. @mjg59 responded
It’ll read until it sees a carriage return, and then write that into a buffer. There’s no way to tell it how big the destination buffer is, so it’ll happily write over the end of the buffer and either crash or allow an attacker to to influence the behavior of your code.
@alicegoldfuss then asked
why…does it still exist?
and what should I use instead? getchar()? scanf()?
I quoted that, saying “quote tweeting because I don’t want to be rude in thread”, following it with
The fact that C input from a stream is like this infuriates me to no end
Honestly, I do my input work by using the read syscall directly and then parsing the contents.
I wrote my own vector class so that if the data is incomplete I can realloc and read() some more and try again
C not only doesn’t stop you from overflowing buffers and destroying performance, it gleefully goes out of its way to do that for you. This isn’t a tool with no safety features it’s a tool that deliberately attempts to twist in your hand and hurt you.
About an hour later, I quoted that with the remainder of this piece.
Main Content
You know what, I’m Mad Online about C and I’d apologize but I’m pretty sure this is exactly the content for which most of you followed me, so, let’s go.
Do y’all know the “Unix is the Hole Hawg of operating systems” story? Let’s talk about that. Thread.
https://team.net/mjb/hawg.html
Fuck this story.
(By the way, here’s what the Hole Hawg is, for reference: https://www.milwaukeetool.com/Products/Power-Tools/Drilling/Right-Angle-Drills/1670-1, and it amuses me to no end that it has a 1-star review)
As you may have heard me say before, I grew up a carpenter. I’ve used right- andle drills before; they’re great.
I’ve got a handful of tools in my closet, including a drill, an impact driver, and a reciprocating saw. No right-angle drills though. Turns out they’re specific-use tools and most people don’t actually need them for most work. Also, modern hand tools are Very Good, Actually.
But enough about drills. Let’s talk about language.
“but not the Hole Hawg, which is too powerful and too expensive for homeowners”
It’s $300. $300 will buy you a whole lot of skilled labor from someone else, and will put you in the hole (heh) for a lot of remodeling yourself.
Right off the bat we have some nice exclusionary bullshit, but, whatever. The whole third paragraph is (a) a lie, tell me that paragraph describes that picture and (b) not even good. Visualize the tool it describes. Ask yourself why you would pick it up.
“The handle is not a sleek, ergonomically designed item … it’s a pipe”
The devaluation of ergonomics is some classic hypermasculine bullshit. As anyone who has used an unergonomic tool for hours on end knows, ergonomics is fucking important. It directly impacts effective use.
It’s especially fucking important in HAND TOOLS. THEY GO IN YOUR HANDS. YOUR HANDS HOLD THEM FOR A LONG TIME.
YA HAAAAAANDS
Hands are moderately important body parts. Respect them. Taking care of your hands is very punk rock.
“The Hole Hawg, following its … only imperative, kept going. It spun the worker’s body around like a rag doll, causing him to knock his own ladder down. Fortunately he kept his grip on the Hole Hawg, which remained lodged in the wall, and he simply dangled from it and shouted.”
Read paragraph four. Then read it again. I want you to really, truly, deeply, marinate in paragraph four. Really soak it in.
Look my profile picture in the eyes and tell it that paragraph four has any redeeming qualities.
The tool spun him around like a rag doll and knocked down his ladder.
This paragraph strikes me as hyperbole, because I know how moments of inertia work on a rotating body, but the gist (jammed bit, flailed worker, knocked ladder) sounds real.
What it doesn’t sound, is good.
Paragraph five.
“Where my homeowner’s drill had labored and whined to spin the huge bit around, and had stalled at the slightest obstruction,”
These are the words of a man who thinks drilling holes is unskilled labor and doesn’t put any goddamn forethought into his work.
“When the hole saw seized up, the Hole Hawg spun itself and me around, and crushed one of my hands between the steel pipe handle and a joist, producing a few lacerations, each surrounded by a wide corona of deeply bruised flesh.”
Marinate in this sentence also.
THIS 👏 IS 👏 A 👏 FAILURE 👏 OF 👏 THE 👏 TOOL
It’s also a laughably easy failure to solve, and modern drills FUCKING DO.
They have an escape clutch that detects when the moment of inertia of the drill spikes, and they disengage the bit until you let go of the trigger.
“After a few such run-ins, when I got ready to use the Hole Hawg my heart actually began to pound with atavistic terror.”
When a tool does this to you, it’s time to stop fucking using it. Either you’re bad at it, or the tool is bad, or both.
Both can and should be fixed.
“But I never blamed the Hole Hawg; I blamed myself.”
Classic hypermasculine trait, I share it myself, but it’s also DUMB AND WRONG.
If you follow the user’s manual for the tool and the tool fucks you up, the tool is at fault.
“[It] is dangerous because it does exactly what you tell it to. It is not bound by the physical limitations that are inherent in a cheap drill, and neither is it limited by safety interlocks that might be built into a homeowner’s product by a liability-conscious manufacturer.”
“The danger lies not in the machine itself but in the user’s failure to envision the full consequences of the instructions he gives to it.”
Tools exist for the specific purpose of translating desire into action. They distill immense amounts of knowledge into a portable form.
This. Includes. Operator. Safety. It very much IS the tool’s responsibility to detect failure cases and abort. If the operator wishes to overrule it, so be it – the escape clutch on a drill can be clamped until you burn the motor – but the tool cannot assume this.
If you want a passive drill, use a brace-and-bit. If you want a passive saw, use a handsaw. If you want a passive vehicle, use a bicycle.
Active tools are responsible for acting in safe manners. A tool that does not do so has failed.
“A smaller tool is dangerous too…: it tries to do what you tell it to, and fails in some way that is unpredictable and almost always undesirable.”
It’s very much predictable and desirable: when departing the realm of safe conditions, it aborts.
It’s worth considering that the author is quite comfortable blaming the tool when he doesn’t like it; it’s only the Hole Hawg where he blames himself and not the tool. Almost like … he’s afraid of the HH and doesn’t want to anger it.
Blaming the tool when it fails in a safe manner but yourself when it fails in an unsafe manner is … there’s a lot to unpack there; let’s do it.
It’s a disregard of safety. It’s a wilful refusal to accept polite negative response.
It’s the toxic, harmful attitude of someone demanding that all actors around them conform exactly to their will and only when an actor responds violently and harmfully do they back down.
We see this a lot, and not just from tools. It’s a bad attitude to have and we can be better
A tool that detects a failure case and responds “No” is unequivocally a better tool than one that doesn’t detect it and just fucking goes. I am extremely subtweeting programming languages here.
Sometimes the tool is incorrect and you need to tell it to be unsafe {}
.
I don’t need to quote the last two paragraphs. I fucking WAS raised by a carpenter, Neal, and I’m a damn good one myself. I know what a tool is and your description of the Hole Hawg fucking isn’t one. It’s a primitive and backwards foolish boy’s foolish toy.
Safety is critically important, and it’s not just a thing that tools do. It’s an attitude among tool designers and makers and users about what is acceptable behavior, and an ever-present drive to do better. Safety isn’t a negative cost on accomplishing goals.
It’s the only path by which they can be meaningfully accomplished. When a tool harms you, it has failed ITS job and it has also failed YOU because YOU are now less able to continue your work.
The attitude of “REAL tool users get harmed by their machines” and “ergonomic, safety-limited tools are for COWARDS and FAKE USERS” is toxic bullshit and helps nobody. It sends you to the hospital and pushes other people out of your profession.
Unix sure is the Hole Hawg of operating systems. It’s badly assembled, parts break, it’s a bitch to use, and if you go through all the right incantations it might do one thing really well one time, and then it’ll spit in your face the n ext time.
This is BAD.
I really appreciate Neal for listing out all the things I fucking hate about shitty attidutes in the woodshop and in the programming scene.
I have all my fingers, Neal. I know a lot of people who don’t. They were good at their jobs and their tools fucked them anyway.
Safety is good. The hypermasculine tropes of “fuck safety that just gets in my way” – which full disclosure, I behavie like this at times – are very bad. It’s shortsighted and self-harmful and ego-stroking until it bites you.
If you shave down your fingers on a router or if you cut off your thumb on a tablesaw or if you shred your thigh with a chainsaw or if your beard gets caught in a machine and it fucks up your entire head
You’re done. You’re out of the profession. All your skill is wasted.
These are real injuries and I know real carpenters and machinists who’ve experienced them. They will never do that work again.
This is the price of “fuck safety” attitudes and your ability to feel Cool And Strong is extremely not worth it.
The Hole Hawg story is bad. The attitude it describes is childish and stupid. It is an example of what not to be when we grow up. I fully support slapping its adherents down, because in a workshop they get people hurt or killed and in software, they do that too. Software is real.
C and Unix and Hole Hawgs are not good and we need to stop pretending they are. The fact that it’s not impossible to accomplish things with them is the bare minimum, not the goal. They’re a starting point. Now we know what we can do; we have to take the next step and do it well.
Thank you for your time.