A dialog of thoughts and ideas about software, usability, and products, with random science and wacky ideas thrown in for good measure.


On March 15, 2010, Alan Skorkin wrote an interesting article, "The Difference Between A Developer, A Programmer And A Computer Scientist." While there are overlaps in our opinions, there are some shades of difference that I wanted to address in a post of my own.

Here's my take on the difference between a Computer Scientist, a Software Engineer, and a Programmer.

Computer Scientist
I'm with Alan on this one: a true computer scientist (as opposed to so many developers who have computer science degrees) is interested in the nature and theory of computation, the development of new languages and new ways to process information. People who are working hard to improve search engines, vision systems, and artificial intelligence techniques are likely a mix of computer scientists and programmers, or computer scientists and software engineers - particularly when such solutions are expected to work in real-world applications, like photo applications with facial recognition algorithms.

Software Engineer
A software engineer, also known as a developer, is an expert in developing, refactoring, debugging, and building applications. Software engineers need to have people-facing skills, so they can communicate effectively with managers, customers, and team members. They use software engineering tools, like Mercurial and Jira. They may share their knowledge with other developers, whether at lunch, on StackOverflow, or on their corporate wiki. They need to be concerned with the usability and utility of their product (whether the product is a UI, an API, or something else). A Software Architect is an advanced Software Engineer who can envision a complete system, and anticipate the pitfalls that may be encountered in its development. Some Software Engineers may become Project Managers.

Programmer
I'd argue that there's a difference between an application (e.g., a full-blown product) and a program (e.g., a standalone piece of code). A programmer writes programs - perhaps quite amazing programs that do some remarkable things - but does not have the breadth or opportunity to develop a product. Programmers can learn how to program from a book in 21 days; advanced programmers can create awesome programs by combining their insights and imagination with their knowledge of programming. A programmer may be able to integrate existing software components together to solve a problem and produce an amalgam that works, despite some roughness around the edges, without a requiring a deep understanding of the components.

These are the connotations that I've become familiar with over the course of my career. I freely admit that the actual terms could differ based on one's locality, experience, or other factors.

Makers and Solvers
I also believe there are other dimensions to consider. For example, some people enjoy software because they're Makers - they like to build new things, explore new ideas, create something that the world has never seen. Others enjoy software because they're Solvers - they view a problem as a puzzle, they want to fix it, they want to know why something doesn't work and they want to make it work. These are two types of passions that I can think of; perhaps some other people enjoy software because of the money, but I think most of them left the industry after the dot-com bust.
1 comments:
Offshore software development India said...

Nice article, I was looking for these kind of information on software development.
Please continue writing....

Regards:offshore software development India

Post a Comment