1 00:00:12,930 --> 00:00:16,985 This presentation is delivered by the Stanford Center for Professional Development 2 00:00:25,540 --> 00:00:30,010 Hi! Welcome, welcome to CS106B, Programming Abstractions. 3 00:00:30,010 --> 00:00:33,010 (maybe now our mic is on? Oh, that's iteresting.) 4 00:00:34,000 --> 00:00:37,000 The website was probably the most important thing to take away from here, 5 00:00:37,000 --> 00:00:38,000 where can you find information about the class 6 00:00:38,000 --> 00:00:40,000 for the talk today and give some overview and stuff like that, 7 00:00:40,000 --> 00:00:42,000 but this is the home base for all the material. 8 00:00:42,000 --> 00:00:45,390 If you managed to get the handouts on the way in, you're golden. 9 00:00:45,400 --> 00:00:47,160 Otherwise, you can grab them from the website. 10 00:00:47,160 --> 00:00:49,430 There's a lot of background information, staff information, 11 00:00:49,430 --> 00:00:51,520 office hours, all sorts of stuff gathered there. 12 00:00:51,520 --> 00:00:53,120 It's kind of one stop shopping for 13 00:00:53,120 --> 00:00:56,000 figuring things out about our course. 14 00:00:56,000 --> 00:00:57,250 Let me tell you what I'm going to do today. 15 00:00:58,000 --> 00:01:00,480 The first day of, I know a lot of you are shopping 16 00:01:00,480 --> 00:01:01,480 trying to figure out what's the right fit for you, 17 00:01:01,480 --> 00:01:04,000 so hopefully today, I'm going to try to give you some information that will 18 00:01:04,000 --> 00:01:05,000 help you make a good decision. 19 00:01:05,000 --> 00:01:07,000 I want to tell you a little bit of what our course is about, 20 00:01:07,000 --> 00:01:09,090 tell you a little bit about the administration and logistics 21 00:01:09,090 --> 00:01:11,530 most of that stuff is pretty ordinary, and you can read about it. 22 00:01:11,530 --> 00:01:13,250 Of course, I have to do a little bit of marketing. 23 00:01:13,250 --> 00:01:14,880 I get to give you my unbiased opinions 24 00:01:14,880 --> 00:01:17,000 of why this is the absolute best class you could possibly take. 25 00:01:17,000 --> 00:01:20,000 (I get paid per student, you know.) 26 00:01:20,000 --> 00:01:22,000 (That's not true.) 27 00:01:23,000 --> 00:01:24,640 Maybe we'll even have time to check out 28 00:01:24,640 --> 00:01:27,130 a little bit of the C++ language before we're done and set today. 29 00:01:27,460 --> 00:01:30,230 (and this needs to go away) 30 00:01:30,760 --> 00:01:32,590 Let me tell you about CS106. 31 00:01:33,270 --> 00:01:37,000 CS106 is the introductory programming sequence here at Stanford. 32 00:01:37,000 --> 00:01:40,000 It's our version of CS1, where you start at the beginning 33 00:01:40,000 --> 00:01:43,000 when you are interested in learning more about programming. 34 00:01:43,000 --> 00:01:46,000 We have a two-quarter sequence, A and B, that kind of follow together. 35 00:01:46,000 --> 00:01:48,170 They're not particularly tightly coupled, which is to say 36 00:01:48,170 --> 00:01:51,340 if you took A and you took little a break, you could come back to B. 37 00:01:51,340 --> 00:01:54,160 Or maybe you you actually took a variant of 106a type course 38 00:01:54,160 --> 00:01:59,000 that is similar at another institution, you're probably in a fine place for starting mid stream. 39 00:01:59,000 --> 00:02:04,430 We also have an alternate form of B, the CS106X, which is kind of an honors version of that second course. 40 00:02:04,430 --> 00:02:07,090 So after you've taken that first course and you're feeling really jazzed up, 41 00:02:07,130 --> 00:02:11,000 there is an alternative more intense way to get through the second course that's 42 00:02:11,000 --> 00:02:14,000 offered. It's offered this quarter, in fact, so if you're 43 00:02:14,000 --> 00:02:17,000 thinking actually about that, that is an option for you as well as 44 00:02:17,000 --> 00:02:18,000 sticking with us. 45 00:02:18,000 --> 00:02:19,570 What do we do in 106A? 46 00:02:19,570 --> 00:02:22,230 'A's official title is programming methodology. 47 00:02:22,870 --> 00:02:25,000 It is starting at the very beginning 48 00:02:25,000 --> 00:02:26,000 and assuming you have no background in programming. 49 00:02:26,000 --> 00:02:29,000 It's teaching you how it works, 50 00:02:29,000 --> 00:02:32,000 what the languages look like, what the syntax is like, what things you need 51 00:02:32,000 --> 00:02:34,580 to know about how to solve problems using a computer. 52 00:02:34,580 --> 00:02:38,080 It covers a lot of the fundamentals about logic control 53 00:02:38,080 --> 00:02:41,000 and in general, I think the big issues of 106A 54 00:02:41,000 --> 00:02:44,000 have less to do with any particular syntax or 55 00:02:44,000 --> 00:02:46,000 feature that you learn about a language but 56 00:02:46,000 --> 00:02:47,880 about how do you solve problems on a computer? 57 00:02:47,880 --> 00:02:49,000 Somebody gives you a specification of 58 00:02:49,000 --> 00:02:50,000 you need to write a program that does X, 59 00:02:50,000 --> 00:02:52,000 and you have to figure out how to make that happen, 60 00:02:52,000 --> 00:02:54,020 how to break it down, 61 00:02:54,020 --> 00:02:57,000 how to step through it, how to develop it, how to test it, 62 00:02:57,000 --> 00:03:00,000 how to iterate on it, how to make changes in it later, 63 00:03:00,000 --> 00:03:04,000 how to debug it when it's not working well, 64 00:03:04,000 --> 00:03:06,700 and those things, (I think), transcend any particular language. 65 00:03:06,700 --> 00:03:09,000 We happen to use the Java programming language in our 106A course 66 00:03:09,000 --> 00:03:12,790 because it's a great tool for introductory programming, 67 00:03:13,000 --> 00:03:15,060 but I don't think of that as being really critical. 68 00:03:15,060 --> 00:03:17,000 In fact, if your introductory course was in some other language, 69 00:03:17,000 --> 00:03:19,000 some other fairly modern, high level language 70 00:03:19,000 --> 00:03:20,000 - let's say 71 00:03:20,000 --> 00:03:24,940 you've learned in Python, C, Scheme, or something other than Java, 72 00:03:25,000 --> 00:03:28,000 you're probably still fine, 'cause what we're really counting on in B is that you know how to 73 00:03:28,000 --> 00:03:30,500 program and think like a computer scientist 74 00:03:30,500 --> 00:03:32,000 know how to solve problems 75 00:03:32,000 --> 00:03:34,000 Not a lot of the details of the syntax 76 00:03:34,000 --> 00:03:37,000 are going to be important to us. 77 00:03:37,000 --> 00:03:40,000 "B" picks up from there, saying okay, you've got some fundamentals. 78 00:03:40,000 --> 00:03:43,000 Let's start really learning some of the techniques that extend the range of 79 00:03:43,000 --> 00:03:45,000 problems you can solve. 80 00:03:45,000 --> 00:03:48,180 We look at recursion, which is one of the fundamental 81 00:03:48,180 --> 00:03:50,000 problem solving techniques that involves using 82 00:03:50,000 --> 00:03:52,150 something akin to mathematical induction 83 00:03:52,150 --> 00:03:54,000 to solve problems in terms of themselves. 84 00:03:54,000 --> 00:03:56,050 Looking at a lot of algorithms for sorting 85 00:03:56,050 --> 00:03:57,000 and searching and hashing and doing 86 00:03:57,000 --> 00:03:58,000 things efficiently, knowing how to compare 87 00:03:58,000 --> 00:04:01,000 and contrast alternatives in algorithms, 88 00:04:01,000 --> 00:04:04,040 having some formalisms by which to discuss those things, 89 00:04:04,040 --> 00:04:08,000 and learn some of the classics that are out there for solving these problems. 90 00:04:08,000 --> 00:04:11,000 The dynamic data structure, which involves use of pointers to construct things 91 00:04:11,000 --> 00:04:14,010 like lists, trees and heaps, graphs that 92 00:04:15,000 --> 00:04:18,000 model certain structures that are very effective in solving certain kinds of 93 00:04:18,000 --> 00:04:19,570 problems - we'll work through those. 94 00:04:19,570 --> 00:04:22,000 A large part of our time is spent on this concept 95 00:04:22,000 --> 00:04:23,900 of data abstraction, which is why 96 00:04:23,900 --> 00:04:27,000 abstraction shows up as the main word in our title. 97 00:04:29,020 --> 00:04:31,000 As we start to solve more and more complex problems, 98 00:04:31,000 --> 00:04:34,000 the code itself can kind of become overwhelming if we don't have some 99 00:04:34,000 --> 00:04:36,000 technique for managing that complexity. 100 00:04:36,000 --> 00:04:39,910 One of the big themes for 106B is how we can use this idea of abstraction, 101 00:04:39,910 --> 00:04:42,000 building something and dealing with the low level details but then 102 00:04:42,000 --> 00:04:44,000 closing up the box and now treating it as a 103 00:04:44,000 --> 00:04:47,880 a fixed entity and building on top of that 104 00:04:47,880 --> 00:04:49,000 and then closing another layer around that 105 00:04:49,000 --> 00:04:52,000 as a way of working on something, finishing it 106 00:04:52,000 --> 00:04:53,480 moving on to some larger piece without 107 00:04:53,480 --> 00:04:55,710 having those details clouding our way. 108 00:04:55,710 --> 00:04:59,000 It's a very powerful technique for solving larger problems. 109 00:04:59,000 --> 00:05:00,000 In that context, 110 00:05:00,000 --> 00:05:04,000 we'll be looking at some of the classic data structures, 111 00:05:04,000 --> 00:05:06,000 like stacks, queues, lists, maps and sets 112 00:05:06,000 --> 00:05:08,000 as part of the domain for that. 113 00:05:08,000 --> 00:05:11,000 We do happen to use the C++ programming language, 114 00:05:11,000 --> 00:05:14,000 but this is not a C++ course, so to be clear about what you're 115 00:05:14,000 --> 00:05:16,000 getting versus what you wanted, 116 00:05:16,000 --> 00:05:17,800 we use Java here (as a vehicle) [a]. 117 00:05:17,800 --> 00:05:20,000 We use C++ here (as a vehicle) [b]. 118 00:05:20,000 --> 00:05:22,700 We happen to think there are good reasons 119 00:05:22,700 --> 00:05:24,390 to actually expose you to both languages. 120 00:05:24,390 --> 00:05:25,960 (ill talk about that more later) 121 00:05:26,000 --> 00:05:29,000 In particular, C++ is an enormous language. 122 00:05:29,000 --> 00:05:30,990 It has a lot of language features as well as 123 00:05:30,990 --> 00:05:32,000 a very very large standard library, 124 00:05:32,000 --> 00:05:33,950 and our goal is not at all 125 00:05:33,950 --> 00:05:36,000 to turn you into this industrial strength 126 00:05:36,000 --> 00:05:37,000 knows every detail about quirks 127 00:05:37,000 --> 00:05:38,000 and ins and outs of C++. 128 00:05:38,910 --> 00:05:41,000 There is another class, 193D, that 129 00:05:41,000 --> 00:05:43,000 does attempt to do that. 130 00:05:43,000 --> 00:05:45,000 In fact, if that's what you're looking for, 131 00:05:45,000 --> 00:05:47,000 I suggest you take a look at that. 132 00:05:47,000 --> 00:05:47,970 What we're here about is learning 133 00:05:47,970 --> 00:05:50,000 advanced programming techniques 134 00:05:50,000 --> 00:05:52,020 taking those foundations and building on them 135 00:05:52,020 --> 00:05:53,990 to be able to solve more interesting problems. 136 00:05:53,990 --> 00:05:54,990 We happen to use C++. 137 00:05:54,990 --> 00:05:56,000 You will learn some C++, but I almost 138 00:05:56,000 --> 00:05:58,000 consider it a side effect 139 00:05:58,000 --> 00:06:00,000 of what we're doing. 140 00:06:03,950 --> 00:06:06,000 Just a little note on placement 141 00:06:06,000 --> 00:06:09,040 if you're kind of in between and not really sure, 142 00:06:09,040 --> 00:06:13,000 these are the very very rough guidelines, but they give you 143 00:06:13,000 --> 00:06:17,000 some idea of which groups gravitate where. 144 00:06:17,000 --> 00:06:18,000 If you are new to programming or 145 00:06:18,000 --> 00:06:20,000 you're not confident about your background 146 00:06:20,000 --> 00:06:22,030 - maybe it was a long time ago, if it was self-taught. 147 00:06:22,030 --> 00:06:23,000 Maybe it was in a course that you 148 00:06:23,000 --> 00:06:25,090 felt was not as good as it could have been 149 00:06:26,000 --> 00:06:27,000 or you didn't do as well in it, 150 00:06:27,000 --> 00:06:29,000 106A is a great place to start. 151 00:06:29,000 --> 00:06:31,000 It actually is by all accounts 152 00:06:31,000 --> 00:06:34,000 an extremely popular course at Stanford 153 00:06:34,000 --> 00:06:36,090 and services a wide group of people 154 00:06:36,090 --> 00:06:39,000 with a little bit of background or no background. 155 00:06:39,000 --> 00:06:42,000 All very well getting them up to speed. 156 00:06:42,000 --> 00:06:45,000 If you do have something like a solid first course experience 157 00:06:45,000 --> 00:06:47,000 So you did well in 106A or took a similar course 158 00:06:47,000 --> 00:06:48,970 or perhaps even self-taught your way 159 00:06:48,970 --> 00:06:53,010 through a lot of those materials and you feel ready to move on, 106B. 160 00:06:53,010 --> 00:06:55,000 An AP course in high school - 161 00:06:55,000 --> 00:06:59,000 the A curriculum is a pretty good match for 106A here 162 00:06:59,000 --> 00:07:00,000 so you're in a great place. 163 00:07:00,000 --> 00:07:01,980 If you have this and you've got a little bit more going for you 164 00:07:01,980 --> 00:07:04,000 or you're super enthused and you have a 165 00:07:04,000 --> 00:07:06,000 lot of extra time this quarter 166 00:07:06,000 --> 00:07:09,000 and want to sit in the company of only 167 00:07:09,000 --> 00:07:11,000 the uber geeks, 168 00:07:11,000 --> 00:07:13,000 you can check out 106X, 169 00:07:13,000 --> 00:07:15,000 Which is a varient of B 170 00:07:15,000 --> 00:07:17,000 which covers the same kind of topical ground 171 00:07:17,000 --> 00:07:18,000 but at a different level intensity. 172 00:07:18,000 --> 00:07:20,000 It amps up a little bit of the assignments, 173 00:07:20,010 --> 00:07:22,960 covers some of the material that we won't get a chance to cover, 174 00:07:23,930 --> 00:07:25,000 and 175 00:07:25,000 --> 00:07:27,000 just pushes the envelope a little bit there. 176 00:07:27,000 --> 00:07:30,000 If you have experience comparable to the first two courses 177 00:07:30,000 --> 00:07:31,000 - you've 178 00:07:31,940 --> 00:07:34,000 done all the things that we're talking about here in B 179 00:07:34,000 --> 00:07:35,000 and you feel comfortable with it, 180 00:07:35,000 --> 00:07:37,000 it might be that the right place for you is 107, 181 00:07:37,000 --> 00:07:39,990 which is the third course in our sequence. 182 00:07:39,990 --> 00:07:42,890 And just skipping over our 106 courses entirely 183 00:07:43,920 --> 00:07:45,970 That's somewhat rare, 184 00:07:45,970 --> 00:07:47,000 so if you're thinking about that, I encourage you to 185 00:07:47,000 --> 00:07:49,010 talk to me a little bit to make sure 186 00:07:49,010 --> 00:07:51,000 that you won't be missing out on something important 187 00:07:51,000 --> 00:07:54,000 in doing so, but certainly there are students who have 188 00:07:55,000 --> 00:07:56,970 for example, the AP CS A-B curriculum 189 00:07:56,970 --> 00:07:59,000 is pretty comparable to this course here, 190 00:07:59,000 --> 00:08:02,510 and so depending on how high quality the course you had was, 191 00:08:02,510 --> 00:08:04,000 it might very well be that 107 is right. 192 00:08:04,000 --> 00:08:06,000 In some situations where that course was a little bit lacking, 193 00:08:06,000 --> 00:08:09,050 there may be some ways that we can help reinforce 194 00:08:09,050 --> 00:08:10,970 the things you've learned and build a stronger foundation 195 00:08:10,970 --> 00:08:14,030 to move forward from rather than jumping ahead. 196 00:08:15,000 --> 00:08:18,000 Any questions about placement? 197 00:08:20,000 --> 00:08:22,000 That sort of thing. 198 00:08:22,000 --> 00:08:23,650 (Am I talking too fast?) 199 00:08:23,830 --> 00:08:27,000 (good, I like that, you can sit in the front whenever you want) 200 00:08:27,980 --> 00:08:30,000 Lets talk philosophy 201 00:08:30,000 --> 00:08:34,000 I think there's a statement about what we officially are, 202 00:08:34,000 --> 00:08:38,000 but I also think that 106 has a long tradition at Stanford 203 00:08:38,000 --> 00:08:40,000 that comes back from student motivation. 204 00:08:40,860 --> 00:08:43,000 I was here as an undergrad in the 80s 205 00:08:43,000 --> 00:08:45,000 when 106s were just getting off the ground, 206 00:08:45,000 --> 00:08:47,000 and at the time, Stanford only had a graduate 207 00:08:47,000 --> 00:08:49,000 computer science department, and 208 00:08:49,000 --> 00:08:52,000 the belief in the nsaid period for computer science 209 00:08:52,000 --> 00:08:53,960 was you should get a math degree, 210 00:08:53,960 --> 00:08:55,000 and only then would you be mature enough 211 00:08:55,000 --> 00:08:57,000 to learn about computers. 212 00:08:57,000 --> 00:08:59,510 You weren't ready as a freshman. 213 00:09:00,000 --> 00:09:02,000 was a groundswell of Stanford students 214 00:09:02,000 --> 00:09:04,950 were like said 'We want access to programming. We want it.' 215 00:09:04,950 --> 00:09:06,000 That made it happen. 216 00:09:06,000 --> 00:09:09,000 and so part of the 106 was a really careful thought about what the 106's 217 00:09:09,000 --> 00:09:12,000 would be a Stanford and what we want them to be 218 00:09:12,000 --> 00:09:13,960 in a philosophical sense. 219 00:09:13,960 --> 00:09:16,210 One is that we welcome students of all majors and backgrounds. 220 00:09:16,210 --> 00:09:19,000 We don't have a version of 106 that's for the majors or 221 00:09:19,000 --> 00:09:21,090 potential majors and a version that's for the non-majors 222 00:09:21,090 --> 00:09:24,000 and a version that's terminal (you just want to get out of here). 223 00:09:24,000 --> 00:09:27,000 We really think that we can bring you all together 224 00:09:27,000 --> 00:09:31,000 and design a course that addresses this wide 225 00:09:31,000 --> 00:09:32,990 disparate group but still service that well. 226 00:09:33,000 --> 00:09:36,000 Partly because you don't know that you are a CS major yet. 227 00:09:36,000 --> 00:09:39,000 I'm going to turn you into a CS major. That's my plan. 228 00:09:39,000 --> 00:09:42,000 At Stanford right, not having to make that choice about a major 229 00:09:42,000 --> 00:09:44,000 until into junior year is a gift 230 00:09:45,000 --> 00:09:49,000 to allow you to explore and to feel unencumbered by having made some 231 00:09:49,000 --> 00:09:51,000 decision when you applied, and I think it's important to respect that 232 00:09:51,000 --> 00:09:53,970 gift that Stanford gave you by trying to make sure our courses don't 233 00:09:54,010 --> 00:09:56,000 funnel you one way or the other before you figure it out. 234 00:09:57,000 --> 00:09:58,000 You are all welcome here. 235 00:09:58,000 --> 00:10:00,000 We try to make it accessible to everyone. 236 00:10:00,000 --> 00:10:03,000 We have certain plans that help to make that work. 237 00:10:03,000 --> 00:10:07,000 We do try to provide a solid, practical foundation in programming 238 00:10:07,000 --> 00:10:11,000 that given our placement at Stanford in the middle of the Silicon Valley, 239 00:10:11,000 --> 00:10:14,000 there's kind of a strong influence for us to try to produce students 240 00:10:14,000 --> 00:10:16,000 who from the get go are 241 00:10:16,000 --> 00:10:18,000 learning things that are actually quite useful 242 00:10:18,000 --> 00:10:19,000 outside of the classroom 243 00:10:19,000 --> 00:10:22,000 rather than teach you a very academic 244 00:10:22,000 --> 00:10:24,000 interesting and mathematical language like Scheme 245 00:10:24,000 --> 00:10:27,000 that is very 246 00:10:27,000 --> 00:10:29,040 rarely used outside of the classroom. 247 00:10:29,040 --> 00:10:31,000 We're trying to teach you on the tools, 248 00:10:31,000 --> 00:10:34,000 languages and techniques that are actually in active practice. 249 00:10:34,000 --> 00:10:38,000 We are using Java and C++, two of the most prevalent languages 250 00:10:38,000 --> 00:10:40,070 out in the industry, and we do a lot of learn by doing. 251 00:10:40,070 --> 00:10:42,000 We assign challenging, full-fledged programs that you work on and you build 252 00:10:42,000 --> 00:10:46,650 and so it's not designed to be academic exercises. 253 00:10:47,000 --> 00:10:54,040 You really are building skills that have applicability here and outside of the class. 254 00:10:55,000 --> 00:10:58,000 We have a big emphasis on 255 00:10:58,000 --> 00:10:59,050 truth and beauty. 256 00:11:01,000 --> 00:11:04,010 This is one area in which some of the substitute courses 257 00:11:04,010 --> 00:11:07,000 that we have seen students come in with have a little bit more trouble with 258 00:11:07,000 --> 00:11:10,000 is tackling this part of it, which is that there are 259 00:11:10,000 --> 00:11:12,000 a lot of ways you can get a program to work. 260 00:11:12,000 --> 00:11:14,000 Many of them are not pretty. 261 00:11:14,000 --> 00:11:17,000 You can just type and type and type and (Monkies shakespeare, whatnot) 262 00:11:17,000 --> 00:11:19,000 eventually, you can get your way to something that works. 263 00:11:19,020 --> 00:11:23,010 Well +1, -1, what if I move it here what if I copy and paste this there 264 00:11:23,010 --> 00:11:25,020 what if I change that name? 265 00:11:25,020 --> 00:11:27,000 That, in the end, might produce a program that from 266 00:11:27,000 --> 00:11:28,000 external appearances works. 267 00:11:28,000 --> 00:11:33,720 It plays hangman, or whatever was the desired goal, but that internally is a mess. 268 00:11:34,000 --> 00:11:36,980 It's not well structured. It's not well commented. 269 00:11:36,980 --> 00:11:40,000 It's not easy to understand. It wouldn't be easy to modify. 270 00:11:40,000 --> 00:11:42,000 It makes a lot of decision that are really sub optimal, 271 00:11:42,000 --> 00:11:48,000 and we're really interested in producing engineers 272 00:11:48,000 --> 00:11:52,000 that have a good sense of design and really appreciate what is involved in writing 273 00:11:52,000 --> 00:11:56,000 good, well designed software, not just working software. 274 00:11:56,000 --> 00:11:57,000 We will be giving you feedback on 275 00:11:57,000 --> 00:12:00,000 both the correctness and functionality of your code 276 00:12:01,740 --> 00:12:05,000 as important if not more so, 277 00:12:05,000 --> 00:12:08,000 also on how well we think you did at designing and implementing and 278 00:12:08,000 --> 00:12:11,030 writing code that is of a high quality. 279 00:12:11,030 --> 00:12:12,030 We make a big deal out of that. 280 00:12:12,030 --> 00:12:14,000 That is something that is not always shared by other classes, 281 00:12:14,000 --> 00:12:16,510 and so in particular, someone who is self-taught 282 00:12:16,510 --> 00:12:20,000 or in a class that didn't emphasize this might feel that there's a little bit of a gap there 283 00:12:20,000 --> 00:12:21,000 we need to make that up with you, 284 00:12:21,000 --> 00:12:23,490 and we can work with you. 285 00:12:23,490 --> 00:12:26,000 This is a very individual thing, because there's not one good example of 286 00:12:26,000 --> 00:12:28,000 the perfect style 287 00:12:28,000 --> 00:12:31,000 in the way that a lot of different people 288 00:12:31,000 --> 00:12:34,000 express themselves in written communication 289 00:12:34,000 --> 00:12:34,990 very well but differently. 290 00:12:34,990 --> 00:12:36,500 The same thing is true about programs. 291 00:12:36,500 --> 00:12:40,000 You will have your own unique style, and we'll work with you to coach you on getting your 292 00:12:40,000 --> 00:12:44,010 style to come through and be beautiful and elegant. 293 00:12:46,000 --> 00:12:50,000 This kind of comes back to point 1 we make heavy use of undergraduate 294 00:12:50,000 --> 00:12:53,000 section leaders as mentors in this program. 295 00:12:53,000 --> 00:12:59,000 We have a staff of 50 or so, undergraduates who work with the 106A, B and X courses as a team. 296 00:12:59,000 --> 00:13:02,000 They have specific responsibilities with their section, 297 00:13:02,000 --> 00:13:06,000 so mentoring and grading and meeting with 298 00:13:06,000 --> 00:13:09,000 sectionees to give individualized feedback on their programs 299 00:13:09,000 --> 00:13:10,000 as well as 300 00:13:10,000 --> 00:13:13,760 answering questions, solving problems, being in the lair 30 plus hours. 301 00:13:13,760 --> 00:13:16,000 They're most weekday nights about six hours 302 00:13:16,000 --> 00:13:17,000 and often 303 00:13:17,000 --> 00:13:20,000 well past the midnight when it's supposed to cut off solving people's problems, 304 00:13:20,000 --> 00:13:23,000 helping when you get stuck, answering your questions 305 00:13:23,000 --> 00:13:26,000 and making sure you're all making forward progress. 306 00:13:26,000 --> 00:13:29,000 That comes back to point 1. 307 00:13:29,000 --> 00:13:31,000 In some universities where they're choosing to use their intro course as a weeder, 308 00:13:31,000 --> 00:13:33,690 it's like let's separate the wheat from the chaff early 309 00:13:33,690 --> 00:13:35,000 and let's make it really hard and not 310 00:13:35,000 --> 00:13:38,000 provide too much support, and that way we'll make sure we get the people we want. 311 00:13:38,000 --> 00:13:41,000 We have a different idea. 312 00:13:41,000 --> 00:13:42,000 Programming is hard, especially when you're learning. 313 00:13:42,000 --> 00:13:46,000 There's a lot of complexity to master, and there are a lot of details that can 314 00:13:46,000 --> 00:13:49,000 interfere with moving forward, and we don't want you 315 00:13:49,000 --> 00:13:52,000 to get stuck on something that we can very easily resolve for you. 316 00:13:52,000 --> 00:13:55,980 So make sure you have accessible staff members in person, in email 317 00:13:56,000 --> 00:13:58,000 and regularly in section 318 00:13:58,000 --> 00:14:04,000 to help get through the roadblocks and keep you moving forward. 319 00:14:04,000 --> 00:14:08,000 What do you need to know to be sure you're going to do well? 320 00:14:08,000 --> 00:14:12,000 There are people who think to be a good computer programmer, 321 00:14:12,000 --> 00:14:16,000 you need to be good at math, logic, and drinking Jolt. 322 00:14:16,000 --> 00:14:22,010 I think it it comes down to personality traits than any 323 00:14:22,020 --> 00:14:24,500 particular technique or skill. 324 00:14:24,500 --> 00:14:26,000 You don't need to be good at math. 325 00:14:26,000 --> 00:14:29,000 How much calculus and trig shows up in this? 326 00:14:29,000 --> 00:14:32,000 Not very much. A little bit of logic - that helps. 327 00:14:32,000 --> 00:14:36,990 I think it comes down to traits like curiosity and determination and hard work. 328 00:14:37,000 --> 00:14:37,980 Starting early, 329 00:14:37,980 --> 00:14:41,000 asking questions when you don't understand something, 330 00:14:41,000 --> 00:14:43,510 trying to solve the problem by logic I think is very valuable 331 00:14:43,510 --> 00:14:45,000 Knowing how to think, how to make steps 332 00:14:45,000 --> 00:14:47,960 why this case works and why that case doesn't work 333 00:14:47,970 --> 00:14:51,720 thinking about that logically 334 00:14:51,755 --> 00:14:55,735 (well its like the movie theater now you guys will all go to sleep) (oh look they came back) [lights] 335 00:14:57,000 --> 00:15:01,120 I think these are the skills that serve you the best in this class 336 00:15:01,120 --> 00:15:04,010 And probably every other thing you'd want to tackle. 337 00:15:04,010 --> 00:15:08,000 There is a lot of time that will be spent to master this. 338 00:15:08,000 --> 00:15:11,110 I can talk about programming all I want, (bla, bla, bla) 339 00:15:11,110 --> 00:15:13,000 and you can go oh, yeah, that makes a lot of sense. 340 00:15:13,000 --> 00:15:16,000 But when you go to write it yourself, it's a very different experience. 341 00:15:16,000 --> 00:15:19,960 That's where being focused and staying on task 342 00:15:20,000 --> 00:15:25,040 and getting help when you get stuck can help you move through that 343 00:15:25,080 --> 00:15:28,080 (Any questions about 106?) (What we do,) 344 00:15:28,090 --> 00:15:32,070 (Why we do what we do.) (You guys have nothing to say) 345 00:15:32,070 --> 00:15:34,070 (your afraid of having your) (voice recorded aren't you?) 346 00:15:34,070 --> 00:15:39,020 (For all time your parents will come and see) (that you come to class you can prove it) 347 00:15:40,010 --> 00:15:44,000 My unbiased opinion about why 106B is one of the best courses at Stanford 348 00:15:44,000 --> 00:15:47,000 (of course I am not at all unbiased) 349 00:15:47,000 --> 00:15:50,000 it's going to be 350 00:15:50,000 --> 00:15:53,000 totally obvious when I say these things, and you guys are going to have to go 351 00:15:53,000 --> 00:15:54,960 along with it. I'm actually a 352 00:15:55,000 --> 00:15:58,000 geek, really big time, and I happen to love programming. 353 00:15:58,000 --> 00:16:00,000 That's why I'm a perfect fit for teaching this class. 354 00:16:00,000 --> 00:16:01,490 I have taught 106 B or X more than I've taught 355 00:16:01,490 --> 00:16:04,000 any other class that I've taught at Stanford in my time here, 356 00:16:04,000 --> 00:16:06,330 and that's because each quarter when we're setting the schedule, 357 00:16:06,330 --> 00:16:08,000 I say give me B. Give me X. 358 00:16:08,000 --> 00:16:09,000 Because there's no better course to teach. 359 00:16:09,000 --> 00:16:12,000 Programming is just awesome. 360 00:16:12,000 --> 00:16:15,000 If you love programming, I think there's almost nothing better to do in the world. 361 00:16:15,000 --> 00:16:17,510 You have this task. You're trying to get there. 362 00:16:17,510 --> 00:16:19,170 You're coding. You're making stuff happen. 363 00:16:19,170 --> 00:16:21,940 You're testing, iterating you're running. You see stuff. 364 00:16:21,950 --> 00:16:25,020 You build things. When you're done, you know it works. 365 00:16:25,020 --> 00:16:28,000 That feeling when you write a paper and go "was it good enough?" 366 00:16:28,000 --> 00:16:30,000 "well I dont know" you could probably go bolster up this argument 367 00:16:30,000 --> 00:16:32,280 When a program works, you know it. 368 00:16:32,290 --> 00:16:36,000 It does what it's supposed to do. It gets the right answer. 369 00:16:36,000 --> 00:16:38,020 It plays the game. It solves the problem. 370 00:16:38,020 --> 00:16:42,000 Finding and fixing that last bug - although debugging is one of the last 371 00:16:42,000 --> 00:16:45,000 aspects of programming a lot of people bemoan about; I happen to think that if you 372 00:16:45,000 --> 00:16:49,000 are driven by debugging, that is one of the most awesome detective stories 373 00:16:49,000 --> 00:16:53,980 Trying to figure out why it happened when you did this, when you moved that why it went this way 374 00:16:54,000 --> 00:16:57,000 and what this effect caused and understanding once you make the fix how it fixes it 375 00:16:57,000 --> 00:16:58,930 staying up late. 376 00:16:58,930 --> 00:17:02,000 I have stayed up late more nights debugging than anything else in my life, 377 00:17:02,000 --> 00:17:04,000 and I'm not sad about that at all. 378 00:17:04,000 --> 00:17:08,000 That means I'm in the right place. Hopefully, some of that resonates with you. 379 00:17:09,020 --> 00:17:12,000 If that sounds really awful to you, 380 00:17:12,000 --> 00:17:14,000 hopefully we can change your mind a bit. 381 00:17:14,000 --> 00:17:18,000 That is, in some ways, part of what drives computer science is this 382 00:17:18,000 --> 00:17:21,000 wanting to build things. We are engineers. 383 00:17:21,000 --> 00:17:24,000 We have this computer science name. Just remember 384 00:17:24,000 --> 00:17:29,000 - any subject that's name is something science is not a science. 385 00:17:29,000 --> 00:17:31,950 We're trying to puff ourselves up a bit. 386 00:17:32,000 --> 00:17:34,000 We do a lot of really great work, 387 00:17:34,000 --> 00:17:37,000 and there are a lot of neat scientific principles and theories that 388 00:17:37,000 --> 00:17:38,000 underpin what we do, 389 00:17:38,000 --> 00:17:41,000 but in the end, I think what drives a lot of us is just 390 00:17:41,000 --> 00:17:44,990 the engineering - building stuff that is really neat. 391 00:17:45,010 --> 00:17:49,000 It kind of reminds me that my husband's a mechanical engineer, and so I 392 00:17:49,000 --> 00:17:52,220 used to be envious, because he would always build things. 393 00:17:52,220 --> 00:17:57,000 M.E.'s always toting foam core around the campus on their paper bicycles and stuff, and it's like 394 00:17:57,000 --> 00:18:00,000 they build all these things. Now, having watched all the things he builds, it's like 395 00:18:00,000 --> 00:18:02,000 mechan-e is really hard. You need all these materials. 396 00:18:02,000 --> 00:18:05,320 You need all these tools. You need this mill, you need this lathe 397 00:18:05,320 --> 00:18:07,430 You need the hotmelt glue gun, which burns the heck out of your fingers 398 00:18:07,430 --> 00:18:08,160 anytime you touch it. 399 00:18:08,160 --> 00:18:10,660 To build anything. 400 00:18:10,930 --> 00:18:12,560 In computer science, you don't need anything. 401 00:18:12,560 --> 00:18:14,000 You need a compiler and you need a computer. 402 00:18:14,000 --> 00:18:15,030 You need your thought. 403 00:18:15,030 --> 00:18:18,000 It's like an abstraction we built out of our brains. 404 00:18:18,000 --> 00:18:20,000 There's this relatively small set of things that you need to master 405 00:18:20,000 --> 00:18:23,990 and then you can combine them in these very sophisticated and interesting ways to solve all sorts of problems. 406 00:18:24,000 --> 00:18:26,000 There's a very low overhead, 407 00:18:26,000 --> 00:18:30,000 and the range of things you can attack with the same set of skills is huge. 408 00:18:30,000 --> 00:18:36,020 Every domain out there can benefit from somebody applying computers in a useful way without fail. 409 00:18:36,020 --> 00:18:39,080 There's all sorts of problems where technology is part of the answer 410 00:18:39,080 --> 00:18:41,000 not the only answer, but certainly something that you can take 411 00:18:41,000 --> 00:18:44,000 whatever interest you have and combine it with computer science 412 00:18:44,000 --> 00:18:47,000 and construct something cool. 413 00:18:47,000 --> 00:18:51,000 I happen to think that what happens in the second course is amazing. 414 00:18:51,000 --> 00:18:54,000 The first course, you've kind of got to get up to speed, 415 00:18:54,000 --> 00:18:57,000 and there's a lot of basic material that needs to get covered, 416 00:18:57,000 --> 00:19:00,000 and it does set you on the right path, but in this course, we really 417 00:19:00,000 --> 00:19:04,000 get to blossom beyond the basic things. 418 00:19:04,000 --> 00:19:07,000 There are a bunch of really neat and very accessible techniques 419 00:19:07,000 --> 00:19:11,000 that a second quarter student can understand and master and do really cool things with. 420 00:19:11,000 --> 00:19:14,050 You can learn how to do something like create a database 421 00:19:14,050 --> 00:19:17,000 that has a million entries 422 00:19:17,000 --> 00:19:20,900 and then ask for somebody by name and be able to instantaneously be able to find that name. 423 00:19:20,900 --> 00:19:23,000 Not by looking through a million entries trying to find that name 424 00:19:23,000 --> 00:19:26,000 Change the size of it. Make it ten million, a billion, and still be able to 425 00:19:26,000 --> 00:19:29,000 provide that kind of instantaneous access. You're going to learn how to do that. 426 00:19:29,000 --> 00:19:32,000 The technique is not some superhuman thing. 427 00:19:32,000 --> 00:19:34,000 It's something very clever, admittedly, 428 00:19:34,000 --> 00:19:36,000 but it's very accessible. 429 00:19:36,000 --> 00:19:40,000 Taking that same million thing and learning how to sort it efficiently. 430 00:19:40,000 --> 00:19:42,000 What if you happen to know things about how it's almost sorted but just a little but out of sorts? 431 00:19:42,000 --> 00:19:47,000 Are there ways you can actually make it even faster to put it in sorted order? 432 00:19:47,000 --> 00:19:50,000 There are techniques, for example, like recursion that take on problems that 433 00:19:50,000 --> 00:19:53,000 you might not have any idea when you first look at the problem how to solve 434 00:19:53,000 --> 00:19:57,450 but once you've got your head around recursion, you can look at that and say 435 00:19:57,450 --> 00:20:01,030 "I can write a five line function that will solve that problem." 436 00:20:01,030 --> 00:20:05,669 This is the kind of power we're going to give you with our quarter together. 437 00:20:05,669 --> 00:20:10,000 There's a bunch of really amazing theoretical and algorithmic stuff to explore. 438 00:20:10,000 --> 00:20:14,000 That really increases the kind of things you can do with programming. 439 00:20:14,000 --> 00:20:17,840 I'm particularly fond of it. 440 00:20:18,010 --> 00:20:20,010 As always, I think 441 00:20:20,010 --> 00:20:23,000 the section leading program that we have created and built at Stanford 442 00:20:23,000 --> 00:20:27,030 Is a huge part of what makes our 106 courses so successful, 443 00:20:27,030 --> 00:20:28,000 and so 444 00:20:28,000 --> 00:20:32,990 having somebody who's individually working with you, meeting with you weekly 445 00:20:34,000 --> 00:20:37,000 and giving you that feedback that's individualized and personalized for you 446 00:20:37,000 --> 00:20:41,000 and helping you get through the rough spots is a lot of what helps to make the experience 447 00:20:41,000 --> 00:20:44,000 very fun and very personal, too. 448 00:20:44,000 --> 00:20:48,910 What section leaders do I have here? Any? Not a one. 449 00:20:49,000 --> 00:20:52,000 Those fabulous section leaders. Where are they again? section leaders? 450 00:20:52,000 --> 00:20:54,030 Did i say they were fabulous? I meant. laughs Uhh no. 451 00:20:54,030 --> 00:20:57,000 We haven't yet identified who's going to what class, so maybe they're all 452 00:20:57,000 --> 00:21:00,851 thinking they're going to go somewhere else, but they're wrong. We'll get some. 453 00:21:03,940 --> 00:21:05,000 106B - great. You agree? 454 00:21:05,000 --> 00:21:07,000 Have I convinced you? 455 00:21:07,000 --> 00:21:10,000 Is anybody still hesitant? 456 00:21:13,000 --> 00:21:16,000 Is it a lot of work? Oh, no. laughs 457 00:21:16,000 --> 00:21:19,000 I just exude it. Osmosis. you learn it. 458 00:21:21,980 --> 00:21:24,920 Let me tell you a little bit about logistics. 459 00:21:26,000 --> 00:21:30,000 There are some random things you may want to know about how the class works. 460 00:21:30,000 --> 00:21:34,000 That the first day I am supposed to do. 461 00:21:34,000 --> 00:21:38,360 We're going to meet here Monday, Wednesday, Friday 2:15 to 3:05. 462 00:21:38,360 --> 00:21:41,920 In glorious download [ FIXME ] audiotorium 463 00:21:41,930 --> 00:21:45,060 It looks like we almost exactly fit in our classroom, 464 00:21:45,060 --> 00:21:47,790 which means we're all going to be very friendly and cozy. 465 00:21:47,790 --> 00:21:51,131 The lectures are being taped and are available online, 466 00:21:51,131 --> 00:21:56,540 and so that has the neat side effect that you can watch them and review them later. 467 00:21:56,540 --> 00:21:58,000 You could watch them lots of times. 468 00:21:58,000 --> 00:22:01,000 It also means that if it were pouring rain and you were sitting at home in your bunny slippers, 469 00:22:01,000 --> 00:22:04,000 you could just say hey, I'm not going outside and you could 470 00:22:04,000 --> 00:22:06,000 turn on your computer and watch. 471 00:22:06,000 --> 00:22:09,000 I'm a big fan of having you come in person. That's because I don't want to 472 00:22:09,000 --> 00:22:11,000 lecture to an empty room. 473 00:22:11,000 --> 00:22:14,000 I also think there's an interaction there 474 00:22:14,190 --> 00:22:19,000 that I'm fond of, and so I hope that you will make every effort to attend in person as much as you can. 475 00:22:22,010 --> 00:22:26,990 It is nice to know that if you do miss a lecture or you 476 00:22:27,000 --> 00:22:29,940 get caught up with something, you'll have a chance to review it later online. 477 00:22:30,000 --> 00:22:32,000 We will have sections that will meet once a week, 478 00:22:32,000 --> 00:22:34,970 just like 106A. 479 00:22:35,000 --> 00:22:38,000 The section leader who meets with you is the one 480 00:22:38,000 --> 00:22:41,000 who will be grading your programs and sitting with you and doing the conferences. 481 00:22:41,000 --> 00:22:45,940 What you need to do to get yourself into a section - there are several section times listed. 482 00:22:45,960 --> 00:22:47,960 They are totally bogus. (so ignore that) 483 00:22:51,000 --> 00:22:53,000 What you do is you go to the online - if you go to our class webpage, there's a link that tells 484 00:22:53,000 --> 00:22:56,000 you how to sign up for a section. The section times aren't up right now, but they will go up tomorrow, 485 00:22:56,000 --> 00:22:58,000 and they'll be up through the weekend. You go in and put in your preferences 486 00:22:58,000 --> 00:23:03,930 about what times fit your schedule or not, and there's this big computer program 487 00:23:04,000 --> 00:23:08,790 that does this magic matching that gets everyone into a section that fits their schedule. 488 00:23:08,880 --> 00:23:11,880 That will happen early next week. 489 00:23:14,000 --> 00:23:18,850 The signups will be up from Thursday at 5:00 until Sunday at 5:00. 490 00:23:18,960 --> 00:23:22,000 If by Sunday at 5:00 you've got your schedule fixed, then you're fine. 491 00:23:22,000 --> 00:23:25,000 If you happen to change after Sunday at 5:00 and after the assignments have been made, 492 00:23:25,000 --> 00:23:27,000 at that point, it's a little bit harder. 493 00:23:27,000 --> 00:23:28,000 We can make adjustments, but it's on a very case-by-case basis. 494 00:23:28,000 --> 00:23:31,000 Where we have space and where we can accomodate you. 495 00:23:31,000 --> 00:23:33,000 The best thing you can do 496 00:23:33,000 --> 00:23:36,000 is by Sunday at 5:00 have a pretty firm idea about what you can and can't do. 497 00:23:36,000 --> 00:23:37,000 There's a list of preferences, so maybe what you can do 498 00:23:37,000 --> 00:23:40,000 is pick things that you know will work no matter 499 00:23:40,000 --> 00:23:41,000 what happens. 500 00:23:41,000 --> 00:23:44,000 for antyhing that is variable if you just dont offer things that you know might 501 00:23:44,000 --> 00:23:44,840 go away 502 00:23:44,980 --> 00:23:49,930 so there is a list of 20 times and you say I can make these 5 503 00:23:49,930 --> 00:23:52,390 And that way you wont get yourselves in trouble 504 00:23:52,390 --> 00:23:54,910 in things that might change. 505 00:23:55,000 --> 00:23:59,000 The workload - everybody wants to know how much work. 506 00:23:59,000 --> 00:24:02,000 It's a five-unit class, and it's a five unit engineering class. 507 00:24:04,000 --> 00:24:06,000 You get your five units worth, 508 00:24:06,000 --> 00:24:09,990 I would say, so don't worry about that. I won't shortchange you. 509 00:24:11,010 --> 00:24:15,000 We have programming assignments not quite weekly. I think there are seven of them across 510 00:24:15,000 --> 00:24:18,960 ten weeks, so you can calculate it out. It's about a week and a third 511 00:24:19,000 --> 00:24:20,000 for any particular one. 512 00:24:20,000 --> 00:24:22,030 The students report 513 00:24:22,030 --> 00:24:25,000 that it's about a 15-20 hour project, each of them. 514 00:24:25,000 --> 00:24:28,000 Some people get them done in less than that. Some people take a little bit more. 515 00:24:28,000 --> 00:24:33,030 I would say that's kind of the mode range for what people are reporting. 516 00:24:33,030 --> 00:24:37,000 I do think that of the people who report less, some of those are 517 00:24:37,000 --> 00:24:41,000 people who are naturally gifted, but a lot of it has to do with your habits 518 00:24:41,000 --> 00:24:43,000 about how you work and how you make progress, so 519 00:24:43,000 --> 00:24:46,000 if you are one of the people who feels you might be more likely to be on the other 520 00:24:46,000 --> 00:24:49,000 end, you can come and talk to me and I can give you some suggestions. 521 00:24:49,000 --> 00:24:55,630 Choosing to work in the lair where the helpers are on duty has really positive effects 522 00:24:55,630 --> 00:24:58,000 effects in that when you get stuck, you have easy access to 523 00:24:58,000 --> 00:24:59,000 somebody helping you work through it 524 00:24:59,000 --> 00:25:02,000 rather than spending an hour or two fighting something that turns out to be 525 00:25:02,000 --> 00:25:05,000 simple but required knowing something that you didn't yet know. 526 00:25:05,000 --> 00:25:10,250 I'm a big fan of learning things yourself. There's also a time when a well-placed 527 00:25:10,590 --> 00:25:14,000 bit of advice from somebody can save you a lot of time. 528 00:25:15,000 --> 00:25:22,160 There will be a midterm and a final exam. They'll both be in class, open book, open notes. 529 00:25:22,160 --> 00:25:24,010 The midterm is actually technically out of class. 530 00:25:24,010 --> 00:25:28,870 have it at night because we need more than a 50-minute period to get any coverage of that. 531 00:25:28,870 --> 00:25:31,067 Our final exam is scheduled in our university-scheduled slot. 532 00:25:31,067 --> 00:25:36,000 Sadly, that is at the very end of the exam week, 533 00:25:36,000 --> 00:25:37,980 but that's when the registrar put us, and that's when we need to go. 534 00:25:38,030 --> 00:25:44,010 You may want to take a look at that before you head off to Acapulco for spring break. 535 00:25:44,010 --> 00:25:45,010 you need to make sure you are here for the exam. 536 00:25:45,010 --> 00:25:48,980 Male audience: Is the course leader available online? 537 00:25:48,980 --> 00:25:53,060 Unfortunately, our publisher will not allow me to distribute the course leader electronically. 538 00:25:54,000 --> 00:25:57,000 They're not exactly very in the modern age on this. 539 00:26:00,080 --> 00:26:02,000 I'm working on it is the truth. 540 00:26:02,000 --> 00:26:06,040 By the time the world sees this, hopefully, we will have some other strategy. 541 00:26:06,040 --> 00:26:08,800 We currently are in negotiations. 542 00:26:08,880 --> 00:26:11,000 The nice thing about the course reader is that we have not changed it in the last year. 543 00:26:11,000 --> 00:26:14,000 If you know somebody who has it from last fall or last spring. 544 00:26:14,000 --> 00:26:18,000 it has some minor edits and typos that were fixed, 545 00:26:18,000 --> 00:26:20,000 so if you can get a hold of an old one, it's good. 546 00:26:20,000 --> 00:26:23,100 We are getting no royalties on it. 547 00:26:23,100 --> 00:26:26,950 We're publishing it at production cost, so where it 548 00:26:26,950 --> 00:26:31,970 would have been a $100.00 textbook had it been bound and all snappy. 549 00:26:32,000 --> 00:26:36,000 you're just getting what it cost to photocopy and bind the thing, and Eric and 550 00:26:36,070 --> 00:26:39,980 I are eating ramen. 551 00:26:40,000 --> 00:26:42,000 It's hopefully cheap enough that 552 00:26:42,000 --> 00:26:44,000 you can find a way to get to one 553 00:26:44,000 --> 00:26:47,500 or get an old one without it being too much of an obstacle. 554 00:26:49,000 --> 00:26:52,800 People in general find the course reader to be an asset. 555 00:26:52,800 --> 00:26:54,060 We do say it's required reading. 556 00:26:54,060 --> 00:26:58,530 It does have a lot of material that's very useful in understanding the course. 557 00:26:58,610 --> 00:27:02,000 There are other people who don't make as big a use of it, 558 00:27:02,000 --> 00:27:05,000 but there are some sections that are really very valuable 559 00:27:05,000 --> 00:27:08,020 and other ones that may be more or less depending on your learning style. 560 00:27:08,020 --> 00:27:11,800 Whether you appreciate more of a chance to read background material and more examples. 561 00:27:11,800 --> 00:27:15,000 There's also a lot of good sample problems in it 562 00:27:15,000 --> 00:27:18,600 and review questions in it that help to test your understanding. 563 00:27:22,000 --> 00:27:23,000 You know, it's tricky, because the university in general discourages you from giving 564 00:27:26,000 --> 00:27:29,000 alternate exams because of 565 00:27:29,000 --> 00:27:33,000 - you can imagine the issues of having an exam that has been 566 00:27:33,000 --> 00:27:35,000 seen by some number of students before some other number of students take it. 567 00:27:35,000 --> 00:27:38,180 Even though we're all bound by the honor code, it does create a situation where 568 00:27:38,180 --> 00:27:39,480 there is some temptation. 569 00:27:39,480 --> 00:27:43,240 It's possible it could be a little bit early without a lot of gap, but I 570 00:27:43,240 --> 00:27:46,030 don't think early enough to make alot of help is the truth. 571 00:27:46,030 --> 00:27:49,000 We can talk about it. The current plan is not, I would say. 572 00:28:03,011 --> 00:28:07,994 A little bit about compilers. We use C++. 573 00:28:07,994 --> 00:28:09,050 and we also use 574 00:28:09,050 --> 00:28:11,480 some custom libraries, which limits us to distributing on a certain number of platforms 575 00:28:11,480 --> 00:28:15,070 we've had a good chance to test on and work with 576 00:28:15,070 --> 00:28:18,960 The compilers that we have support for is X Code on the Macintosh. 577 00:28:18,960 --> 00:28:22,040 xcode is apples free developer tools so 578 00:28:22,060 --> 00:28:25,050 Anybody who has Mac OS 10 can freely download that, and install our libraries. 579 00:28:25,050 --> 00:28:29,000 We're using Microsoft's Visual Studio Version 2005 on Windows, 580 00:28:29,000 --> 00:28:32,000 we have an arrangement with Microsoft where they have distributed the software 581 00:28:32,000 --> 00:28:35,930 free of charge to students, so if you would like to install that on your own Windows computer, 582 00:28:36,000 --> 00:28:38,000 we'll give you some handouts on Friday that tell you 583 00:28:38,000 --> 00:28:43,510 what to do to get the compiler and get it installed on your systems. 584 00:28:43,570 --> 00:28:48,020 Our cluster computers in the dorms and the libraries and 585 00:28:48,050 --> 00:28:53,340 the lair both operating systems have both the compilers and libraries installed, 586 00:28:53,600 --> 00:28:57,000 so if you work in a cluster, you don't have to do anything special. 587 00:28:57,000 --> 00:29:04,000 You just walk up and it's got the stuff ready to go. 588 00:29:07,000 --> 00:29:11,000 I'm a Mac person. I've been a Mac person forever. 589 00:29:11,000 --> 00:29:13,000 I can't get over the fact that you go to the start menu to shut the machine down. 590 00:29:13,000 --> 00:29:17,000 That makes Windows impossible for me to use. 591 00:29:19,000 --> 00:29:24,970 I would say campus wide, there are more Windows machines than Macs on campus, 592 00:29:25,010 --> 00:29:29,000 So if you want to take a popular vote, You could do that. 593 00:29:29,000 --> 00:29:33,980 If you want to be on the side of the Mac bigot, you can come and be with me in X Code. 594 00:29:44,790 --> 00:29:49,000 I've got ten minutes to tell you a little bit about C++. 595 00:29:49,000 --> 00:29:54,040 That is the next journey that we're going to go on together. 596 00:29:54,040 --> 00:29:57,000 The first question is: Why are we doing this to you? 597 00:29:57,000 --> 00:30:02,000 I just got comfortable with Java and now you're telling me to throw away my Java and start over. 598 00:30:02,850 --> 00:30:07,880 Let's generate a little bit of love for C++. 599 00:30:08,000 --> 00:30:10,990 The advantages of early multilingualism. 600 00:30:10,990 --> 00:30:14,000 - I have two small children at home that are two and four, 601 00:30:14,000 --> 00:30:18,000 and I read a lot about bilingualism. 602 00:30:19,000 --> 00:30:22,000 It's very clear that for natural languages, when you're 603 00:30:22,000 --> 00:30:25,000 acquiring a language at those young ages that that is the 604 00:30:25,000 --> 00:30:27,840 best time to introduce a second or third language. 605 00:30:27,970 --> 00:30:30,920 Where you are building the pathways and the neurons. 606 00:30:32,000 --> 00:30:35,000 It's been looked at in terms of programming languages as well, 607 00:30:35,000 --> 00:30:38,000 that when you are learning a programming language, there are certain kind 608 00:30:38,000 --> 00:30:41,000 of ruts your mind gets into about the way a language is 609 00:30:41,000 --> 00:30:45,000 that is based on your early experiences. 610 00:30:45,000 --> 00:30:48,940 If you spend a very long time working only in one language, those ruts get deeper, 611 00:30:49,000 --> 00:30:52,000 and you have a certain way of thinking. You're a little bit stuck in that paradigm and its approach. 612 00:30:52,000 --> 00:30:55,680 What's easy to do in that language, what's hard to do in that language 613 00:30:55,830 --> 00:30:59,980 tends to make a stronger impression on you in a way that makes it harder as you 614 00:31:00,000 --> 00:31:04,000 grow and explore the languages to kind of get out of those ruts and shake yourself out of it. 615 00:31:04,000 --> 00:31:07,930 There's been some pretty good evidence that somewhere between one 616 00:31:08,000 --> 00:31:10,960 and two is a good time to think about branching out 617 00:31:10,960 --> 00:31:14,000 and starting to think about different ways of doing stuff and seeing some 618 00:31:14,000 --> 00:31:20,230 different syntax and some different ideas to help build in the flexibility from 619 00:31:20,230 --> 00:31:26,450 an early age in your career to buy you some strength later. 620 00:31:26,520 --> 00:31:31,000 That's part of what we're doing. Another part of it is actually that a lot of our upper division 621 00:31:31,000 --> 00:31:36,010 courses rely on a knowledge of C and C++, that family of languages, 622 00:31:36,010 --> 00:31:39,000 and that the longer we postpone it, the more painful it becomes. 623 00:31:39,000 --> 00:31:43,950 In the later courses where you're learning about compilers or graphics or networking, 624 00:31:44,000 --> 00:31:48,000 they don't have the time in those classes to stop and teach you C or C++. 625 00:31:48,000 --> 00:31:50,930 They need you to know C++ to get the work done. 626 00:31:51,000 --> 00:31:54,940 Moving the foundation into a programming class 627 00:31:54,940 --> 00:31:57,000 seems to make the most sense in the context of our curriculum. 628 00:31:57,000 --> 00:32:00,000 We do switch you over here. 629 00:32:00,000 --> 00:32:04,000 The good news is that it's not as big a change as it might sound at first glance. 630 00:32:04,000 --> 00:32:07,000 Java is actually highly derivative of C++ for a start. 631 00:32:07,000 --> 00:32:10,000 They're kind of cousins in the scheme of language design. 632 00:32:10,000 --> 00:32:12,000 633 00:32:12,000 --> 00:32:14,000 They have a lot of syntax. 634 00:32:14,000 --> 00:32:18,110 How much C++ do you need to know to start? The answer is zero. 635 00:32:18,110 --> 00:32:21,000 You don't even need to know what the word means. 636 00:32:21,000 --> 00:32:22,000 In fact, 637 00:32:22,000 --> 00:32:25,000 you actually probably know a surprising amount about C++ just by virtue of what 638 00:32:25,000 --> 00:32:28,000 you already know just translated a little bit. 639 00:32:28,000 --> 00:32:32,000 Things like the four loop of Java or the way you declare variables or 640 00:32:32,000 --> 00:32:35,000 the way parameters are passed into a function 641 00:32:35,000 --> 00:32:39,000 is exhibited in Java in very much the same way it is in C++. 642 00:32:39,000 --> 00:32:42,000 There are a bunch of things you already know and you don't even realize. 643 00:32:42,000 --> 00:32:45,470 It is not assumed that you know C or C++. 644 00:32:45,590 --> 00:32:49,000 If you happen to already know those things, you're ahead of the game. 645 00:32:50,080 --> 00:32:52,000 If you have not, 646 00:32:52,000 --> 00:32:54,000 then not to worry. 647 00:32:54,000 --> 00:32:57,000 How much C++ are you going to learn? 648 00:32:58,000 --> 00:33:00,000 We will spend the first 649 00:33:00,000 --> 00:33:02,000 three or four lectures 650 00:33:02,000 --> 00:33:05,000 just talking about how things get expressed differently in C++ 651 00:33:05,000 --> 00:33:07,000 and mostly talking about 652 00:33:07,000 --> 00:33:12,000 the differences in the libraries. The syntax itself is quite similar. 653 00:33:12,000 --> 00:33:15,000 Some of the more extensive changes have to do with how the C++ 654 00:33:15,000 --> 00:33:17,810 string is operated on versus the Java string. 655 00:33:17,810 --> 00:33:20,000 How you do file input and output reading 656 00:33:20,000 --> 00:33:23,000 in C++ is a little bit different than the way it's done in Java. 657 00:33:23,000 --> 00:33:26,000 We'll spend some time saying here are some things you know how to express in one language. 658 00:33:26,000 --> 00:33:29,000 We're going to teach you how to express them in another language. 659 00:33:29,000 --> 00:33:31,000 It's just mapping from your previous vocabulary onto a new one. 660 00:33:32,000 --> 00:33:35,000 Along the way, we will actually introduce some of the C++ 661 00:33:35,000 --> 00:33:38,000 features that we need to support our pedagogical goals. 662 00:33:38,000 --> 00:33:42,000 We'll be talking about how classes get designed in C++. We'll see how to use classes. 663 00:33:44,000 --> 00:33:45,000 those classes, We'll see how to define 664 00:33:45,000 --> 00:33:49,000 and we'll look at things like templates, which is the C++ 665 00:33:49,000 --> 00:33:52,000 construct for doing generics that you seen in Java - how you can build 666 00:33:52,000 --> 00:33:56,000 containers that are type unspecific and things like that. We 667 00:33:56,000 --> 00:34:01,000 will learn a little bit of some of the fancier features of C++ like 668 00:34:01,000 --> 00:34:02,000 the pass by reference parameter, 669 00:34:02,000 --> 00:34:05,000 but there's actually a very large amount of C++ that's just off the 670 00:34:05,000 --> 00:34:07,000 table for us. 671 00:34:07,000 --> 00:34:11,000 We will not make extensive use of the standard template library or 672 00:34:11,000 --> 00:34:13,000 the 673 00:34:13,000 --> 00:34:17,000 fancier features of 'static' and 'const' and a bunch of key words that 674 00:34:17,000 --> 00:34:20,000 mean nothing to you and should mean nothing to you. 675 00:34:20,000 --> 00:34:23,000 You will learn enough to have reading familiarity with 676 00:34:23,000 --> 00:34:26,000 C++ and to be able to express yourself quite well in the subset we're using, but 677 00:34:26,000 --> 00:34:29,000 it is a subset of C++ that you're being exposed 678 00:34:32,000 --> 00:34:35,000 to. 679 00:34:35,000 --> 00:34:39,000 If you find yourself really wanting to 680 00:34:39,000 --> 00:34:42,000 master C++, 681 00:34:46,000 --> 00:34:48,000 we are offering 682 00:34:48,000 --> 00:34:52,000 CS106L. CS106L is a lab companion course that is 683 00:34:52,000 --> 00:34:55,000 open to students enrolled in 106B or 106X. 684 00:34:55,000 --> 00:34:57,000 It meets twice a week. 685 00:34:57,000 --> 00:34:59,000 It's actually on Monday and Wednesday late afternoon. 686 00:34:59,000 --> 00:35:02,000 It's 4:15 in Hewlett 687 00:35:02,000 --> 00:35:04,000 103. It's being taught by a veteran section leader 688 00:35:04,000 --> 00:35:09,000 who is very well versed in C++ and who of his own 689 00:35:09,000 --> 00:35:13,000 volition volunteered and created this course because 690 00:35:13,000 --> 00:35:16,000 he himself was a little frustrated as a prior 106 student 691 00:35:16,000 --> 00:35:19,000 in wanting to get at some of those C++ things that weren't 692 00:35:19,000 --> 00:35:20,000 fitting with our goals. 693 00:35:20,000 --> 00:35:23,000 It is a place where you can 694 00:35:23,000 --> 00:35:26,000 get more exposure to standard C++, do some exercises that help 695 00:35:26,000 --> 00:35:29,000 you to test out those things and see how those things are expressed and get another 696 00:35:29,000 --> 00:35:32,000 unit. It's a pass/fail lab course. 697 00:35:32,000 --> 00:35:35,000 You can also just attend or grab the materials if you just want to look at 698 00:35:35,000 --> 00:35:35,000 them. 699 00:35:35,000 --> 00:35:38,000 It's a great way to 700 00:35:41,000 --> 00:35:43,000 broaden that knowledge of C++ beyond what's 701 00:35:43,000 --> 00:35:48,000 useful for us in terms of our goals. I'm going 702 00:35:48,000 --> 00:35:53,000 to ask you some questions, because I don't get to do all the talking. 703 00:35:53,000 --> 00:35:56,000 How much C++ do you need to know? Some of you may know nothing about it, 704 00:35:56,000 --> 00:35:58,000 and that is perfectly fine. Some of you probably know something about it or at least 705 00:35:58,000 --> 00:36:02,000 have heard something about it. I'm going to have you guys tell me 706 00:36:02,000 --> 00:36:04,000 what it 707 00:36:05,000 --> 00:36:09,000 is that people tell you about C++ that 708 00:36:09,000 --> 00:36:13,000 makes you either excited to learn it or frightened to learn it or 709 00:36:13,000 --> 00:36:15,000 interested in how it works. It's 710 00:36:15,000 --> 00:36:17,000 what Java is based off of. It is what Java is 711 00:36:17,000 --> 00:36:20,000 based 712 00:36:20,000 --> 00:36:24,000 off of. That should be a little reassuring 713 00:36:24,000 --> 00:36:28,000 that there is a syntax there that got adopted with some minor 714 00:36:28,000 --> 00:36:31,000 changes. It should feel 715 00:36:31,000 --> 00:36:34,000 more familiar than different when you look at it. 716 00:36:34,000 --> 00:36:37,000 It was very strongly influenced by a generation of 717 00:36:37,000 --> 00:36:39,000 programmers who C++ was their native language who designed the 718 00:36:39,000 --> 00:36:42,000 Java language. That's a good thing to know. What else do you know 719 00:36:42,000 --> 00:36:47,000 about C++? 720 00:36:47,000 --> 00:36:49,000 It's extended 721 00:36:50,000 --> 00:36:53,000 C. Yes. It's extended C. Here's how it fits in the spectrum. 722 00:36:53,000 --> 00:36:56,000 C is kind of a 1970s creation. C++ is a 723 00:36:56,000 --> 00:36:58,000 decade later. 724 00:36:58,000 --> 00:37:01,000 C is the language which it is based on. It is an extended C. It's 725 00:37:01,000 --> 00:37:05,000 called a superset. Everything that compiles and works in C 726 00:37:05,000 --> 00:37:07,000 still exists in C++, but then they added a bunch of features. 727 00:37:07,000 --> 00:37:10,000 Not only did they add a bunch of features but they tried to fix some of the things 728 00:37:10,000 --> 00:37:13,000 about C++ by replacing existing things. For example, there's some 729 00:37:13,000 --> 00:37:17,000 string handling in C that's kind of very primitive. They added a string 730 00:37:17,000 --> 00:37:18,000 object 731 00:37:18,000 --> 00:37:22,000 with much cleaner handling and safer semantics into the C++, but they kind of 732 00:37:22,000 --> 00:37:23,000 left the old one around. 733 00:37:23,000 --> 00:37:26,000 Some parts of C++ feel a little strange 734 00:37:26,000 --> 00:37:32,000 because of this history to it - the legacy of incorporating everything C was plus the stuff 735 00:37:32,000 --> 00:37:35,000 means at times there's a little bit of weirdness there. It also means 736 00:37:35,000 --> 00:37:39,000 that the language, as a result, is very large. 737 00:37:40,000 --> 00:37:44,000 C's 738 00:37:44,000 --> 00:37:47,000 type safety 739 00:37:47,000 --> 00:37:52,000 and runtime features were extended by what 740 00:37:52,000 --> 00:37:56,000 got 741 00:37:56,000 --> 00:38:00,000 added in C++. A friend of mine told me that [inaudible]. That's a 742 00:38:07,000 --> 00:38:08,000 good thing 743 00:38:08,000 --> 00:38:09,000 to know. 744 00:38:09,000 --> 00:38:13,000 C++ might be a little bit more dangerous than Java. 745 00:38:13,000 --> 00:38:17,000 That is true. Java is very 746 00:38:17,000 --> 00:38:21,000 concerned with 747 00:38:21,000 --> 00:38:25,000 safety, in particular since Java was designed for web 748 00:38:25,000 --> 00:38:27,000 delivery of content. It was very important that the program have 749 00:38:27,000 --> 00:38:29,000 very constrained 750 00:38:29,000 --> 00:38:31,000 features on what it can and can't do, 751 00:38:31,000 --> 00:38:35,000 and so as a result, Java tends to be very parental. When you 752 00:38:35,000 --> 00:38:38,000 forget to initialize a variable or forget to 753 00:38:38,000 --> 00:38:39,000 return from a function, 754 00:38:39,000 --> 00:38:41,000 Java's 755 00:38:41,000 --> 00:38:45,000 very aggressive about saying hey, you've got to fix this. C++ is a little 756 00:38:46,000 --> 00:38:47,000 less 757 00:38:47,000 --> 00:38:51,000 parental. Here's the overly protective mom, helicopter mom, 758 00:38:51,000 --> 00:38:54,000 the ones who stand. That's Java. Java's making sure - oh, are you okay, 759 00:38:54,000 --> 00:38:57,000 sweetie? Let me stand here 760 00:38:57,000 --> 00:39:01,000 in case you fall. C++ is crack mom. She's like yeah, I'm over 761 00:39:01,000 --> 00:39:05,000 here with my friends. Don't play 762 00:39:05,000 --> 00:39:06,000 with 763 00:39:06,000 --> 00:39:08,000 the kitchen knives. 764 00:39:08,000 --> 00:39:11,000 It's a professional's tool, 765 00:39:11,000 --> 00:39:13,000 and professionals don't want to feel encumbered. There are certain things they want 766 00:39:13,000 --> 00:39:16,000 to do that require some of this 767 00:39:16,000 --> 00:39:19,000 low-level access, and safety usually comes at a cost. 768 00:39:19,000 --> 00:39:23,000 Any sort of feature where the language is double-checking for you is taking time and 769 00:39:23,000 --> 00:39:26,000 efficiency. There's a cost associated with that. Every time you want 770 00:39:26,000 --> 00:39:28,000 to get something out of an array, 771 00:39:28,000 --> 00:39:30,000 it's checked to make sure that that number was 772 00:39:30,000 --> 00:39:34,000 not off either end. Every array access costs you a little bit more. 773 00:39:34,000 --> 00:39:35,000 C++ says 774 00:39:35,000 --> 00:39:38,000 I'm not going to charge everybody that penalty. If you actually have the bad sense 775 00:39:38,000 --> 00:39:43,000 to write a program that does those things, you deserve to be punished. 776 00:39:43,000 --> 00:39:47,000 As a result, you will at some 777 00:39:47,000 --> 00:39:49,000 point in this quarter get to experience some of that firsthand. Some of 778 00:39:49,000 --> 00:39:53,000 it is a growth experience. Some 779 00:39:53,000 --> 00:39:56,000 of it can be frustrating. It is part of what 780 00:39:56,000 --> 00:39:58,000 professional tools often look like. They are making these tradeoffs 781 00:39:58,000 --> 00:40:01,000 of efficiency over safety that 782 00:40:01,000 --> 00:40:04,000 put more of the work back on you as the programmer to be a little more attentive on 783 00:40:04,000 --> 00:40:05,000 those things. 784 00:40:05,000 --> 00:40:09,000 You can write programs that crash in very spectacular ways 785 00:40:09,000 --> 00:40:14,000 much more interesting and varied and dangerous than the kind of things you can do 786 00:40:18,000 --> 00:40:21,000 in Java. Good to know. You want to 787 00:40:21,000 --> 00:40:29,000 use 788 00:40:29,000 --> 00:40:29,000 pointers. 789 00:40:29,000 --> 00:40:31,000 You're going to get to use pointers. 790 00:40:31,000 --> 00:40:35,000 Pointers are really neat, and they're also very challenging. Pointers are these 791 00:40:35,000 --> 00:40:37,000 ways of building these very flexible and amazing 792 00:40:37,000 --> 00:40:40,000 data structures - the kind of things that we're going to try to build. At some 793 00:40:40,000 --> 00:40:43,000 point, they are going to be the only way to achieve those things well, so building 794 00:40:43,000 --> 00:40:46,000 these things called trees, graphs and lists rely on understanding 795 00:40:46,000 --> 00:40:49,000 a mastery of the pointer type. The pointer type is complicated, and it's part of 796 00:40:49,000 --> 00:40:51,000 that danger thing, which is 797 00:40:51,000 --> 00:40:53,000 having access to 798 00:40:53,000 --> 00:40:57,000 rearranging memory by virtue of addresses opens up a lot of 799 00:40:57,000 --> 00:40:59,000 opportunity for there to be mistakes. 800 00:40:59,000 --> 00:41:02,000 Mistakes can be made in the passive voice 801 00:41:02,000 --> 00:41:06,000 that have consequences. You'll get to experience firsthand what that's like. 802 00:41:06,000 --> 00:41:09,000 There's joy in it, because getting it right is awesome, and there are things that you can 803 00:41:09,000 --> 00:41:12,000 achieve that are really extraordinary with pointers, but 804 00:41:12,000 --> 00:41:13,000 when it's not working, 805 00:41:13,000 --> 00:41:17,000 it can 806 00:41:17,000 --> 00:41:18,000 be frustrating. You're getting a 807 00:41:18,000 --> 00:41:22,000 little 808 00:41:22,000 --> 00:41:25,000 bit of both. It turns out C++ does not have a graphics system built 809 00:41:25,000 --> 00:41:26,000 into it. 810 00:41:26,000 --> 00:41:29,000 Java is actually distinguished from previous 811 00:41:29,000 --> 00:41:32,000 languages. Java tries to solve all problems. Traditionally, a 812 00:41:32,000 --> 00:41:33,000 programming language tends to have a set 813 00:41:33,000 --> 00:41:34,000 of libraries that have 814 00:41:34,000 --> 00:41:38,000 facilities for data management, reading and writing files and sometimes some 815 00:41:38,000 --> 00:41:42,000 networking, but they don't tend to actually solve application layer problems. That 816 00:41:42,000 --> 00:41:46,000 tended to be a different piece of technology. The Mac 817 00:41:46,000 --> 00:41:49,000 OS might offer a graphics library that was written in C++, but C++ 818 00:41:49,000 --> 00:41:50,000 the language 819 00:41:50,000 --> 00:41:53,000 didn't have a windowing system or graphics system. 820 00:41:53,000 --> 00:41:55,000 C++ does not have those features 821 00:41:55,000 --> 00:41:56,000 itself, 822 00:41:56,000 --> 00:41:58,000 so any C++ compiler 823 00:41:58,000 --> 00:42:02,000 you get comes with these basic things about handling files and managing these types of 824 00:42:02,000 --> 00:42:05,000 data structures, but it does not come a priori with a bunch of graphics routines. 825 00:42:05,000 --> 00:42:07,000 That said, 826 00:42:07,000 --> 00:42:09,000 Windows and Mac and Linux and all these things have graphics routines that are 827 00:42:09,000 --> 00:42:12,000 written in C++, but they're all different. To say what are they 828 00:42:12,000 --> 00:42:13,000 like 829 00:42:13,000 --> 00:42:15,000 relative to Java? They're all different relative 830 00:42:15,000 --> 00:42:16,000 to Java. It's not standardized. 831 00:42:18,000 --> 00:42:21,000 There's a wide variety of them out there, and 832 00:42:21,000 --> 00:42:24,000 they tend to have a lot of very impressive and different solved 833 00:42:24,000 --> 00:42:27,000 problems, because C++ has a longer history than Java that a lot 834 00:42:27,000 --> 00:42:30,000 of problems have been solved in C++ that are available to you, 835 00:42:30,000 --> 00:42:32,000 too. There's a lot of existing code 836 00:42:32,000 --> 00:42:36,000 other than what you might think is standard. 837 00:42:38,000 --> 00:42:42,000 I 838 00:42:42,000 --> 00:42:43,000 will 839 00:42:43,000 --> 00:42:47,000 see you on Friday, and we'll be seeing some C++. If you have 840 00:42:47,000 --> 00:42:58,000 questions about your situation, come and talk to me now.