04 October 2012

"Writes large correct programs"

A couple of weeks ago I went to an event UMD's b-school organized for students who are interested in consulting. The first session was dedicated to listening to advice from UMD alumni who are current consultants, and one of the common recommendations was to work on your "soft skills."

A couple of people on the panel were discussing this and I was entirely onboard. That is I was onboard  until one of them said "You can always learn technical skills later. There will always be time for you to learn to program later on in your career."

This guy went from making perfect sense to off-the-res crazy in two sentences.

I was the only CS student in the auditorium, and AFAIK the only STEM student of any kind. I've been coding for sixteen (plus?) years, and I'd still only rate myself as "pretty good." This guy must have a very, very different definition of "learn to program" than I do if he can dismissively assert that there will always be time to learn such a difficult mental skill set later.

Enter John D Cook:
The conversation turned to what it means to say someone can program. My proposed definition was someone who could write large programs that have a high probability of being correct. [...]

People who are not professional programmers often don’t realize how the difficulty of writing software increases with size. Many people who wrote 100-line programs in college imagine that they could write 1,000-line programs if they worked at it 10 times longer. Or even worse, they imagine they could write 10,000-line programs if they worked 100 times longer. It doesn’t work that way. Most people who can write a 100-line program could never finish a 10,000-line program no matter how long they worked on it. They would simply drown in complexity. [...]

If you ask an amateur whether their program is correct, they are likely to be offended. They’ll tell you that of course it’s correct because they were careful when they wrote it. If you ask a professional the same question, they may tell you that their program probably has bugs, but then go on to tell you how they’ve tested it and what logging facilities are in place to help debug errors when they show up later.
Maybe that consultant's advice was okay. Maybe what he meant by "you can always learn to program later" is actually "you can always learn to write buggy 100-line programs that are just good enough later." And maybe buggy 100-line programs that are just good enough are, in fact, just good enough for what he needs to do. But do NOT tell me that any business major can simply "learn to program" later in their career unless you're explicit about having such a perverse view of what "learn to program" means.

1 comment:

  1. Programming to a guy like that is likely just stuff like database queries. If you're really good at that you can generate your TPS reports automatically on Monday morning.