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
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.