first let me start by asking a couple of
very natural questions that you may have
when considering whether to take this
course the first one is what is software
engineering and the second very related
one is why do we need it so what i did
was actually to go out and ask some of
the main experts in the field both in
academia and industry these very
questions and let's see what they said
what is software engineering and why is
it important
okay can i start with another question
of course okay first what is a computer
it's a programmable device so the
essence of computing is programming so
program development is basically the
most
essential use of the computer
so software engineering is the
discipline that investigates
program development so how can it be
done more efficiently what's the best
way of doing program development
and how can you develop reliable
programs so that's how i define
but i consider any software development
activity a software engineering activity
software engineering is the systematic
application of methods to build software
in a rigorous way
and i think one of the aspects that i
like to bring into the notion of
software engineering is that it's
something that involves not only kind of
technically building the system but
understanding the requirements working
with stakeholders
trying to find a solution that balances
all of the stakeholders needs in order
to deliver the software in a way that's
tested and as rigorous to meet the needs
of the stakeholders well software
engineering is the
whole process of creation of
software using engineering principles my
view is kind of a holistic view and
i think about it from the perspective of
how is software engineering different
from programming
so i think that research about
programming is all about the create part
of software and that
software engineering is about the entire
lifecycle so that's one aspect and the
other aspect of the definition is it's
about quality the quality of software
software engineering even considers
things long after you ship
which we all know is one of the
it is the largest economic piece of
software development
so
improve
software engineering process for
better software productivity and quality
the set of activities that
one engages in when building software
systems or software internal products
it's fundamentally a venue creating
activity
it involves
social processes
software engineering is the act of many
people working together and putting
together many versions of large and
complex systems
and
our world depends on software
software is immensely complex and you
need many many smart people to build
these communities
well engineering i think is the activity
of envisioning
and realizing valuable new functions
with sufficient and justifiable
confidence
that the resulting system will have all
of the critical quality attributes
that are necessary for the system to be
a success
and software engineering is the activity
of doing this
not only for the software components of
engineering systems but
for the system overall given that it's
so heavily reliant on its underlying
software
technologies
so i would say software engineering
is the
art and practice of building software
systems software engineering in a
nutshell is a set of methods and
principles and techniques that we have
developed to enable us to
engineer
or build large software systems that
outstrip uh or outpace one engineers or
even a small team of engineers ability
or abilities
to understand and uh construct and
maintain over time so it requires a lot
of people it requires a long
term investment by an organization or a
number of organizations and oftentimes
it requires support for systems that
are intended for one purpose but end up
getting used for many additional
purposes uh in addition to the original
one um software engineering is about
building and constructing very large
scale high quality systems
and so the high quality is a big issue
software engineering is our
engineering discipline of developing
software-based systems
usually embedded into larger systems
composed of hardware
and
humans
and business processes and
processes in general
and why is that important well because
software is pervasive in all industry
sectors and therefore systems must be
reliable safe and secure but can we just
get that by sitting down and writing
software well you could if software was
small and simple enough to be developed
by
one or two people
together in a room
but software development now is
distributed involves teams of people
with different backgrounds
who have to communicate with each other
it also involves customers clients users
software engineers have to work with
other engineers
with
domain experts
and
therefore we all know we can
sit down and start coding software
engineering is uh
mostly being able to
program
and you need to be able to put big
systems together so that they actually
work
that's my simple definition
if you don't use software engineering
practices you're not going to be able to
put them together well you're not going
to be able to reliably put them together
so basically you can maybe hack
something up but it's not going to
necessarily stand the test of time if
somebody wants to change it it's
probably gonna break
and it's important
because if you don't
think about how you're building the
system and how you're trading off
different aspects like performance and
scalability and reliability
then it's going to end up breaking or
not lasting very long or not not doing
everything that you wanted to do or
being really expensive
if it's not done in a principle way it
will be bad and every user will suffer
that's why we need software engineering
why it's important
because
i mean these two goals productivity
faster instead of developing software
and higher quality would be apparently
important because you suffer is
everywhere
it's important because
we use software in everyday life
everything's built on software systems
and these are ubiquitous across our
society
it's important because software is
everywhere around us and the way we
build it and the way we maintain it
is uh something that determines
almost the basic quality of life uh
nowadays and uh getting that software
right can make a difference oftentimes
between
a really fun product uh and one that you
won't like to use
a reasonably successful
company or one that fails and in more
extreme cases
even the difference between life and
death if you think about the software
that runs in the airplane on which many
of you fly
on a regular basis
there are programs over that if they
screw up we are all screwed
software engineering is crucially
important because it's the
engineering discipline
that is uniquely capable of carrying out
the engineering mission
for software reliant systems
in the us we've all seen an unfortunate
example of a system that went badly
wrong in healthcare.gov and
that system wasn't engineered correctly
and i think if we look at the reasons
for that they stem back to
somewhere at the intersection between
requirements and architecture and
politics and project management and all
of these things are important
concepts that have to go into the
software engineering mix
it would end up in lots and lots of
chaos because people wouldn't know how
to organize themselves and wouldn't know
how to organize software
many of software engineering is very
simple rules that you need to apply
properly in order to get things done
and people look at these rules and think
these rules are so super simple this is
totally obvious but once you try to
apply them you find out they're not
obvious at all
now that we heard these experts let me
show you an example that illustrates
what can happen when software
engineering practices are not suitably
applied
you