今日推荐英文原文：《I Write Software. What am I?》
今日推荐英文原文：《I Write Software. What am I?》作者：Nick Hodges
I Write Software. What am I?
Computer scientist or software engineer just don’t seem to fitI write software, but I’m not sure what to call myself. It’s kind of weird. Am I a programmer? A developer? A coder? I guess I all three of those things — but as a group, we seem to reach for something more when labeling our profession.
Some say that I’m a computer scientist. To be a scientist, one has to follow the scientific method. To gain any credibility at all as a scientist, one usually needs to be associated with a scientific institution and publish scientific papers.
When I create a software program, I don’t do science. I don’t follow the scientific method. I don’t form a hypothesis and I don’t do research and collect data. I don’t conduct experiments and I don’t draw conclusions.
Therefore, I’m not a computer “scientist.”
Some say that I’m a software engineer. But when I create a software program, I don’t “design, build, or maintain engines, machines, or public works.” (If you want to try to argue that I do those things, follow the links to all the definitions. You won’t find anything resembling software therein.) To be an engineer, one has to go to school and be officially licensed. One has to design tangible things.
So I’m not a software “engineer.”
I don’t do any of those things. And frankly, I don’t like being pigeon-holed into those roles. I don’t want to claim to be an engineer when I’m not. I have too much respect for real engineers. And I don’t like being called a computer scientist because what I do daily is entirely different than science.
Some software developers do go to school to learn to code. Those programs are often called “Computer Science” or “Software Engineering.” I often wonder how those terms came to be. Perhaps it was done to lend a certain cachet to the profession, coming from some misguided belief that the profession needed more gravitas than it was thought to have.
And on top of all that, what they teach in “computer science” classes is a far cry from what I actually do. Computer science classes spend a lot of time teaching theory, algorithms and the like. They don’t teach how to write a good bug report, how to perform a decent code review, or how to follow proper branching techniques in source control. Much of what I do every day is not taught in computer science courses.
So what am I, then?
Well, let me tell you a story. When I was a young man, a group of folks from my church went to a run-down part of town to help a young pastor restore an old church. We weren’t skilled, but we could handle the basics. We put up new dry-wall and cleaned up the lovely hardwood floors and the beautiful but old pews. We painted the walls and finally, near the end, one of our group hung a new pair of front doors on the church.
He was one of the guys that we looked to for leadership throughout the day. He was a professional home builder and a skilled carpenter. As the rest of us wound down our work and he began to hang the front doors, it soon became apparent that while getting this right was quite tricky, he was up to the task. More than up to the task. He was hanging the doors with such skill and expertise that we all ended up stopping what we were doing and watching him work. It was a joy and a pleasure to observe such a master craftsman at work.
And it occurs to me that this is what I am — a craftsman.
‘Craftsperson’ is defined as “someone skilled in a particular craft.” A ‘craft’ is defined as “an activity involving skill in making things by hand.” Not to put too fine of a point on it, but I do make programs with my hands — I’m typing right now, for instance.
The term craftsperson also implies creating works of art. What is art? It’s “the expression or application of human creative skill and imagination.” The fourth definition also applies — “a skill at doing a specified thing, typically one acquired through practice.”
So, craftsperson seems to be the closest word that defines what it is I do.
In addition, you can become a skilled and admired software craftsperson without having ever gone to college or even graduating high school for that matter. Many craftspeople do apprenticeships or attend a trade school, but there is no requirement to do so. Glassblowers don’t, as far as I know, require a license to create beautiful works of art.
Similarly, you don’t need anyone’s permission to write a world-renowned software project. Anders Hejlsberg wrote Turbo Pascal at age 19 without any official accreditation. He just did it. Anyone can.
There’s no shame in being a craftsman — quite the opposite. We all admire the capabilities of, say, a carpenter that uses their practiced skills to build beautiful furniture or cabinets. I certainly admired my friend who hung that church door with such mastery, creating great beauty with amazing expertise.
And isn’t that what we software craftspeople do?