First, let me start by asking a couple of very
natural questions that you might 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
been done more efficiently? What's the best
way of doing program development? And how can
you develop reliable programs? So that's how I would define
it. But I consider any
software development activity 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 stake holders. Trying to
find a solution that balances all of the stakeholder needs in order to deliver
the software thats tested and its rigorous to meet the needs of a stakeholder.
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 life cycle. 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 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 we need
many, many smart people to build these things.
>> 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 it's underlying software technologies.
>> So, I would say software engineering is the
kind of 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 or outpace one engineer's or even a small
team of engineer's ability or abilities to understand
and 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 often times
it requires support for systems that that are intended for one purpose but end
up getting used for many additional purposes in addition to the original one.
>> Software engineering is about building and constructing very large-scale
high-quality systems, so the high quality is the big issue.
>> Software engineering is engineering discipline of developing
software-based systems, usually embedded into larger systems composed of
hardware and and humans [LAUGH] 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.
>> Why can't 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
hardware engineers, with domain experts and therefore,
well, no, we can't simply sit down and start coding.
>> Software engineering is 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.
>> And 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 could 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 going to break.
>> It's important
because if you don't think about how you're building this 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 want it to do, or being really expensive.
>> If it's not done in a principled way it will
be bad and every user will suffer. That's why we need
software engineering.
>> Why is it important? Because, I mean these two goal, productivity, faster,
in developing software. And higher quality
would be apparently important. Software 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 something that determines almost a basic
quality of life nowadays. And getting that software right can make a difference,
oftentimes, between a really fun product 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 out there 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 U.S we've all seen an unfortunate example with
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 has very simple rules that you need to apply properly in
order to get things done. And people who look at these rules and think,
these rules are so super simple. This is totally obvious. But once
you try to apply them, you'll find out they're not obvious at all.
>> Now that we've heard these experts, let me show you an
example that illustrates what can happen
when software engineering practices are not suitably
applied. [NOISE].