When I talk about a programmer, I mean someone who can code. They know at least one programming language and know it well enough that they can make things happen by typing the code into their computer.
Some programmers graduate from a university with a computer science degree and know how to code. They would qualify. Others pick up a book and teach themselves to code on their own. They would qualify too.
Developer
When I talk about a developer, I use the term to mean something more than programmer. A programmer asks me, “what should I code?” or “how do you want me to do it?” In those cases, I’m making the bigger decisions and the programmer is implementing things.
Developers have enough experience to have seen problems before and to know what worked and what didn’t. With developers I normally describe a destination, and they design the route they’ll take. I give them more freedom because they have deeper experience.
So for me, the difference between a programmer and a developer is one of degree. One is more resourceful than the other. Moving from one to the other requires time, effort, and experience.
Programmers can accelerate this by doing more in shorter amounts of time, but they won’t get there by doing the same thing 20 times over. Additionally, I make no assumption about how they develop their experience (college or on the job), nor do I make any about the number of languages they know. One is fine.
Software Engineer
Software engineers are a different dynamic altogether, for me. It’s because of the “engineering” part of the term, for me.
To remind you, I don’t care how software engineers gain their knowledge. I’m not suggesting they must have a degree. But I am suggesting that they can’t just pick up a language, hack their way around a bit and expect me to call them a software engineer – regardless of what they call themselves.
Engineering is a discipline. It requires that you know a set of knowledge. I would say education but people will punt to schooling, and I’m not saying that. I am saying you can’t just learn a language. There’s a history to the discipline.
Engineering requires a level of abstract thinking. I’m not just talking about creating a plan before you write code. I’m talking about creating mental models of how the parts of a system will work. Models that help you refine your designs.
Engineering requires an ability to communicate with others. I don’t care if it’s in user stories or diagrams, engineers need to be able to communicate with other engineers to design solutions and to debate the merits of different approaches – often calling for complex depictions of abstract dynamics.
Can you be a self-taught software engineer? Yes. I think you can. But it’s not fast or easy.
Software engineers may focus on a single discipline (like design, testing, or performance tuning) or more, but those disciplines often are apart from programming languages. That translates to being able to move a software engineer from one platform to another and see them pick it up in no time.
大致上是,一個指令一個動作,你請他實作某功能的某環節功能,他 Coding 完後就結束了,功能有出來,但品質不一定優。他可能會一直使用 Google 或 Stackflow 來找到問題的答案,他只會單一種語言,對該語法的了解可能是中等級,會需要手冊查詢 Function name 或 library name
Developer / Engineer
比 Programmer 更強了一些,你可能告訴他某環節,他直接串完某環節的所有功能,且能夠撰寫該環節的文件、測試,甚至已做了幾項的 Test Case, 程式的品質有兼顧到,也能夠融入該框架的 Coding Style. 手冊對他可能只是偶爾的幫助,對於框架有一定的熟晰度。