Sunday, January 18, 2009

I'm a Software Engineer and I'm OK

I would dress in women's clothing and hang around in bars, but most bars are too noisy and charge too much damn money for drinks these days. It's much cheaper and enjoyable to drink at home...

Apparently some arbitrary organization has compiled a ranking of the best 200 jobs, and Software Engineer is ranked 5th. Honestly, I'm surprised that we beat out Philosopher, which was ranked 12th. I can't imagine that Software Engineer beats out Philosopher on any of their criteria (stress, work environment, physical demands, income and outlook), except maybe pay (and possibly not even that, since most professional philosophers are probably university professors). I do tend to agree with Mathematician as best job, though, given their criteria. Provided dealing with such abstract concepts doesn't drive you mad, I imagine it's a very low-stress job.

I do disagree with this organization's attempts to make what I consider the artificial distinction between Software Engineer and Computer Programmer. I've never heard what I consider a good explanation of the difference between the two. I understand the distinction is supposed to be similar to the distinction between an Engineer and an Assembler or Technician. But it's not really a distinction that works in software. In other engineering disciplines the distinction is obvious: the engineer figures out a fixed set of steps that the technician follows, or the technician repairs a system using components specified by the engineer so that the system meets a behavior specified by the engineer. In either case the technician's not making any design changes. Any programmer's going to have more control over system behavior than is given to a technician. On some level the programmer's always going to be creating something new with functionality equal to or better than (by some metric) the current specified system behavior. Designing something to meet a specified behavior; is that not an engineering task?

Of course I'm willing to be wrong if someone has an alternate distinction between software engineer and computer programmer.

2 Comments:

Blogger staticfoo said...

The distinction I always made was that a computer programmer was told "Here's an API, go implement it", whereas a Software Engineer would be responsible for much more of the design phase as well -- comping up with the API, as well as implementing it. And of course, there's always the old standby of "Here's this shit, fix it." That too seems more like the tasks that would be attributed to a software engineer.

1/19/2009 12:51 AM  
Blogger Aaron *@ said...

That would be one of the explanations I've heard and not been satisfied with. Just to take that distinction to the extreme (where I think it falls apart), was Linus Torvalds a "computer programmer" because he was just implementing the POSIX API or was he a "software engineer" because of the massive amount of design work that goes into creating an operating system?

And that's why I don't like that distinction. Because even when implementing simple APIs there's going to be quite a bit of design work involved in the implentation. Even maintenance programmers are going to be doing some design work. It's just that their designs are simpler and their main requirement is to not change the external interface.

1/19/2009 8:46 AM  

Post a Comment

<< Home