From b2d80610db6beda38573890ed169815e495bc663 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sun, 24 May 2020 16:34:31 +0700 Subject: [usth/ICT2.7] Engineer software --- ...mportance of Software Engineering - lang_en.srt | 572 +++++++++++++++++++++ 1 file changed, 572 insertions(+) create mode 100644 usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt (limited to 'usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt') diff --git a/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt new file mode 100644 index 0000000..858a75a --- /dev/null +++ b/usth/ICT2.7/P1L1 Introduction and Overview Subtitles/2 - Importance of Software Engineering - lang_en.srt @@ -0,0 +1,572 @@ +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]. + -- cgit 1.4.1