My father is a builder, a tinkerer, an architect and an artist. He’s extremely mathematically inclined and thoughtful. He’s also got a lot to do with why I do what I do. Growing up we built, tore apart and fixed more things than I can remember; cars, boats, houses, forts and toys. From an early age it was clear, to me, that my dad loved building stuff with his hands. To this day he’s most at ease working in his shop building furniture out of wood or working on his classic speed boat. And, when he’s done with a piece, you can tell it was built by a consummate craftsman who loves what he does. I like to think that I’ve followed in his footsteps – only I build virtual things with my fingers.
This small story brings me to a recent Twitter thread started by the consummate PHP craftswoman, Sara Golemon, where she ranted (she often rants – with good reason), “Jesus Fucking Christ. Why don’t mother fucking developers go out and buy a mother fucking clue??? Take some GOD DAMNED PRIDE!” My reply to this was, “Sadly, many developers consider coding a “job” rather than a “craft”. There’s a significant difference between the two.” This was quickly followed by Helgi Þormar Þorbjörnsson saying that craftmanship requires knowledge, attention to detail, perfection, etc. My reply to this, and I think this is what my dad really passed on to me, was, “Above all, craftsmanship requires a true love and passion for what you’re creating. You naturally acquire the rest along the way.”
My point is that, like it or not, people go into computer programming for lots of reasons; money, interest in computers, high demand in the job market, etc. In other words, and what’s so frustrating to coders like Sara and myself, not everyone who codes is passionate about coding. These are the people who copy and paste code. These are the people who don’t tinker or hack on side projects. These are the people who are afraid to learn or refuse to learn the Next New Thing. So how do you fix people who build their code like an Ikea bookshelf rather than a finely hand crafted M.L. Stump original?
- Build easy to use, domain specific, concise frameworks for your coders. It doesn’t have to be Django or Ruby on Rails or Cake. Just something that removes their ability to mess up the basics.
- Create and enforce strict coding and documentation standards. Remove their ability to go rogue and write ugly looking, poorly documented code.
- Implement code reviews and ensure a true craftsman is in the room when they occur. In other words, shame them into writing decent code.
- Require unit tests. This reduces the likelihood that their lack of passion will break your code in the future.
As the truly passionate craftsmen and craftswomen of our trade, it’s our duty to ensure our code is well written, well documented, works properly and is fun to both read and write. If you aren’t interested in doing such things I’d appreciate if you found work in another trade so as not to tarnish the craft I love so dearly.
I agree with the rant 100%. We’ve all seen some really crappy code and, unfortunately – given its low barrier to entry, there’s a ton of bad PHP out there.
However I gotta disagree with your proposed “fixes”. Unit tests, standards and docs may help mitigate the “damage” but in the end I’d venture to bet that these tasks would seem like red tapes & hoops to the type of person you described… probably would make matters worse.
I disagree. I think the “red tape” and “hoops” is another way of saying, “Why use hardwood backing on that bookshelf when I can use waxed cardboard?” You can force people to do things correctly. If they hate it that much they can choose not to work with me, Sara, Helgi, you, etc.
This is how I feel everyday at my job. I feel like I am constantly having to pick up after other people’s coding messes. I find that I am one of maybe 2-3 developers at my company that actually have a computer science or equivalent degree. Most of our developers have telecom or some other non-technical degree and they more/less fell into the position of web development because of whatever reason in their career. Very few, including myself, find so much passion in programming that we tinker and constantly strive to learn more outside the confines of our daily work. The biggest problem that I have found is that though I have been advocating more thought be put into the quality and documentation of code, that I am unable to influence enough the decisions rendered by our IT and upper level managers. It’s been a lost cause no matter what strong evidence I and others have brought to the table.