I was thinking about how programming has become plumbing when I was under our crawlspace last week replacing a rusted out galvanized pipe with ABS plastic.

When we bought the house, the inspection said that there was an "undetermined" leak somewhere. There had been kind of a rotten egg smell the last few weeks (hydrogen sulfide) so I decided to crawl underneath and take a look. The pipe from our kitchen sink had what looked like stalactites hanging from it, so I took a wire brush to one and when we tried running the water, a six inch wide waterfall cascaded down. So first I bought a bunch of PVC at the hardware store, then realized I needed a special Y connector with a nut on the end that plumbers use to snake bad clogs (that isn’t made for PVC). So went back, returned it all for ABS, and then spent about 4 hours cutting the galvanized pipe ends with a dremel and using a special shielded rubber junction to connect everything up. It was grueling, exhausting work. I would have threaded the ABS into the old fittings, but they were cast iron and remarkably use a kind of lead paste to merge with the galvanized pipe (besides, cast iron rusts around plastic so it can’t be threaded that way). When I pulled the old pipes out into the yard, one of them had a six foot split running down the length of it. Our kitchen sink and dishwasher had been dumping directly onto the ground for years. We never even knew.

Compare this with programming and the similarities are uncanny. We are dealing with remarkably over engineered systems to, well, move bits of stuff around. Where it once made sense to melt lead around a pipe that was designed to last 50 years, today anyone can glue two ends of plastic together that lasts basically forever. The aging infrastructure of TCP, DNS, Apache, UNIX, etc creates millions of jobs but costs us incalculably by making us think we need a blowtorch when a brush and a little glue does a better job.

I really feel that my passion for understanding the intricacies of programming died the day I learned php and realized that the vast majority of it isn’t necessary. No amount of well structured code or best practices can make up for the humbling truth that if computers were better at doing what we wanted, then programming wouldn’t be necessary. In the 90s, it took me 12 pages of C++ code to create a window in Mac OS and draw “hello, world”, but today I can do it in 12 characters of HTML. I’m not sure I even care anymore what language I’m using - if it takes more than a one liner to accomplish a common task, then I feel the precious moments of my life being drained away. The code is a distraction from the goal I’m trying to accomplish.

Every day, as I thread that next piece of galvanized code into place, knowing full well that it not only WILL fail, but in unpredictable ways at some unknown point in the future, I wonder when and how it will all end. I sometimes think to myself that maybe it needs to end, like maybe I should be focussing more on inventing plastic than plumbing.

Everywhere I look, I see examples of epic failure: AAA game studios spending $10 million dollars on games with graphics bested by ray marching in Demoscene, or Oracle investing millions on database technology that will be supplanted by things like CouchDB, or Intel spending billions on incrementally better chips than can’t hold a candle to even the cheapest video cards or FPGAs. Only it’s not failure, because they are making money. There is so much money in plumbing!