字幕表 動画を再生する 英語字幕をプリント [MUSIC PLAYING] SPEAKER 1: All right, this is CS50, and this is week 11. Before we begin today, I thought we'd make some changes in light of the competition on the horizon. First and foremost, this is perhaps in order. And I was down the street just earlier, and I got my shirt for the weekend, which I gather means 900. So good luck this weekend. And before we proceed further, a big thanks to the whole team, honestly, that made this semester possible-- Natalie, in particular, who I'm sure you've gotten to know over time, of course, Benedict with whom I went to college some years ago. You recall this picture from week 0, and then of course [? Stelios ?] and [? Anusery ?] and the whole team of TAs and CAs here. And, indeed, this is actually a pretty novel thing. If you haven't quite realized it, especially if you're first year, having undergraduate ULAs [CRASH] or tada. [LAUGHS] That's anticlimactic. OK, so we will tend to this later. So this is actually a pretty novel thing, that there are undergraduates teaching assistants, that you guys can actually teach your own classes, hold office hours, and more. And this was actually initiated just a few years ago by way of CS50's first class of TAs and CAs. So here's a [INAUDIBLE] article from back in 2015. In fact, this is the very first team of undergraduate CAs who first TAed CS50 itself. And in fact, this is now an opportunity that has extended beyond CS50 itself. So if you're thinking about computer science or really any related field and you might like to start teaching-- which frankly is by far the best way to actually learn and absorb this kind of material-- realize that CS50 itself will soon start recruiting, and we and the whole team would indeed love to have you on the team. And even if you are among or were among those less comfortable, keep in mind that's what we said in the first lecture still holds true here on out. What really matters ultimately in this class, even if it might not quite feel like this-- it's just what? Four hours after the quiz was due-- that what really matters in this course is not so much where you end up relative to your classmates, but where you end up relative to yourselves. And that's something we have and will keep in mind, especially when it comes time for final projects, grades, and beyond. And in fact, these were the percentages broken down in the very first lecture based on problem set zero of this year. So those of you who have been feeling that you are among those less comfortable realize that it's no longer by definition the case. Everyone's been upgraded to somewhere in between or among those more comfortable, and realize this is perhaps just the first such stepping stone. So this has been a tradition of having undergrads TA the class for years up in Cambridge. And in fact, the team there put together with our production team a little invitation for you to consider joining us here in New Haven among our CAs and TAs for the coming year. So allow me to dim the lights and have our team in Cambridge say hello. [VIDEO PLAYBACK] - I'm Elsiah. - My name is Nenia. - I'm Athena Braun. - I'm a sophomore. - I'm a senior. - I'm a junior studying in computer science and linguistics. - I'm concentrating in [? CSL. ?] - CS50 is always just because it's changed my life. It made me a computer science concentrator. - I'm a TF for CS50. - Course assistant. - This is my second year TFing now. - This is my third year being a teaching fellow for CS50. - Becoming part of CF's staff helped empower me so so so much. - I was a total beginner, never anticipated programming beyond CS50. But here I am. This is something I never thought I would do. I think it's just been really exciting going from being a beginner to being comfortable enough to TF this class. - Everything that has come out of this has helped me grow so much as a teacher, as a student. - Also the culture and the environment of it is also pretty. - I've definitely found a community of friends within the CS50 staff. - Be prepared to have students who look up to you and really appreciate the work that you're doing. And just realize that you're not just a teaching fellow. You're not just this person behind the whiteboard. You're like a student who took this, too, and can really level with other people in your section and figure out what's going on and make it a good experience for them. - I decided that I can get the best of both worlds. I can get to teach about computer science. And those are two are my passions. - I just really love teaching computer science to beginners. CS50 is where all that beginner energy is, and it's where I can make a real impact on the students' careers in CS. - It's amazing to see how much this course can do in just a semester and how, from September until December, students learn so much and gain so much experience and knowledge. And watching that and working with them in that process has always been really, really inspiring. - It's been so so wonderful getting to see these people grow, just like I did myself. - One of the most rewarding things I've done here. So that's why I keep coming back. - Going to office hours and helping people out, it makes you feel good. And it makes other people feel good as well. - My name is Brian. - I'm Thomas Lively. - I'm Allison. - I'm Maria. And this is CS50. [END PLAYBACK] SPEAKER 1: So realize, here in New Haven and also in Cambridge, we're fortunate to have quite a few resources, both in terms of the place that we're in and the people that we're around. And one of the focuses of CS50 for years now with its staff has been on something called open courseware, whereby we've long made the courses, videos, and problem sets and software freely available to everyone around the world. And just a couple of years, too, did we start to focus, not just on students who wanted to tune in in any country and any city, have we also started focusing on teachers as well so that they needn't rely only on the textbooks that their schools provide but too can get on the internet and tune into and use in their own classrooms, adapting or adopting this particular curriculum and tools for their own students. And if curious, for instance, every red dot on this map actually represents some cohort of high school students and high school teachers teaching introductory [? CFs ?] via CF50AP as it's called, and every one of the blue dots on the screen represents a university with whom we've been collaborating in some form, either formally with some of the faculty or less formally with some of the student groups there. And so if you're interests in education and in computer science extend beyond, by all means consider applying, not only to TA or SA the class, but to get involved in these other outreach efforts creating curricula, working on tools, and really making an impact. In fact, the communities beyond Cambridge and New Haven include Miami Dade in Florida. This is Chile. This is our team in London. Here in Burma. Here in Ukraine. Here in Cairo. Here in Bolivia and Nicaragua, and then lastly back home in Cambridge. This was our very first cohort of high school teachers who came to town in order to bring a little something back to their own classrooms and teach and adapt as well there. And in fact, just a few years ago, apropos of the event on our own horizon, this was the very first CF50AP hackathon, whereas instead of getting together at 7:00 PM To 7:00 AM, we got together like 10 AM to 2 PM during the high school schedule. And we had eight public and private high schools in the New York City area come together to work on their own problems sets and final projects and the like. So again, if of interest, do you feel welcome to engage with us and so many people around the world in that way. So what have we actually done in the classroom and in the problem sets? So at the end of the day, it's all about problem solving. And hopefully, if you attended CF50 Puzzle Day or certainly engaged in the problems over the past several weeks, you realize that the goals of this class are not so much to teach you C per se, and it doesn't really matter some of the finer implementation details of a lot of the problem sets, but how you went about solving those problems. And we claimed early on that there is a methodology, and there's techniques with which you can solve problems. And indeed, we hope what you exit the course with is sort of an ability now to recognize patterns and other problems you might encounter, not just in CS, but in other fields too. If curious as to how some of your classmates perceived this year's problem sets, we took a look at the data that you kindly provided in problems set eight. This is a bar chart of what everyone thought of the problem set. So purple is hate. Blue is love. So it's hate on top down to love on the bottom. And so what you can see here is that love was kind of invariant, though there was even more liking of problem sets 6 over here. No one really hated problems set 1, which is fantastic, with Mario and the likes. So perhaps you're somewhere in that spectrum. A little more telling was this. How difficult were the problem sets? And these numbers varied a lot more. [? P ?] said 0 and 1 were very blue because blue is easy, green meanwhile on the top would represent hard. So there's definitely some fluctuation based on expectations of the problem sets and which one were newer or in progress. But problem set 5-- so misspellings, the spellcheckers-- it's probably pretty fair to say it's pretty orange and a bunch of green, whereas pset 6 kind of went the other direction, where you had the ability to port some of our programs from C to Python and implement some document similarity. When did you start problem sets? More telling. So [INAUDIBLE] called that they are released way over here on a Friday, but the most common day seems to be Wednesday followed by Friday, followed by Thursday. Thankfully zero people said they started it the morning of it being due. So that's a little something. And then lastly, when did you watch lectures? So it seems that Monday was the common case. Some folks tuned in live on Friday or watched it on demand thereafter, Saturday, Sunday being common. And then there's perhaps correlation between the blue Sunday and the blue Sunday for problem sets as well. So just to give you a sense of your own patterns as well. So where did we begin? So you recalled that we came on up here some 12 weeks ago and played this, IVs hardest game, which was a game written in Scratch but was all about trying to solve some problem. And we distilled this notion of problem solving really into this black box. At the end of the day, all problem solving is is you've got some input-- and we happen to represent them in so many different ways, zeros and ones, letters of the alphabet, colors and files, and web requests, and more. But at the end of the day, what you care about is the outputs. And the secret sauce in the middle, we've kept calling what? OK, you're wearing the I took CF50 shirt, so you better have an answer. What's inside the box? Grhythms, exactly. Yeah, algorithms is this sort of fancy sounding term that really is just these step by step instructions for solving some problems. And whether we've solve these problems in Scratch or in C or in Python or in [? Secord ?] or in JavaScript, these really are just tools. And hopefully you found, albeit with deliberately a bit of frustration in recent weeks where you had to Google a bit more on your own or you had to ask more questions, hopefully you felt-- though perhaps not pleasurably at the time-- that the training wheels were really starting to come off and that the expectations were more on your end to sort of figure something out. But hopefully, we hope you had the right mental model with which to figure out what resources to use and how to go about solving those problems. And so indeed, allow us to propose to you what you can do after CF50, very pragmatically. If your interest lies specifically in software development, you'll hear at the end of today's lecture, too, a number of other directions you can go, particularly by way of classes but with j term on the horizon and summer on the horizon and perhaps jobs on some of your minds, we thought we'd give you a glimpse of just some of the practical things that you might want to keep in mind that will generally be assumed by some other high level systems classes. But just how can you write code and solve problems without CS50, without CS50 [? ide, ?] and certainly without a problem set specification that just tells you what to do? So learning git. This is something you've used underneath the hood for some amount of time, and there's many different implementations of this notion of version control. And git is not the only one. It's perhaps the most popular these days. So many of the things we'll suggest here you could absolutely sub out for something else. But this certainly is very much in vogue. And so if you go to this URL here at some point, CF50 own Brian or [? Hadeie ?] in Cambridge did a fantastic seminar on how to learn git. We'll post all these slides on the website after today as well. And here's Brian from that very same thing. If you want to keep your own projects, whether academically or professionally private, GitHub's great about giving you free access to this. So even though all your work thus far has been in CF50's account, our organization called [INAUDIBLE] 50, you can head here and actually sign up for free accounts to continue using that, and you'll see a little screen a bit like this. Installing git on your own Mac or PC-- and this is where really you can force yourself to take off some of the training wheels. CF50 ide is meant to be pretty representative of a real world software development environment. But it's of course, cloud based. And even I get annoyed if I'm taken Amtrak down here from Cambridge trying to use it because of the latency or weak internet connection, and I don't necessarily have as much control as I might on my own Mac or PC. And so among the options, of course, are to install these very same tools there, among them a text editor. There's dozens of these if not hundreds over the years. One of the most popular perhaps is called Sublime Text, which you can download at this URL here. And this would be the equivalent of the little tab code windows that just come with CF50 ide. But you can use it on your own computer. And you'll see a little something like this with nice and fancy features that are intellectually interesting but just save you time at the end of the day. Atom is a very popular one as well, which you can take a look at online, too. It, too, is freely available. And then Vim and more command line based tools. Actually, to this day I still use Vim myself. If you've ever seen me in lecture open a black and white window that isn't the tabbed code window but via plug-ins and the like, can you make this type of tool and others like it, [? EMAX ?] and beyond, ever more versatile as well. Besides that, in FAQ, apropos of final projects coming up, is that many students end up doing mobile applications, even though we don't teach it per se, web applications, which we introduce you to by way of pset 7 and pset 8. So a very common approach as you're thinking about over Thanksgiving and beyond your final projects is that, if you actually want to put these things out there and not think of it as just meeting the course's own expectations but something you really want to build on and it's something you want to do for your student group or your own entrepreneurial effort or for some other class for what you want to solve some problem using software, realize you can put these things out there using CF50 ide. For instance, if you go to the Share button in our own ide, you'll see an interface like this. And so long as you make the so-called application public, then anyone on the internet can visit that URL and try out your CF50 finance or your mashup or now your final project. Of course, with these free accounts, they tend to shut off after some number of hours of idleness. So it's not the way to run a website that you actually want friends to use for some time. So using things like [INAUDIBLE] is a very popular service. And ask any of the TAs or staff over time, and we'll post some links online as well to get started on this. AWS, Amazon's cloud service, and Microsoft has one, and Google has one as well. Can you sign up for free accounts there. And you can actually get your own free domain names. If this is of interest and you don't want it to be some cryptic sounding domain name, you can actually get them from free from companies like namecheap and the like, leveraging your student status for the next few years to take advantage of all these resources for free. And this one in particular at GitHub's address gives you access to a lot of tools that you might want to experiment with and try out. So where will we head in the coming days? The sort of hardest parts, perhaps, are behind us, with the test and the quiz and all of the problem sets, and all that remains now is the final project. And the hope here really is to take all of the training wheels off and give you a chance to sort of build something that's genuinely of interest. Hopefully it will solve some problem of interest to you or, again, your student group, or something you're working on. And you'll have 12 hours if you'd like to join us in Cambridge, just as your predecessors did last year, to hop on a bus in just a couple of weeks time. Come on down to Cambridge for a 7:00 PM or so start. Upon arrival, you'll be greeted by the staff from Cambridge and New Haven alike. You'll get settled down and grab a name tag and find a place to sit and work on your laptops for pretty much throughout the night. The goal is to actually get something useful done. Ideally it is now to start your final project, since starting it at the middle of the night is probably not the best strategy. And in fact, if you take nothing else away in the way of advice today, get something done over Thanksgiving truly, even if it's just hello world, if you're making an iOS app, or hello world if you're making Android, or copying problem set 7 or problem set 8 and then building upon it or starting to for your final project. Just like give yourself that base layer on top of which you can build when you actually arrive at an event like this or dive in on your own. The evening will be punctuated by opportunities to ask the staff help. But it won't be like 12 hours of office hours. The staff will be there, but generally working on their own projects and there to advise you or point you at things, but not necessarily to solve problems in the same way, since your projects will be as unfamiliar to us as they are to you. But we'll point you at what we might know. And it'll be an opportunity really just to have what we hope is a pretty memorable collegiate experience, working on final projects, having some Mexican food around 9 PM, pizza around 1:00 AM. And then if beyond the photo booth and other distractions, if you need a little break here and there, including a therapy dog this year-- Milo-- and naps throughout the evening, as happened last year as well, if you make it all the way to 5:00 AM, one of the buses, if you're still up for it, I'm on the way back to New Haven. We'll stop off at IHOP for breakfast for those still awake. And if you're too tired at that point, one of the other shuttles will head back in a different direction altogether. And then the CF50 fair, which is here in New Haven for all Yale students and faculty and staff to come to. This is meant to be an opportunity really to delight in what you pull off over the remaining weeks of the class and really what you accomplished over the course of the semester since week 0. Last year's event was in Commons, which is currently offline, but has over 1,000 people of students and staff and faculty coming by to really see what you've worked on. And it's a very casual environment. There's music, and there's friends from industry and alumni there to chat up everyone is well. And here's a group of students presenting their final project last year, the same kind of thing happening here, and then even some hardware demonstrations like this one involving VR. So it's really just a fun opportunity to get everyone together before break to see what everyone has accomplished over the course of the term. And alumni, indeed, come back from Facebook and Google and the like to chat up folks about opportunities in the real world as well. And at the end of it all, in addition to cotton candy, as you'll see we have we have and before then, your I took CF50 t-shirt to claim hopefully proudly exactly that. An invitation though is certainly warranted. This year's event will be in a fairly special place, no longer in Commons, but in the Peabody Museum, if you've ever been there. So in addition to the very modern things like laptops and apps, well you'll also see some things from yesteryear. Let's take a look, in fact, what awaits. Thanks to [? Stelios ?] and [? Inusery. ?] [VIDEO PLAYBACK] - Join us at the CF50 fair. [BABY SOUNDS] [END PLAYBACK] SPEAKER 1: So at the very end of today's lecture, after we take a look at some follow on classes and CS, you'll be joined, as is our tradition, by the staff for some cake in back. So do join us and the faculty you were with us today for exactly that. I thought we'd conclude our beginning portion of the lecture 2 with a look back at this semester, but again, in addition to this very practical advice in these next steps that we've offered, do keep in mind that we hope ultimately that, since week 0 now here in week 11, you really do feel empowered and all the more equipped to explore other fields of other areas of computer science. But even if you choose for CS50 or any other science classes to be your last, that you can now bring to bear some of these concepts and these practical skills back to the arts and the humanities, social sciences, and beyond to actually solve problems using computing and data all the more effectively. So in a final sentimental note, a look back at CF50 this past year starring you. [VIDEO PLAYBACK] [MUSIC - BIRDY, "KEEP YOUR HEAD UP"] Times that I've seen you lose your way, not in control, and you won't be told. All I can do to keep you safe is hold you close, hold you close till you can breath on your own, till you can breath on your own. Hold tight. You're slowly coming back to life. I'll be keeping your head up. I'll be keeping your head up, darling. Let go of all your haunted dreams tonight. I'll be keeping your head up. I'll be keeping your head up, darling. Hold tight. You're slowly coming back to life. I'll be keeping your head up. I'll be keeping your head up, darling. Let go of all your haunted dreams tonight. I'll be keeping your head up. I'll be keeping your head up. And I won't let you down. [END PLAYBACK] SPEAKER 1: Thank you so much. Let me turn things over to Benedict, and I'll see you in a bit for cake. BENEDICT: Thank you, of course, to David and Doug and the whole CS50 team at Harvard for a fabulous semester, to all of you for a fabulous semester, to Natalie and the rest of our staff here at Yale, and also to Judy Page and Sue Hurlburt who you don't see but, Natalie and I work closely with, to make this class happen. We're really excited by how well it's been going, how well you guys have all been doing. And we really want to see you all around the department. So I'm going to talk for a little bit about some of the classes that we're offering in the spring that we think you should all consider and that you're all ready to take. And then I'm going to pass it off to some of my colleagues who are also teaching classes this spring, that you may want to consider taking. And again, that you can jump right into-- great ways to explore different aspects of computer science, or to know you love this, and you want to dive right into the major. So the list here is the classes in the spring that do not have any prerequisites beyond CF50. And we'll talk in just a few minutes about each one of those and also about 223, which would be the logical thing to take after 201. So two of these o35 and 078. These are freshmen seminars. If you're not a freshmen, when we talk about these, you should put your fingers in your ears and go la la la la, because the university will not allow you to take them, and there's nothing that we can do about that. But that doesn't make them any less cool. If you are a freshmen, pay attention because you get one shot at this and then hopefully you're no longer a freshmen and you're out of luck. We have 200 and 201, which are some of our core sequence and an entrepreneurship class and a digital humanities class, and then of course data structures that is kind of, after that, all of our upper level classes open up. So we also have a bunch of majors. And this is something that you may or may not realize. We are not just a peer computer science major. That's a great thing to do. I did that. I survived I enjoyed it. But there's also ways to do a computer science plus math or psychology or engineering major, electrical engineering, where you take roughly the same number of classes as a single major, but you split them between two disciplines. And those ones are pretty natural combinations, but we also have a computing in the arts major, which is a little different than a joint major. It's its own distinct major, which means it has its own distinct director of undergraduate studies. But here you combine about six classes in computer science with about six classes in one of the arts disciplines. So that could be architecture or fine arts or history of art or music or theater, and these are all areas where Yale is also really strong. And its a great way to look at ways that you can use computer science together with other disciplines and also ways that you can pursue multiple interests. Students graduate out of this and go on to get all sorts of jobs, including all of the same jobs that you typically think of a computer science major getting. But it opens the door to other things as well and to exploring other interests. So the computing in the arts major-- just a little bit more about it. This is an interdepartmental major. We've got these different groups set up, where you take six computer science courses, including the core, and then you take about six classes from one of the other departments, and that way you get the grounding in computer science and the experience with that, and then a discipline. And then you start to think about how you can apply them together. So architecture of course is building things, and that's becoming very computational using computer science to develop new structures-- art as well. Art history-- this is an area-- I work a lot with conservators and archaeologists, and I'll be talking about that. And music-- and we'll have Scott Peterson talk to you some about computer music. And theater, and again these people go off and work at all sorts of cool places. You're not jeopardizing money. You don't have to make money you don't want to. I did, after all go into academia. But if you have further questions, the person to contact is Professor Dorsey, who is unfortunately out of town today. So she couldn't be here. She will also be teaching one of these freshmen seminars in the spring on essentially 3D design. In some sense, you don't need a technical background. But it is a somewhat technical course. So you guys are well-prepared for it, and you'll be talking about 3D scanning, to measure shapes of existing objects, how to model on the computer new shapes, how to modify 3-D models, how to produce them using things like 3D printing and milling and laser cutting. Some of those are things we have in the department. We have 3D printers. In CEID, which you can also sign up for, there's a whole suite of these tools for making things. And, again, you don't need any programming experience. All of you have it. You should have essentially high school math, high school trigonometry, and you have to be a freshmen and you have to pre-register through the freshman seminar lottery for which, if you're curious, you may also want to talk to your college dean and make sure that you understand the process for that. And then it goes into a lottery. And if you're lucky, you get in. So these classes are small. They're limited. The level of math that would be involved in this class would be, for example, when you're doing 3D scanning, you end up having two cameras, and you know the way they're oriented and you know, for instance, that they maybe 10 centimeters apart. So if both of them are seeing the same point on an object, that forms a triangle and you want to know the distance from one of your cameras to the objects. So you can find out how far away it is. And from that, you get shape. And basically, you look at this and you say, well, I know the angle alpha, I know the angle beta, I know this distance 10 centimeters. I can apply the angle side angle theorem to know that I can calculate this point. In particular, there is a law of signs that you plug this formula in, and you find out that if these two points are 10 centimeters apart, you're looking at something that's 13.7 centimeters away. So there's not going to be more than that. We're not talking about advanced calculus. We're not talking about knowing all sorts of programming skills or how 3D models actually work. And it's going to be a combination of lectures and labs and discussions. Again, it will be a limited size class as a seminar. There will be some guest lectures. You'll take a field trip to blue sky that makes the Ice Age movies. They're a big East coast animation studio. Again, if you have questions about that, talk to Professor Dorsi, who's teaching it. And I definitely encourage you, if you're a freshman, to check it out. There's another one that all of you can take that I will be teaching which is a course on applications in the digital humanities. And this is a brand new course. And so it will adapt a little bit depending on exactly who is in the class and how many of you are in the class. I hope there's plenty. And the idea is to talk about different ways to use computer science in the humanities, and then to work in groups on projects, on different projects in the digital humanities. And so I'm having discussions right now with faculty all over campus about interesting projects in their domain so that we'll have a range of ideas to start with. But we'll do about half the semester talking both about application digital humanities, but also about web application development. So these are sort of continuing from pset 8-- how do you program in JavaScript, how do you write Flask applications and go a little more advanced than we've done in CS50. How do you write richer web applications with richer client side interfaces? And then how do you apply those? It turns out there's all sorts of applications in the humanities where you want to build databases and can start to ask questions about your data and look for connections between things once you have the tools to assemble all of that data and to visualize it. And so there will be different kinds of things. Some of the ones that I have lined up already will be to detect the meter in poetry and build a database of meter and different poems by different authors and start to look at things like is there a particular style of how one poet may play with meter or similarities between different poets that you might be able to classify, but also as a tool to do this detection and help the process along a good interface for it. There is one with the Yale Babylonian collection, to build a really good database, not just for saying let a search a cylinder seal and see a pretty picture of it and see all of the data we have about it, but also see context, see relationships to other cylinder seals, be able to say, ah, this one has a carving of a stag on it. Let me find the other ones that have carvings of stags on them and try and find relationships and connections between them that can be useful for research. Another interesting one that I learned about yesterday is potentially to curator essentially the public art on campus-- so all of the stone carvings on buildings, all of the paintings hanging in buildings, and understand what we have on campus, what we know about the provenance and history and state of preservation, what things we should really take down. And then how do we present those and contextualize them? So I took this picture yesterday. You may have seen a similar picture in the newspaper. This is a carving that was on the outside of Sterling Library right near the entrance to the CTL. And somebody noticed I think last summer that there was this carving on a back entrance of a pilgrim shooting an Indian. And you stop and scratch your head and say, there's nobody that really thinks that's in good taste any longer. And so maybe we should not put it somewhere that is now becoming a prominent entrance to the library. So it's sitting on West Campus in the conservation lab at the moment. But these are sorts of questions that you might be looking into and asking. Working with me on ways to look at potential matches between fragments of ancient wall paintings. These are fragments of wall paintings from Roman times, from about 2000 years ago for example. So a range of different sorts of projects, some with music, and that's what-- I'm hoping to then bring in some computer scientists, some people interested in computer science, some are interested in computer and the arts, some interested really in just in the applications to their domains to get a dynamic atmosphere where you're learning from each other and about the kinds of questions you can ask. And again, if you have any questions, you can always feel free to email me about them. And then I want to move on. Scott is another lecturer in the computer science department and specializes in computer music. SCOTT: Awesome, hello. I'm Scott Peterson. I'm a lecturer in computer science. I joined the department last year after serving a number of years in the music department, doing sort of various technological things. I teach four classes, CPSC 035, which I'll talk about at some length in a little bit, 134, 431, 432. And I'm also the director of the Yale Open Music initiative, which I don't know if you've heard about. But I'll also talked about in just a bit. Before I do that, I'll talk very briefly about classes that you probably can't take yet, although maybe. And those are 431 and 432. They are algorithmic and heuristic composition, and sound synthesis respectively. And they have prerequisites, which are 202 and 223, I think. And essentially, they are together a sort of complete look at computer assisted music composition and sound synthesis together-- so using a high level language, and we use supercollider for all of these classes, looking at ways that the machine can help us both organize notes, think about music in different ways, and then also sort of delve into how sound is constructed from the very lowest level of digital representations inside the machine. Before I talk about 35 and 134, I'll talk very briefly about the Yale Open Music initiative. So this is not a class. This is just something that you can join or attend workshops that we give. So this is a sort of loose group of people who are interested in everything at the intersection of music and technology. So this might mean computer music programming outside of the sort of classroom setting. It could mean putting together machines that have arrays of sensors that then send sensor data back to a laptop that asks it for said data and then does some sort of sonification with it. And it's generally informal. We've been the recipient of a couple seed grants that have allowed us to buy some cool stuff, our arduinos and Raspberry Pis and put some of these machines together. And we've given at least one of these workshops in conjunction with the new center for collaborative arts and media, which is another place that you should check out if your interests sort of intersect computer technology and anything sort of artistic. So 134 also has no prerequisites. It uses the same high level language, which is supercollider, to investigate how the machine can help us compose music, also sound synthesis, and also interaction. So this is a quick shot from the music studio in computer science where students of 134 were just working with arduinos and sensor arrays to input incoming sensor data into laptops and supercollider and then sonify that data and some sort of hopefully meaningful way. The enrollment is generally small for these classes. So if you like small classes and a lot of time that sort of seminar feel that you might not get in a class of this size, then this class may be for you. And this is offered in the fall. So the next course is CPSC 025. So this is a freshmen seminar. This is where you plug yours if you're not a freshmen. And this class is divided into generally three parts. The first part is music production. And so we spend a lot of time talking about how we can capture sound in the real world, represent that sound in the machine and software, and then investigating digital audio workstations for sound production, processing, etc. The second part of the class is programming and supercollider, again-- so sort of all the stuff that I talked about. It's a gentle introduction. It doesn't assume that you have any programming, but obviously you do. And then the third part-- sort of my favorite part-- is this intersection of the real world and the machine. This is physical computing and sensors, and this is where the wheel meets the road. And we have a lot of projects that work with real world sensor data, that work with human movement, that can sense ambient light, that can sense motion. And then we talk about some of the issues of converting that into meaningful musical information. So if you have any questions about-- pardon me-- any questions about any of these or the Open Music initiative or you want a a tour of the music studio in computer science, please feel free to email me. Thanks so much. [APPLAUSE] KYLE JENSEN: Hi, I teach a class that helps you use your computer science knowledge from CS50 to build startups. That could be nonprofits. That could be some scalable software startup like Facebook or Snapchat. The class is computer science 213. It's also management 659. My name is Kyle Jensen. I'm Associate Dean at the Yale School of Management. And this is one of my favorite classes. The class is essentially 50% web application development, full stack, and 50% class that you might find at the business school teaching an introduction to entrepreneurship. Fundamentally, the class helps you identify customers, people whose lives you can change in some fashion, to verify to yourself that those people have some problem that you think they have, to build a business around that, and the technology skills you need in order to do that. I think you should take the class. It's fantastic. Again, my name is Kyle Jensen. You can easily find me on the interwebs. Thank you. [APPLAUSE] STEPHEN SLADE: So I think I have slides. Let's see if this works. Yeah, look at that. OK, I'm Stephen Slade. And I teach both CS200 and 201. And who am I? I am a hybrid. I am both theory and practice. So I was a Yale undergraduate. I majored in music, and I study computer science. I came back here to graduate school. I got a master's in PhD in computer science. In the meantime, I worked in presidential campaigns at the White House designing computer systems, management information systems. I also taught in the business school at NYU. And from there, I migrated to Wall Street. I worked in finance and risk management for many years. So I've looked the world from both sides now, from both the practical and the theoretical. And in theory, there's no difference between theory and practice. But in practice, there is. I've written three books. They were all dedicated to Yale alumni, namely my family. So my wife went to Yale. My three children went to Yale. I have two daughters who majored in computer science, and they both work at Google. I'm a big believer in educating women to be computer scientists. And when they were growing up, I viewed my job as not teaching them to read, but teaching them to love to read. I didn't view my job as teaching them to play the piano, but teaching them to love to play the piano. And I view my job here in CS200 and 201 as not teaching you computer science, but teaching you to love computer science. And I think that's what David tries to do as well. That's my impression. Anyway, so there are two courses-- 200 and 201. And they're sort of sister courses, sibling courses. They're meant to be theory and practice. So 200 is more practice, 201 is more theory. But they have the Common Core in that they both satisfy the prerequisites for a future in computer science. And in particular, if you take either course, you will learn recursion. And see what happens when you Google recursion. And it's an interesting exercise. You will learn Unix. You will learn computer architecture, machine language. There are programming assignments about every week or so, much like you had in CS50. And in addition, I introduce what I call logical problems. And the idea is to make you realize that you make assumptions about the world that often are false. And this is the bane of the computer programmer, that when you're writing a computer program, you make assumptions about the input or the behavior of the user, and often those assumptions are false. So what I try to do is train you to think out of the box, to think in terms larger than what your normal assumptions are. So for example, here's this a representative logical problem. What is the next number in the following sequence-- 1969, 73, 77, 81, 85, 91, 93, 99. What's the next number? Anyone know? All right, let's analyze it. First of all, they're all years. All right, they're all odd years. Am OK, the current year is 2017, which is an odd year. So that's a plausible answer to the question. So anyone want to guess what the answer to the question is? OK, good because no one will know the answer until at least this weekend, and maybe not even then. [INAUDIBLE] That's almost right. So 1999 was the last time Yale beat Harvard in New Haven. So maybe this Saturday we'll know the answer to the question. We'll see. It's supposed to rain, I think. Anyway. OK, 201, 201 is a prerequisite for the rest of the major, and it's meant to teach you theory. So it teaches you recursion, Unix, machine language, computer architecture. The programming language you used is Racket, which is a dialect of Scheme and LISP. These were languages that were developed maybe 50 years ago, and they've evolved primarily at MIT. But they've been used for artificial intelligence for many years. Putting Racket on your resume is not going to get you anywhere. It's going to get you odd questions. So that's not the point. We will learn Turing machines, Boolean logic. You'll see how to design software that emulates digital gates and circuits. You'll write machine language for a fictional machine, the TC201. We will look at formal languages, regular expressions, deterministic finite automata. We'll look at computational complexity and analysis of algorithms. I think you did a little bit of that in CS50. I have a link here to the syllabus for the current semester in case you want to look. And CS201 satisfies the de jure requirement for the major and for courses like 223. 200 is meant to be the practical alternative to 201. And as I say at the bottom, it satisfies the de facto requirements for the higher level courses. So for example, you learn enough about computer science and programming, recursion, Unix, machine language to take the higher level courses, but sometimes you may need the permission of the instructor. But in general, it hasn't been an issue. If you're not a computer science major and you merely want to take a course that will help you in other areas of life, this is probably a reasonable course to take. In particular, the programming language we use is Python, which you should put on your resume-- Python. And we will look at Python in much more detail than you had in CS50, but the fact that you've had it already is probably beneficial. So we will do object oriented programming in Python, which is like object oriented programming in C and C++. We'll look at software engineering issues. We will look at databases-- and not only how to use a database like SQL, but actually how to build a database system in an object oriented way. We'll use Python to build an object oriented database. We will do machine language but not on a theoretical machine, the TC201. We'll see how to interpret machine language that's generated by Python. So Python generates what's called byte code, and you will write a byte code interpreter for Python in the course. We'll also look at practical real world problems, not Turing machines, not Boolean expressions. But we will look at cryptography and information security. We will look at machine learning, which is also sort of generally known-- it covers things like big data and data science. And we'll look at applications. So some practical applications of machine learning include driverless cars and actually information security. So these days, one interesting application of machine learning is using machine learning to break encryption codes, or to create encryption codes. And again, I have the address of the syllabus from last spring. It'll be a little bit different this year based on what I've said here. And I think that's it. [APPLAUSE] I'll be around if people have questions. JIM: So, yes, so I'm Jim [INAUDIBLE]. I'm the DUS for computer science. And I also teach computer science 223, or at least will be teaching computer science 223 in the spring. So what I was asked to come here and talk about was both of these-- first, I'm going to talk about computer science 223 and why you might want to or not take that class or not take that class at some point in the future and what's involved in doing that. And then I'm going to talk a little bit more broadly about the computer science major, if that's something that some of you might be considering or some of the other options related to that, like our joint majors or, in some cases, the possibility of double majoring. I did not actually bring any slides. So I'm just going to stand here and wave my arms around a bit. Maybe I'll actually stand up. And I suppose if we have anything that we need to draw, we do have the blackboard here. So let me start by talking about 223. 223 is usually the second programming oriented course that people take as part of the computer science major, the first one being computer science 201. If you are thinking of being a computer science major, you should probably go through 201 first. 201 is formally a prerequisite for 223, but as with all prerequisites at Yale, this is an open negotiating position. And with permission of the instructor, you can take 223 without previously taking 201. That being said, historically students who have come in to 223 without taking 201 have generally not done as well in 223 and then 323 after that as people who go through the normal track. If you are doing the computer science major, we do not necessarily require you to take 201 if you've already done 223. But we do ask you to do an extra elective to make up for it. In terms of the actual content of the class, the title the class is data structures and programming techniques. And that's mostly what it's about. We talk about programming from the point of view of how do you organize your code, the programming techniques side on the one part, and how do you organize your data that's operating on the data structure side. The thing that people often find odd running into it, which was probably not going to be so much an issue for you guys having come through CS50, is the language of instruction is C. So for people coming into the program who are used to languages like Java, this can be a little bit of a shock, given that C is such a terrible programming language. We do you C for a reason, which is that we're trying to get you an understanding of computers down at a fairly low level, at the point of individual bits getting shoved around, maybe not so much in 223, but certainly by the time you get to 323. And C is about as close as we can get to actual assembly language and still have it be something that's usable by any human beings at this point pretty much. And so that's why we use that in 223 323. If you want to come take 223, you should feel free to check it out. And then like I said, I'll be teaching it this spring. We offer it generally every semester now. So if you don't want to take it immediately, if you want to consider looking into 201, which we also offer every semester, you can go do that first and then and then come back. It's really up to you. Any questions about 223? All right, so now I'd like to move on to topic two, which is the computer science major. Which I don't know how many of you might be thinking about the computer science major. But so I'm the DUS for computer science, which means that I'm responsible for administering the computer science majors. Since it's a very large major, we actually have two other people who do advising within the major. We have a sophomore class advisor who is currently a professor, [? Rezeech ?] [? Pizscoch, ?] and a junior class advisor, who is currently Yang Yang, although he'll be replaced by [? Brent ?] [? Schuzuleti ?] next semester because he's going to be on leave. I handle all the seniors and freshmen and also handle issues that come up that are a little bit more involved in terms of dealings with the major. The major itself is a fairly straightforward major. We have five core classes, 201 and 223, which I mentioned already, 201 being the introduction to kind of all of computer science intended to give you an idea of what you're getting into. And then 223 is the first of two programming oriented classes on the kind of a track of 223 and 323, which are basically what I mentioned already. And then 323 is more of a systems programming class and computer organization class aimed at giving you an idea of how things work at a fairly low level and how hardware works and so forth. We also have a sort of math theory track on the other side. And we now have basically two versions of that. The standard version of that is computer science 202, mathematical tools for computer science and computer science 365 algorithms. The purpose of 202 is to take people who don't necessarily have much background in mathematics and give you what is often called mathematical maturity, an idea of how proofs work and how definitions work and how things in mathematics works, and kind of cover a little bit about the various different areas within mathematics that are relevant to computer science, mostly in order to get you up to speed so that when you hit 365, the algorithms class-- which is a class about reasoning, about things you would be implementing in programs without actually implementing them-- you will have the mathematical tools to actually be able to do that. And having gone through the core classes, these five classes, we then ask you to go and do six electives on top of that for the bachelor of science degree plus your senior project, four electives plus the senior project if you're doing the Bachelor of Arts degree. And these advanced electives will typically be 400 level classes in computer science. These vary in terms of what prerequisites they have. You can actually start taking electives pretty much once you get through to 223, and there even one or two that do not have anything beyond 201 as a prerequisite. And of course, as you take more and more of the core classes, more of those will open up. So the typical schedule-- people will start by going and doing 201, 202, 223, and so forth. And as the electives become available, you'll start filling them until the point where you get to maybe your senior year, you will be mostly taking electives and doing your senior project. The other track I should mention for the theory side is that if you were really gung ho about mathematics and the theory end of computer science, you have the option of, instead of taking computer science 202, you can take the discrete math course over in mathematics, mathematics 244. And if you do that, that opens up the intensive version of the algorithms class, computer science 366, which is basically a more advanced version of our standard algorithms class, which some people might like to take. So any questions about the basic major or anything like that? We also offer several joint majors. There is a joint major with mathematics, computer science, and mathematics, a joint major with psychology. We also have a joint major with electrical engineering, electrical engineering and computer science. These all have more or less the same structure. You have to take essentially the core classes in both majors. But then when you get up to the elective level, instead of making you take a full set of electives from both sides, you generally have an abbreviated list of electives that you're expected to take from either side, typically working out to about 14 or 15 credits total by the time you complete the major. And you do a single senior project that is acceptable to both majors. Some people will also do double majors by taking advantage of the fact that the computer science major, particularly if you do the BA, is a fairly thin major. So we get a lot of people who will do, say, a BA in computer science, which is 10 credits, and then a major in some other area. And these can vary for departments all the way across Yale. If you can arrange for something that has overlap with computer science, that has courses in common or the courses that could be counted as electives to both majors, this can also be efficient because you can actually get down to as little as eight extra electives to add on a computer science major because we allow up to two courses of overlap. I personally don't necessarily recommend doing a double major just for the sake of doing a double major. But if you're taking a lot of these classes anyway, this might be something that you can look into. I think that's basically it. SPEAKER 1: Thanks so much. All right, so we are officially adjourned. Please join us and the staff in back for cake. And we'll see you at the hackathon and fair.
A2 初級 米 CS50 2017 - 講義12 - イェールでの終わり (CS50 2017 - Lecture 12 - The End at Yale) 28 2 小克 に公開 2021 年 01 月 14 日 シェア シェア 保存 報告 動画の中の単語