DAVID MALAN: So we'll go ahead and dive into the Q&A portion of today. So here at Harvard, office hours are? And here are the results which you should now see on your screen particularly down toward the bottom for all of the courses. So what office hours are at Harvard are an opportunity for students to drop by professors offices for an hour and just talk about the class, talk about how life is going, any questions they might have about academics or the real world. So even though we're all in just a virtual office today the goal is just to interact and chat a bit about topics that are on your minds. Let Brian and I just ask that if you have questions that are specific to a problem set or a project, like code, let's answer those on Slack, or on Discord, or on Ed, or some other tool because I don't think we could do a very good job debugging people's code live on video here today. So let's focus more on concepts. Without further ado why don't we go ahead and start the questions and answers. I see Galaxym20 your hand is up first. You want to go ahead and unmute yourself and ask a question of the group? Galaxym20? Still muted, Galaxym20. No? All right, let's move around. We'll come back to you if that's OK. Tony Su, is it? Can we start with you? AUDIENCE: Yes. Yes, this is Tony. I'm Tony Su. I'm right out from Taipei. I actually have a couple of questions I want to ask. But right now the most pressing question I'm curious about is really mostly about security. I've really only programmed for one year. I sometimes stream my coding sessions online. And some of my developer friends in coffee shops tell me, don't stream your code online as everyone sees your secret key, everyone sees everything. And I'm just wondering, what ware the typical conventions to basic security management for during development, or during post development for managing apps? Or-- what should I even do to try to get into network security or cyber security, or with Python or like if I have some analytic skills with Python and so on and so forth. What should I study and stuff, like that? DAVID MALAN: Sure. Why don't I answer the first part and then turn to the latter part over to Brian? So if you are live streaming your code and with it your secret keys on the internet, don't. That is bad. You answered the questions yourself already. If you've taken CS50 or CS50 Web you might recall that anytime we dealt with secrets, like API keys, we would encourage you to put them into what are called environment variables which put them into the computer's memory but in a place where it's not in your code, which means people on the internet can't see it if you're live streaming, and you don't accidentally therefore push it to GitHub or save it in your code repository if you're using version control. So generally speaking anything you put in your code really shouldn't be that sensitive. You should not have passwords, not secret keys or the like. Use some other mechanism for those. As for Python itself and security practices and learning more, Brian, you want to take it from there? BRIAN: Yeah. I mean, certainly if you're interested in learning more about security the domain I'd suggest looking into the world of cryptography, which is this very vast discipline within computer science all about trying to communicate things securely which is becoming very, very necessary in the context of the internet where you want to be able to send messages to someone across the internet but you want to do so securely so that nobody in the middle is going to be able to access whatever information you're trying to send them. And there are a whole bunch of now algorithms and libraries that exist in languages like Python that might be worth exploring there. And this kind of cryptography is the basis for how communication over the internet works. It's the basis for how cryptocurrencies like Bitcoin work, if you're familiar with or ever heard of those. So a lot of applications now have used cryptographic techniques. And we talk about these a little bit in CS50 and the web programming class, but definitely a lot more there to explore. DAVID MALAN: Wonderful. Well, thank you for that question. Can we go next to, let's say, Moritz? If I'm saying it correctly? AUDIENCE: Yes, hello. My question is a two parter. So I started out programming with CS50X, and well, our university semester is kind of on hold now because of the whole coronavirus situation. And I've long considered the CS50x in particular to be the master class when it comes to teaching programming in an online kind of environment. And I'm sure that a lot of work has gone into getting it up to that level. And I'd like you to share with us some of the insights that you had going through developing this online course and all of the material, and what perhaps other educators could take away from it to improve their own materials. DAVID MALAN: Well thank you, first of all. I can say that it's been very incremental over the years what we've done with CS50. And I think what you see now is really the aggregate effect of a lot of efforts by myself, by people like Brian, by other members of our team over the past 13 years now since I took over the class. And I think the simplest answer from the get go is that we set out some time ago really just to solve a problem. So back in 2004 or so I was teaching a different class at Harvard's extension school, which is our continuing education program for adults primarily, both on campus and off. And at the time Harvard was using video technology called Real Video, if any of you remember it. It was one of the earliest streaming video formats. It wasn't that great but it was still cutting edge nonetheless at the time. But it didn't allow you to save the videos locally. It didn't allow you to take the videos with you. And so it was around 2004 that I think the first iPod came out, give or take, and podcasting became a term. I didn't really know what it was but it seems interesting to us that we could allow our students in that class to maybe download these videos, or even MP3s-- audio recordings of them-- and then take them with them on the train, to work, to the gym, on the treadmill. And so we really started doing everything on the internet just for our own students' sake. But [INAUDIBLE] that a whole lot of people around the world start tuning in which was a pleasant surprise to us. And then in the years since then did we very consciously start making sure that any materials we create are digitally accessible as well. And this is PDFs, and this is handouts, and this is software, and everything else. And we also became more sensitized to internationalization. So very early on we would ask questions about American sports or even US currency, which of course if you're living abroad like many of you are you might not have those same experiences or backgrounds. And so I think in recent years too we've tried to be more culturally sensitive and geographically sensitive to students disparate backgrounds and not assume anything. And so now we still have a problem set you might recall on cash, a greedy algorithm. But we define for everyone what a nickel is, what a dime is, and so forth. And then lastly I think I would propose that it's thanks to members of our team, one of whom is-- a few of them actually are on this video call with us today, Ian and Arturo and Ramon. We have this amazing team focusing on videography. And we now stream in widescreen 4K video. And I mean, that's very deliberate too. I think all of us take pride in what we're doing. And the goal is not to have, ironically today, small little video screens of people normally, but media that really draw the students in and make education as engaging, if not entertaining, as possible. I spent 18 plus years in high school and prior not really loving school. I sort of worked hard just because I thought I should. But I don't think school needs to be this obligatory thing. I think it can be a passion. And so we've tried to create, we hope, an environment that draws folks like yourself in. Thank you for asking. Can we go to our next question here, how about from-- looking for some blue hands-- Debashis? If I'm pronouncing that right, against the green screen? Still muted. AUDIENCE: My voice is clear? DAVID MALAN: Yes. AUDIENCE: OK. I was asking, I follow your videos from your group. Hello? DAVID MALAN: Yes. We can hear you. AUDIENCE: I follow your videos from your group. I wanted to know, is there any more because [INAUDIBLE] Hello? DAVID MALAN: Yeah. Can you say that question again? AUDIENCE: Can you suggest more videos which we can get from the internet? I am from India and I follow your YouTube videos and CS50 lectures. Hello? DAVID MALAN: Yes. We can hear you. AUDIENCE: OK. I follow your CS50 lectures. And can you suggest some more [INAUDIBLE] on the internet which you follow? [INAUDIBLE] comments. DAVID MALAN: Yeah. Let me let Brian answer this too. There aren't that many courses I've taken online to be honest. I tend to be so focused on what it is we're doing. With some bias, let me paste into the chat window, which you should be able to see-- this of course is all of CS50's courses which go beyond CS50 itself. Brian now teaches a course on web programming, soon on artificial intelligence. But another one that I do like-- let me go ahead and Google it real quickly and then paste this as well-- is of course from Princeton University on algorithms. It's freely available on Coursera. And if you're looking to learn a little more CS Theory, see the algorithms class that I just pasted into the chat window as well. Brian I think is a better student than I am Do you have courses you'd recommend too? BRIAN: Other courses I'd recommend-- really depends a lot on your interests. So if algorithms are something that are interesting to you, definitely that Coursera class on algorithms is great. A former Harvard professor, Jelani Nelson, taught an advanced algorithms classes at Harvard too and most of those lectures are also available on YouTube if algorithm design is something you're also interested in. And then depending on your other interests, MIT has a great class on deep learning if machine learning is something that you're interested. They have a great course on deep learning that's available on YouTube as well. And then I personally am-- I studied linguistics in college. I'm very interested in natural language processing. Stanford has a great online class about natural language processing too. So lots of universities make a lot of their courses available online. So just a little bit of looking around and you can probably find the ones that I just mentioned and also a number of others too. DAVID MALAN: Indeed. Please feel free to paste URLs of courses into the chat window for everyone as well. Let's move on. And if you do have your hand up but your video is not on, if you do have a camera do try to turn it on because it'll make it easier for us to see you, literally, and interact. How about next question from Suhaus, if I'm saying it right? AUDIENCE: Hello. So I'm doing CS50X 2020. And I have a friend who did the 2019 course, and based on what I taught them, I personally-- I don't know if this is true but I felt as if the 2019 one was actually tougher than the 2020 one. How do you decide the pieces of each year? You change some of them every year. So how do you decide which ones to keep and which ones to replace? DAVID MALAN: Yeah, that's a really good question. And Brian and I especially spent a lot of time last summer, summer of 2019, thinking about what problem sets to change, which ones to keep. There are several that we really like. So for instance Mario, which of course is the first one, Cash and Credit we've used for many years now, CS50 Finance on the end of the course we've used for many years now. But there's always some number of problem sets that I, and Brian, and the teaching fellows, don't quite love, either because it's not quite as engaging as we would hope or it's not quite focused as we would like on some subject. So Brian wonderfully came up with a long list of new problems set ideas. I, after 13-- 12 years at the time-- was running low on new ideas. And he wonderfully infused us with a number of new problem sets. And in fact, do you, Brian, want to speak to what guided your decision making there? BRIAN: Yeah, sure. So a big part of the guiding ideas that we have when we were coming up with new problems for CS50x 2020 was thinking about the different backgrounds that people come to this class with. That most of the people that are taking the class, they haven't had computer science background before but they maybe come with some other background. Maybe they know a little bit about government or maybe you know a little bit by a biology from other classes they might have taken. So with a lot of the problem sets that we've created, especially in the past year, we've tried to integrate computer science with other fields and try and show how you can take the skills you learn in CS50 and really apply them to other domains outside of computer science. And so if you've done the CS50X 2020 problems, you might be familiar with the election problems. There are three different election problems that are all based around the idea of trying to simulate an election and various different election algorithms. And these algorithms come at varying different degrees of complexity, which lends itself really nicely to our less comfortable and more comfortable problems where we like to offer a bit of a more comfortable challenge for students who would like to try a more challenging problem, or who complete one of the problems and are looking for another problem to try to complete as well. So we created a problem set to integrate with government. We created a problem set to integrate with English and literature in the context of the readability analysis in problem set two. And then we had another new problem that was all about biology and DNA analysis in terms of the types of things that happen in criminal justice investigations. And so problem set six now includes that as well. And with all those problems our goal was to try and create something interesting to really demonstrate the power you get with just a couple of weeks of learning about programming and learning about computer science. DAVID MALAN: And Suhaus, just so we get a sense, what country are you from? AUDIENCE: I'm from India. DAVID MALAN: India? OK. AUDIENCE: Yeah. DAVID MALAN: Wonderful. Thank you for the question. AUDIENCE: I have a question that's an extension. Could I ask that if that's fine? DAVID MALAN: Sure, sure. Go ahead. AUDIENCE: I've noticed this, especially if you look at week four, the filter ones, and even week three where you're only required to fill out certain functions. But like there are other pieces where [INAUDIBLE] function from scratch. So on what basis do you decide that? DAVID MALAN: That depends on the complexity of the problem sets. And one of the goals of problem set four, to which you're referring this most recent year, where if you're unfamiliar we had students implement in addition to JPEG recovery, which some of you might recall, we also had students implement a number of Instagram like filters which is just one of Brian's new problem sets. One of the goals for that problem set is not just file I/O, but is also how to read code, read code that someone else wrote. So one of the things we tend to do is start to put place holders in code so that students first have to understand everything we wrote and then write the actual logic themselves. We often provide distribution code too if we think that either one, it would just be way too hard for new programmers to come up with everything on their own, or if it would just be too boring or mundane to do some of the details like getting command line arguments or things like this. We want each problem set to focus and only focus on something new. Thank you. Carolina, can we go to you next? And do you want to tell us what country you're in right now? AUDIENCE: I'm actually in Miami, Florida. But I'm from Colombia. DAVID MALAN: OK. AUDIENCE: I decided to join CS50 because I'm actually in the beauty industry and I came up with an idea to do an app for the industry as a professional in it. And it has turned out to be crazy but I wanted to learn more because if I had decide to hire people to do this for me, which I have tried in the past, I haven't had any luck. It's not good to hire people if you don't really know what you're talking about. I have to speak the same language as the programmers. So this has been interesting for me. I actually went to visit the business school in October last year. And I noticed there were so many people in different industries but not one person in the beauty industry. So that gave me a little more enthusiasm to do this. And I just finished my first problem, which I've been procrastinating for a long time. But now with this [INAUDIBLE] going on I've been trying to upload it, but it shows that I'm not registered although I even paid for the certification. That's one thing that I need to-- I've been writing to a few people and no one has been able to help me to submit my first [INAUDIBLE]. But one question that I had, previously I had an account on GitHub for the app that I was working for, [INAUDIBLE]. And the developer kind of abandoned that. And I just [INAUDIBLE]. So I created a new account for this course. And I'm not able to use that either. And how safe is that? Because I noticed that he had the whole coding exposed. And I keep getting notifications from them about possible issues, or security issues, with the coding. So I don't know for this program for Harvard, if it's going to be the same way. DAVID MALAN: Tough to say. AUDIENCE: --to upload-- DAVID MALAN: [INAUDIBLE] this. I've just pasted into the chat window an email address for our staff. If you can write us your question about the account, that would be best answered there. Hard to say about the GitHub scenario you described, but if you don't mind elaborating over an email that would be best for a question like that. And then I should mention too, we do have this class that I also just pasted into the chat window, an introduction to technology for managers, which is based on the classes I teach at Harvard's Business School. That might also be of interest. It focuses less on programming and more on concepts, especially for folks who want to apply CS in real world businesses. AUDIENCE: Yes. I was thinking of the algorithm class too because I feel like that's so important, especially for what I'm trying to do because it has to do with the categories in how I want to divide everyone in the beauty industry. I think that would probably work as well. DAVID MALAN: Yeah, absolutely. AUDIENCE: What do you think? DAVID MALAN: That one it's probably better to do after a programming class, just because Kevin and the professors there assume more of a background. All right, well next can we go to-- Cem, or Kem is it? Salta? I'm sorry if I'm not pronouncing that right. AUDIENCE: It's actually Jim. It's Turkish so that's why. DAVID MALAN: OK. Do you want to tell us where you're from, if not MIT? AUDIENCE: Sure. Well, I don't go to MIT but I'm from Turkey. I had an exchange year last year. I lived in Massachusetts. So that's how I get it. And right now I'm in the IB program, which is the International Baccalaureate. I actually want to go to Harvard. I'm in high school. So I'm taking the course, CS50, and right now for my school I'm also writing a paper. And I have this question. It's, to what extent are Massive Online Open Courses, MOOCs, more effective than those courses completed face to face within Harvard? DAVID MALAN: That's a good question. I'm not sure if we should do your homework for you. But-- AUDIENCE: Yeah. Well, eventually I will have to ask you a couple of more questions so I'll probably email it to you. But yeah. DAVID MALAN: Sure. I think I have a few thoughts in general on this. So I do think there's value to taking courses in person when you can, not because I think it's that useful to be in the same classroom, with the same classmates, with the same professor two or three times a week for 12 weeks or 16 weeks. I think there is some value certainly to that interpersonal aspect. So for instance in CS50, among the goals of our own lecturers is not only to present material conceptually so that hopefully students are understanding the week's topics, but also we hope to just get students excited and maybe a little bit inspired about that material so that they rather care about what it is they're going to be doing in the homework assignments. I'd like to think that we or I can do a good job, or a decent job, maybe once a week for 12 weeks at generating excitement and generating enthusiasm. I don't think I can do that three times a week and have everyone leaving with the same sense of excitement for the material the next day. So at that point I think that it becomes very reasonable to do a lot more of the learning on one's own asynchronously, via a MOOC or via online education more generally. But what I think is important and helpful for a lot of people is just to have some community. Maybe ideally its classmates, or friends, or teachers, who can look over your shoulder at what it is you're programming and give you very specific advice. I don't think it's unreasonable though to have a roomful of people on Zoom, or Slack, or Discord, or Stack Exchange, or Reddit, or any of those communities that CS50 itself uses. I think what's just important is that you have a community. And I do think that in some ways CS50 is a better experience to take online because all of you can pause, rewind, fast forward, search a transcript, hyperlink to some other website, and take a moment to apply those lessons. Whereas the Harvard students in Cambridge are a captive audience for two hours. And if I go too fast they're sort of out of luck. They can't ask me to rewind. I mean, they can ask a question but they can't necessarily rewind in time or take some time to absorb it. So I think there's a balance. And what we try to do in CS50 at least is, we present the conceptual material just as effectively, we hope, in person as on video. But then we have these communities. In Cambridge we call them sections on campus. Online you might just call them cohorts, or friends online. I think just having that human support structure is important. And I don't think it's effective if a course is really just videos and multiple choice questions, or PowerPoint slides that you're flipping through. I've taken some very bad online courses. But the hope is to find the best of both worlds. So I hope that helps you do your homework. Feel free to reach out to us. AUDIENCE: That's a great answer. Thank you very much. And also, there's an aspect to it because I have some friends in the business school and doing that, during the class they always participate. It's like a lecture where the professor is teaching whatever the material is, but they're participating, or the situation is they're talking a lot like students too, inside a classroom. So I think there's variables to it. And there's also people's attention, like are they able to look at a screen for two hours? Or are they better at looking at the professor on the board? I mean, there are many variables to it. DAVID MALAN: Yeah, absolutely. AUDIENCE: Thank you very much for answering. DAVID MALAN: No. And it's funny timing. I mean, hundreds of thousands of people are now getting used to online education for unfortunate reasons, but I do think this will start to change minds, too, at just how well or not well certain aspects of online education can work. Can we go next to Omarion, if I'm pronouncing it right? AUDIENCE: Hey, thanks. Yeah, my name's actually Omar. That's just my-- DAVID MALAN: [INAUDIBLE]. And where are you from? AUDIENCE: I'm from Toronto. DAVID MALAN: OK. [INAUDIBLE] AUDIENCE: So I just wanted to start by saying thank you so much for your program. I've actually done CS50, and I did the Princeton course that you mentioned as well. I work as a recruiter at a tech company here and I feel like having done these courses has really changed the relationship I have with my job. So thank you so much. My question is kind of around computer science education in general. So in today's world I feel like it's-- I personally think given the way we're moving, and especially now looking at what's happened to coronavirus, people working online, everything is all internet focused. I think it's really important for people to understand the basics of maybe computer science, or at least how these things are built because a lot of what people do deals with these kinds of concepts. My girlfriend for example is a lawyer and she actually works for tech companies and things like that. And I think for her to understand these kinds of things would be very useful. At the same time though, I feel like there is such an abstraction of some of these things at a certain level, where people don't necessarily have to touch code. They can use a GUI or something to do various operations. And so you've almost got this separation of a group of experts that do the stuff and then a bunch of people that don't necessarily understand the stuff but just use the stuff. And I'm trying to understand maybe your opinion on-- and maybe there's no right answer to this. But do you think that we're moving more towards a world where you do have these experts in machine learning, and AI, and NLP, and stuff like that, that are building the stuff, that understand maybe the minutia of what actually builds the systems that we use, and then catering to a group of the larger group that doesn't necessarily understand? Or are we moving now more towards a world where people are really interested in the stuff and I think they want to get more involved in it and-- I don't know. It's maybe not even just a question, just something I wanted to put out there. DAVID MALAN: Yeah, it's a really good question. And let me turn to Brian too in a moment, who focuses on security for instance in the web programming class especially. So I'm reminded of Tony's question which kicked us off about secret keys and live streaming. I think what's valuable about certain courses in technology and computer science is that they give you certain building blocks from which you can reason deductively as to how other systems work. I don't think it's necessary for everyone in the world to take an artificial intelligence class, or machine learning, or even a programming class per se. But just any class that's really about computational thinking and logic because I think once you start to clean up your thought processes and you start to think a little more methodically in terms of ifs, and elses, and so forth, then you can take some information as input and produce from that some conclusion that you can make better decisions based on. And this is so true in the worlds of security. I mean, all of us right now have our cameras on pointing at ourselves. Who's to say when this session ends in half an hour so that those cameras aren't still watching? Who's to say our phones haven't been sending everything we say to Google or Apple for years now? And those are risks. But I think among the topics we try to get students to think about in CS50, and in the business class, and in the web class, is to recognize that yes everything I just said is possible, but then to sort of evaluate the risk for themselves. So I know for sure Apple could be listening in on everything I say. Are they likely doing so? Probably not, but at least make an informed decision as opposed to naively buying the latest and greatest technology and then being surprised and caught off guard when your privacy, for instance, is compromised. And Brian, do you want to address how you think about this, especially in the context of software? BRIAN: Yeah, of course. So I agree with a lot of what David was just saying about how a little bit of computer science, even if it's not about programming, gives you the building blocks to understand a lot of the technology around us. And I think that in part the wide availability of some of the courses that we've talked about has helped in order to bring more exposure, or bring to light, some more of this knowledge even to people that aren't computer scientists. But it is definitely not widespread. I think if you look around in the news there are so many stories about lawmakers who seem to be disconnected in some way from technology and that they might be creating policy or trying to draft laws that might not be consistent with a real understanding of security and technology. You see this a lot with lawmakers that are trying to make laws that are about security, like trying to-- there's been a long ongoing tension between the federal government and Apple, for example, about whether Apple should be creating backdoors into all the iPhones that the federal government's able to get into. And there is this idea that even if you create a backdoor that the government can get into, that this creates security vulnerabilities elsewhere. Having a real understanding of how it is that this cryptographic process works, how it is that information is actually encrypted and then decrypted, can give you a better understanding for the implications of technology when you might not recognize those implications without having some of those building blocks. So I do think there's a lot of value in having an understanding of those building blocks. And I would hope that the world is slowly starting to become more educated about these matters, even outside of just the world of computer scientists. AUDIENCE: I appreciate that. Thank you. DAVID MALAN: Brian said it well. And if some of you might have tuned in some months ago to when Mark Zuckerberg, for instance, was testifying in the United States to Congress-- I mean, not only was it quite frightening what Facebook had been doing at the time but also frightening how ill informed so many of the politicians who were interviewing Mark and just had no idea of how tools like Facebook or online advertising even work. It's, I think, incredibly important for folks just to have this modicum of understanding of technology and of reason so that if they are ultimately the decision makers, whether it's in business, or law, or politics, or any other domain, that they're making better decisions. And you see this unfortunately even now with all of the health concerns going around the world, people not appreciating statistics, and data, and models, that students of any number of STEM fields would derive an appreciation for. So we make better decisions, I think, when we understand fundamentals. Thank you for your question. Saket, ready? Can we go to you? Still muted. Click unmute in the bottom left corner? AUDIENCE: Hi. DAVID MALAN: Yes, there we go. AUDIENCE: [INAUDIBLE]. Can you hear me? DAVID MALAN: Yes. Yeah. AUDIENCE: I'm Saket. I'm located in India. I graduated in 2018, I did my bachelor's. And in 2020 August I'm going to pursue my master's degree. So there has been a two year break for me in terms of the computer science background. I've been working [INAUDIBLE] industry. So I want to brush up my concepts so now before I am going to my masters degree for CS. I want to start-- what are the courses that I need to start up and base up myself for the [INAUDIBLE]? DAVID MALAN: Good question. Brian, do you want to take that? BRIAN: Sorry, you were asking about what courses you should take? I didn't quite catch the end of the question. AUDIENCE: Yes. There has been a one a half year break for me with respect to computer science for my master's degree. So I'm going to pursue my master's in August. So what do you suggest in terms of the courses and the timeline of, what do I study about? BRIAN: Yeah. So I mean, if it's been a year and a half one thing I might start by doing is just brushing up on any material that you did learn a year and a half prior, because likely those will be the fundamentals of the basis for your future work in the program that you're beginning in August. And so I often find that taking some time, going back and reviewing prior notes, some prior videos if you have them from prior classes, is just a helpful refresher in case you're going to need that material in the future. And then beyond that I think it's going to depend in large part about what your master's program is focused on, and what type of research that you're going to be doing. Computer science is a fairly broad field. And so research is happening in the world of cryptography as we've talked about, but also happening in the world of artificial intelligence, it's happening in the world of networking, it's happening in the world of algorithm design. So all sorts of these very different domains that might lend itself towards different skills and different tools that you might need in order to be successful there. So I would start by thinking about what type of research and what type of work you're going to be doing. And that would help me, at least, to inform the types of topics that I would focus on in the upcoming months. DAVID MALAN: All right. Thank you for that question. Can we go next to Tommaso Padula? AUDIENCE: [INAUDIBLE] question really simple and [INAUDIBLE] to learn. According to you, CS56, it's better to learn in a small period of time, three or four months, achieving 70%, 80% of a problem set completed, or taking a longer time and doing 100%? Just that. DAVID MALAN: It's a really good question. And where are you from, Tommaso? AUDIENCE: I'm from Italy, [INAUDIBLE]. In science I'm studying and I'm trying to frame it. It is better to finish the first [INAUDIBLE] so I believe 85. [INAUDIBLE] to review, to do 100%, and then go, I'm going to finish, at the least at the minimum we can say. DAVID MALAN: Gotcha. Well I hope you and your family, in Italy especially, are doing OK lately. AUDIENCE: Thank you. DAVID MALAN: It's a hard question. I think it really depends on the student and what you want to get out of the class. We have many, many, many more students who do parts of CS50 then who do all of CS50. And I think that's partly because some people only have so much time. But I think it's also because some people only want to get certain aspects out of it. For instance, some students are interested in the C programming. Some students are interested in the web programming later on. I think that if you are looking to take future courses in computer science and programming, I think taking more time and finishing the whole course will probably better prepare you. If you are interested-- AUDIENCE: This is a slightly different question. To finish the course is the main goal. I will do that I hope. But about if I take 85% in the problem set one, it's better to-- DAVID MALAN: Oh, I see. AUDIENCE: OK. DAVID MALAN: I think the best answer is, the best approach is to get 100% in three or four months. So we officially say that if you get a 70% or higher on all of the problem sets, that is quote unquote satisfactory and you have successfully completed the class. I think it's better if you can push yourself to do even better than that even if it takes more time. I think it's very, very reasonable to take six months, maybe a bit more to take the class, maybe a full year. But to take more than a year I think you should consider what it is you want to get out of the class. And I wouldn't just try to get 100% and just do everything just because you think you should. I would decide based on where your interest is starting to waiver. AUDIENCE: Thank you. BRIAN: The other thing I'll add is that any time you get less than 100% on any problem, we do our best to try and provide feedback to you, provided in an automated sense, through some of our web based tools. And so anytime you submit you should get a little URL that appears in the IDE where if you click on that link, you'll be able to see feedback on which parts of your program worked and which parts might have some room for improvement. And hopefully that can be a good learning and a lesson in terms of where to place your focus if you want to go back and iterate on the work that you have done in order to then potentially submit that problem again. DAVID MALAN: Can we go next to Omar [INAUDIBLE]? AUDIENCE: So I'm 15 and I'm taking the course at the moment. And supposedly I make it into Harvard, like when I graduate. If I finish the course, does that count? Do I have to retake it or does it count as if I took it before? DAVID MALAN: So neither, in fact. At Harvard at least, if you have taken a class like CS50X online successfully, you don't get credit per se but you don't have to take it once you get to campus. Instead Harvard has other introductory courses, three in particular, and you have to take any two out of those. So in your situation if you were to attend Harvard, you would take the two other introductory courses. One is on what's called systems programming, which is lower level C code and assembly code. The other is on what's called functional programming and object oriented programming. You would take those two courses instead of CS50. But you don't graduate earlier because you've taken the course already, for instance. Good question. Can we go next to the Slav? AUDIENCE: Hi. DAVID MALAN: If you'd like to tell us where you're from to? AUDIENCE: Well, I'm originally from Russia but I live in Miami, Florida. DAVID MALAN: OK. Two from Miami so far. AUDIENCE: Yeah. So first of all, I want to say thank you to Brian. I take the CS [INAUDIBLE]. And my question is actually related to the homework I'm told that we had earlier. [INAUDIBLE] I submitted two projects so far and both got 100%. But there is no feedback on 100%. So I'm wondering if it's really that good or if there is some feedback can be provided. BRIAN: Yeah. I'm glad you're enjoying the class. The projects for the web programming class and several of the follow on classes after CS50 are graded on a pass/fail basis. So one of our staff reviews your submission, looks at your video, and then just evaluates it on a pass/fail basis. If you're looking for some more detailed feedback and certainly other people to take a look at your code, there are a lot of CS50 communities that have grown now across a variety of different social media platforms that you can look to in order to get some additional feedback on your code. I know there's a pretty active channel on the CS50 Discord, which you can join in order to post a little bit of your code in order to get feedback from other students, from other staff, about the work that you've done. So certainly that can be a nice way for code review, to get people to give feedback on your work as well. DAVID MALAN: Wonderful. Can we go next to-- [INAUDIBLE] some hands here-- Johanna Sabi? AUDIENCE: [INAUDIBLE]. Yes, it's correct. Johanna [INAUDIBLE] as Johanna. I'm from Egypt. Kindly, I'm doing development since five or six years. I'm graduated from computer science. I have a big problem through my career, and even when I started CS50. The problem is that I don't know at which level should I dig and deepen the information on that trail that I study. For example, when we started [INAUDIBLE] CS50 I didn't know to which [INAUDIBLE] I have to open a tutorial [INAUDIBLE] tutorials learning more and more about big O, and then to solve some problems upon this. Or just I need to respect this global discourse and later on I can dig and deepen the information. I'm asking this question because in past I have tested or went through these two scenarios. I went through that I need to dig and deepen any information and the result is that I have finished courses or one months or two months just in one year because of much dig and deep. On the other hand one, when I start adjusting the parts of a course I feel that I miss many important subject. This is my question and thanks a lot for the tutorials that you've presented. DAVID MALAN: Of course. If I understand it correctly when learning a topic like big O notation, if you'd like to understand it better or learn more, for CS50 you can absolutely go and read other resources, you can google for other references, take another class. That is certainly OK. When we discuss in the class academic honesty what would not be appropriate is if what you're googling is literally the answer to a question that we've asked within the course, literally googling for code that's the solution to some problem. But absolutely you are welcome and encouraged to consult other references, Google, Stack Overflow, classmates, anytime you would like to learn some topic better. We do not claim to be teaching it in the best way. AUDIENCE: I think to this question, my original question is to which level should I dig and deepen any information of the course or any online course. I mean, there are many topics on the same course. Should I dig and deepen each topic of this course so that it takes much time for finishing just a code? So this is a reasonable question if you got this. DAVID MALAN: Yeah. It's a good question. I think it really depends on your interests. If you want to go down those rabbit holes, so to speak, and better understand the material, yes you should do that. But I'm not sure I would do that if it's going to take you four times as long to complete the class. Maybe twice as long is reasonable but I think there's probably a balance there. And in fact, the best way to think about it might be this way. Personally when I'm teaching a class, especially for the first time, I find myself doing what you're doing. I might take the class that I need to now teach, or I might watch previous videos or do previous homeworks, but I try to approach the class like I know I'm going to be a teacher, or a teaching assistant, or a teaching fellow as we call them, because I try to think if I'm about to teach this material to someone else what questions might they ask me? And I do start to google and I do start to learn more about some topics so that I'm not caught off guard, so that I'm not embarrassed because I don't really know something. So I think it's healthy to try to google and read other references when you want to understand the why and not just the what. But use your rule of thumb may be a saying. I want to understand it well enough so that I can explain it or teach it to someone else. And that's good enough for version one. Can we go next to Hassan Roman? Hassan? AUDIENCE: Hey? DAVID MALAN: Yes. We can hear you. Yes, we can hear you. AUDIENCE: OK. Now I'm taking CS50 Introduction to Computer Programming. After finishing it I intend to take the course about [INAUDIBLE] Web Programming. And I want to know what's next after the web. DAVID MALAN: Quite fair. You froze on my screen, but Brian do you want to take that? BRIAN: Yeah, sure. So after that it really depends on what it is that you're interested in studying. So CS50-- David posted a link before but we can post it again, in terms of all of the courses that CS50 offers that you can take after CS50. So in addition to the web programming class that I teach, there's also a class on game development if something of interest to you, [INAUDIBLE] and other CS50 stuff. And then coming in just a couple of days will be a brand new class on artificial intelligence. So if that's something of interest to you, diving into how machine learning works, and how it is that computers can become intelligent. We have a class in artificial intelligence that will be coming soon as well. So depending on your interests there are CS50 classes that are available to you, and then other classes that are available online too. A couple of people have mentioned Coursera in the chat, for MIT's OpenCourseWare that also have a lot of great course offerings there too. DAVID MALAN: Wonderful. Can we go next to Sarah, if you'd like to tell us where you're from? AUDIENCE: Hello. I'm Sarah and I'm from Toronto. So I am attending university and cells and systems biology. So in the third year towards the end of my studies I discovered-- I took this bioinformatics course and that introduced me to coding and computer science in general. And I kind of regretted even going to cells and systems biology when I discovered my passion for computer science. But it's kind of like, I don't know what to choose. So it's kind of, I want to have both at the same time. But I also thought of finishing this degree and even reapplying for another degree. But financially to be honest, I really cannot afford both degrees. So I tried looking up online and I read on how Google and so many other major companies have retracted their requirement for a CS degree. So right now I'm on my last year of studies, and I'm taking a grad level bioinformatics course. But the programming aspect of it is not as challenging that I was expecting it to be. I also took some CS courses that my university was offering. So I already have some basic in Python and other intro courses. So the text that is mentioned on CS50X is mostly on web development, games, iOS, Android, et cetera. So for someone like me that is in the health care and biology industry, I really want to know which other courses I can take and develop my knowledge based upon them. So if there is any advice on that I would really appreciate it. DAVID MALAN: Yeah, absolutely. I think that's a good problem to have, that you're so passionate about two different fields. I would recognize that first. I don't think you should worry as much about pursuing a computer science degree solely for the purpose of getting a job in the tech industry. There is certainly so much demand right now for technologists that simply having a strong technical background I do think will help open doors already. In terms of types of courses to take, I think a course like CS50 that's an introduction to procedural programming is compelling. Another course that's very popular out there is this one here from MIT called 6001, which you might find of interest as well which focuses on Python. The algorithms class that I mentioned earlier I think is a good way of-- and there's two parts to it. Let me go ahead and paste both URLs, one and two. I think it's a good way, especially for industry, to get better and algorithms and data structures more generally. And then I would also recommend a course on functional programming specifically, which is a different type of programming than we teach in CS50. And I think that will help round out your knowledge. Brian, do you perhaps have any recommendations along those lines or others? BRIAN: Yeah. I would agree with all of those recommendations. In addition to that for biology specifically, and for bioinformatics in particular, I think a course on data science is going to be especially helpful. A lot of what you'll do in data science are going to be tools that are related to computer science but will specifically help with a lot of what bioinformatics is all about, which is in large part about looking at a lot of data, whether it's-- AUDIENCE: A lot of genetics. BRIAN: --evolutionary data or-- yeah, exactly, a lot of genetic data. And to that extent I'd also suggest maybe a course on artificial intelligence too. That will help you think about a lot of the problems-- AUDIENCE: I'm actually looking forward to the AI class that is coming up. BRIAN: Oh, I'm glad. You got it. A lot of the problems-- AUDIENCE: I'm really happy about that. Thank you. BRIAN: I'm glad. A lot of the problems in bioinformatics, things like when you're trying to do evolutionary biology analysis, trying to look at how evolution has happened, that's often-- AUDIENCE: [INAUDIBLE] BRIAN: --done using machine learning techniques too. Yeah, exactly. So a lot of AI and machine learning can be applied to biology and bioinformatics now too. AUDIENCE: Thank you very much. I really appreciate it. DAVID MALAN: And I hope you'll forgive me. We have a few minutes left. And invariably we won't get to all questions but love to take a few more. Can we go to User next? And do you want to tell us your name and where you're from? AUDIENCE: I think that's me. I'm from Germany. I'm from Augsburg, it's near Munich. And I'm still a high school student. Went to UCLA for summer and planning on studying abroad in the US for this summer, hopefully if it works with all the coronavirus stuff going on. And I've also taken one of your courses-- the first one, just CS50. And I'm really looking forward to the course on artificial intelligence and also glimpsed inside it at YouTube because you already uploaded some videos on there. So my question is regarding this course, actually is it ever possible in the future to get credits for it, like real college credits? Or will it be? DAVID MALAN: Brian, do you want to answer that from the Extension School's perspective? BRIAN: Yeah. So ultimately, that's going to be up to the university as to whether to get credit for something. There are some universities that will allow you to cross register in a class through Harvard's Extension School. So Harvard Extension School is Harvard's Distance Learning Initiative. And the students from other universities can sometimes enroll in a class like our AI class through the Extension School to get credit at your own university. But you'll want to check with your university about that because every university has slightly different rules about how to make that work. But even if you don't take it for credit all of that material will be made available online. AUDIENCE: Great. And will there be also a deep learning course in the future? BRIAN: No immediate plans. In the tail part of the artificial intelligence class we spent a couple of weeks on machine learning, in particular looking at deep neural networks, looking at image recognition and those sorts of topics that are common in a deep learning class. But certainly it's just a couple of weeks out of our class as opposed to other classes that could spend a semester or a whole year on deep learning. So you should think of this class as more of an introduction to those topics, from which you could therefore most certainly go deeper and discover more about the field as well. AUDIENCE: All right. Thanks. DAVID MALAN: Wonderful. Can we go next to Muhammad Yunus? Mohammed-- yeah. AUDIENCE: Hello. DAVID MALAN: Hello. AUDIENCE: OK. I'm Yunus. I'm Yunus from Egypt. I want to ask one question. What can you [INAUDIBLE] that combines computer science and business development to get a job in Google, Facebook, Amazon? [INAUDIBLE] That's my question. DAVID MALAN: What was the first part of the question? About-- [INTERPOSING VOICES] AUDIENCE: What career path? What career path that combines computer science and business development? DAVID MALAN: Sure, and business development. So I think a common intersection of those two worlds, for instance, is what people would call project management whereby you have ideally some technical background to understand what it is the engineers are doing and enough of a vocabulary to talk with them about features, and goals, and motivation. But you're also interested on the business side and interacting with customers, and clients, and translating their desires into more specific technical requests of the team. That tends to be the place that a lot of recent graduates, for instance, start whether they take a business degree or a computer science degree. If they know they don't want to be programming all day long but they want to straddle both worlds project management tends to be the place to start at least in the tech world. AUDIENCE: OK. Will CS50 help me to get my goal, yes? DAVID MALAN: To some extent, yes. You will have more than enough technical background to have those kinds of conversations with the engineers. Let me go ahead and paste the URL of the same business class that I mentioned earlier. This URL that I just pasted into the chat window, it's the OpenCourseWare version of a class similar to what I teach at Harvard's Business School. And that class talks more about security, cloud computing, how the internet works, so topics that we don't cover per se in CS50, at least at that conceptual level, but that's useful for a business minded person to understand as well. So I would say the two classes, CS50X and CS50B, for Business, might help you with those interests. AUDIENCE: OK. Last question, do you recommend any books or other courses to cover this, project management or? BRIAN: Yeah. So if you're interested in a PM role, otherwise known as a Product Manager role, one of the most popular books is this one that I've just pasted into the chat here, Cracking the PM Interview. It's quite popular in terms of just preparing for that sort of role. It'll be the types of questions that you might be asked in an interview for that type of role and the types of problems that you might face if you actually end up working in that sort of role. So you are looking for a book that one might be a good one to start with. AUDIENCE: OK, thanks. Thanks a lot. DAVID MALAN: Time for a couple more questions. Raj, can we go to you? AUDIENCE: Absolutely. So first of all, I wanted to personally thank you. CS50, like literally, I'm not exaggerating, changed my life. I switched careers after taking CS50. I'm just so thankful with you guys. I just wanted to express that personally. So that's point number one. And number two is that obviously due to the COVID-19, a lot of people with kids like myself are going crazy right now with the kids at home all day long, and with homeschooling going on. And one question for you, I guess, is are there any resources or an approach you would suggest to make useful-- useful? Valuable use of time and get kids, let's say between 6 and 10 years old, engaged with the very, very first steps in computer science and computing in general, computers? Are there any-- because there are so many projects out there. You can buy a Raspberry Pi and I don't know, play with Minecraft, and write some simple things in Python, and there's Scratch, there Scratch Junior, there's the Sprite Box. There are so many things and so what do you recommend? DAVID MALAN: Well I am definitely a fan of Scratch. Anyone who's taken CS50 itself is familiar with this one, which I've just pasted in to the chat window. A fun addition to Scratch is-- let me go ahead and google this for you. It's something called Snap at Berkeley, which is very similar in spirit-- I'm going to go ahead and paste that URL here-- but it has a lot more features. So in fact, I think Sarah, we were talking earlier about functional programming. And so Snap is actually a-- has functional features, even though it is a drag and drop block based language as well. But it has features where you can talk to APIs, Application Programming Interfaces, you can make internet connections. So it does several things that Scratch itself does not do. And it also interfaces well with hardware if children might like to actually play with some physicality. Brian, do you have other suggestions from experience or siblings? BRIAN: Yeah, a couple. So Scratch is, again, a favorite of mine, for even younger students like children ages five to seven. I think you mentioned Scratch Junior, which I'll paste in as well. Also really great because Scratch's user interface can be a bit much for a six-year-old but Scratch Junior is typically designed to make it even easier for them. And then with regards to hardware, another popular one especially for younger children that's often used in primary school classrooms and such is KIBO, which is one of these robots that allows you to build programs that have little blocks. And you can build programs out of blocks and scan the blocks with the robot and the robot can respond to those programs. And I've seen kids have a lot of fun with that kind of approach too. That one is hardware, though, so it's not going to be just a web application the way that Scratch is, [INAUDIBLE] for example. AUDIENCE: OK. Thanks a lot, super useful. DAVID MALAN: For sure. Let me go ahead, everyone, and paste into the chat window a Google form. Invariably we're not going to be able to answer all of today's questions. But if you'd like to fill out the Google form that I just pasted into the chat window, you can tell us your email address so we can let you know when the next office hours will be online with us because we'd love to let you know and continue the conversation. And those of you who submitted wonderfully some questions in advance, I hope you forgive that we haven't even turned to that spreadsheet yet because there were so many questions in person and we thought it would be more engaging for everyone if we focus on the in-person questions first. But let's go lastly for one final question perhaps to Arsh Dixit? Your hand's been up for a while as well. Oops, still muted somehow. Zoom is showing you is unmuted but we're not hearing your voice. Something doesn't seem to be connected. Any luck there? BRIAN: Yeah, I see you in the chat Arsh. If you'd like to type your question that's OK too. DAVID MALAN: Sure go ahead and type. OK. As you type that, Arsh, let me go to another question but we'll come back to yours. Go ahead and type it in the chat window. Jason, can we go to you? AUDIENCE: Thank you so much for the opportunity. Can you hear me? DAVID MALAN: Yes. Where are you from? AUDIENCE: Yeah. I'm from Pakistan, Asia. DAVID MALAN: Wonderful. AUDIENCE: And the questions are a couple of questions I have noted down, and quickly questions at the moment about mathematics. How good a person should be at mathematics if you want to start with a computer science or CS50 and something beyond CS50 to get some introduction in computer science and land a job on a tech company? Number one question. And-- DAVID MALAN: Sure. Go ahead. AUDIENCE: Should I go for the next question? [INAUDIBLE] DAVID MALAN: Oh, sorry. You got muted. Say it again? Still muted. Still muted, Jason. AUDIENCE: [INAUDIBLE] OK. So first question answer, to you please. DAVID MALAN: We missed your second question. AUDIENCE: OK. The second question is about the contents that you are just delivering to the internet or the web based. How about creating some kind of platform, a central platform, that can eventually gather all the resources that you are just teaching and other platforms like Coursera, edX, MIT, that would be a common hub for everyone. Like a couple of guys just ask about this, where we can do for the further after CS50 or something like that. How about considering a project, even though, if I'm looking for a project to work on, how would it look like? [INAUDIBLE] want you to know how would you recommend to do this, that we're building a central project, a central distribution, that we can put all of the courses, all the resources at one place, and anyone can come and just utilize that resource for further studying and all that. DAVID MALAN: In reverse order, we have thought about that, having a central platform for all of the courses especially now that we have multiple courses taught by myself, by Brian, and by other colleagues too. We haven't started that process yet. We might. We have historically, though, tried to bring the material to where students are already are, so putting it on YouTube, on edX, on iTunes, on Fire TV, and on any number of other channels, rather than presume that people should be coming to us. We've generally preferred to go to where they are. The downside, of course, though, is that it might not be obvious to students what is in fact available because there's so many different things out there, not to mention different versions. So we might get to that point in answer to your second question. As for the first, I do think that math should not be an impediment in one's mind to pursuing computer science even if you don't think of yourself as very good at math or as a math person. In CS50, certainly comfort with arithmetic is a precondition, so knowing how to use basic mathematical operations. And I think some comfort with algebra, just symbolic expressions when you have x plus y equals z, so generally formulas along those lines are helpful. But beyond that nothing more is needed for CS50. In higher level classes other mathematical tools come into play. And Brian, do you want to speak to a few higher level assumptions? BRIAN: Sure. So we can speak about artificial intelligence, for example. We've talked about the AI class a bit. One of the goals in CS50's AI class has been to try to create a class that doesn't require a whole lot of mathematical background coming into the class. So if you look around at artificial intelligence books and other resources, a lot of them will assume a lot of multivariable calculus, or linear algebra, or other high level mathematics, which are quite helpful if you want to really dive into this world of designing algorithms for artificial intelligence. But there's a lot you can do with these technologies without necessarily having that mathematical background. So CS50's artificial intelligence class does not assume any of that prior mathematical background. We'll assume familiarity with algebra and the mathematics that you need to know to be successful in CS50, but we will then introduce some of the other mathematical concepts that come up in the class-- things like probability and formal logic, those are things that we will cover and teach over the course of the AI class itself. But depending on where you choose to go after that, a little bit of familiarity with the mathematics can often be quite helpful. And a lot of computer science now has to do with big data, for example. And so looking around for some statistics classes, for example, might be helpful if that's an area where you're really interested in going further. DAVID MALAN: And allow me to-- AUDIENCE: That is a great answer. Thank you. And the last [INAUDIBLE] DAVID MALAN: Still muted, Jason. Still muted, Jason. AUDIENCE: OK, unmuted, right? DAVID MALAN: There we go, yes. AUDIENCE: OK. The last question is, ideally speaking-- what the heck? DAVID MALAN: You're good. No, now you're muted again. AUDIENCE: The last question so to speak is ideally what is the best time, in your opinion, to get to yourself in particular one discipline in computer science rather than getting on and on and just tired of learning new things and new technologies? But eventually everyone, particularly me, I just want to get a job in a career for a tech company. So what time you would recommend to just get in one specific discipline and then continue with only that instead of going here and there and searching for the next stuff to learn? DAVID MALAN: A good question. And in fact, let me read our last question aloud that Arsh kindly pasted into the chat window, which is similar-- have you heard of people going straight into the field of technology right after CS50? And how much of a gulf is there between the skill game from CS50 and the skill needed for a basic unpaid internship? That is, is it a good idea or feasible? So another angle on the same question. Generally speaking here at Harvard, we recommend that students have taken CS50 and one other course, presumably a software class or an algorithms and data structures class. That generally tends to be the expectation of a lot of tech companies, that you've not just taken one class but you've taken a second that tends to round out your knowledge, that gives you more experience and practice with programming in particular, and frankly so that you have a different perspective and you've not learned computer science from just one person or one course. You've seen different ways of solving problems. So I think it's very reasonable to take something like CS50 for free online, or through any of our various channels, and then take some follow on class-- maybe one of MIT's, maybe Brian's web class or AI class, or a class at Princeton on algorithms, or any number of free courses too. And then I think pursuing a tech internship, or paid or unpaid position, is quite reasonable. So thank you both for that question. And allow me to squeeze into the chat window one final URL. Invariably again we can't field all of today's questions today, but if you'd like to reach out to Brian, and me, and CS50's whole team, by any of our online communities I've just pasted the URL that gives you a list of all of those various tools where we hang out. And we will absolutely follow up via email if you fill out the Google form from a few minutes ago to let you know when the first such office hours will be. So thank you so much to Ian, and Ramon, and Arturo on CS50's team for having helped us with the stream today. We'll post a recording online later on if you'd like to take a look or share with any friends. And we'll let you know soon when the next one is. And all our best truly, especially right now in the world with so many people holed up at home and hopefully quite healthy. All our best to you and your families and friends.