1 00:00:00,012 --> 00:00:05,030 Hi. Now, you might see a bus, but I see 2 00:00:05,030 --> 00:00:08,530 computation everywhere. The engines on this bus are run by a 3 00:00:08,530 --> 00:00:11,320 computer. The driver's console has a computer 4 00:00:11,320 --> 00:00:14,970 telling them where to stop next, whether they are on time. 5 00:00:14,970 --> 00:00:18,640 The security system, the cameras and the microphones, are run by a computer. 6 00:00:18,640 --> 00:00:21,620 The display on the side is run by a computer. 7 00:00:21,620 --> 00:00:23,788 There's a bunch of computers making this bus run. 8 00:00:23,788 --> 00:00:29,420 That construction site is the new student center. 9 00:00:29,420 --> 00:00:31,278 Right now it looks like trucks and concrete. 10 00:00:31,278 --> 00:00:34,730 But there's a ton of computation behind that. 11 00:00:34,730 --> 00:00:38,710 The architects and engineers who came up with the diagrams for it, were all 12 00:00:38,710 --> 00:00:40,340 sitting at computer workstations, of course. 13 00:00:41,640 --> 00:00:45,310 The did simulations of the traffic patterns in the building to see how to 14 00:00:45,310 --> 00:00:47,840 layout the rooms so that it would work well. 15 00:00:47,840 --> 00:00:51,430 They did simulations of the light entering into the rooms to see how that 16 00:00:51,430 --> 00:00:55,975 would work and to use light effectively. When I get my coffee in the morning, 17 00:00:55,975 --> 00:01:00,465 there's computation there too. The cash register's a computer of course. 18 00:01:00,465 --> 00:01:05,968 The credit card machine's a computer. The credit card itself has a computer in 19 00:01:05,968 --> 00:01:08,250 it. My name is Gregor Kiczales and I'm really 20 00:01:08,250 --> 00:01:10,931 excited about this course in Systematic Program Design. 21 00:01:10,931 --> 00:01:16,445 Walk with me a bit and we'll talk about it some more. 22 00:01:16,445 --> 00:01:18,975 So now that I've had my coffee and we're in a quieter place. 23 00:01:18,975 --> 00:01:23,250 Let's talk a bit more about why you'd want to take this course, why you would 24 00:01:23,250 --> 00:01:26,505 want to learn to design programs. We've seen one reason. 25 00:01:26,505 --> 00:01:30,760 Computation's everywhere. And one of my goals with this class is 26 00:01:30,760 --> 00:01:34,280 for you to be able to understand the world around you a bit better by 27 00:01:34,280 --> 00:01:36,614 understanding how those programs might work inside. 28 00:01:36,614 --> 00:01:40,960 If you could program, you could write a program that goes out on eBay and 29 00:01:40,960 --> 00:01:44,970 collects information and displays it to you a way that you want to see it. 30 00:01:44,970 --> 00:01:49,740 You can analyze data from physics or bio or chemistry and present that in a way 31 00:01:49,740 --> 00:01:52,470 you want to see it. You could even write an iPhone app and 32 00:01:52,470 --> 00:01:55,180 make a lot of money. Artists design pieces of work and 33 00:01:55,180 --> 00:02:00,160 performances. Lawyers design strategies, coaches design 34 00:02:00,160 --> 00:02:04,640 season strategies and training strategies, writers design outlines for 35 00:02:04,640 --> 00:02:08,900 their book, all disciplines design. And any time you learn a design 36 00:02:08,900 --> 00:02:12,430 discipline, which is what we are going to learn in this class then you become a 37 00:02:12,430 --> 00:02:15,750 better designer in any other discipline that you might work. 38 00:02:15,750 --> 00:02:19,600 Sciences like physics and math describe the world. 39 00:02:19,600 --> 00:02:22,568 They come up with equations which describe what happens in the world. 40 00:02:22,568 --> 00:02:26,920 But with computation, you can actually make things happen. 41 00:02:26,920 --> 00:02:32,230 So you can make simulations of the real world happen and you can also make unreal 42 00:02:32,230 --> 00:02:35,030 worlds happen. It's the difference between what's called 43 00:02:35,030 --> 00:02:38,460 analytical models and computational models. 44 00:02:38,460 --> 00:02:42,530 Once you have a way of thinking about the world in terms of computation, it's 45 00:02:42,530 --> 00:02:46,910 going to fundamentally change the way you think about the whole world around you. 46 00:02:46,910 --> 00:02:49,850 And really, when this course is done, you'll never see the world the same 47 00:02:49,850 --> 00:02:53,140 again. When I learned how to program, we kind of 48 00:02:53,140 --> 00:02:57,580 had to learn by osmosis. They would show us good code and bad code 49 00:02:57,580 --> 00:03:01,470 and say write good code. But a lot has changed since then. 50 00:03:02,490 --> 00:03:06,200 For one thing, we have a lot if empirical evidence about what really good code is. 51 00:03:07,390 --> 00:03:10,650 For another thing, we have what are called design methods. 52 00:03:10,650 --> 00:03:13,230 Design methods show us how to produce good code. 53 00:03:14,510 --> 00:03:17,830 Michael Jackson, in particular, has done a lot of work on design methods. 54 00:03:17,830 --> 00:03:21,960 And this course is based partly on those design methods. 55 00:03:21,960 --> 00:03:25,400 I mean a different Michael Jackson, British, wears a tweed jacket, doesn't 56 00:03:25,400 --> 00:03:29,085 dance as well probably. What a design method does is that it 57 00:03:29,085 --> 00:03:33,600 systematizes the process of going from a poorly defined problem to a well 58 00:03:33,600 --> 00:03:37,750 structured solution. And it does that in two ways. 59 00:03:37,750 --> 00:03:42,230 First, it helps us break down the problem into pieces and the solution into pieces. 60 00:03:43,430 --> 00:03:47,700 Any process of designing a program will do that, but when you have a method, it 61 00:03:47,700 --> 00:03:51,270 breaks it down another way, which is it breaks it down into stages of the 62 00:03:51,270 --> 00:03:54,345 process. So what you end up with is kind of a 63 00:03:54,345 --> 00:03:59,750 cross-cutting decomposition of pieces of the solution and pieces of the process. 64 00:03:59,750 --> 00:04:04,725 And that, breaking it down both ways really gives us a very fine degree of 65 00:04:04,725 --> 00:04:07,680 granularity for tackling really hard problems. 66 00:04:07,680 --> 00:04:12,090 By the end of this course, you won't need this design method to write the programs 67 00:04:12,090 --> 00:04:16,250 we're going to write at the beginning. But because you have the design method, 68 00:04:16,250 --> 00:04:19,410 by the end of the course, you're going to be able to write some truly hard 69 00:04:19,410 --> 00:04:22,110 programs. Another point I want to make 'cuz I know 70 00:04:22,110 --> 00:04:26,670 some of you may be concerned about it is that you don't need to be good at math or 71 00:04:26,670 --> 00:04:29,830 science in order to be good at program design. 72 00:04:29,830 --> 00:04:33,130 There may be some specific programs where you need to know some math or science. 73 00:04:33,130 --> 00:04:36,210 But there's other specific programs where you're going to need to know about some 74 00:04:36,210 --> 00:04:40,070 other kind of domain knowledge. You don't need to be good at math or 75 00:04:40,070 --> 00:04:42,654 science to do the programming we're going to do in this class. 76 00:04:42,654 --> 00:04:47,670 Now, here's my last point about the course and this is really important. 77 00:04:47,670 --> 00:04:50,630 This is the kind of thing that you learn by doing. 78 00:04:50,630 --> 00:04:55,430 You don't learn by watching. So, what I want you to be sure to do, as 79 00:04:55,430 --> 00:04:59,820 we work through this, is after you see me work a problem, turn off the video and 80 00:04:59,820 --> 00:05:03,510 try to work it yourself. Or take the practice problems that we'll 81 00:05:03,510 --> 00:05:08,170 give you and work them from scratch without looking at the solution. 82 00:05:08,170 --> 00:05:12,990 If you just watch me do it, you won't learn how to really do it yourself. 83 00:05:12,990 --> 00:05:16,000 Nobody ever got to be very good at playing the violin by watching somebody 84 00:05:16,000 --> 00:05:19,140 else play the violin, and this is the same kind of thing. 85 00:05:19,140 --> 00:05:23,080 It's a learn by doing skill. I hope you enjoy the course. 86 00:05:23,080 --> 00:05:26,410 I'm really excited about it, the TAs are really excited about it. 87 00:05:26,410 --> 00:05:28,310 We hope you're going to get a lot out of it. 88 00:05:28,310 --> 00:05:31,420 And we look forward to hearing from you on the course forums about how things are 89 00:05:31,420 --> 00:05:31,720 going.