simont: A picture of me in 2016 (Default)
simont ([personal profile] simont) wrote2006-07-07 05:47 pm

Verbiage

A couple of months back I posted a couple of long and serious musings about what programming is all about and how you learn to do it. Today I'd like to talk about a more frivolous topic, which is what verb you should use for it.

Among actual programmers, the nearly universal usage is that what you do to bring a program into existence is to write it. There are a bunch of other verbs you might use if you want to emphasise particular ways of doing it (‘hack together’ or ‘hack up’ if you did it messily or in a hurry, ‘grow’ versus ‘build’ to indicate something about the development methodology, and so on), but if you're not saying anything in particular about the way you did it, you talk about writing a program. You might have ‘coded it’ or ‘coded it up’ in a pinch, but I think in general you wouldn't have ‘programmed’ it, because when ‘program’ is used as a transitive verb its object is the thing you're instructing, not the things you're instructing it to do. You program a computer, or a VCR.

It's always faintly bugged me that not everybody knows this; non-programmers will occasionally use startling other verbs such as ‘making’ a program, or perhaps ‘creating’, or (as I heard today) ‘manufacturing’ one. This used to really annoy me when I was an arrogant teenager; but since then I've been gradually becoming more tolerant of this terminology, because it seems to me that it's just reflecting a difference of viewpoint between the programmer and the user. A programmer knows in their bones that what they actually do to bring a program into existence is to type in a large amount of text, hence ‘write’; but a computer-illiterate user just knows that they receive a consumer product ready-made from someone, and doesn't particularly want to have to distinguish it from any other consumer product, so they naturally use the same verbs they'd use for a physical object. So although this usage still jars me and grates against my intuitive sense of the appropriate terminology, I tolerate it on the grounds that there's nothing actually wrong with it.

(Also, I might do more than tolerate ‘make’ in some circumstances; a modern big-budget game, for example, probably involves at least as much graphic design and music recording and voice acting and 3D modelling and scriptwriting and other non-coding activities as it does actual programming, so I might plausibly feel that the correct term for the creation of the game as a whole was not in fact ‘write’. Given that, ‘make’ would probably be as good as anything.)

The verb I occasionally hear and can't justify on those grounds is inventing a program; this one is definitely inaccurate. ‘Invent’ describes the process of coming up with an idea, of working out a good way to do something. Many programs require no particular invention at all, and even when one does, you don't really invent the program, you invent an algorithm or a design or a structure or a game concept or some other high-level abstract idea which ends up embodied in your program but might also be embodied in somebody else's. Also, the process of invention only covers the formation of the idea: invention leaves you knowing how to do something, but having invented it you still have to actually do it, and that's where ‘write’ comes in.

This has been a public service announcement on behalf of Programmers for Linguistic Pedantry. Thank you for your attention.

Addendum: Whoops, I left out ‘develop’, which is another entirely acceptable term used by the people in the know. It's a particularly appropriate term when the program in question is especially large, and/or the product of a big team rather than one or a few individuals, and/or was substantially put together from existing parts so that it wasn't literally written afresh for the purpose, and/or took a particularly large number of trial and error cycles to get to its eventual state :-)

[identity profile] xach.livejournal.com 2006-07-07 04:55 pm (UTC)(link)
This reminds me of how Paul Graham gratingly claims that Lisp was not invented, created, designed, or written: it was discovered by John McCarthy.

[identity profile] deliberateblank.livejournal.com 2006-07-07 05:45 pm (UTC)(link)
Discovered works. Sort of like the way your toe might discover a table leg. You certainly wouldn't want to admit to have produced Lisp yourself.

(For your next rant, Simon, how about a piece on the phrase "source codes"?)

[identity profile] mooism.livejournal.com 2006-07-07 05:18 pm (UTC)(link)
See also this post I saw elsewhere today (http://www.artima.com/forums/flat.jsp?forum=106&thread=167501). It has a nice analogy.

[identity profile] deliberateblank.livejournal.com 2006-07-07 05:46 pm (UTC)(link)
Dunno. The bit where he shows himself to be a python junkie jumped out at me and I sort of glazed over.

[identity profile] tackline.livejournal.com 2006-07-07 06:04 pm (UTC)(link)
How about author? I don't particular care for it on aesthetic grounds. It does however cover most of your average modern big-budget game, although there will be a degree of performance in there too (motion capture, speech, etc).

[identity profile] timotab.livejournal.com 2006-07-08 02:35 pm (UTC)(link)
Not in America, where they verb nouns :)
(though as Calvin (of Calvin and Hobbes) says "Verbing weirds words")

As it's a pedantry post, I'll correct your quote :)

[identity profile] dennyd.livejournal.com 2006-07-09 12:25 pm (UTC)(link)
"Verbing weirds language"

(sorry) :)

Re: As it's a pedantry post, I'll correct your quote :)

[identity profile] timotab.livejournal.com 2006-07-09 02:40 pm (UTC)(link)
don't apologise. I was tired and sick. And the correct quote makes much more sense :)

[identity profile] senji.livejournal.com 2006-07-10 09:01 pm (UTC)(link)
http://songster.livejournal.com/76643.html?nc=5&style=mine

[identity profile] uisgebeatha.livejournal.com 2006-07-07 06:13 pm (UTC)(link)
Um, well generally-speaking I say I write a program. I would use 'code' and 'program' if I was talking about skills I have, like 'I code in PHP' or 'I program in Java'. Part of the arts student in me likes the idea of 'creating' a program, but it sounds so naff I wouldn't ever utter it. :P
gerald_duck: (frontal)

[personal profile] gerald_duck 2006-07-07 07:12 pm (UTC)(link)
To call the process of turning an empty directory into a bunch of working code "manufacturing" is objectionable, misleading and probably also insulting; it confuses the writing of the software with the putting of CDs in glossy shrinkwrapped boxes, in the process implying that the code gets written by some mass-production process, with no creative or inventive step.

For a complex product containing code and other resources, such as your video-game example, I suggest "design". "Make" and "create" are OK, but fail to distinguish between design and manufacture, thereby creating unnecessary ambiguity.

[identity profile] vyvyan.livejournal.com 2006-07-07 07:45 pm (UTC)(link)
You seem to have a very negative notion of manufacturing as a concept. My notion of the word is influenced by the time I spent working at a materials testing company, where the Manufacturing Department involved a good deal of precision hand-crafting of components: highly-skilled non-mass-production work - only a minority of the department's employees were involved in packaging the product.

(This is not to say that I would use the word "manufacture" for writing programs, but that's more because manufacture implies production of physical entities to me, than because I find the word insulting.)
gerald_duck: (babel)

[personal profile] gerald_duck 2006-07-07 08:01 pm (UTC)(link)
I did say "probably" insulting. Normally, when people talk about manufacturing, they're thinking of a huge production line and semi-skilled labour.

I know work that's much more skilled gets counted as manufacturing, but it's a minority, and if I were doing work like that I'd say I "crafted" things rather than "manufactured" them, to make sure people realised this. (-8

Also, ironically, "hand-made" and "manufactured" seem to be very nearly antonyms now.

[identity profile] shadowphiar.livejournal.com 2006-07-07 07:20 pm (UTC)(link)
I don't think I see anything wrong with "create", particularly if the implementation is brand new.

[identity profile] feanelwa.livejournal.com 2006-07-07 08:08 pm (UTC)(link)
Oops, I say 'make'. I think this is because whenever I get stuck I draw little pictures until I figure out how to do what I mean, and because I keep pinching bits from my colleagues' programs.

[identity profile] pseudomonas.livejournal.com 2006-07-07 09:41 pm (UTC)(link)
I think I'd use "develop" for more formal contexts, and "build" for quite a lot of the others. My instinct is that "write" goes more closely with "a program" but "build" goes better with any more functional definition like "a tool", "a toy", "a browser", or whatever.

[identity profile] dennyd.livejournal.com 2006-07-09 12:31 pm (UTC)(link)
I tend to use 'coding' as the current tense because it's the shortest non-ambiguous word/phrase (I think). Possibly this is because I'm only likely to be talking to another coder (or friends of coders who have absorbed the terminology) when discussing it. I think I use write/wrote the rest of the time.