DAVID: All right, hello, world. This is the CS50x Educator Workshop. Can everyone hear me OK here at Harvard? Yes? Well, so nice to see everyone again. I hope you had a happy and a healthy weekend over the past couple of days. I thought we'd begin where we always do, which is with just a few hellos. Might anyone be comfortable volunteering a blue raised hand if you'd like to say hello to the group this week to kick things off? RANPUR: Hi, David. DAVID: Nice to see you again. RANPUR: Yeah. Hi, to all. This is Ranpur, from India. Yeah actually, I was waiting for Sunday to complete so that I can join now. Thank you. DAVID: Oh, good. You're very welcome. And Siam, I'm not sure if I'm saying your name right. I saw your hand up. Did you want to say hello too? SIAM: Yes, hi, David. I'm Siam from Bangladesh. Nice to meet you. DAVID: Likewise, Siam. Nice to meet you as well. Any other hands, if folks aren't too shy? Chefket, if you'd like to say hello, nice to see you again as well. CHEFKET: Yeah, also for me too. I hope to enjoy today, because my background is technology. So we have first part in business and law. So normally it's better to know some other and get some skills in business. And law will be faced in our job with this [INAUDIBLE] problem. So thank you so much that you will involve these two kind of topics in our course. DAVID: Of course, thank you, and so glad it'll fit a need that you have in mind. And last but not least, Ramon, would you like to say hello again to the group? Welcome back as well. RAMON: Hello everyone, again. This is Ramon from Brazil. I'm very excited to be here again. And I hope we all can take the most out of it. So let's go. Let's get started. DAVID: All right, I love how you're ready to kick things off every time. Well, let's indeed dive right in. Today and this week will be entirely focused on other courses that you can teach in your own classrooms in some forms before or after CS50x. Today's focus will be on three courses that are nicknamed CS50T, CS50B, and CS50L. So each of these courses has their origin here on campus in some form or other. CS50T, titled officially, "Understanding Technology," is essentially the first class that I myself taught some 20 or so years ago. It went by a slightly different name and number back then. But nowadays, this is an adaptation of that very same class, modernized for technology that we have 20 years later. This is a course, as we'll see, that's meant really for anyone. It's meant to empower students to understand the technology that you and I use every day, that you and I carry in our pockets every day, but don't necessarily understand how it all works. And so it's meant to provide students with a better understanding of consumer hardware, of internet technologies, and a lot more. CS50B, otherwise known as "Computer Science for Business Professionals," is inspired by a class I teach here on campus each year at Harvard's business school, where there is an MBA program, master's of business administration, where the students in this class learn from a top-down perspective about technology as well, but it's a little more managerial themed. It's a little more decision-making themes, not so much in the consumer space, but in the corporate workplace. How do you understand the various technologies that you and your staff can use to solve problems? How do you make estimations as to how long things should take to create, how much projects should cost to create, and essentially provide business leaders with a better understanding of technology so they can make themselves better decisions in their own enterprise? And then lastly, and most recently, is CS50L, CS50 for lawyers. This is a class that I co-teach with CS50's Doug Lloyd at Harvard's law school, where students are pursuing degrees in law. And this class, similar to the other two classes, is also top down, conceptually. None of these are programming classes. But CS50L intersects all the more with real-world issues of law, real-world issues of intellectual property, of security, a lot of the topics that lawyers, and paralegals, and others in the legal profession might have to think about, might have to advise clients on day in and day out. So we'll give you a sense, then, of all three of these courses today so that you're welcome to adopt or adapt the courses in some form, either integrating them into your existing class. Maybe it's CS50x or something else. But we position these courses essentially as precursor courses to CS50x. CS50x, as you may recall from last week, especially if you've taken it online, really as the backbone of CS50's curriculum. It's meant to be a rigorous introduction to computer science and to programming itself. But these three courses do not assume that students have taken CS50x. They do not assume that students have any prior programming experience. And the goal of these courses is not to teach students how to program, but to give them exposure thereto into concepts related, as well. If at any point, as always, if you have any questions, or comments, or would like clarifications, please do. Just raise your blue hand. Happy to make this as much of a discussion as we can-- and please feel free to chat with each other via the chat window as well. So all of these courses, if unfamiliar, are available in multiple locations, perhaps the simplest of which is on edX, if familiar with the MOOC platform, at edx.org/cs50. And there is a few other classes there that you'll see that we'll learn more about later this week if you choose to join us as well. So here is essentially where today's three courses fit into CS50's growing curriculum. Once upon a time, CS50 was just CS50, that is, CS50x. But now we would describe the ecosystem of the team's courses as being CS50 as this backbone that I described earlier and then three possible on ramps to CS50x itself, so the business version of the class, the law version of the class, and the technology version of the class. Those three courses aren't necessarily mutually exclusive. You could teach multiple courses. Your students could take multiple courses of business, law, and technology. But there is definitely non-trivial overlap. And so we would generally advise that, if considering one of these courses, you start with the one of most interest to you and your students and then perhaps adapt other aspects of the other classes as opposed to having students take multiple precursors to CS50x itself. Ahmad, I see your hand is up. Question or comment? AHMAD: Yes, David. I believe there is also CS50 for form mobile development. And I don't see it mentioned. Actually, there is no session for it this week. What happened to this course? DAVID: Correct. What is not pictured here is CS50's mobile app development course, which is drifting out of date. It's still available as OpenCourseWare. Teachers are still welcome to use it, but we don't currently have plans to update it enough so that students can follow along with the latest and greatest versions of software. So while the projects, the lectures, everything is still available, the world of mobile app development changes so quickly that the materials have fallen out of date. So at this point, in 2020, odds are there are better, more-current resources online for students who want to dive right in and not struggle with changes in documentation and API. So indeed, this week, will only focus on today's three courses, and then Brian's AI class and web class, and Colton's game class as well. So indeed, we'll focus on exactly that today, just three of these on-ramp courses in some form. And we'll go through them one at a time. And please, again, interject at any point if you have questions. And I'll highlight at the end the similarities and differences among these courses, outright. So CS50T, or that technology class, is freely available as OpenCourseWare at this URL here, Brian, if you wouldn't mind pasting this into the chat window as well. And CS50T essentially follows a syllabus along the lines of these topics here. So it's broken down into six units or modules. You can present these as six disparate weeks. We tend to spend two weeks on each of these topics. But at the high-school level, college, university, you could certainly spread it out over a longer period of time as well. In terms of the particular topics that we introduce students to in understanding technology, AKA, CS50T, we actually start where we start CS50x itself, introducing students to the representation of information and giving them a taste of and understanding of binary. From there, we talk a little more about-- a bit more about hardware in CS50T than we do in CS50x so that students understand what's literally inside their laptop and desktop. Pictured here, of course, is a CPU, or the brains inside of a computer. And we talk in a bit more detail in this class about what it is the CPU is doing for students' computers and how it connects to other pieces of hardware. Indeed, another piece of hardware we talk about in CS50T is hard drives. So pictured here is the inside of a 3 and 1/2 inch hard drive with its spinning platters, and such. And we allude to this model in CS50, but we don't talk in great detail about the physicality of what's inside the drive in the magnetic particles that are storing your information. So we try to peel back more conceptual layers in CS50T so that students do have this top-down understanding of how the hardware in their computer actually works. And we also take a look at the back of or the side of students' computer, so to speak. And we actually look at and talk about ports, display ports, and HDMI, and VGA, and USB, and bunches of others that you could find on the side or the back of a modern computer so that students are able to understand exactly what are these wires all doing. We encourage students as unofficial homework, go home, if they own a desktop especially or live in a household where someone owns a desktop, and we actually encourage them, once it's powered off, pull all of the cables out and then go about figuring out how you plug them all back in. And while, for many of you in this Zoom meeting might find this pretty straightforward exercise, I'm guessing you can think of someone in your life, maybe family or friend, who might very well struggle to get the thing back online if they don't know where the various cables go. And so this is the sort of theme and the spirit of the class to really make students feel more comfortable with technology by helping to take away some of the fear factor. Well, if they just pull out the plugs and put them back in, provided they power down safely, they're not going to do any damage. And all of these things, of course, have disparate shapes, if not colors, if not labels. So the goal is really to take that fear factor of technology away from folks. Now, you might recall a familiar face on the screen here. We also infused this class with some visual demonstration. So CS50's own Colton Ogden joins me here in his scientific lab coat. And we walk through some actual pieces of hardware. On the desk there in that photograph, do we have CPUs, and RAM, and other devices that you would see inside of a computer. And we draw all the more attention to those components to students. We then transition and focus for one or more weeks on the internet and how it works. We talk to students about home internet connections. Here in the US, cable modems are quite popular, as are DSL modems and other technologies. And we help students understand what it is you're getting from your ISP, or Internet Service Provider, and what all of those cables and technologies are doing for you. We then look more technically at one's Mac or PC. And we talk about how your computer is using the internet. We talk about IP, Internet Protocol, and IP addresses. We talk about a DNS and DHCP, a lot of these acronyms that students don't need to care about every day, but if they need to configure their computer or troubleshoot some problem, odds are they're going to see some mentions of these acronyms. And so the hope is to dispel any fear or confusion around these terms and help them understand that, while these terms might look fairly esoteric, once you have a basic understanding of how the internet works, you can start to make sense all the more of your world. Here is a screenshot of the same idea pictured here with Windows as well. And then we talk to students about their own home topology. Odds are many students have internet access in some form these days, whether through their phones, or cable modem, or DSL, or Fios, or something else. And so we help students understand how the home router interacts with maybe a built-in firewall, with their laptops, and desktops, and printers, and any number of other devices so that it just all makes sense and it isn't just something that someone more technical than they setup. It's something they could set up and troubleshoot themselves. Now, in CS50T, we also spend time on multimedia and file formats, so relate it to sound, and images, and videos, and the like. And while we do spend time in CS50x itself on digital forensics, and on file input and output, and on the representation of bitmaps and JPEGs, that's very low level. In CS50T, we sort of focus conceptually up here so that students understand what a GIF is, a JPEG, a ping, and how these file formats differ from one another, an MP3, or AAC file, or MIDI file, or WAV file. We help them make sense of all the various file formats that they might hear about or they occasionally download onto their own computers so that they can sort of understand why it is there are so many of these things in the first place. We talk to them about how images are represented. Here is a literal bitmap, zeros and ones that represent black and white pixels on the screen. And we talk to students about what an image really is. We encourage them to go home, and on their desktop, or laptop, or better yet, TV, put their eyes really close to the screen and see if they can't see the actual pixels on today's LED or LCD screens as well, so that they realize, oh, this technology has been with me all this time. We talk about compression. And let me ask the audience this one. Pictured here is an apple against a blue sky or background. And no matter what file format it's stored in, odds are we could compress it in some form. We could use fewer bits, less disk space to store the same picture. Any thoughts on how a file format might compress this photograph of an apple? What's the opportunity here, technically? Even if you don't know, what might your conjectures be? Ignacio, would you like to start with your thoughts? IGNACIO: Yeah. Good afternoon to you all. Thank you. Glad to see you again, David. DAVID: Likewise. IGNACIO: I think that one way to do this is, if you take all the blue area and match or bye or one bit for example and map all the red area another bit for example. I think that this compress a lot of this image in really small piece of file. DAVID: OK, by somehow grouping together the red and the blue-- I think that that makes sense. It's a step in a good direction, I think. Ahmad, do you want to elaborate from your perspective on the same question? AHMAD: Yes. I believe also we can do lossy compression. By reducing the resolution of the image, this can also-- so what Ignacio said is basically-- I'm sorry. What Ignacio said is maybe lossless compression. But we also have lossy compression that reduces the resolution of the image. DAVID: I'm so glad you used those terms, because we use them in CS50T as well, lossless compression, where you somehow use fewer bits but you don't lose any useful information, and lossy compression, where you do start to throw away quality as by shrinking it or using even fewer colors in the spectrum. And so if you think about this, though, at a low level, as we encourage students to do, how might you describe this picture to someone else without using the abstraction of an apple? You might literally start at the top and go from left to right, top to bottom, and say that there is all of these pixels, horizontally and vertically. And you might literally describe each pixel, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, and so forth. Eventually you might say, blue, blue, blue, red, red, red, red, red, blue, blue, blue. But you can hear in my voice, of course, a huge amount of redundancy, as I'm describing again and again, really, the same color of different pixels. So you could imagine taking a lossless approach and just storing less information but-- sorry, storing fewer bits, but not losing any information fundamentally. For instance, I could describe the same picture with blue 10 times to the right, blue 10 times to the right, blue three times to the right, then red, then blue again. And you could imagine sort of verbally and digitally compressing the image by using run lengths of some sort and describing a series of pixels and their colors as opposed to every pixel individually. So we talk to students about these primitives. And we get them thinking about technology in a way where, even if they've never heard of a file format before, they can start to reason methodically about how this problem could be solved, even independent of the particular technologies with which they're familiar. Here is another one. So this picture here, of course, represents a few flowers and a bumblebee flying from left to right. And even though the bumblebee is moving literally from left to right in each of these frames, from a video, for instance, what's not changing is the flowers. So another thought question we might ask of students is, for video, how can you go about compressing the video? Well, you can do lossy again, as Ahmad proposes. And you can shrink the resolution or use fewer colors. But you could also perhaps do it losslessley, as by storing only what changes frame to frame. A frame in the video is really just an image flying across the screen very quickly. So if we really store the first picture of the flowers and the last pictures of the flowers, but in between there, we just store what's changing, the position of the bumblebee, odds are, that is sufficient information to reconstruct the original video losslessley with no loss of quality, but we can store a lot less information, because we don't have to remember the flowers again, and again, and again. So we also talk to students about Hollywood, and TV, and movies. And this is a clip from some show like CSI, Crime Scene Investigation. And in these kinds of shows, there is always, like, a glint in someone's eye, like this one here. And if you zoom in on it, there is the bad guy. And you can capture the criminal. But of course, if you zoom in on a screen like this, in a photograph or video, odds are you're only going to see pixels like this. And you can probably only barely see them on my screen because of compression. But there is certainly no clear evidence of who it was that was shimmering in that fellow's eyeglass. And so we talk to students about why this is and why some of what you see on movies and TV is just nonsense, technologically. It doesn't make sense to be able to see that glint in the eye if the information was not stored, for instance, at a high enough resolution. Well, after multimedia, we transition to security. And we talk about passwords, for instance. And here, for instance-- this is of last year-- were the top-10 worst passwords on the internet. And if you yourself are using any of these passwords, you better change it, because any of the students you might teach this material to are perhaps going to get a bit curious as to whether you indeed are. So we talk about why these passwords are insecure and how a hacker might go about figuring out your password. And it might be via brute force, literally trying all of these most-popular passwords on your system or mine trying to get into someone's account. And we talk about why websites have you add things like numbers, and punctuation, and have a certain length. And we even give them a sense mathematically of how much more secure a password that's this long is than a password, for instance, that's this long-- or less secure than a password that's this long. After that we talk about other factors, two-factor or two-step authentication that you might use with your Gmail account or some other service, where you tend to have a physical device like your phone that you need to read a code off of before logging into an account. And we talk about familiar technologies as well, like Wi-Fi, for instance, and just to what extent are students data insecure when using a laptop or phone, and what it means to actually use WPA or WPA2 and some form of encryption in your Wi-Fi, let alone something like HTTPS. We talk about matters of privacy most students are probably generally familiar with cookies having some implication for their privacy, but odds are, most don't really understand what that means. So we explain what cookies actually are, sort of small files or pieces of information on your computer left there by some server. And we help them understand what's going on when they use incognito mode, or more importantly, what's not going on when they use incognito or private mode so that they understand the implications of their decisions when they're doing something sensitive, whether it's with some personal document, or financial, or health information, or the like, they understand exactly what information is being stored on their computer, where it's being transmitted, who can access it, and for instance, for how long. And then we transition towards the end of the course to some final topics, one of which is web development. Now, we don't go into nearly the same depth as we do in CS50x. There is no flask. There is no dynamic user input and output. But we do introduce students to HTTP, the protocol that underlies the web itself. And we help them make sense of 404 and all of the other status codes that you may or may not see when visiting a website. We talk to them about HTML and how you would make your own web page. And we have students make their own personal home page, but purely static ones using only HTML and CSS, maybe using a little bit of JavaScript. We help them understand as a teaser for classes like CS50x how this text-based language, HTML, can really be mapped to a picture of sorts, like this DOM here, this Document Object Model, but of course it's not until a class like CS50x that students might code that manipulate in any detail that kind of tree structure. But they see it in this class, And then lastly, and perhaps the best setup for something like CS50x itself as a next step is the course's introduction to programming. We start, as in CS50, with pseudocode, flipping through a phone book, for instance, looking for a name and a number. We introduce students to scratch. And so we spend time introducing them to primitives of procedural languages, like conditions, and loops, and variables, and functions, and the like. We don't get into great detail on more advanced topics like threads, and events, and that kind of event-based programming per se. We leave that more for CS50x and onward. But students do have an opportunity to make their own scratch project and hopefully whet their appetite for diving all the more immersively into a programming class like CS50x itself. And then at the end of the semester, and really, throughout the semester do we have assignments followed by a final exam of sorts. And Brian, if you wouldn't mind pasting this URL into the chat window, here is a sample exam of questions that we might administer at the end of this course. And you'll see that all of the questions really are thought provoking, they're concept oriented. And they're meant to help students wrestle with new problems that are inspired by the concepts that we've looked at in the class itself. And so indeed, in terms of assessments, and what we make available to teachers, is each week, each of these modules, hardware, and internet, and multimedia, and web development, and so forth, all are accompanied by these sorts of assignments that look like this sample exam. We tend to use Google Forms with them. But you can certainly use any technology that allows you to ask questions and solicit answers. And they all tend to be short-answer-style questions, to which there is often a right answer, but there is often a gray area and opportunity for students to really think about a problem and propose, with the proverbial engineering hat on, their own solution to a problem. And so that, then, is CS50T. Any questions or comments that I can answer here? And all of these materials already are available at both the OpenCourseWare URL that Brian pasted earlier, as well as on edX and other sites. David, can we go over to you? Question or comment? DAVID LANE: So I see how the link that was provided by Brian provides access to the resources. It look like when I went to submit a unit assignment, then sent me over to edX. And I think if the students submitted through that, I might not be able to see that work. So how would you recommend students access these forms and submit assignments if we're using it locally? DAVID: Really good question-- so for these courses, we would encourage you to use your own copies of the forms. Odds are, depending on your students and your schedule, you might want to assign them in shorter form any way to split them up into multiple assignments, assign one question per day. It's really varied at both the high school and upper level as well. And in that case, the answers would all go directly to you. We do not all automatically grade these answers, in so far as they are short answers. So there isn't something like check50 for these. So we would encourage teachers, whether using Google forms or any technology, to simply adapt the assignments to whatever technology they prefer. Rosa, over to you next. ROSA: One question. This is, like, the first part of the AP CS50. So you mentioned that, for you all at Harvard, it takes one week per topic. Traditionally, how many weeks is spread out in the AP context? DAVID: In the AP context, it depends on the teacher, but I would spend no more than 10 or 12 weeks, I would say. And even that is probably longer than it needs to be. At Harvard's extension school, for instance, we spread this course out over 12 weeks. And the way we structure it is we have students watch the materials in one week and start on the assignments. The next week we have hands-on sections or recitations with one of the teaching fellows, which is an opportunity to explore the material in more detail to ask questions about it, to perhaps re-enact some of the demonstrations that you might have seen in the video. So 12 weeks is a reasonable pace. I think you could spend more time, but I suspect, at that point, your students might be raring to go for four more-advanced material thereafter. Ignacio, over to you. IGNACIO: Oh, thank you. Two questions-- the first one is, what is the prerequisite, the background that these students need, for example, high school, middle school, or starting college? And this school, we have, for example, a way to work with Harvard to [INAUDIBLE] certificate to our students, because I think that is a good course. And I can, with my colleagues, offer this course as an extension course on our college. So how does certification works? DAVID: In terms of the age group for which the course would work well? IGNACIO: For the CS50T, there is a kind of certification like in CS50x and others? DAVID: At the end of the semester, yes, for students you do submit their work through edX, we do offer CS50 certificates of our own, similar in spirit to the ones you might have seen last week. And edX also offers their own verified certificate. Of course, if a teacher has their students, as David notes, submitting directly to them, that would circumvent that typical process. But we can work directly with teachers to create certificates for your own students of interest. And in terms of the target audience, we tend to teach this material to students who are generally in high school, or college, or are working adults or retired adults. But I think for 13 years old and up if not even younger would be a reasonable target audience for CS50T's type of material. IGNACIO: OK, thank you. DAVID: Of course. Kaloa? I'm sorry if I'm not pronouncing your name right. But Kaloa, if you'd like to say it and ask your question too? KALOA: Thank you. Thank you, David. I'm asking you about operating system. You suggest one, for example, Linux or Windows. For example, when we choose Linux, you think it's for the commands? DAVID: So an operating system for what context? For taking a class like CS50T? KALOA: Yeah. When you presented, you present the hardware, the compression. And you didn't talk about the operating system. And I think it's important. For example, if after that, they would utilize git, for example. And they have had the basics about commands on the [INAUDIBLE], no? DAVID: This course does not introduce students to a command line, or commands like git, or the like. It is completely agnostic when it comes to operating system. I in the lectures tend to use Macs. Colton sometimes uses PCs. When we focus on computers themselves, we introduce students to the hardware. We do not spend much time focusing on operating system details. So for this course, it does not matter what operating student a teacher or a student has. If you happen to be in an environment like a computer lab or a classroom that all has the same types of computers and operating systems, you can absolutely supplement CS50T's own material and talk to students about what it is an operating system does, and some of its features, and so forth, but that's not covered in the class itself. KALOA: Thank you. DAVID: Sure. Chefket, over to you. CHEFKET: Do you hear me? DAVID: I do, yes. CHEFKET: OK, thank you. In fact, I have no question, but just to mention that I have completed this course, which was really valuable. And I have recommended it also to my students. Also, I have used the practice to my students forms and quizzes that I got during this course. And really, they like so much them. And in a short time, I was friendly with these forms and quizzes. And I will recommend to my colleagues also and to my students next year, academic year. It's a very, very valuable of course. And I love so much programming in Scratch. It was first time for me. But really, really, I enjoyed that project. It's that kind of project. Also web development, and security engineering, a lot of it-- so much, thank you, David, for that. DAVID: You're very welcome. Thank you. I will call on you for every one of our classes now. Joseph, over to you next? JOSEPH: Hi. Quick question regarding C as the choice for what you use-- and I understand, because it has the compiler. And students need to understand that process. But I notice a trend. And this is Stanford, and MIT. Like, slowly they switched from JavaScript for their 101 class to Python. And there is a lot of another trend driven by Google and AWS where a lot of cloud is based on Python. Like, they use command set used to stand up a server or a Kubernetes cluster are all mostly based on Python, which is becoming, like the number-one most popular language. Have you given any thought to do more than just a lecture six two-hour thing on Python within the formal course? DAVID: Sure. So to be clear, CS50T does not teach programming in textual form. We only use Scratch. CS50x, to which I gather you're alluding, does introduce students to Python at the tail end of the class, but we spend much of the beginning of the semester on C. Brian, if you wouldn't mind pasting our official answer on Quora to this question-- in a nutshell, I pedagogical find that C in CS50x is a helpful way, bottom up, for students to understand what's going on inside of a computer. Two, I think it gives them a better appreciation for a higher-level language like Python without hiding initially what it is the computer is doing, because indeed, with C, there really is no magic. If you want something to be in one place in memory, you need to put it there, whereas a higher-level language like Python does a lot more for the students, which has advantages, of course, too. But allow me to defer to the length that Brian can paste to Quora for a more refined answer here just so we can keep the focus on CS50T. JOSEPH: Thank you. DAVID: Jerome, over to you next. JEROME: My question is regarding the update of the CS50 Understanding Technology. And I'm asking this because I realize that CS50 for lawyers was updated after two years and also CS50 web programming taught by Brian Yu. So my question is, do you guys plan on updating CS50 Understanding Technology, or given the nature of the course, It's something you guys think it's not needed? DAVID: It's not needed yet. We've talked about this internally, but the material is still very much germane to current technologies. Having taught that class or some version for it off and on for the past 20 years, it eventually absolutely drifts out of date. Back when I started, we were probably talking about how many megabytes of RAM you and I have in our computers and how many megahertz our CPUs were as opposed to gigabytes and gigahertz. So those kinds of numbers change over time. We don't think we've crossed the inflection point yet. Eventually we probably will update CS50T. But I would not have any concerns with teaching it now in its current form. It has not drifted out of date. By contrast, the mobile class experienced precisely that gotcha. All right, well, allow me to steer us toward the second of the three classes. And here you'll begin to see overlap. So for the portions that overlap, I'll move a bit more quickly and highlight, really, the differences. So CS50B, for Business, is, of course, again, inspired by a class I teach at Harvard's business school. And this class has been adapted now, is OpenCourseWare at this URL here. If, Brian, you wouldn't mind pasting this URL on the screen as well. And it's also of course available on edX as well. In terms of the syllabus, it covers similar material , from again, a more top-down, managerial perspective on computational thinking, programming languages, internet technologies and web development, and then some new topics toward the end of the semester including technology stacks, all of the various building blocks you might bring to bear on an IT solution, as well as cloud computing, topics that we don't touch on at all in CS50T. In terms of where we begin the semester, it too borrows some inspiration from CS50x itself. You might recall that we introduced students to problem solving by way of inputs and outputs, between which are algorithms, step by step instructions for solving some problem. But in the business class, unlike the technology class, we give students a little bit more theory, just as we do in CS50x. And we introduce them to running time, and even asymptotic running time, so that they, in a managerial position, can have a more informed, intelligent conversation with an engineer, and roughly understand what it is when an engineer says that one algorithm is "better" than another they. Have a mental model with which to compare things. As opposed to trusting entirely a technical team, they can actually engage in those conversations with them. We introduce students in the CS50B course to programming at a high level, but really, programming languages. So not just Scratch, though we do use some Scratch, but we introduce students by way of name and exposure to the whole menu of popular languages that are out there. And pictured here are just some of them. But we give them some exposure to some of the more commonly used languages. And we talk with students about when you might use something like C or C++, when you might instead reach for Python, or PHP, or Ruby or Java, when you might use Swift or Java again. And we help students categorize languages so that they generally know what types of language are generally used to solve what types of problems, so in more depth than we discuss them in CS50T. But the students here too do get an opportunity to play with Scratch. And even though its target audience is officially younger students, we have always found, as Chefket noted earlier too, that it actually does tend to appeal of students of all ages. It's just that accessible. And most importantly, it highlights principles of programming. It's not all just fun and games. We're using it to introduce students, again, to functions, and variables, and decomposition of functions, and abstraction, and the like. And so I think, so long as you introduce it in those contexts, even the most senior of students I do think sees the value in learning by way of a technology like that. And then we transition, not unlike CS50T, to internet technologies, focusing on how the primitives underlying the internet work, making a bit more sense of the alphabet soup, especially since, in business, a company running its own network or its own infrastructure is going to have some staff on duty who has to deal with these problems. So again, the goal is to empower managers to be able to have informed, more technical conversations with their engineers. Even if the managers aren't themselves sufficiently technical to solve technical problems, they can at least participate in those kinds of discussions, and ultimately, decisions. We introduce students in CS50B again to web development, introducing them to HTML and CSS. But we also JavaScript students in a bit more detail to JavaScript. And we show them more JavaScript so they can wrap their minds around a bit more readily exactly what it is a programmer is doing when they are writing actual code. Of course, in the real world, a company wouldn't tend to use something graphical like Scratch to build its product. They might use JavaScript, or Python, or C#, or something else. So we help translate Scratch to something like JavaScript for students so that they've seen exactly what you can do with the language, and they have, again, a more clear mental model for that world. But then in CS50B, do we really dive into technology stacks more generally. And here too, the goal is not to turn students into experts with the latest and greatest technology, but we want them to have heard about those latest and greatest technologies. But more importantly, we want them to understand what problems those technologies are solving, because odds are, next month, next year, next decade, a lot of these terms, a lot of these tools are going to be out of date. But the ideas are probably going to be there, along with some new ones. And so we introduce students, for instance, to the front end of software development, focusing on languages like CSS, HTML, and CSS, but also frameworks and libraries, some of which you might be familiar with, Angular, Ember, Meteor, React, and Vue, which generally make it easier to create more sophisticated user interfaces. And Bootstrap, Foundation, Semantic UI, and others make it a little easier to get started with more sophisticated user interfaces without having to implement everything yourself. And so for managers and other business professionals, we help them understand what the value of frameworks and libraries is and what those things can do. We help them think about open-source versus closed-source alternatives so that they don't just have a knee-jerk reaction to, yes or no, we should use open source. They understand the tradeoffs of either paying someone to write custom code for them or using some off-the-shelf solutions. We talk too about backend solutions. And here there is even more languages at our disposal, not just Python, and PHP, and Java, but Go, and .NET, and Ruby and, others. And there too, there are frameworks from which companies can choose, including Django, and Flask, and others as well. And here you see hints of some of the tools and technologies that Brian teaches in his class that I teach in CS50x. So there is, again, some overlap here. But in the business class, we try to give students this top-down conceptual understanding of how all of these building blocks fit in. And then lastly, we focus a bit more detail on database back ends as well, what it means to be a SQL, or relational database, or a NoSQL database, or document store. We give students a little bit of exposure to at least the biggest players in this space, MySQL, Postgres, Oracle, Access, and others, so that, again, they have a model in their minds of where all of these technologies fit in. And then lastly in this look at technology stocks do we focus with students on mobile development. And we help them understand that, if you want a mobile app that works on Android and iOS, sometimes you need to write, essentially, two separate applications. It's a lot easier said than done to write one app and run it multiple places unless you select the right technology. So instead of using Swift or Java, if you instead use CSS, HTML, and JavaScript, and a framework like React Native, formally introduced in Jordan's mobile development class, can you perhaps solve two problems at once. And so we help students think about how they might solve problems in business more economically, more rapidly, as by choosing the right tools. We also introduce students to database design and what SQL itself can do. And most folks in business are probably familiar with Excel, or Google Spreadsheets, or the like. And we help them translate some of those primitives to create, select, update, and delete SQL commands with which they might want to experiment. We help them understand NoSQL as well through examples like this here. NoSQL, if unfamiliar, is a little more hierarchical, a little more structured, and a little less flat as SQL. And so we just give students a sense of what it is you're getting when you choose one technology like NoSQL versus another like SQL. And then lastly in the business course, do we focus really on a high level, top down, on cloud computing, which you can't help but hear about constantly these days. And companies are increasingly moving into or thinking about moving into the cloud. But what does that mean? And what do you need to understand? We introduce them to some of the biggest players in the space like Amazon, Microsoft, and Google, these days. And we more importantly introduce students to some of the primitives that underlie using cloud computing. Even though the cloud is indeed, by design, this abstraction such that you don't really have to think about as many problems as you might on premise, when running your own servers yourselves, all of the same problems still exist of availability, and caching, and how you pay for it, how you replicate and scale your infrastructure, and so forth. So we help students understand what problems still need to be solved by someone, so in turn they understand what is it you're paying Amazon, or Microsoft, or Google or some other party to do for you in the cloud. We help them think about the tradeoffs. Is it more secure or less secure to put your data in the cloud? Is it more expensive or less expensive To keep things on premise or in the cloud? And then lastly, we introduce students to some of the technological underpinnings of cloud like containerization and virtualization, technologies that have, in part, driven this trend toward cloud capabilities, and then also buzzwords like IAS, and PAS, and SaaS, the last of which, most business types are familiar with, Software as a Service. Gmail is a Software as a Service. It's more of a buzz word that describes the level of abstraction at which you can think. Platform as a Service is a little lower, a tool like Heroku or the like. And below that is Infrastructure as a Service, which tend to be infrastructures like Microsoft Azure, and Amazon Web Services, and the like. And so we help students think at these multiple levels of abstraction. If you'd like to take a look, and if, Brian, you wouldn't mind pasting this URL too, a sample exam for CS50B is here too. And like T, it's very concept oriented. It's very short-answer driven. And as a teacher, could you take some of our assignments, as Chefket alluded to earlier, as well as the exam, and either assign them week to week or every two weeks. You could break them apart into one question per day or per week. And so we offer, at this URL here, some sample questions. But again, on the OpenCourseWare site, as well as on edX is the complete corpus of materials that teachers can adopt or adapt. So that, then, is CS50B. And before we look at our third and final class on CS50 for lawyers, let me pause here again for any questions or comments. Ramon, over to you? RAMON: OK, so my question is, the first two or three lectures of the CS50 courses are very similar to one another, because after all, it's a computer science class, it's a computer science course. But I would like to ask, what did you take into account when tailoring the topics for business professionals? And how does this course differ from the computer science for business leaders that you taught in 2016? And if it's the case that, CS50x for Business Professionals is an update of CS50 for Business Leaders, why didn't you include the lecture focused on privacy, security, and society? DAVID: That's a really good question. You have definitely done your homework. So I think the way to think about how we designed each of the courses is, indeed, with the target audience in mind. So CS50T was designed with, for lack of a better description, consumers in mind, sort of everyday people like you and me in our everyday lives wanting to better understand technology. And so that's why there is more of a focus on home networking. That's why there's more of a focus on hardware and the devices that you and I might interact with, irrespective of our business vocations. The CS50B class for business types is really focused on decision making and empowering people in business to have more technical, more proficient conversations with actual engineers. So the assumption of CS50B is that the business professionals are not working in isolation, but they're indeed working with whole teams of people, some of whom are invariably going to be more technical than they. And the goal is to bridge those two demographics. CS50 for lawyers is more focused on the intersection with society, so laws that aren't necessarily specific to the US, but Doug does use some examples therefrom, but really on issues like net neutrality, and intellectual property, issues that affect lawyers' clients, and therefore, topics that the attorneys should ideally be sufficiently versed in so they too can make arguments and understand claims that are being made by their clients or opposition. So the business leaders class to which you refer was just essentially the same course under a different title. And some of the topics to which you allude in terms of privacy and security have simply been woven into other units in these classes. In cloud computing, for instance, does security come up, even though we don't have it titled explicitly. In the law class, though, we spend more time officially on issues of privacy and security ever more so because of the intersection with law. David Lane, over to you. DAVID LANE: Yeah, I wanted to circle back a little bit to the previous question about the unit assignments and the creating of the task, because I see that when you refer to the OpenCourseWare, is that your CS50 Harvard edu? DAVID: Correct. DAVID LANE: OK, and so over there, I certainly see that the lectures, and slides, and assignments reference over edX. And on edX, with each unit, there is a Google form, which I'm thinking, probably the best way to handle that is just look at the questions, kind of borrow what I like and make my own Google form? DAVID: In short, yes. And after this workshop, we're going to put together a more central resource for all of those so that you don't have to jump through these multiple links in order to get at the content. But yes, simply copying and pasting or copying the form outright is generally what would be the easiest thing to do, since all of the questions are text based. DAVID LANE: Yeah, so that is excellent. And when I look over at edX, I do not see anything like a final exam. I just see little assignments for each unit. Is that pretty much the things are structured? DAVID: Yeah, that is deliberate. We make available our final exams to teachers who might want to adopt or adapt the class. They're not part of edX. We only rely on the weekly or module-based assessment-- assignments on edX. So the exams are additional material available to teachers for on-class-- for on-campus administration. DAVID LANE: And you had mentioned at some point, there would be a form we could fill and verify that we are teachers. DAVID: Indeed, we're-- we haven't sent that out yet. We're still catching up from last week. But we'll be following up as soon as we're a wrap this week with the workshop. DAVID LANE: Perfect, OK. Thank you very much. DAVID: Of course. Joseph, over to you? JOSEPH: Yes. Regarding CS50 for Business, one big thing that has been a struggle for a lot of organizations, including the county system here as we upgrade to the cloud, is really, it's a long, five-year journey. And then by the time your done, the technology moves ahead of you. By the time you do virtual machines, now it's cloudless or serverless. Do you have a section where, like, you give best practices, like, for example, diversify, have Google do something for you and have AWS-- don't put all your eggs in one basket, kind of, you know, business decision maker advice as a section somewhere? DAVID: It comes up. I don't know if we hit the nail right on the head, so to speak. But those questions come up in both the technology stacks portion of the course as well as in the cloud computing portion. And we stop short of giving students rules of thumb or advice, because as you say, that can be quickly outdated. We really do focus more on understanding the underlying technology so that they can make more informed decisions based on the context in which they're operating. But your experience is quite common, unfortunately. And the world changes quickly. So fortunately, the underlying fundamentals do not change. So we help students make sense of that spectrum. All right, well, with no other blue hands up, let's forge ahead with our third and final class today, which is CS50 for Lawyers. So you'll see in this class that it includes a bit more content than the other classes. This is the newest class with which I collaborated-- on which I collaborated with CS50's own Doug Lloyd, who you might remember from CS50x's shorts. Doug is a lawyer by training himself. And so he wonderfully brought to this class all the more of a perspective of a trained attorney. And that is the lens through which we look at a lot of the societal issues to which I alluded earlier. So flipping through these topics too, you'll see again at the beginning some shared foundation among T, and B, and now L. In terms of problem solving itself, we introduce students again to the representation of inputs and outputs, and ultimately to the algorithms in between. We introduce students and spend a bit more time on representation of information, focusing, of course, on familiar technologies like ASCII or Unicode, and toward an end of understanding exactly how it is systems store information. When we transition ultimately to algorithms we again provide students with some of the same building blocks as CS50T, and B, and even CS50x, but we also talk to them about certain primitives and principles that you see more of in CS50x. For instance, the picture here is, of course, what? Any quick blue hand? What are we looking at here on the screen? What is this here? Almost every blue hand should be up. This is not a trick question. This is-- what's that? Oh, Brian, what do you think it is, Brian? Oh, Brian, no? Not even Brian? BRIAN: Hear me? DAVID: Yes, now we can. BRIAN: Oh, I was going to say, that looks like a cube to me. DAVID: It does look like a cube, so otherwise known as an abstraction. Like, you and I probably have enough frames of reference from the real world to know that this can be described as a cube. But someone unfamiliar with "the abstraction" of a cube might describe it as three diamond shapes that are all touching one another. You might describe it even more pedantically as a diagonal line, and then another diagonal line, and another diagonal line, and so forth. And so we really introduce students in CS50L to those layers of thinking and what it means to abstract away details, to actually get into the weeds of those implementation details, especially when it comes to intellectual property and algorithms. When a company has, for instance, filed a patent to describe their algorithm, at what level is their algorithm being described? And where might there be ambiguity or opportunities for more precision? We transition, of course, to programming languages, as we've done in the other classes, here, but more with the focus on, again, intellectual property and the implementation of algorithms. We introduce students to some actual code. And we talk to them about compiled languages like C, or assembly language to which C might be compiled. And we also talk about machine code, because in the context of law where one company might be claiming that another company copied its code or its algorithms, helping an attorney understand at what level we're discussing those similarities-- is it source code, machine code, or somewhere in between-- can help them just better advocate on behalf of their clients. We help them understand issues involving data. The Y2K problem might be familiar to some of you when, back in 1999, it was worried that it was about to be a big problem when all of a sudden, the year struck 2000, because a lot of computer systems at the time were using only two digits to store years. So '99 might accidentally become '00, which might be confused by a computer as 1900 instead of 2000. So we help attorneys understand exactly why this problem came to be and what it is a computer is doing that even creates these kinds of societal problems. We talk to them about real-world examples. And you might recall this one from CS50x itself, where a Boeing airplane literally needed to be rebooted after 248 days because some engineer had not anticipated, it seemed, the fact that you can only store a finite amount of information with 32 bits, and indeed, after roughly 248 days, would those 32 bits all get used up, so to speak. They would all become one. And if you count ever so too high when using a finite value like 32 bits, you're going to wrap around, in essence, to a negative number or 0, at which case, bad things could have happened with the airplane. So we help students in CS50L understand how real-world technology issues ultimately affect real-world products and decision making out beyond the lab. We talk to students, again, in more detail, not just about algorithms, but data structures as well, how a computer can organize information underneath the hood so that someone's algorithm is perhaps better than another. We introduce them to a few specific algorithms for searching and sorting. Pictured here, for instance, is bubble sort, if familiar. Or pictured here is selection sort. So we talk to students at a little lower level than we do in the technology or in the business class. We also talk to students more concretely about languages like Python, not to turn them into programmers themselves, but rather to give them exposure to some of the features of these languages like lists, and dictionaries, or hashes, or the like. We focus a great deal on cryptography and issues of privacy and security in the CS50L class, introducing students, like in CS50x, the substitution ciphers like Caesar. But we also talk about the flip side, the dark side of it all, and frequency analysis, and how an adversary can maybe attack your crypto system and figure out what your plain text or original messages are just by analyzing what it is they're intercepting. We talk to students in CS50L about how password recovery might work and why it's problematic if a website can just email you your password. Odds are there are better ways of doing that. And we help students think about just how a company can be more or less secure than another. We talk too about public key cryptography and how this solves a problem that symmetric key cryptography or secret key cryptography alone does not. And though we don't get too much into the weeds of the mathematics, we help students understand that there are problems that certain forms of cryptography like Caesar cipher cannot solve. For that, we need more mathematically sophisticated solutions, fancier algorithms. And we help students understand that sort of spectrum. We also talk about the inverse, really, of encrypting information, which is digitally signing it, and how a user can use their same public and private key to attest, with mathematical near certainty, that they are, indeed, who they claim to be. And then we talk about even more modern technologies, are ones that are certainly all the more in the news these days, like blockchain, and Bitcoin, and digital currency, more generally. We continue the conversation about cyber security more generally, even talking about hardware and what it is that might be vulnerable in physical devices to interception or theft. We talk to students about what it means to actually "delete" files, and what it means to empty the recycle bin or empty your trash can on Windows or Mac OS, and why that's not really doing anything to cover your tracks or ensure that no one else can see that same data. And we help students understand exactly what protocols a company or a firm should have in place to protect clients' and employees' own data. We talk too about how data can just be intercepted, certainly with Wi-Fi, and 3G, and LTE, and other technologies, in the air, so to speak, around us. And then we too spend time in this class on internet technologies and cloud computing, but not so much from a decision-making orientation, but rather, from an understanding. And we talk in the abstract about how data gets from point A to point B. We talk with students about issues like scalability and how you can have maybe one relatively small, cheap server, or one very big, more expensive server, or maybe some amalgam in between, talking about concepts like horizontal scalability and vertical scalability in the enterprise. And here too, we talk with students about more modern technologies like virtualization and containerization, and how those technologies actually make possible cloud computing and how there remain potential security concerns. If, at the end of the day, your data is on the same physical server as my data, even if we have these software-based firewalls in place, at the end of the day, there might be certain regulations or certain legalities that mandate that, no, our data needs to be on physically distinct servers. So for our legal audience, do we help them understand those tradeoffs. We introduce them ultimately to a bit of web development too. And they get some exposure to HTML and CSS, not so much toward an end of making their own web page, but just to understand what it is that HTML and CSS enable, and how it is that HTML and CSS can be viewed by anyone on the internet. So if you're worried about intellectual property, anyone can just see, via view source in their browser, all of the HTML, and CSS, and maybe even JavaScript that you wrote. And we help students understand that this is actually the result of a design decision, not a flaw per se. And so companies should think about their intellectual property with those digital constraints in mind. And we also give students some understanding of event-based programming and how the clicking, and dragging, and touching, and tapping that we do with our devices these days maps to certain programming primitives. And we do spend time talking about database design too as it relates to how a client or a company might store its data. We talk with them about the various data types that drive the underlying storage of that data and how it makes-- has potential impact on real-world scenarios as well. And then we also talk about slightly more sophisticated solutions to real-world problems like race conditions so that money doesn't disappear in someone's account or your data doesn't get out of sync with itself because you simply have too many people doing too many things at one time on your server. So we talk about primitives like locking and transactions that tend to be solutions to those kinds of high-traffic problems. And then toward the end of the class, we come back to cybersecurity, because students, at that point, would have had even more exposure to a number of computing primitives, via which they can now think about issues of security. We talk about issues like denial of service attacks, what those are, how you can wage them and defend yourself, hopefully, against them. We talk about SSL, or these days, TLS, the technology that gives us HTTPS. We talk to students about more arcane hacks or attacks, like cross-site scripting, where an adversary can potentially inject code into your website that you didn't intend to be executed by users. And we talk about cross-site request forgeries, another more sophisticated attack, that might trick a user on one website to find themselves suddenly on another. And again, we give these examples to students so that they understand what kinds of threats are out there, and ultimately, and more importantly, what design aspects of computing they are the result of, conscious design decisions by those who architected these systems. We talk too about the storage of our passwords in databases, and how you had better not see your password in pain text in a database, because if it's compromised, it's going to be they're potentially in the wild. We talk about SQL injection attacks, and man in the middle attacks, and even phishing attacks as it relates to folks' privacy and security. And then at the very end of the semester do we focus on a few legal cases and a few legal primitives, talking about challenges and the intersection between law and technology, open-source software and licensing, how you should think about the availability of it, the security of it, versus developing something in-house yourself, talking about disruptive technologies and how a lawyer and how the law more generally can at least respond to changes in technology even before the law itself might catch up, really modern issues like the printability of weapons and how they can evade detection because they're no longer metallic, but plastic, and what the implications are for sharing information about creating these things versus actually creating these kinds of threats. Talking about digital privacy and tracking more generally are very much in vogue these days in the media when discussed in the context of social networking sites and beyond, and then of course, AI, which is a burgeoning field with some very real-world implications. You can imagine a programmer nowadays maybe having to write code that decides whom to hit with a car. For instance, if a self-driving car is barreling down the street and there is two people to the left and right, you can imagine there being a line of code that needs to make some decision as to whether to swerve left or right. And that, of course, might have very real-world implications for the victim, not to mention the laws surrounding those kinds of decisions. So the world is increasingly getting very complicated when it comes to these intersections of law and technology. In Europe and elsewhere are there increasing regulations that govern privacy and protection of one data. And then net neutrality, of course, keeps coming up again and again when it comes to who governs and how the internet itself is governed. So at the end of CS50L do we similarly have an exam. Here, for instance, if Brian wouldn't mind pasting the URL, is a sample exam at term's end. And then week by week do we also have assignments, similar to CS50B and CS50T, that you can adopt or adapt in some form for your students on a daily, or weekly, or some other basis. And before I give you a bird's-eye view of all three of these courses together to help you think about the similarities and differences, any questions or comments on CS50L specifically? Farid? FARID: I just have a question. So with CS50x, we will use check50 and submit50 to check the students' correctness, if that's the write way of saying it. But with these three courses, is it up to us as the teacher to check if the answers are correct? DAVID: Correct, it would be, because all of the-- almost all of the questions are short answer and not machine gradable. They are meant to be examined or audited by human eyes. Automated feedback is less possible. You could, for instance, convert some of the questions, if you so choose, into multiple choice or true-false. And then something like Google Forms could automatically score those for you. We have generally avoided doing that, because we would really like students to put into their own words their thoughts on a question. FARID: Yes, also agree with it, because the multiple choice is-- they can just pick and not think about the answer. DAVID: Agreed. So it's more work for the teacher, but we hope a better outcome for the students. FARID: OK, thank you. DAVID: Sure. Ramon, question or comment? RAMON: So over the last two weeks, I have been looking for a friend who is a lawyer in order to help me produce the CS50 for Lawyers. And I tried not to cite Harvard's name in order to not bias them to help me. And I would like to ask if taking CS50 Introduction to Computer Science, which is the main course, and CS50 for Lawyers is enough to prepare him to play Doug's part in the lecturing of the course. DAVID: That's a good question. Maybe. I mean, Doug went to law school for three years, practiced law for several years as well. So he has background that I don't have that I'm guessing your friend might not have, in which case we would probably be doing Doug a disservice if we said, just watch these videos and you can do what Doug does. So I would decide for yourself. I do think Doug did an amazing job at creating the assignments for those modules of the class and for creating the materials by which to lead discussions. So I suspect that your friend might not be able to offer as deep conversations on some of those subjects. But certainly, if he follows in Doug's footsteps, he could certainly use those materials, but I don't think that course alone would turn them into an attorney. David, over to you. DAVID LANE: Yes, I was just wondering, with each of these three courses, are the unit lectures typically an hour in duration? DAVID: They're highly variable. I would say they're generally between 45 minutes and two hours depending on the subject, and the material, and the course. DAVID LANE: OK, perfect. Thank you. DAVID: Sure. Back to Ramon? RAMON: I think you misunderstood. My friend, he is a lawyer. DAVID: I see. I missed that detail. So then, yes, I would retract some of what I said. And I would defer to his judgment. If he watches, especially the CS50L class, and does the assignments for his own practice and exposure, then I would defer to him as to just how comfortable he would be with the material. Doug's material might skew a little toward the US and US-based cases. But we tried to keep the course more broadly focused on the law, in general, looking at issues in other countries as well. So I think it's quite possible, but I would defer to him. And please feel free to reach out to me or Doug to ask more specifically. RAMON: I have actually emailed Doug this weekend. So maybe he will help me with additional reading for me and my friend. DAVID: OK, sounds good. I'll mention as much to him as well. Well, before we adjourn officially, let me just give you a final top-level overview of these classes. Pictured here, for instance, are summaries, then, of the syllabi of all three of these classes, CS50L, again, going into more depth on several of the concepts. And allow me to just color code which sections of each course is similar to a section of another course. These are not perfect correlations, because some courses, as mentioned, go into more or less depth than the other. But as you think about whether any of these classes might be of interest to adopt or adapt, you can at least see some of the commonalities. And indeed, there is enough colors on the screen here that it probably wouldn't be an ideal use of students' time to, for instance, go through all three courses, because there would be non-trivial overlap. So you could imagine adopting one of the classes, or one class for a different type of student and another class for a different type of student, or, for instance, starting with one class, CS50T, but if you'd like to add into the mix technology stacks and cloud computing, you could borrow those materials from CS50B. As is the spirit of CS50x, teachers are welcome to adopt or adapt any of the courses' materials of interest. So that goes for these three courses as well. Allow me to remind you, if you wouldn't mind, and if, Brian, you wouldn't mind pasting this URL into the chat, we would love to get your feedback on this session, as with past sessions as well, if you could go to URL here before logging off today and just take a few moments to give us your anonymous thoughts. But allow me to officially adjourn us here for this session. Tomorrow we'll be focusing on CS50's introduction to game development with CS50's own Colton Ogden. And then on Wednesday and Thursday will Brian be introducing his course on web development and artificial intelligence, respectively. But so nice to see everyone here. We'll officially conclude here. But I'm happy to stick around for one-on-one questions. Thanks so much for joining us today.