Hacker News new | past | comments | ask | show | jobs | submit login
On Craft (drcathicks.com)
271 points by rapnie on Sept 2, 2023 | hide | past | favorite | 33 comments



Great article!

> I have read a lot of long spiels about craft that frequently end in something like, software work isn’t like other work, and we shouldn’t be judged the same way. We are entirely unique. We are the special ones.

It might comfort the author to know that even within the realm of software engineering, there are insiders and outsiders. Some of the most important engineering work was made by these outsiders.

Growing up poor, self-taught, as the only programmer I knew around me, I felt like an outsider my entire life. When I finally began to associate with other programmers... I still felt like an outsider.

Here were people from structured family units with solid life skills, a college education, large support networks, a lack of systemic trauma, and a fundamentally different understanding of the world. I've begun to find my place in this world, but the feeling of being an outsider will never fully go away.

It's of little coincidence that my favorite kinds of music and other art are often categorized as Outsider Art.

My advice... find a way into that makerspace. Open up a REPL. Software engineering might entail a specific rigid and deep understanding of engineering principles, but software craftsmanship is for everyone. Personal computers were made for the average person to enhance themselves and the world around them, and we should never forget that.

https://en.wikipedia.org/wiki/Outsider_art


i remember my third year of coding as a pro, i had just taken a job in palo alto and was settling in after moving. i was at my new job and a bunch of the coders at the company i was working at went out for lunch and i was getting to know them.

one guy who was younger than i was was talking about how he had a degree from a liberal arts college, and had just been coding on his own for a while, and that when he moved out there for work and was interacting with other coders in real-life for the first time (previously it had been only over the internet) he was learning how to pronounce the names of various daemons, libraries, projects, etc., and that he had understood the pronunciations differently when he was physically on his own. in my head i silently said to myself, "this guy is a junior coder and won't amount to too much" and made a note to try to associate with some of the heavy hitters to try and boost my career and status (and i guess if i'm being charitable to myself, also to learn).

that guy left the company maybe a year later. the company he went to, i think he started as a dev, later became CTO, and eventually CEO. while he was CEO, the company sold for over a billion dollars. and even when we were still working together, i did learn quite a few things from him. so yeah, i think it is easy for people to pigeonhole others, or to think that they are in a place of skill that others perhaps can't easily get to, but sometimes that kind of thinking is quite wrong. (also, at his new company he wrote some great blog posts on software development and operations practices that i really enjoyed and learned quite a bit from)


I had some similar experiences with few self taught junior devs.

I didn't look down on them, but was heavily surprised to see how much they could teach me about software or work or life.


As a self-taught programmer and resident of a town well under 20k pop (most of whom are well out of my age group), i really identify with this. it's helped a bit to learn deeply and engage with others who have done so, and in some ways is an extension of a broader void in my network (or lack there-of). it't influenced the tochnologies i've chosen and hence made me who i am today, but i hope the "zoom-native" generations broadly engage more in open online spaces and feel less of this


There are dozens of us!!

Where do you typically hang online? Maybe we should think about how we could contribute specifically to young rural programmers in similar situations.


I don't like this much - somewhat vague romantic sentimentalism under a heading of "craft".

I don't consider recognising trees as craft... or ride-on mowers as blue-collar... or being afraid of someone on the street at night as recognising the "soon to be broken"... or that "cadence" is a safety measure. It's often the reverse, cadence suggests not stopping when safety/quality is often about anyone being able to stop the line.

As for the "family fixer"... I've known a few and the motivation has not been craft but as an emotional escape. Sit down and talk to your family? Nope, time to rehang all the pictures on the wall. I can recognise their panicked scan of their environment, desperately looking for something that could need attention. I think we often see "craft" type justifications for unnecessary work in software teams that are really avoidance of something more aversive.

Where I find the "fixer" perspective interesting, it's understanding that the world is mutable and that you have the power to change it. It's a more natural human instinct to accept things that are causing a problem. It's not even lazinesses holding people back, it's not seeing the possibilities.


I think we're too used to just replace things instead of fixing them. Fixing requires understanding of how things work, and I think it's a shame most of us (I include myself) don't have enough of this understanding regarding our day to day tools and objects. If fixing something requires calling an expert, it makes it much less appealing to fix it, than just throw it away and buy something new.

This relatively new attitude creates motivation to even further divest in quality and prefer creating cheap things that break fast, because we won't invest the time and money needed to fix them anyway.


I concluded that the author is an outsider (to craftsmanship) looking through the glass at an accessible insider (grandfather).

Whether the grandfather was, or would consider himself to be an insider, we can’t glean and don’t know, respectively.

It’s a sort of longing piece, and that’s OK, but not what I expected going into it!


Fixing the loose leg of a table at a restaurant using a coin is definitely not craft.


I can relate to her grandpa.

However, it doesn't win me much support, these days.

People like us aren't really what the tech industry is about. I'm not sure that it ever was about it (which was why I didn't append "any more").

There was a fairly decent book, called Software Craftsmanship[0], that I read, many moons ago. I found it comforting. At least I wasn't a complete outlier, even if I was routinely treated with scorn for my approach.

[0] https://en.wikipedia.org/wiki/Software_craftsmanship


> routinely treated with scorn for my approach

Seriously? I feel for you.

In my experience many companies do recognize tech debt now, and the value in fixing it or implementing it the right way, although that was not so much the case in early 2000s.

That said, many times we do still have to argue for time to refactor vs adding new features.

I think that the best software craftsman is the one that can quickly add features without accumulating tech debt and the best way to do that is to just fix/refactor the other stuff around the feature addition immediately. It seems like the OP's grandpa was that kind of person.

Speaking for myself, I sometimes do take longer because I want to get it right, even if it does mean missing an internal deadline. It has to have the right "smell". I have learned that if we don't do that then, as cruft accumulates, 3am production incidents will be inevitable.

So, do take this to heart: if others did not understand it, it does not matter. You have already benefited from your approach :)


Yeah, I'm not a subscriber to the "YOLO/MVP" school of software development, which basically makes me persona non grata in many tech crowds.

When I write software, I use what I call "Constant Beta." Basically, my software is at a release level of Quality, from the very start. It may be incomplete (thus, unshippable), but what's there, is ready for its closeup (Mr. DeMille).

Basically, before moving to the next feature, I make sure the one I'm working on, is complete. It may require coming back, after other parts of the program are done, but I always make sure that the API is clear, the documentation is done, and things like error handling and localization are in place, as early as possible.

Surprisingly, I work very, very quickly, despite taking so much care. There's a number of reasons, which would require a series of blog posts, but the results speak for themselves.


This sort of approach seems common in the Rust community, it's so much more professional/humane/sustainable/performant than any other corner of the industry that I've come across.


While this is a touching story, the moral lesson from her grandpa fixing the restaurant table deserves some introspection.

I have been in engineering situations where it is tempting to fix the loose table leg. The problem is that unless I go in every month and fix it I might be making things worse. What we need instead is a process that solves the problem permanently.

Moreover, it is likely the sitaution is much worse than it appears on the surface. The loose leg is a symptom of deeper malaise. It is likely the kitchen is dirty as well. The leg might be the canary in the mine. In fact the whole organization might be rotten to the core.

The real solution is to buy out the restaurant, fire the management, institute better processes, and then to create a culture that values the longer-term view.

The other approach is to do nothing. Leave the table wobbly to signal to other patrons to take their business elsewhere. The restaurant is on its last legs as a viable enterprise. Best to let economic forces shut it down quickly and without ceremony. Then it can be replaced by something with more solid foundations and firmer legs.


Did the part about not weaponizing craft just, like, not render in your browser, or something?


This article reminds me of my grandfather as well, who sadly passed away two weeks ago. He was a mechanical engineer, and a real craftsman.

One example we, in our family, like to remember is how he fixed the car during a long vacation trip by his own when the engine suddenly stopped in the middle of the road. He realized the problem and used his constantly at hand pocketknife and a metal can box he found thrown on the sideways to fix the car. The mechanics had hard time to remove the fix in the garage and replace it with an original part!


Sorry for your loss of your beloved grandfather.

Sounds like our grandfathers might have gotten along; mine had much the same spirit and ingenuity you described. Hopefully some of that is passed on to us :)


Sounds like my grandfather of the same era. He wired up bomber control panels during WWII and was apparently quite skilled at it. He was a Jack of all trades, but he was primarily an electrician and a locksmith, though he did all kinds of tinkering in his garage and kept his ancient cars running. I stayed with my grandparents one summer when I was in Jr High. He took me out on electrician jobs where he'd have me fetch tools and wire. On one of them the inspector showed up and my grandpa introduced me to him. The inspector told me "I can always tell when Mel has wired up a panel - it's a work of art."

People from that era had to endure a lot of hardship - the depression, WWII. They often grew up on farms. This gave them a lot of experience with fixing and growing things. All around useful skills that most of us don't have anymore.


The phrase "shade tree mechanic" was invented for people like that.


I've done guerrilla repairs to things, one time I replaced a missing screw on a revolving door, because I knew otherwise it would never happen. I replaced a ton of missing screws in some seats at a laundromat, I can't stand to see things that only need a minute of attention and a dollar worth of parts just accumulating around me in the world. I refactor things without permission, but only small, easy to undo refactors.

I'm stuck at home now, with nothing but spare time, so I've embarked on a massive refactoring project... if it works, it'll be awesome... if not, I'll have learned a few new things about the problem domain. The itch that triggered it is simple...

  "Almost all of the transistors in a computer, at any given instant, are just waiting"


Very nice remembrance of a grandfather. Grandfathers can be silent mentors and role models. Mine certainly was. I miss him very much.


The author's grandpa reminds me of Sam Hamilton from East of Eden, someone who (though fictional, of course) I think about often when I think about the kind of man I'd like to be some day. A couple lines in particular jumped out at me:

> He had a visual vocabulary that amazed me

> do you know what it is like to make your whole life?

These two lines together hint at a kind of connectedness with the world that I sometimes feel (and observe in certain cases) an acute lack of. I see it in myself and in many people I care about, but also in the archetypes generated by the culture/society I'm embedded in. A lot of the time when I talk to people about this particular thing, they assume I'm being nostalgic, but I don't think so. I think we don't realize how many hard (as in "hard science") truths we really learn from casual observations of the wind and the stars and the trees.


A sweet article, thanks.

In trying to make my pizzas round, I realize that there's a craft to it. It can't be all that hard since so many people do it, but I haven't got it yet.

Also, cooking is a craft. That's why a restaurant interview for a cook is often "make me an omelet." There are, indeed, some foods you can make strictly by following the recipe, but others take craft.


I would posit that any food can be made following a recipe. I know, because I am dabbling at it ;) The food will still taste good :)

The craft here is to make it taste special, even for simple recipes like an omelette. That is why the chefs get asked this question.


You'd posit wrong. The craft is getting the texture right. Managing the heat, how much to beat it, when to add salt, etc. Chefs don't get asked the question to find out how good it tastes, and in fact, most of their score can be derived just by watching them.


You could call "craft" understanding and power gained from firsthand experience with a thing.

As opposed to experience with ideas about a thing, models and abstractions and stories and such.

The former is of course infinitely deeper.

The latter, you could make a whole world out of that. And live inside it like a house.


This speaks to me on many levels, thanks for posting.


That was a beautiful read. Well said.


The author doesn't use words like "pragmatic", which embody this essay a lot more than "craft", IMO.

Craft to me implies design, which this essay doesn't touch on much.


It does, a little bit. E.g.:

> He would point out risky work, bad decision making in the form of shoddy materials or shifting angles. He was offended by the trace measures left in the world that signified short-term planning.

But I definitely agree that the essay has a lot less to do with craft than you might think at first.


I disagree, to me, craft implies an investment in making something that exists better or something new the best you can make it.

It's an investment in saying that the quality matters as much as the function, and in many cases the quality improves the function.


who did her website? a more glorious, beautiful light-filled site I haven't seen.


Computers speed up craftpersonship, so it doesn't feel like craftpersonship, but really if you slow it down, it has elements of craft. Software is often rushed out the door at breakneck speed these days so it seems shoddily made and rushed, but then it works, has few bugs, and doesn't suffer from technical debt. I think this is miraculous and shouldn't be taken for granted.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: