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].