Computer Science vs. Software Engineering

“Computer Science” vs. “Software Engineering”

That dichotomy is something that I have seen for as long as I have been involved with technology. I see lots of brilliant people that can talk theories, concepts, and patterns all day long. When it comes to building useful working applications, that is not their strong suit.

Before we go further…

As much as the preceeding statements may seem inflammatory, that’s not the intent. The way I see it - there is merit to both Computer Science and Software Engineering. It seems to me though, that it is how these things are used that is most useful. There are merits to both Computer Science and Software Engineering, however I believe these are two distinct fields that should not be confused.

Computer Science

According to Wikipedia’s definition Computer Science is defined as follows.

Computer Science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded as bits in a computer memory or transcribed engines and protein structures in a human cell. A computer scientist specializes in the theory of computation and the design of computational systems.

I hope that you see the theme here. “Theory” and “design” are what I see as Computer Science. These things are important! However, they are not the same thing as implementation.

Software Engineering

Wikipedia’s Software Engineering article is much less satisfying.

What I believe to be the value of Software Engineering is the practice of creating software. This is something that is an extension of, but different from Computer Science.

There is a need for theory. There is a need for design. Yes, absolutely! I believe that given the plethora of terms associated with “technologists,” there is a need for some separation and distinction of terminology.

There should be a clean separation of these terms, and theory vs. implementation seems like the cleanest distinction.

Conclusion

Computer Scientists are the architects. They create conceptual designs of what something might look like. They may create low level experiments and algorithms from time to time, but design is their strong suit.

Software Engineers are the people that build what the architects have designed. They take concepts and turn them into something useful. These are the people that don’t always care how every little piece works, but they are able to pull together pieces to create a useful tool.

I believe that today I am a better Software Engineer than Computer Scientist. I’m much better at creating things than giving all of the concepts of what is going on within an application.

I also believe that some of the best “technologists” are people that can perform both Computer Scientist and Software Engineer roles. The ability to architect and implement is indispensible. I can do some basic architecting, but I have a ways to go. Until then, I will continue building useful tools. :)

What do you think? Do you agree? Leave a comment below.