在stackoverflow.com 看到的很有趣的讨论,程序员,软件工程师,和软件开发人员的区别。
原文:
What’s the difference between programmer and software engineer?
呵呵,在国内好像区别不是很明显。
在IBM有很清楚的区分,比如 IT Specialist ,IT Architecture,Software engineer,Software architecture,Technical solution,Technical support 等等。
一些观点:
1)
n some countries and states (European countries, Canada, as per Kena’s comment, and Texas, as per Tony BenBrahim’s comment, see comments for other examples), the title “engineer” is limited to people with an engineering degree. Depending on where you found the job description, “software engineer” may mean “a person who has studied software engineering or computer science,” while “programmer” probably means “a person who knows how to write code.”
2)
programmer = we do not have many technical employees and need someone to “program” something; for example a law firm
developer = we are a tech-savvy product or services company and need someone to work on internal or back-end tools; for example a bank or consulting company
engineer = we are a software company and need someone to work on one of our products; for example Adobe or Microsoft
There are thousands of counterexamples, but in general, I would be skeptical of any company looking to hire “programmers”, whilst I would look fondly upon a company hiring “software engineers”. “Developer” doesn’t really carry a connotation.
3)
Officially I believe a Software Engineer is more qualified in the software development lifecycle as a whole (requirements, analysis, design, testing, team management etc etc), whereas a programmer/developer is the more Computer Science track.
Unofficially the HR people at many companies have no idea what they’re talking about and you have to go by job requirements or even the interview!
4)
The terms are different, and they refer to differing expectations.
Usually, “Software Engineer” is a superset of “Programmer”.
Programming computers is PART of Software Engineering; but it’s by far not all of it.
While programming requires a knowledge of computer languages and algorithms and data structures, all of which are very important, software engineering also involves knowledge of projects, maintenance requirements, documentation standards, software design, etc. The things that are involved in successful software projects that are NOT actual programming.
For me, a critical distinction has always come with Software Patterns. I’ve never met someone who was “just” a programmer who had a grasp on what they are, and why they’re good. Conversely, most (albeit not all) Software Engineers that I’ve known and respected have had a good grasp on Software Patterns, and understand why they’re such a good idea.
In general, the way I tend to think of it is this: programmers program solutions. Software engineers take a problem, and (usually) use programming to solve it. The difference is that at least part of the responsibility for figuring out WHAT the solution is going to be falls on the Software Engineers.
5)
- Programmer: Coder. Code Monkey. Clickity-Clack, Clickity-Clack.
Usually 0-5 years experience - Developer/Analyst: Gathers requirements, designs and implements applications, researches technologies, etc.
Usually > 5 years experience - Engineer: Designs and implements components and frameworks for Developers and Programmers to use.
- Architect: Designs and oversees the implementation and integration of system wide initiatives.