home of bencornia.com

The Soul of Craftsmanship

Published 2025 February 16

Black and white photo of man in overalls, sitting at a table, with a cigarette in hand and a dog on his lap My great-grandfather Les (RIP)

I have been musing on my career transition from welding to programming. Welding was an obvious, well-laid path for me. My dad and grandpa were both welders. My great-grandfather was a blacksmith. When I was 13, I dug into my dad's collection of welding instruction manuals that he used in trade school in the 80s. I pored over them in great detail; even drawing the diagrams in a notebook. I discovered that one of the books had a second volume, found it on eBay and purchased it to complete the set. If welding was a religion then these books were my scripture. I cannot explain the fixation. Probably the oodles of time I had growing up in rural Idaho.

Old technical manuals still evoke nostalgia for me. The homeliness of the printing and plain-spoken writing eschews the pixel-perfect, headiness of the 21st-century, hyper-reality in which we are absorbed. It is a callback to a more authentic time, the roots of which I hope we do not overgrow.

On its face welding and programming1 might feel like disparate fields. Programming involves pulling logical abstractions out of thin air. Welding involves the construction of tangible parts, machinery, and tooling. While the work product is distinct, the soul of craftsmanship is common between them.

There is a great deal of satisfaction in mastering a welding process. Like a gigantic moth, you contort your body against the work-piece, hovering over a bright, blue welding arc. Your entire body is held in perfect stillness, adjusting occasionally, but never disturbing the slightly rhythmic motion of weaving molten metal across a joint. If you are stick welding2, the flux from the welding rod is transferred in the welding process and covers the weld in a dull metallic skin or slag. The slag prevents the weld from oxidizing and weakening as it rapidly cools from a liquid to solid phase. Typically, the slag will easily chip or peel off exposing the shiny, rippled bead below, which is oh-so gratifying. Other welding processes use stable gases like helium or argon to shield the weld from oxidization.

It takes hours of practice to perfect the craft of a single welding process. And that is just a small part of the larger craft of building something correctly. It is one thing to make a perfect weld, it is another to fit up the perfect joint.

While welding was full of compelling challenges, my interests spanned the entire manufacturing lifecycle. The first shop I worked in was loaded with CNC lathes, water jets, lasers, and brake presses. I always had a sense of awe about what we were building. It inspired me to learn to design. Eventually, I skilled up to the point where I was designing the parts in CAD and fabricating them from scratch. This was a real sweet spot for me! The final shop I worked at basically gave me free license to build solutions however I pleased. My career was starting to flourish and I had gained a significant level of mastery that instilled a lot of confidence in me. Sometimes I wish I had stayed. Alas, I felt drawn to programming and it was a scratch too good not to itch.

Learning to program is both wildly confusing and satisfying. The software industry is immense. It is also quite young. Many of the forebearers of computer science are still living3. We have not had a 1000 years to let the foundations settle. There is a constant stream of information bursting through our devices with new jargon and ideas. As a novice, this is bewildering and energizing. It is a new world that you never knew existed.

You have to learn a new lexicon. Take for example, the word string 4. It took me a while to understand that a string was the characters between quotes not something you tie around your wrist. It also took me some time to conceptualize what a programming language was, where it existed, and how it executed my program. I remember thinking, 'Where does Python come from'? Or the fact that there was a difference between JavaScript that ran in my browser and node. Programming is ethereal. It was difficult for me to overcome my literal reading of its abstract ideas. Gradually, I increased in my speed to solve problems as they arose, in large part, due to the massive online community of friendly developers5 who make the path a little more obvious to the newbies following in their tread.

Programming was the first skill where I actually had to learn how to learn. It was not simply enough to sit down and bash out code. I had to coax myself through dark tunnels of doubt and misgivings. Code execution is not obvious to a beginner. When you pick up a stick in programming sometimes the other end does not move. In other words, programming is non-linear. The effect of changes in your program may not be distinct or fully realized until much later. For me this applied to learning about programming as well. I would push and push against a problem or idea and then after a while it would suddenly materialize as if I had always known the solution.

As I have ventured into the world of software development, I find myself split between understanding the theory and the practical just-get-it-done camp. It is tempting to eternally bikeshed6 on coding conventions and design patterns when simply solving the problem would be faster. I have paid the price for doing both! There are no easy answers in programming and that is exactly why I love it. As an analog, good welders know how to lay a perfect bead and the best welders know why.

Craftsmanship is not just about the end product. The tools you use take on a character of their own and become partners in the building process. They have been through generations of refinement to accomplish a singular purpose. In a welding environment these take shape as hammers, clamps, and grinders. In programming, it might be tools like vim, bash, and curl7. Tools, virtual or real, are the primitives of craftsmanship. I think that is why I love watching people who build tools. It is a form of meta-craftsmanship that makes me starry-eyed about what I could potentially build.

One thing that I find common between welding and programming is the abundance of material. As a welder, there is always scrap steel that can be used for building or upgrading tools. There are myriad ways that scrap metal may be repurposed. Various gauges of sheet metal can be used as shims and spacers. Square stock can be worked into a lever to align two mating surfaces. My favorites were the egregiously heavy hammers with welded steel handles (wooden handles have a relatively short lifetime). This ad hoc tool building can also be found in programming, especially in a UNIX-like environment. There are thousands of utilities8 written for accomplishing any task you can think of.

For example, let's say that you need a list of every single day in the current year. You could use the date command in a bash for-loop:

curr_year=$(date '+%Y')
next_year=$((curr_year + 1))
day=$(date '+%Y-01-01')
while ((curr_year < next_year)); do
    echo "$day"
    day=$(date -d "$day +1 day" +'%Y-%m-%d')
    curr_year=$(date -d "$day" +'%Y')
done

Or you might use a recursive cte9 using the sqlite3 command!

sqlite3 <<EOF
with recursive curr_year(day, end) as (
    select  date('now', 'start of year'),
            date('now', '+1 year', 'start of year', '-1 day')
    union all
    select  date(day, '+1 day'), end
    from    curr_year
    where   day < end
)
select day from curr_year;
EOF

Sometimes, the tools are not polished themselves but they still get the job done! Problems arise that you could never plan for so you use the raw materials available to you. They can be recombinated in a million ways just as the mother of invention necessitated!

Another class of tools in welding are fixtures or jigs. They allow you to repeatedly and reliably create the same part. I contracted at a job for a couple weeks where I had to weld together 100 chairs every day. That is not something you want to attempt without a fixture. In programming, if I find that I am repeating a process more than 3 times or performing a lot of manual testing then there is probably some "code fixture" or test that I could build to save some heartache.

My journey from welding to programming was a leap between two worlds. Though the milieu has changed, the craftsmanship has not. I feel the same sense of pride building a web page as I did a conveyor. It is the legacy I hope to leave to my children, in the same way my predecessors gave it to me. I build because it brings me joy.

Craftsmanship is a symbiotic relationship between craftsman and artifact. The artifact would not exist without the craftsman and the craftsman leaves something of himself behind in the artifact. The investiture of time and craft is what gives value to the artifact which will often long outlive the existence of its creator. In the ruins of time, I wonder if people will look back at AI generated artifacts with the same awe and wonder as they do the architecture of Ancient Rome. I believe the lasting impact of AI is not what it creates but what it enables humans to build. If we let AI replace our ability to innovate and create then we will be mired in an everlasting uncanny valley10. But if we treat it as a tool to enhance and challenge our problem-solving ability then craftsmanship wins. Perhaps I am wrong. Maybe craftsmanship will lose its primacy to the ease and convenience of AI. I suspect it won't.

Footnotes #


  1. I use these terms in a slightly overloaded sense. Welding is a diverse field and is part of the larger field of fabrication. Throughout my career, I did a little bit of everything in fabrication, though welding was typically the unifying skill. So when I refer to welding, I really mean fabrication but welding provides better imagery. Similarly, programming doesn't fully describe all of software engineering or computer science but works for my purposes. ↩︎

  2. Shielded metal arc welding) is the technical term. This is the type of welding that my dad taught me. My dad loves to over-engineer things. We built a set of ridiculously heavy duty bunk beds, of which he likes to quip, "Bed frames that you can rebuild your truck on!". ↩︎

  3. Or within a generation or two of Alan Turing, Grace Hopper, John von Neumann, et. al. ↩︎

  4. String is still kind of a funny name. Other data types that perplexed me were "double", "float", "enum", and "varchar" among others. I did not quite understand type systems at the time and just read them as weird words I had to place in front of my variable names. Glad I got it sorted out in the end. I think I was just reading things too literally. ↩︎

  5. I don't think I will ever fully capture the entire list of resources that carried me through the learning process. Some of them include:

    • Eloquent JavaScript by Marijn Haverbeke. Not only did I learn how to write JavaScript but to program in general.
    • The C Programming Language by Brian Kernighan and Dennis Ritchie. I am a huge a fan of anything Bell Labs and friends but this book was outstanding.
    • The Linux Command Line by William Shotts. The command line was always a source of pain for me until I read this and it cleared up the symptoms.
     ↩︎
  6. Also known as the Law of triviality. I do think things like formatting are important but I prefer if the language makes the decision for me. Tools like gofmt remove the decision completely. ↩︎

  7. I am planning on writing a separate post on the many command line tools that make up the fabric of the shell environment. Vim is personally one of my favorites. It unlocked text editing for me. I can't write anything more than 100 words without it. It's not my primary editor but lives in spirit as a plugin for my Intellij Editor. ↩︎

  8. For reference, Debian 12 has over 64,000 packages! ↩︎

  9. Common Table Expressions are damn nice. As a note of a note, when I am feeling discouraged about programming, I read the SQLite docs for a power up. They read like a kind friend who has knack for distilling complex topics without dumbing them down. ↩︎

  10. I was listening to a podcast recently and discovered it had AI hosts. Something felt a little off about the discussion and there were slight distortions in their voices. Definitely an unnerving experience! I am not against the idea of having AI teach me concepts as long as I know that is what is happening. ↩︎