What is the difference between a Computer Scientist and a Computer Programmer? What is the difference in the actual work they do in industry?(not in academia) Can you provide some real world examples too?
*puts on the not serious answer hat*
One is pragmatic, the other, not.
actually the wikipedia definitions are quite nice for this.
and
its the same as an engineer and a mechanic. unfortunately i think i am a mechanic :P
I would use the analogy of a person who builds houses versus someone who designs the houses.
Now there is a third category which would be someone who looks for ways to implement the designs of the houses.
So, I would say the programmer tends to be the builder of the programs while the scientist focuses on the finding ways to implement the peices. For the most part programmers USE the work of the scientist to get their work done.
Specifically I would say a programmer implements a quick sort algorithm while a computer scientist discovers the algorithm.
Computer science is an academic field. It's a little like studying mathematics. It's studying and researching algorithms, data structures, and similar.
Computer Programmers write programs; the term tends to be used to describe people in industry, although of course computer scientists write programs too.
An archetypal computer scientist would be someone like Don Knuth. His work on algorithms is legendary.
An archetypal computer programmer might be Jeff Atwood. We're using his site right now.
:-) A Computer Scientist is a fraud. There really is no such thing as computer science, computers themselves are built by electronic engineers based on the work of physicists and mathematicians. The fundimental basis of software is mathematical, and, it is implemneted by Software Engineers (who freely admit to being Computer Programmers).
Computer Programmers on hte other hand are what they say they are -- people who program computers!
You can made a parallel to Mathematics and Applied Mathematics. One is capable to explore and investigate new mathematics models and theorems and the second one is how to use and apply them on practice. So exactly the Computer Science and Computer Programming. One explore new CS field theorems and explore new efficient data structures and the second is more about how to use scientific result efficiently.
The Computer Scientists will worry about the road you have to take to reach your goal, but worries less about the goal itself. A Computer Programmer cares less about the road and worries about reaching the goal before the deadline whooshes by.
The best software tends to be written by people who are a little of both. You need a good road so others can easily follow and perhaps even improve things along the way. But this all should not be a too big a distraction for the deadline to pass by without you reaching the finish first. Many new projects have failed to start because the Scientist needed too much time working on the road. Also, too many existing projects have failed too because Programmers took a quick route and no one seems to be able to follow it again.
There was once a joke that went:
Q: What's the difference between an ape and a CS professor?
A: An ape doesn't think he can program.
This is rather mean to CS professors, many of whom can actually program. However, not all are in the habit of doing this on a regular basis. At the theoretical end you see people who are essentially mathematicians. Some HCI people are more in the applied psychology space than programming. Other examples of this sort can be found - there is considerably more to Computer Science than just programming.
On the other hand, there are many practicing programmers who lack basic understanding of CS theory such as big-O notation. Regardless of one's views on whether it should, it certainly doesn't stop people from practicing as a programmer.
This, one can take the view Computer Scientists and Computer Programmers are not the same things, although they are by no means mutually exclusive. One can be both a Computer Scientist and a Computer Programmer.
I'm a Computer Scientist (says so on my degree, so it must be true!) with 26 years' experience. I've spent maybe 5% of that time writing programs; the rest of it has been:
- performance testing applications that others have written, and recommending solutions when problems are found
- building testing competency groups in big companies
- running operations teams
- running R&D teams
- software architecture
- investigating and approving architecture solutions (recently, Ruby, F#, Erlang) as appropriate for the organisation I work in
- designing infrastructure solutions
- running technical training courses
- ...
I write code now primarily to make my life easier at work, or for my own interest; I don't work as a "coder", and have very rarely had to rely on my coding skills for income.
If you are looking for a simple explanation of the difference in industry, I'd suggest that a programmer is primarily concerned with WHAT gets done and WHEN, and a computer scientist is primarily concerned with HOW it gets done and WHY. I'd be interested in hearing others' thoughts on whether this distinction fits their experience
Nowadays, one can call himself/herself a computer programmer even if the only language they know is VBScript. Cynicism aside, I have frustrations with some of the industry terminology myself, e.g. computer programmer or software developer.
See Definition of a software engineer, Difference between programmers and engineers
The difference between scientists and engineers is pretty clear though. Both need to know computer science, but the main focus of scientists is expanding the scientific body of knowledge, whereas engineers are focused on applying this knowledge in real-world systems.