Software Engineering is not Computer Science.
I have been tweeting about this a
lot since the last few months. However, through sources such as recruitment
portals, I have noticed that many people still do not understand the difference
between computer science and software engineering. First, to clarify the
difference between engineering and science:
A scientist invented the wheel. An engineer put four of them together
and invented the car.
Scientists will focus on specific
aspects to gain a deeper understanding of the subject and in the process
discover new things or invent a new primary artifact. Engineers, however, will
use this knowledge and artifacts to build complex systems which can be put to
use directly. Both domains are equally important but we must understand that
while one is deep, the other is wide. Sciences are verticals while engineering
is an all-encompassing horizontal.
Similarly, when we think of
computer software, we must understand the difference. Computer Science gives
rise to the verticals while software engineering is how we integrate these
different technologies to build the software product.
Here goes my controversial
statement for this entry: “To a good engineer, technology is disposable.” This
means that, for building a car, you may use one type of wheel for one but
easily feel that another type of wheels are better for another car. This factor
is very important in software engineering. But first, what is software
engineering?
According to the 2004 Guide to the
Software Engineering Body:
Software engineering (SE) is the application of a systematic,
disciplined, quantifiable approach to the development, operation, and
maintenance of software,
and the study of these approaches; that is, the application of engineering
to software.
Too technical, eh? Well, basically
a software engineer will choose the best practices and the best tools needed to
build useful software. Tools may include: Process standards, design standards,
software architecture standards, programming languages and testing standards.
Yes, I said programming languages. A lot of importance has been placed till now
on the individual knowledge of programming languages. However, to a real software
engineer, languages are mere disposable tools. This is where one of the most
important aspects of software engineering comes up: learnability.
I emphasize on the fact that
technologies get outdated because of innovations by computer scientists. However,
a software engineer must adapt to these technologies and use them as tools to
build software. One does not code/hack/develop software; one builds it.
I hope I have brought out the basic
differences here. Soon I will update with topics such as how Software
Engineering relates to other fields such as Business Management and Psychology.
Feel free to criticize/comment.
However, please maintain decorum with the words used.
Thanks.
Comments
Post a Comment