As an overly stereotyped generality, here are the differences I see between “computer scientists” and “programmers”.
The programmer is someone writes code on a daily basis but is ignorant about how the compiler actually works. He is very familiar with the tools he uses but doesn’t understand how they work or how to build them. The tools he uses is his world and he uses them to go about his daily work. He is also blinded by them and can’t see past them. “If all you have is a hammer, everything looks like a nail”. They never think there is a better way and just go about working on their problem the only way they know how.
In contrast, the computer scientist is someone who lives in the more academic world and understands the computer at a more fundamental level—a machine for performing computations. He sees problems and is able to build a model to solve the problem.
In summary, the programmer uses the tools and the computer scientist makes the tools. The problem is that often these two individuals do not spend enough time in the day to day world of the other. So the programmer is ignorant that he can do things better (more efficient, elegant, etc) and the computer scientist doesn’t spend enough time in the trenches to really know what would benefit the programmer or simply doesn’t have an interest in solving the problem outside of intellectual curiosity.
Lisp is a great example of this. I recently learned it and it is an amazingly powerful language. Yet I find myself not able to use it because while it is interesting in and of itself, the people who worked on Lisp have done little to make it practical to use on a day to day basis. The learning curve is steep, documentation is poor (relatively) and trying to figure out how to get it up and running on a server in an easy and reliable manner is a P.I.T.A. I eventually gave up on it and switched back to PHP even though every part of me wanted to use it.
Look at PHP. Even though PHP pales in comparison with Lisp. PHP’s superior documentation and ease of deployment have made it one of the most popular web development languages.
If the two communities can get together and live in each others’ world more, maybe we can all benefit more.
The problem I have is that I am a self taught programmer with a keen interest in computer science but find that living in “computer science land” takes away from my ability to get real work done and pay the bills. I wish it wasn’t the case. To my credit though, my PHP code has become a lot more elegant as I am able to take the CS concepts I have learned and apply them to my day to day work.
This is a false dichotomy. You suggest that software people can be naturally divided into programmers who don’t know theory, and theoreticians who don’t program regularly. However, programming skill and theoretical knowledge are independent, continuous and positively correlated. The common cases are people with both programming skill and theoretical knowledge, and people with neither. That’s why “computer scientist”, “programmer” and “software engineer” are so often used as synonyms—because being one usually implies also being the other two.
I eventually gave up on it and switched back to PHP even though every part of me wanted to use it.
I think the problem is that you wanted to use it without asking if it was the proper tool for whatever task you had. PHP and Lisp have very different purposes.
The problem I have is that I am a self taught programmer with a keen interest in computer science but find that living in “computer science land” takes away from my ability to get real work done and pay the bills. I wish it wasn’t the case. To my credit though, my PHP code has become a lot more elegant as I am able to take the CS concepts I have learned and apply them to my day to day work.
I find it interesting that you admit to no formal training but are making blanket statements about an entire field. With all arrogance available to me, I claim that I am a good “computer scientist” and “programmer” under your definitions. As far as I can tell, they go hand in hand. When I get better at one I get better at the other.
If I had to make a semantic distinction, programmers are a subset of computer scientists.
Thanks for writing this article. It would benefit the software development community to know more about this difference. I have a little more in depth description of the digital divide between programmers and computer scientists on my blog.
As an overly stereotyped generality, here are the differences I see between “computer scientists” and “programmers”.
The programmer is someone writes code on a daily basis but is ignorant about how the compiler actually works. He is very familiar with the tools he uses but doesn’t understand how they work or how to build them. The tools he uses is his world and he uses them to go about his daily work. He is also blinded by them and can’t see past them. “If all you have is a hammer, everything looks like a nail”. They never think there is a better way and just go about working on their problem the only way they know how.
In contrast, the computer scientist is someone who lives in the more academic world and understands the computer at a more fundamental level—a machine for performing computations. He sees problems and is able to build a model to solve the problem.
In summary, the programmer uses the tools and the computer scientist makes the tools. The problem is that often these two individuals do not spend enough time in the day to day world of the other. So the programmer is ignorant that he can do things better (more efficient, elegant, etc) and the computer scientist doesn’t spend enough time in the trenches to really know what would benefit the programmer or simply doesn’t have an interest in solving the problem outside of intellectual curiosity.
Lisp is a great example of this. I recently learned it and it is an amazingly powerful language. Yet I find myself not able to use it because while it is interesting in and of itself, the people who worked on Lisp have done little to make it practical to use on a day to day basis. The learning curve is steep, documentation is poor (relatively) and trying to figure out how to get it up and running on a server in an easy and reliable manner is a P.I.T.A. I eventually gave up on it and switched back to PHP even though every part of me wanted to use it.
Look at PHP. Even though PHP pales in comparison with Lisp. PHP’s superior documentation and ease of deployment have made it one of the most popular web development languages.
If the two communities can get together and live in each others’ world more, maybe we can all benefit more.
The problem I have is that I am a self taught programmer with a keen interest in computer science but find that living in “computer science land” takes away from my ability to get real work done and pay the bills. I wish it wasn’t the case. To my credit though, my PHP code has become a lot more elegant as I am able to take the CS concepts I have learned and apply them to my day to day work.
This is a false dichotomy. You suggest that software people can be naturally divided into programmers who don’t know theory, and theoreticians who don’t program regularly. However, programming skill and theoretical knowledge are independent, continuous and positively correlated. The common cases are people with both programming skill and theoretical knowledge, and people with neither. That’s why “computer scientist”, “programmer” and “software engineer” are so often used as synonyms—because being one usually implies also being the other two.
This is not an accident.
I think the problem is that you wanted to use it without asking if it was the proper tool for whatever task you had. PHP and Lisp have very different purposes.
I find it interesting that you admit to no formal training but are making blanket statements about an entire field. With all arrogance available to me, I claim that I am a good “computer scientist” and “programmer” under your definitions. As far as I can tell, they go hand in hand. When I get better at one I get better at the other.
If I had to make a semantic distinction, programmers are a subset of computer scientists.