1
0
Fork 0
cp/usth/ICT2.7/P1L1 Introduction and Overv.../2 - Importance of Software ...

573 lines
13 KiB
Plaintext

1
00:00:00,150 --> 00:00:02,106
First, let me start by asking a couple of very
2
00:00:02,106 --> 00:00:04,820
natural questions that you might have when considering whether to take
3
00:00:04,820 --> 00:00:07,800
this course. The first one is what is software engineering.
4
00:00:07,800 --> 00:00:10,050
And the second, very related one, is why do we need
5
00:00:10,050 --> 00:00:12,430
it? So what I did was actually to go out
6
00:00:12,430 --> 00:00:15,430
and ask some of the main experts in the field, both
7
00:00:15,430 --> 00:00:18,290
in academia and industry, these very questions and let's see what
8
00:00:18,290 --> 00:00:22,160
they said. What is software engineering and why is it important?
9
00:00:23,170 --> 00:00:25,150
>> Okay, can I start with another question?
10
00:00:25,150 --> 00:00:26,020
>> Of course.
11
00:00:26,020 --> 00:00:31,290
>> Okay, first what is a computer? It's a programmable device. So the essence
12
00:00:31,290 --> 00:00:34,730
of computing is programming. So program development
13
00:00:34,730 --> 00:00:37,240
is basically the most essential use of the
14
00:00:37,240 --> 00:00:41,010
computer. So software engineering is the discipline
15
00:00:41,010 --> 00:00:44,850
that investigates program development. So, how can it
16
00:00:44,850 --> 00:00:47,390
been done more efficiently? What's the best
17
00:00:47,390 --> 00:00:50,170
way of doing program development? And how can
18
00:00:50,170 --> 00:00:53,140
you develop reliable programs? So that's how I would define
19
00:00:53,140 --> 00:00:55,060
it. But I consider any
20
00:00:55,060 --> 00:00:57,345
software development activity software engineering activity
21
00:00:58,825 --> 00:01:04,239
>> Software engineering is the systematic application of methods to build
22
00:01:04,239 --> 00:01:07,884
software in a rigorous way. And I think one of the
23
00:01:07,884 --> 00:01:11,196
aspects that I like to bring into the notion of software
24
00:01:11,196 --> 00:01:15,228
engineering is that it's something that involves not only kind of
25
00:01:15,228 --> 00:01:18,612
technically building the system but understanding the
26
00:01:18,612 --> 00:01:22,317
requirements, working with stake holders. Trying to
27
00:01:22,317 --> 00:01:28,232
find a solution that balances all of the stakeholder needs in order to deliver
28
00:01:28,232 --> 00:01:34,338
the software thats tested and its rigorous to meet the needs of a stakeholder.
29
00:01:34,338 --> 00:01:37,656
Well, software engineering is the whole process
30
00:01:37,656 --> 00:01:41,460
of creation of software using engineering principles.
31
00:01:41,460 --> 00:01:42,886
>> My view is kind of a holistic
32
00:01:42,886 --> 00:01:45,490
view and I think about it from the perspective
33
00:01:45,490 --> 00:01:49,440
of how is software engineering different from programming.
34
00:01:49,440 --> 00:01:52,940
So, I think that research about programming is all
35
00:01:52,940 --> 00:01:57,550
about the create part of software. And that
36
00:01:57,550 --> 00:02:00,270
software engineering is about the entire life cycle. So,
37
00:02:00,270 --> 00:02:03,070
that's one aspect. And the other aspect of the
38
00:02:03,070 --> 00:02:07,350
definition is it's about quality, the quality of software.
39
00:02:07,350 --> 00:02:12,330
Software engineering even considers things long after you ship which we all know
40
00:02:12,330 --> 00:02:18,310
is one of the, it is the largest economic piece of software development.
41
00:02:18,310 --> 00:02:22,990
>> So, improve, software engineering process
42
00:02:22,990 --> 00:02:26,440
for better software productivity and quality.
43
00:02:26,440 --> 00:02:32,472
>> The set of activities that one engages in when building software
44
00:02:32,472 --> 00:02:39,634
systems or software products. It's fundamentally a venue-creating
45
00:02:39,634 --> 00:02:45,492
activity. It involves social processes.
46
00:02:45,492 --> 00:02:47,247
>> Software engineering is the act
47
00:02:47,247 --> 00:02:49,652
of many people working together and putting
48
00:02:49,652 --> 00:02:52,057
together many versions of large and complex
49
00:02:52,057 --> 00:02:57,110
systems. And our world depends on software,
50
00:02:57,110 --> 00:02:58,910
software is immensely complex and we need
51
00:02:58,910 --> 00:03:01,700
many, many smart people to build these things.
52
00:03:01,700 --> 00:03:05,610
>> Well, engineering I think is the activity of envisioning and
53
00:03:05,610 --> 00:03:10,180
realizing valuable new functions with sufficient
54
00:03:10,180 --> 00:03:13,500
and justifiable confidence that the resulting
55
00:03:13,500 --> 00:03:18,190
system will have all of the critical quality attributes that are necessary
56
00:03:18,190 --> 00:03:22,140
for the system to be a success. And software engineering is the
57
00:03:22,140 --> 00:03:24,790
activity of doing this not only for
58
00:03:24,790 --> 00:03:27,550
the software components of engineering systems but
59
00:03:28,830 --> 00:03:31,740
for the system overall, given that it's
60
00:03:31,740 --> 00:03:35,500
so heavily reliant on it's underlying software technologies.
61
00:03:35,500 --> 00:03:40,440
>> So, I would say software engineering is the
62
00:03:40,440 --> 00:03:44,070
kind of art and practice of building software systems.
63
00:03:44,070 --> 00:03:47,610
>> Software engineering, in a nutshell, is a set of
64
00:03:47,610 --> 00:03:52,140
methods and principles and techniques that we have developed to enable us to
65
00:03:53,220 --> 00:03:57,830
engineer, or build, large software systems that
66
00:03:59,090 --> 00:04:03,960
outstrip or outpace one engineer's or even a small
67
00:04:03,960 --> 00:04:08,900
team of engineer's ability or abilities to understand
68
00:04:08,900 --> 00:04:13,330
and construct and maintain
69
00:04:13,330 --> 00:04:17,339
over time. So it requires a lot of people, it requires a long,
70
00:04:17,339 --> 00:04:21,820
term investment by an organization or a number of organizations, and often times
71
00:04:21,820 --> 00:04:28,040
it requires support for systems that that are intended for one purpose but end
72
00:04:28,040 --> 00:04:33,930
up getting used for many additional purposes in addition to the original one.
73
00:04:33,930 --> 00:04:38,656
>> Software engineering is about building and constructing very large-scale
74
00:04:38,656 --> 00:04:42,800
high-quality systems, so the high quality is the big issue.
75
00:04:42,800 --> 00:04:46,268
>> Software engineering is engineering discipline of developing
76
00:04:46,268 --> 00:04:52,800
software-based systems, usually embedded into larger systems composed of
77
00:04:52,800 --> 00:04:58,544
hardware and and humans [LAUGH] and business
78
00:04:58,544 --> 00:05:04,943
processes and processes in general. And why is that important?
79
00:05:04,943 --> 00:05:06,971
Well, because software is pervasive in all industry sectors
80
00:05:06,971 --> 00:05:09,001
and therefore systems must be reliable, safe and secure.
81
00:05:09,001 --> 00:05:13,232
>> Why can't we just get that by sitting down and writing software?
82
00:05:13,232 --> 00:05:16,697
>> Well, you could if software was small and
83
00:05:16,697 --> 00:05:20,162
simple enough to be developed by one or two
84
00:05:20,162 --> 00:05:25,360
people together in a room. But software development now
85
00:05:25,360 --> 00:05:31,550
is distributed, involves teams of people with different backgrounds
86
00:05:31,550 --> 00:05:37,450
who have to communicate with each other. It also involves customers,
87
00:05:37,450 --> 00:05:42,512
clients, users. Software engineers have to work with
88
00:05:42,512 --> 00:05:47,462
hardware engineers, with domain experts and therefore,
89
00:05:47,462 --> 00:05:52,233
well, no, we can't simply sit down and start coding.
90
00:05:52,233 --> 00:05:57,380
>> Software engineering is mostly being able
91
00:05:57,380 --> 00:06:02,775
to program. And you need to be able to put big
92
00:06:02,775 --> 00:06:06,920
systems together so that they actually work. That's my simple definition.
93
00:06:06,920 --> 00:06:09,210
>> And if you don't use software engineering practices,
94
00:06:09,210 --> 00:06:10,670
you're not going to be able to put them together?
95
00:06:10,670 --> 00:06:13,290
>> Well, you're not going to be able to reliably
96
00:06:13,290 --> 00:06:16,160
put them together. So basically, you could maybe hack something up,
97
00:06:16,160 --> 00:06:18,750
but it's not going to necessarily stand the test of time.
98
00:06:18,750 --> 00:06:21,221
If somebody wants to change it it's probably going to break.
99
00:06:21,221 --> 00:06:24,140
>> It's important
100
00:06:24,140 --> 00:06:29,700
because if you don't think about how you're building this system and
101
00:06:29,700 --> 00:06:31,600
how you're trading off different aspects,
102
00:06:31,600 --> 00:06:35,580
like performance and scalability and reliability, then
103
00:06:35,580 --> 00:06:39,900
it's going to end up breaking or not lasting very long or not,
104
00:06:39,900 --> 00:06:42,900
not doing everything that you want it to do, or being really expensive.
105
00:06:43,960 --> 00:06:45,800
>> If it's not done in a principled way it will
106
00:06:45,800 --> 00:06:49,220
be bad and every user will suffer. That's why we need
107
00:06:49,220 --> 00:06:49,970
software engineering.
108
00:06:49,970 --> 00:06:56,252
>> Why is it important? Because, I mean these two goal, productivity, faster,
109
00:06:56,252 --> 00:06:59,480
in developing software. And higher quality
110
00:06:59,480 --> 00:07:03,551
would be apparently important. Software is everywhere.
111
00:07:03,551 --> 00:07:08,260
>> It's important because we use software in everyday life. Everything's
112
00:07:08,260 --> 00:07:14,120
built on software systems. And these are ubiquitous across our society.
113
00:07:14,120 --> 00:07:14,300
>> It's
114
00:07:14,300 --> 00:07:20,820
important because software is everywhere around us and the way we build it,
115
00:07:20,820 --> 00:07:26,910
and the way we maintain it, is something that determines almost a basic
116
00:07:26,910 --> 00:07:33,940
quality of life nowadays. And getting that software right can make a difference,
117
00:07:33,940 --> 00:07:39,590
oftentimes, between a really fun product and one that you won't like to use
118
00:07:40,640 --> 00:07:45,750
a reasonably successful company, or one that fails. And in
119
00:07:45,750 --> 00:07:49,690
more extreme cases even the difference between life and death,
120
00:07:49,690 --> 00:07:51,510
if you think about the software that runs in the
121
00:07:51,510 --> 00:07:56,380
airplane on which many of you fly on a regular basis.
122
00:07:56,380 --> 00:08:00,790
>> There are programs out there that if they screw up we are all screwed.
123
00:08:00,790 --> 00:08:02,440
>> Software engineering is crucially
124
00:08:02,440 --> 00:08:06,460
important because it's the engineering discipline
125
00:08:06,460 --> 00:08:10,250
that is uniquely capable of carrying out
126
00:08:10,250 --> 00:08:13,848
the engineering mission for software reliant systems.
127
00:08:13,848 --> 00:08:17,620
>> In the U.S we've all seen an unfortunate example with
128
00:08:17,620 --> 00:08:23,032
a system that went badly wrong in healthcare.gov and that system wasn't
129
00:08:23,032 --> 00:08:26,740
engineered correctly. And I think if we look at the reasons for
130
00:08:26,740 --> 00:08:32,350
that, they stem back to somewhere at the intersection between requirements and
131
00:08:32,350 --> 00:08:37,470
architecture and politics and project management, and all of these things are
132
00:08:37,470 --> 00:08:43,270
important concepts that have to go into the software engineering mix.
133
00:08:43,270 --> 00:08:45,570
>> It would end up in lots and lots of chaos because people
134
00:08:45,570 --> 00:08:47,220
wouldn't know how to organize themselves and
135
00:08:47,220 --> 00:08:49,400
wouldn't know how to organize software. Many
136
00:08:49,400 --> 00:08:53,830
of software engineering has very simple rules that you need to apply properly in
137
00:08:53,830 --> 00:08:57,280
order to get things done. And people who look at these rules and think,
138
00:08:57,280 --> 00:09:01,050
these rules are so super simple. This is totally obvious. But once
139
00:09:01,050 --> 00:09:05,495
you try to apply them, you'll find out they're not obvious at all.
140
00:09:05,495 --> 00:09:07,670
>> Now that we've heard these experts, let me show you an
141
00:09:07,670 --> 00:09:10,080
example that illustrates what can happen
142
00:09:10,080 --> 00:09:12,410
when software engineering practices are not suitably
143
00:09:15,310 --> 00:09:24,010
applied. [NOISE].