Long ago, I concluded that software is in fact, among art, science, and engineering, closest to art. But I had never really considered software as craft. The Manifesto for Software Craftsmanship has rekindled a debate on software as craft. That may yet be the best classification of our trade, but I’m sure it won’t be the last.
Let’s Start From The Beginning
Let’s back up a minute. What is software? Is it art? Science? Engineering? Craft? When in doubt, the dictionary is a good place to start.
engineering -noun the art or science of making practical application of the knowledge of pure sciences, as physics or chemistry, as in the construction of engines, bridges, buildings, mines, ships, and chemical plants.
Software has never felt much like engineering to me, maybe because there’s no calculus involved (usually). There are of course parallels in resource trade-offs, input/output, etc. But to me there is something inherently different between building a bridge, or even a stereo, and writing a program.
Software development is still more a craft than an engineering discipline. This is primarily because of a lack of rigor in the critical processes of validating and improving a design.
According to Reeves, if we adjust our definition of things slightly, and see that coding is really equivalent to the design that takes place before engineering, it can start to look like other engineering disciplines. But tools (i.e. languages) and coding and testing processes need to evolve much more before that becomes true.
art -noun the quality, production, expression, or realm, according to aesthetic principles, of what is beautiful, appealing, or of more than ordinary significance.
Software, which is so technical, as art has always appealed in an esoteric sort of way. They say that artists will destroy the first 100 pieces that they do. In the same way, many programmers fight the urge to rewrite something they’ve written, almost immediately after it’s completed. I know I do. But fundamentally speaking, the problem with this analog is that while art can exist for art’s sake, software is usually more practical. That is, even if I write something for fun, I still want it to at least do something.
science -noun a branch of knowledge or study dealing with a body of facts or truths systematically arranged and showing the operation of general laws.
If I’m not convinced of software as an applied science like engineering, I don’t see how software as science can be so. In that sense, it falls to the same problem as art: science may exists for science’s sake – to discover new knowledge – but for software, at the end of the day, there always seems to be a customer waiting.
craft -noun an art, trade, or occupation requiring special skill, esp. manual skill.
Oh, but I like this one. It allows us to impose the special skills that is the craft. It leaves room for the creativity that is so essential for success – and rewarding. It speaks to the practical requirements that usually pay the bills at the end of the day and (hopefully) make life easier for someone.
If we consider software as craft, we cannot avoid talking about masters and apprentices. People often forget that there are apprentices around today. It used to be that if you wanted to become an electrician, plumber, or home inspector, you must have first trained as an apprentice. Only after many (usually unpaid) months of apprenticeship under a master could you get a license to work. These days, there are ways around that requirements, and apprenticeship is often found only in union crews. (And in unions it seems that politics has overtaken the original goal: to further the craft.) But I digress.
The main problem with this is the reason there is a market for this type of qualifying: it is the law. You technically cannot pull a permit on a home’s electrical (except your own) unless you are licensed. You cannot get your license until you apprentice or take a test. So would it be better or worse if there was a law requiring all software developers to get licensed before practicing their craft? I’m certain quality would go up. But the profession suddenly becomes less accessible.
A Rose By Any Other Name…
While we’re on the subject, what do software professionals like to be called? Software engineers? Developers? Programmers? Artisans? Architects? I hate using the title “software engineer” (see above). Besides, “software artisan” is closer, but does not sound any less pretentious. Personally, I prefer “developer” if I’m in the company of those who know what that means, and for everyone else, “programmer” will do.
I am reminded of “The human programmer” that compares programmers’ quest for a title to musicians’ and writers’.
Maybe programmers are just like the 1950s musicians that lacked … confidence, snatching desperately for public nobility. Thus far our attempts at title theft have been less successful than theirs, though not for lack of trying (e.g. software developer / architect / engineer). Like musicians, our work requires not only talent but years of practice, and we see ourselves as “different.” The average person cannot walk up to a piano, or a computer keyboard, and produce anything of value. Writers? Throw them in here too, certainly. Are reporters not a little too serious about being called “journalists”? Of course, this line of thought would annoy both of those professions, them being old, established, and respected compared to programming.
Of course, none of this really matters. We still go about our jobs every day doing what we do and enjoying it. But we forget sometimes that software as a profession is only decades old! Compared to other professions in art, science, or engineering, software is in its infancy! Someday I think a classification will be agreed upon. In the meantime, I’ll throw one more definition out there.
alchemy -noun any magical power or process of transmuting a common substance, usually of little value, into a substance of great value.
I like the idea of turning nothing but keystrokes and time into something of great value to someone. Software alchemist. I’m ordering new business cards.
I have been thinking lately that the longer I am in this business, the more I am amazed that any software anywhere runs successfully at all. Every scenario has to be accounted for. Every detail has to be precise. There are so many opportunities for error, from translating requirements, to miscommunications, to un-anticipated inputs, to simply flaws in logic and typos. Not to mention the equally complex task of maintaining the necessary system, storage, and networking environment for the program to run within.
In Code Complete, Steve McConnell talks about this foolhardy profession.
Nobody is really smart enough to program computers. Fully understanding an average program requires an almost limitless capacity to absorb details and an equal capacity to comprehend them all at the same time. The way you focus your intelligence is more important than how much intelligence you have.
At the 1972 Turing Award lecture, Edsger Dijkstra delivered a paper titled "The Humble Programmer." He argued that most of programming is an attempt to compensate for the strictly limited size of our skulls. The people who are best at programming are the people who realize how small their brains are. They are humble. The people who are the worst at programming are the people who refuse to accept the fact that their brains aren’t equal to the task.
The purpose of many good programming practices is to reduce the load on your gray cells. You might think that the high road would be to develop better mental abilities so you wouldn’t need these programming crutches. You might think that a programmer who uses mental crutches is taking the low road. Empirically, however, it’s been shown that humble programmers who compensate for their fallibilities write code that’s easier for themselves and others to understand and that has fewer errors.
Speaking of Dijkstra, he knew this already in 1968. In "The Structure of the T-H-E Multiprogramming System," wherein he describes the design of one of the first multitasking systems, he gives props to his students:
"The other remark is that the members of the group have previously enjoyed as good students a university training of five to eight years and are of Master’s or Ph.D. level. I mention this explicitly because at least in my country the intellectual level needed for system design is in general grossly underestimated. I am convinced more than ever that this type of work is very difficult, and that every effort to do it with other than the best people is doomed to either failure or moderate success at enormous expense."
Silicon Valley is inexplicable, a phenomenon unto itself. You can start an internet company anywhere, but your experience starting one in the Valley will be remarkably different from starting one elsewhere. The Valley’s perfect blend of support (funding, legal, media coverage, and social) plus an inexhaustible talent pool makes it hard to replicate. But what is it about the Valley that makes it so special?
Paul Graham wrote an article a while ago about how to be Silicon Valley. He claimed that the two main requirements to duplicate the Valley are nerds and rich people. So, Pittsburgh has lots of nerds, but no rich people. Hence you don’t hear about the next Google coming from the Steel City. The same applies to Miami, which has lots of rich people (and professional athletes), but no nerds. In considering things like personality, creativity, and youthfulness of a city, I like the following passage:
…Most good startup ideas seem a little crazy; if they were obviously good ideas, someone would have done them already.
That’s the connection between technology and liberalism. Without exception the high-tech cities in the US are also the most liberal. But it’s not because liberals are smarter that this is so. It’s because liberal cities tolerate odd ideas, and smart people by definition have odd ideas.
Conversely, a town that gets praised for being “solid” or representing “traditional values” may be a fine place to live, but it’s never going to succeed as a startup hub.
Being “a fine place to live” describes Cincinnati to a tee. If our company is successful, it will have been in the face of the extraordinary limitations of where it started. I love this town, but this is no place to start an growth internet startup. Advertising or manufacturing, maybe. One of the reasons I joined was the idea of being a part of maybe the first real consumer internet success in this city. But I digress.
This article in the NY Times, “Seattle Taps Its Inner Silicon Valley,” talked about how Seattle is becoming the next Silicon Valley. The article rightly found Seattle following in Silicon Valley’s footsteps, with its influx of venture capital and transformation from timber and aerospace to internet, based around U-Dub and of course Microsoft and Amazon:
“A start-up ecosystem needs social networks, support businesses and a business culture that views failure as a badge of honor, not shame. All of that is in place in Seattle.”
That article generated a small firestorm of opinion. Glenn Kelman, Seattle resident and CEO of Redfin.com, took issue with the comparison in his blog “How Green Was My Valley.” Kelman’s pointed out why Seattle is indubitably not Silicon Valley, and never will be, thankfully.
“My first roommate spent four years building a company in San Francisco without ever buying furniture. When his startup went bust, he packed for the trip home to Toronto the same day. Seattle is different. People live in Seattle because they love Seattle.”
Michael Arrington of Techcrunch, and defender of all things Silicon Valley, reacted with “An Outsider’s Flawed View Of Silicon Valley,” a post defending the region from the Kelman’s blog. Arrington eloquently, if not arrogantly, proclaimed Silicon Valley as the supreme center of all things internet entrepreneurship, and anyone claiming that it’s better to start a tech company anywhere else is delusional. I wouldn’t disagree, I guess (emphasis his):
“But the best of the best come to Silicon Valley to see if they’re as good as the legends that came before them. It’s a competitive advantage to be here. And if you aren’t willing to take advantage of every possible advantage to make your crazy startup idea work, perhaps you shouldn’t be an entrepreneur… Making lifestyle choices is fine, but don’t delude yourself into thinking those choices are anything but a tradeoff. If staring at lakes and skiing after work are important to you, don’t pretend to be surprised when your startup doesn’t cut it.”
Doing what I do, where I do, certainly comes with a cost. But the benefit is that I don’t abruptly move my family to California (oh to be 22 again). Whether the cost or benefit was the bigger factor remains to be seen.
Welcome coders to my little technology presence on the net. Lately, I have been feeling like less of a professional because I could not give an appropriate online tech presence to those who’ve asked, other than my Twitter account.
So straylightrun.net was born. The domain pays homage to the original cyberpunk novel, and one of the best SF novels of all time: Neuromancer, by William Gibson. Unfortunately, straylightrun.com was already taken by some band. Must be a cool band.
Thanks for reading!