Software Engineering vs. Computer Science

This Section Is Personal Opinion!

An Introduction To The Subject
If you are a working software developer, you have probably had an occasion to wonder why your job is so hard. You often have to work lots of overtime in order to meet a deadline. Managers are usually frustrated with an inability to find effective software developers.

Most developers receive degrees in Computer Science from accredited universities. These degree programs are the primary cause for the afflictions described in the previous paragraph. When you take a degree in Computer Science, you take a series of courses that do not have much to do with real-world software development. Moreover, you are taught a development model that is totally inappropriate for delivering a piece of software on cost and on schedule.

For a degree in Computer Science, you take complete courses on topics such as Data Structures, Compilers, Operating Systems, and Artificial Intelligence. Probably 2% or less of all programmers get to work on these kinds of software.

In most classes, you are given a paragraph or two description of a piece of software. You are then told to implement the solution. This approach is referred to as the code now and make it work in the lab approach to software development. When you follow this approach, you end up spending long overtime hours trying to meet your deadlines.

What you are experiencing is the difference between Software Engineering and Computer Science. Let me state for the record my definition of software engineering:

Software Engineering is the activity of transforming a user concept into an integrated hardware/software system suject to cost, schedule, performance, reliability, and maintainability constraints.

You just don't get this information when your emphasis is on low level details such as sorts and searches (Data Structures). And, the code now, make it work later model basically flies in the face of all of the above issues.

Subsections below are going to delve into many of the facets of the comparison between software engineering and computer science in great details. I think you will find that the discussion below provides a good basis for the fact that we basically are being totally screwed by the failure of the discipline of Computer Science to come into the modern age of Software Engineering.

A Typical Computer Science Curriculum

A Typical Software Engineering Curriculum

A Comparative Analysis Of The Two Curricula

General Principles Of Software Engineering

Ethical Issues For Software Engineers