Full story
What’s the difference between a computer scientist, a software engineer, and a programmer? I’ve been in the software industry for 15+ years and when I see these terms in a job description, I have no idea what they mean. Part of the problem is that a large portion of the software industry doesn’t care about the differences. Part of the problem is that some people don’t believe in software as an engineering practice. And part of the problem is being called a programmer is considered by many to be slanderous.
So why should anyone care? Well, because pretty much every device has software in it and we’d all like to have devices that aren’t crippled by poorly designed and written software. And to develop quality software we need well educated … what? Computer scientists? Software engineers? Programmers? But there are problems, a declining interest in computer science in colleges (where most computer scientists, software engineers, and programmers are developed) and a problem with the curriculum they use. I think part of the problem with curriculum can be traced back to the need for a distinction between computer scientists and software engineers. There are some people who are interested in the theory behind computers (computer scientists) and there are those interested in developing software for use by others (software engineers). Both are important, but having a single curriculum that tries to accommodate both interests is a hinderance to the advancement of both disciplines.
So what is the difference? The best analogy I could come up with was chemistry. A computer scientist is like the chemist who understands chemical properties and develops new compounds. The software engineer is like the chemical engineer who develops the process to create the compound at a large scale or use the compound in an actually product. The programmer is either the guy that pushes the buttons or does final assembly on the production line.
But what does this mean in practice? When I worked at Adobe I held the title of “Computer Scientist.” It sounded cool, but I had no illusions of being a computer scientist. There were guys there, and at the bigger companies I’ve worked at, that were really computer scientists and coming up with new ways of doing things. I really think that the term “computer scientists” should really be limited to those doing research-type activities. “Software Engineer” is a term I’m afraid we’re stuck with to describe the typical software professional. I’ve never worked with anyone I would truly call a software engineer. The adherence to an engineering process and the related practices that I would associate with true software engineering I’ve only read about. And what of the “programmer?” The stereo-type is that this is the guy who writes the code that the “software engineer” has designed and specified. SInce I’ve never worked with the mythical “software engineer” I’ve also never worked with a “programmer.” Most of the people I have worked with do write the code, but they also do the design and specification. Not with the rigor I would associate with software engineering, but they aren’t robotic serfs taking direction from an overload.
So what am I? I have no illusions about being a computer scientist. I like some of the practices of software engineers. And I am not a stereotypical programmer. I like to call myself a software developer because that’s what I do. I develop software applications that people use (I hope). I follow some software engineering practices and I do the programming. I think that’s what the majority of people writing software do. I don’t know if that is too practical for a college degree, but that’s what we do.
No comment yet
Don't be shy, express yourself ! ;)