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 --- ...terview with Nenad Medvidovic - lang_en_vs6.srt | 499 +++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt (limited to 'usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt') diff --git a/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt b/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt new file mode 100644 index 0000000..40fa57c --- /dev/null +++ b/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt @@ -0,0 +1,499 @@ +1 +00:00:00,220 --> 00:00:02,900 +Because the topic of today's lecture is software architecture, + +2 +00:00:02,900 --> 00:00:05,390 +it seemed appropriate to start the lesson by asking a + +3 +00:00:05,390 --> 00:00:08,960 +world expert on this topic, what is software architecture, and + +4 +00:00:08,960 --> 00:00:11,570 +why it is important. To do that, let's fly to + +5 +00:00:11,570 --> 00:00:14,910 +California, and more precisely, Los Angeles, and visit Professor + +6 +00:00:14,910 --> 00:00:19,540 +Nenad Medvidovic. Hi, I'm here visiting Professor Nenad Medvidovic from + +7 +00:00:19,540 --> 00:00:22,310 +the University of Southern California. And Neno is one of + +8 +00:00:22,310 --> 00:00:25,250 +the world experts in software architecture, actually one of the + +9 +00:00:25,250 --> 00:00:28,300 +authors of, of a recent book which is, sort of the + +10 +00:00:28,300 --> 00:00:31,660 +book in software architecture. What I would like to discuss with + +11 +00:00:31,660 --> 00:00:34,500 +Neno is the concept of software architecture and its importance. Because + +12 +00:00:34,500 --> 00:00:37,520 +people are very familiar with the idea and the cost of the + +13 +00:00:37,520 --> 00:00:41,240 +design. And software architecture is something is very related to that, + +14 +00:00:41,240 --> 00:00:43,690 +but is less known. So I would like for Nenad to + +15 +00:00:43,690 --> 00:00:46,350 +elaborate on that, and tell us why is it important to + +16 +00:00:46,350 --> 00:00:49,880 +focus also on this specific you know, architectural aspects of the software. + +17 +00:00:49,880 --> 00:00:50,380 +>> When you + +18 +00:00:50,380 --> 00:00:53,220 +build any software system, even a simple, relatively simple + +19 +00:00:53,220 --> 00:00:56,840 +one. You're going to go through, a process of making + +20 +00:00:56,840 --> 00:01:00,070 +many, many design decisions. Hundreds or thousands sometimes even tens + +21 +00:01:00,070 --> 00:01:03,140 +of thousands of design decisions, so any program that you + +22 +00:01:03,140 --> 00:01:06,090 +write at some point you get to deciding what + +23 +00:01:06,090 --> 00:01:09,385 +the interface of a particular method is going to be. + +24 +00:01:09,385 --> 00:01:12,170 +Are you're going to put in a parameter that is + +25 +00:01:12,170 --> 00:01:15,530 +an integer or a float. When you're writing your routine + +26 +00:01:15,530 --> 00:01:17,400 +about some sort you have to decide whether you're + +27 +00:01:17,400 --> 00:01:18,900 +going to use a static data structure or a + +28 +00:01:18,900 --> 00:01:22,410 +dynamic data structure. All these things are design decisions. + +29 +00:01:22,410 --> 00:01:25,770 +Many of them however, will typically, in the average + +30 +00:01:25,770 --> 00:01:29,030 +case, not really impact the success of your system + +31 +00:01:29,030 --> 00:01:31,640 +and the long term well-being of your system. But + +32 +00:01:31,640 --> 00:01:35,390 +typically the things that software engineers start struggling with + +33 +00:01:35,390 --> 00:01:40,760 +are other design decisions. Design decisions that are the equivalent + +34 +00:01:40,760 --> 00:01:42,080 +of load baring walls in a building + +35 +00:01:42,080 --> 00:01:42,660 +>> Mm hm + +36 +00:01:42,660 --> 00:01:43,950 +>> These are the things that, if you + +37 +00:01:43,950 --> 00:01:45,960 +don't get them right, or if you compromise + +38 +00:01:45,960 --> 00:01:50,190 +them, will in fact potentially impact how the + +39 +00:01:50,190 --> 00:01:54,300 +system operates. They might result in failures of different + +40 +00:01:54,300 --> 00:01:56,780 +kinds. They may result in a system that + +41 +00:01:56,780 --> 00:01:59,460 +is not easily maintainable and so forth. In + +42 +00:01:59,460 --> 00:02:01,680 +a sense, to make a long story short, + +43 +00:02:01,680 --> 00:02:05,888 +architectural design decisions are really the principle design decisions + +44 +00:02:05,888 --> 00:02:07,900 +in your system. These are the things that are + +45 +00:02:07,900 --> 00:02:10,550 +very important. All of the other design decisions you + +46 +00:02:10,550 --> 00:02:13,520 +could sort of tag with being important, but they're + +47 +00:02:13,520 --> 00:02:17,730 +sort of below this very important or highly important threshold. + +48 +00:02:17,730 --> 00:02:21,400 +>> So if you need to change a low level design decision, sometimes + +49 +00:02:21,400 --> 00:02:23,970 +it's kind of easy to do. It might change a little structure. Is it + +50 +00:02:23,970 --> 00:02:27,140 +the case that you know, being the architecture is sort of the pillar of + +51 +00:02:27,140 --> 00:02:29,020 +the software, is that going to be much + +52 +00:02:29,020 --> 00:02:32,380 +more difficult to change an architectural decision? + +53 +00:02:32,380 --> 00:02:34,400 +And architecture is deemed to be you know, + +54 +00:02:34,400 --> 00:02:36,120 +say if you start with the wrong architecture the + +55 +00:02:36,120 --> 00:02:39,510 +software is going to, you know, necessarily be unsuccessful. + +56 +00:02:39,510 --> 00:02:41,320 +Or you can also do something that is better. + +57 +00:02:41,320 --> 00:02:46,070 +>> A system could be successful and very poorly architected. Just + +58 +00:02:46,070 --> 00:02:50,630 +like a building or an airplane or a car, any other + +59 +00:02:50,630 --> 00:02:54,700 +engineering artifact could be successful but poorly architected. So success we + +60 +00:02:54,700 --> 00:02:57,440 +can separated from this, but the, the point that you make in + +61 +00:02:57,440 --> 00:03:00,530 +asking this question is an important one. The + +62 +00:03:00,530 --> 00:03:04,260 +non-architectural design decisions, should be on the + +63 +00:03:04,260 --> 00:03:06,250 +average, there are exceptions and we need to + +64 +00:03:06,250 --> 00:03:09,580 +acknowledge that there is no one size fits all + +65 +00:03:09,580 --> 00:03:11,640 +type of solution for anything in software engineering + +66 +00:03:11,640 --> 00:03:15,060 +really. But on the average, the non-architectural design decisions, + +67 +00:03:15,060 --> 00:03:17,650 +should be much easier to make. So the + +68 +00:03:17,650 --> 00:03:22,600 +scale of the consequences of making such a change. + +69 +00:03:22,600 --> 00:03:25,880 +Really can vary from very minor, highly localized + +70 +00:03:25,880 --> 00:03:29,670 +to very important and sometimes, even system wide. + +71 +00:03:29,670 --> 00:03:33,570 +>> To conclude, I just like to ask you about some concept that is + +72 +00:03:33,570 --> 00:03:35,110 +we here about a lot. Which is + +73 +00:03:35,110 --> 00:03:37,430 +architectural erosion. Since, we're talking about in with + +74 +00:03:37,430 --> 00:03:39,760 +fine architecture and software evolution. So, what is, + +75 +00:03:39,760 --> 00:03:42,090 +exactly, an architectural erosion and why does that + +76 +00:03:42,090 --> 00:03:47,600 +happen? So, to go back to our non software metaphors. Imagine you buy a car. + +77 +00:03:47,600 --> 00:03:49,810 +And your car has four wheels, it has a steering wheel, it has + +78 +00:03:49,810 --> 00:03:53,700 +a nice chassis, it looks pretty nice. At one point, you end up + +79 +00:03:53,700 --> 00:03:54,950 +replacing its 150 horsepower engine with + +80 +00:03:54,950 --> 00:03:56,800 +a 250 horsepower engine because that's what + +81 +00:03:56,800 --> 00:04:01,510 +you want. And you start putting a spoiler on the back of the car + +82 +00:04:01,510 --> 00:04:04,680 +and then you replace the headlights. And then you replace the side view + +83 +00:04:04,680 --> 00:04:08,000 +mirrors with smaller ones because you want your car to be more aerodynamic. + +84 +00:04:08,000 --> 00:04:10,620 +And then you start tinkering with other things, like you cut the, maybe + +85 +00:04:10,620 --> 00:04:13,380 +the roof of the car because you want to turn it into a convertible, + +86 +00:04:13,380 --> 00:04:15,990 +et cetera. And in the end, what you have is + +87 +00:04:15,990 --> 00:04:19,810 +a car that is still your car. Looks very different, It's + +88 +00:04:19,810 --> 00:04:23,650 +structural and behavioral properties are very different And, what you + +89 +00:04:23,650 --> 00:04:27,260 +might find is that the car doesn't handle nearly as well. + +90 +00:04:27,260 --> 00:04:29,670 +For example, in a very sharp turn it might not + +91 +00:04:29,670 --> 00:04:31,910 +be able to negotiate a steep hill as well. Because you + +92 +00:04:31,910 --> 00:04:35,760 +pretty much changed it all along the way. Architectural erosion in + +93 +00:04:35,760 --> 00:04:38,620 +the case of a software system is the exact same thing + +94 +00:04:38,620 --> 00:04:41,480 +with one huge caveat. Very few, if any of us, + +95 +00:04:41,480 --> 00:04:44,970 +will ever put a new engine into our car or tinker + +96 +00:04:44,970 --> 00:04:47,390 +with the structural soundness of the car by cutting off the + +97 +00:04:47,390 --> 00:04:50,260 +roof etc. In a software system we do it all the + +98 +00:04:50,260 --> 00:04:53,530 +time. We'll add a feature. We'll change one bit of the + +99 +00:04:53,530 --> 00:04:57,088 +user interface here. We'll port it to a new platform, some + +100 +00:04:57,088 --> 00:05:00,990 +kind of a, a mobile platform, for example. And pretty soon, + +101 +00:05:00,990 --> 00:05:03,750 +what you end up with is really a software system that, + +102 +00:05:03,750 --> 00:05:06,990 +that is maybe a distant relative of your original + +103 +00:05:06,990 --> 00:05:10,500 +system. It is a mutant in many ways, because often + +104 +00:05:10,500 --> 00:05:12,986 +times these little tinkerings happen on a one off + +105 +00:05:12,986 --> 00:05:15,610 +basis. There is no over-arching vision of how you should + +106 +00:05:15,610 --> 00:05:19,060 +do this. So, you are basically going through a + +107 +00:05:19,060 --> 00:05:21,980 +subsequent set of steps where you are making locally optimal + +108 +00:05:21,980 --> 00:05:25,240 +decisions for any one of these changes and what + +109 +00:05:25,240 --> 00:05:29,140 +you might end up finding is that the globally optimal + +110 +00:05:29,140 --> 00:05:32,100 +behavior of the system is badly compromised. The structural + +111 +00:05:32,100 --> 00:05:34,952 +soundness in a sense of the system badly compromised. + +112 +00:05:34,952 --> 00:05:38,510 +The non-functional properties of the system could be seriously + +113 +00:05:38,510 --> 00:05:42,390 +affected. This is how security flaws creep into systems. This + +114 +00:05:42,390 --> 00:05:44,250 +is how reliability flaws. This is how we use + +115 +00:05:44,250 --> 00:05:48,420 +the usability of a system often times suffers. And most + +116 +00:05:48,420 --> 00:05:50,920 +importantly for software engineers, the people who actually build the + +117 +00:05:50,920 --> 00:05:54,950 +software, the maintainability of the system becomes a huge problem. + +118 +00:05:54,950 --> 00:05:59,130 +Because now you're looking at this thing, it's got all these various appendages, + +119 +00:05:59,130 --> 00:06:03,170 +its original design has pretty badly eroded and yet somehow you have to + +120 +00:06:03,170 --> 00:06:06,850 +figure out how to keep fixing it. Making sure that it operates in + +121 +00:06:06,850 --> 00:06:11,380 +a continuous fashion because many of these systems live for 20, 30, 40 years. + +122 +00:06:11,380 --> 00:06:13,840 +>> Thank you so much for your insight; it is a perfect + +123 +00:06:13,840 --> 00:06:16,500 +introduction for our lesson. So we'll get to the lesson now. And. + +124 +00:06:16,500 --> 00:06:17,920 +>> Thank you very much. + +125 +00:06:17,920 --> 00:06:18,300 +>> Thank you. -- cgit 1.4.1