DAVID MALAN: All right, well, hello world. These are CS50's office hours. If this is your first time here, office hours are an opportunity on campus at Harvard for students to visit professors' offices and ask questions about courses they're taking, about computer science more generally, and life after taking a class. And so what Brian, and I, and CS50's team thought we would do today, as we've done in recent weeks, is offer students around the world online an opportunity to chat with each other, to ask questions of me and Brian online much like we could do if we were all here together at Harvard. Before we begin, just a few explanatory details-- to ask questions today, we're not going to use the chat window per se. But you're welcome to chat with classmates via the chat window and share links, as Brian and I will as well. And we're not going to use the raise hand feature. Instead, we're going to use a Google form to solicit any questions that people in the audience might have just so that CS50's team can help us go through the questions in real time. So if you would like to ask some question that's on your mind, go to this URL here that Brian has kindly put on the screen, which is cs50.ly/ask. And I'll go ahead and paste that into the chat window as well. That URL is cs50.ly/ask. And if you visit that URL, you'll see a Google form asking you to submit your question. And you'll see on that form too, if you do want to ask a question during office hours, please do have your video on so that we can actually see and eventually hear you. So a few other explanatory details-- by default, you'll see that everyone is muted. That's so that there's not a whole lot of background noise going on behind the scenes. Brian or I will unmute you when it's time to ask a question. In advance, please do forgive if we can't quite answer everyone's questions. There's always so many more people and so many more questions than we have time for. But we will do our best. And we will hold other ones of these online in the coming weeks. And we'll send you an email, if you registered today, to let you know when the next one will be. And one final request, just so we can get a sense of where everyone is from and so that you know where everyone is from-- along the bottom of your screen are a few buttons in Zoom. And most likely, one of those buttons is called participants. If you wouldn't mind clicking on the participants icon, you should see your name as well as the name of lots of classmates. And if you hover over your name, you should see a more button, some button that allows you to access a menu. And go ahead and choose rename. And change your name, if you wouldn't mind, to the your name, comma, and the country that you're from. So for instance, if you look at my name in the participants list, you should see, now, that it says David J. Malan, comma, USA. And if you're comfortable sharing what country you're currently in, do change your name in Zoom by going to participants, clicking the more menu, or whatever it's called in your language, and choose rename so that you can change your name to include the name of your country. Lastly, if you haven't clicked it already, there's a chat button. Click on the chat button at the bottom of the Zoom, and that'll be a way to chat, not with Brian and me directly, but with other classmates as well. Allow me to reintroduce CS50's own Brian Yu to say hello. And we'll have a special guest in just a moment too. BRIAN YU: Hi, everyone. It's Brian, also calling in from Cambridge. So good to see all of you today, and looking forward to getting another opportunity to talk with you all and answer some questions. I really enjoy getting to spend these office hours with all of you from all around the world. DAVID MALAN: Wonderful. Well, you may know this name from online, from CS50 IDE, from Reddit, from Facebook, and the like. And allow us to introduce our special guest for today, with whom we thought we'd chat for just a couple of minutes before we start answering questions, CS50's own Kareem Zidan. KAREEM ZIDAN: Hi, everyone. My name is Kareem. I'm a software engineer working with the CS50 team here. Like David mentioned, you may recognize me from Facebook, from other online communities. And I'm really looking forward to this office hours today. DAVID MALAN: Wonderful. Well, so glad you're with us here today, Kareem. We thought we'd ask you a couple of questions yourself before we start taking questions from the audience. You say you're in USA now according to your name in Zoom, but that's not where we met you. Would you mind sharing with folks how we met you and how you made your way to Harvard and CS50? Us KAREEM ZIDAN: Absolutely, so I took CS50x, the EdX version of the class, in 2014, I think. And then after that, I stayed active on the online communities for a while trying to answer people's questions, which was so much fun, but also was so much beneficial for me. Because I ended up learning a lot about topics that were not necessarily covered in the class, either because they were too advanced or because they were just a different subject altogether. Then I think you, David, reached out to me at some point to host some local office hours in Cairo, which we did a few times. We had quite a few students joining. That was so much fun. I was kind more interested in the software development side of things, so I started trying to contribute to some of our projects, some of the CS50 projects back then. And then you guys were very welcoming to me, started maybe giving me more problems to tackle. And that was so much fun to go through. Eventually-- yeah, eventually, I got an offer, and I joined you in Cambridge. DAVID MALAN: And indeed, Kareem has taken over CS50's software development initiatives, especially CS50 IDE, the tool that many of you might be using right now to work on your problem sets and the like. So Kareem, is this to say that you studied computer science formally in high school or in university? KAREEM ZIDAN: Not quite. I've been into computers-- not necessarily computer science or programming-- for a very long time. I got my first computer when, I think, was 11 years old or something. And so I would always explore things, try to make a static website I think, at some point, using Microsoft FrontPage, if you ever used that before. DAVID MALAN: Wow, haven't heard of that in a long time. KAREEM ZIDAN: Yeah, I remember actually-- like I mentioned, like 11 years old. And I did not know how to save in FrontPage. And I kept my computer running all the time, because I was afraid I would lose my work. So that's something fun that I remember. DAVID MALAN: Well, and to this day, the IDE runs on your laptop, right? So long as your laptop's online, the IDE is online? KAREEM ZIDAN: Kind of, yes. Yeah, so I then started learning a little bit about some graphic design tools like Adobe Photoshop, Illustrator, and Design, all that stuff. And I actually-- I wasn't professional, so to speak. I was just curious about these things. And I knew how to do a couple things. And I made a [AUDIO OUT] things that made sense to me. And I ended up getting a job in a company as a software designer for some time. But then I realized that's not really-- like, I can't go so much more forward with this. I'm actually more interested in other stuff. So I started exploring more. And that's when I found some programming classes, including CS50 on EdX. And then I started taking the class. And it literally changed my life. DAVID MALAN: Well, you've done an extraordinary job since joining CS50's team formally. And indeed, it really all started by Kareem popping up and answering questions in CS50's Facebook group years ago. So thank you, certainly, for everything you've done and continue to do for CS50. KAREEM ZIDAN: Absolutely, yeah, thank you so much for the chance and for the amazing communities that we have. DAVID MALAN: Indeed, so glad to have you. And so glad to have so many of you as well here today. And let's turn to Brian to queue things up. BRIAN YU: All right, let's first hear from Rachel Fang from the United States. DAVID MALAN: We'll go ahead unmute you, Rachel, if you'd then like to say hello and where you're from before your question. AUDIENCE: Hi. Oh, hi, OK. So my name is Rachel Fang, and I live in the United States in Washington State. And so I'm taking the introduction to CS50 course, and I'm also done with it. And so in this course, we've been introduced to multiple languages. And so I was wondering, after I finished the course, how would I decide which language specifically to pursue in the future and what factors I should consider in that decision? DAVID MALAN: Oh, really good question. Brian, you've gone through this many times. Do you want to take this one first? BRIAN YU: Yeah, sure. So in short, you can do a lot of similar things with a lot of different programming languages. You probably saw that, in CS50, when we first introduce you to Python, one of the first things you do is reimplement some of the programs that you wrote in C just to demonstrate that though the syntax of the language is a little bit different, a lot of the ideas behind different programming languages are very similar. Ultimately, which language is most applicable or that you should presume probably depends in part on what kind of problem you're looking to solve or what kind of project you're interested in working on. If, for example, you're interested in working on creating a web application, for example, languages like Python and JavaScript are pretty popular nowadays for building web applications, whereas for things like building a mobile application, for example-- if you wanted to write an application for your phone or for a tablet-- then you might be looking at languages like Swift, a language developed by Apple specifically for iPhone and iPad, or also a language like Java, which is quite popular for developing Android applications as well. So depending on the type of project you'd be interested in, the language you might use might end up varying. But sometimes you'll have a choice among multiple. DAVID MALAN: Indeed, and after taking one or two classes formally in programming or computer science, I do think the best way to really learn something new is find some project that's of interest, and as Brian says, use the tools appropriate for that project. And odds are you'll learn even more that way than by taking a class on a particular language. All right, well, thank you, Rachel, for the question. Let's turn next to Christian from Mexico, if you'd like to say hello and your question. AUDIENCE: Hello, I'm Christian from Tequila, Mexico. And well, I actually went to one of your classes in person, to Cambridge. And it was great meeting you guys. And it was very inspiring. But since then, I haven't been able to really progress in the computer science learning. Because there's so many paths, like web development, machine learning, app development, software engineering. So there's a lot of paths to take. And so I think my question is, what advice would you give someone who not only doesn't know which path to take, but hasn't actually taken any steps towards any of those places? Because I don't really know which path to take. So yeah, I guess that's my question. DAVID MALAN: Yeah, it's a good one. And honestly, I feel that way quite a bit these days too, when I've got a list of things I want to do this long, and I just don't really know where to begin. Or a lot of them might require that I learn something new. And that feels like a very daunting task. I mean, much like we teach in CS50, I would take very incremental baby steps, so to speak. Like if CS50, for instance, is still of interest, and maybe you only did Scratch early on, I mean literally, there's a pathway from pset 0 to pset 1. And I would sit down and teach yourself, or learn a little bit more about, C by way of that problem set. Or if you hit a wall, maybe move on to the next one, and then come back to something. But I wouldn't look at things in terms of the whole pathway at first. I would consider individual steps. Because I think once you've taken enough steps, for instance, this problem set or this one, or this programming challenge or this other one, I think you'll get a sense of what you actually like. And then you'll perhaps start picking things based on what you want to do as opposed to what you think you should next do as a path, if that helps. How far along did you get, Christian, with CS50 the first time around? AUDIENCE: I went until, I think lecture 3 and then went to a Udemy course, web development course. And then that's what I'm taking at the moment, yes. DAVID MALAN: Yeah, I mean, maybe if you're feeling a little less comfortable, I would try to go in and fill those gaps. There's a reason that we had weeks 4, and 5, and 6 before we got to web programming. And I think it'll empower you all the more. Or if for some reason, week 3 just wasn't working for you, there's certainly other resources and other courses out there. Consider maybe trying those next and coming back if that feels like a good fit too. AUDIENCE: Thank you so much. DAVID MALAN: Sure, well, thank you for the question. Can we go next to Waseem Ahmed, if you'd like to say hello, and where you're from, and your question? AUDIENCE: Hi, my name is Waseem. [? I'm ?] from India. And my question is, when you start coding, maybe try to solve the whole problem in one time or something. And that burns you out. You can't-- you're not efficient when you're trying to solve everything together. What would you do when you want to be efficient and you want to keep your learning speed high when you're learning something new? That's my question. DAVID MALAN: That's a good one. Brian, do you want to take that one? BRIAN YU: Yeah, sure. So in general, when you're learning something new, definitely, my experience with learning computer science was that it was helpful for me to force myself, like, if I'm sitting and watching a two-hour lecture video to allow myself to pause the video and make sure that I can check myself for understanding to make sure that I've understood the material so far. I distinctly remember, in an algorithms class that I took in college, the professor spent about an hour talking through the entirety of the algorithm. But I was confused in, like, the first 10 minutes of it, with a particular step. And I didn't quite understand that. And as a result, I didn't really understand any of the rest of it. So taking the opportunity to pause to make sure that I've understood what's happened so far before moving on, I think is quite helpful. And especially with programming and learning programming, I think one of the best things to do is to try putting the ideas into practice. Rather than just watch the entirety of a video online, for example, and assume that you know that material, it's a very different thing actually writing the code to be able to implement an algorithm or to try to solve a problem rather than just to watch someone else do that. So I think that having an opportunity to try to put what you know to the test by actually writing some code, by actually putting things into practice can be quite helpful to making sure that you're able to learn efficiently and effectively. DAVID MALAN: Yeah, and similar in spirit to Christian's question, I can't emphasize enough the value of breaking big problems down into smaller ones. One of the biggest, most common mistakes we see students at Harvard make when they're at office hours, for instance, or in class working on some problem set is they've written, like, this much code all at once, none of which works, none of which compiles. And it's just a nightmare. It's an overwhelming nightmare for them, for the teaching fellows, or for me, or Brian trying to help them find a problem when they written in this much code, none of which even compiles yet. So to this day, anytime I'm writing a program that I know is going to end up being pretty big, I still only write a few lines at a time. And then I try compiling or running it. And then I break down the list of features that I need to implement into, literally, a list-- 1, 2, 3, 4-- and then bite them off one at a time. And I never, to this day, try implementing an entire program or an entire website at once. So if you're feeling overwhelmed, odds are it's because you're trying to do too much at once. And just start to figure out for yourself, even with a piece of paper, pencil, what steps you should take to start making incremental progress. Well, thank you, Haseem, for your question. Can we go next to Tom from Argentina? AUDIENCE: Hey, how are you? DAVID MALAN: Good, nice to meet you. Would you like to ask your question of the group? AUDIENCE: Yeah, so I'm from Argentina, Buenos Aires. And I study architecture. It doesn't have a lot to do with computer science. But I wanted to know if you know something or someone who mixes computer science and architecture together. And what things can they create? So that's the relation between architecture and computer science, because it's my goal. I want to mix both. DAVID MALAN: Sure. Yeah, I can say, in CS50, in Cambridge here, we very often have students from Harvard's Graduate School of Design, which is essentially Harvard's graduate school in architecture. And every semester, we probably have 10 or more students from that school who are themselves graduate students. They're not trying to become computer scientists per se, but they've realized there is, indeed, this intersection between architecture, or design more generally, and computer science. So very often, the motivation for those students is to learn a little bit of programming. In our case, we teach them a bit of C, a bit of Python. But in general, they exit a class like CS50 knowing how to program in general, no matter the language. And I wish I could recall the software programs that some of our design students have mentioned. It might be AutoCAD, if you're familiar, or a few other pieces of architectural software. Besides having menus and buttons that you can click and drag on, a lot of those tools allow you to write code in one language or another so that you can refine things, so that you can automatically generate parts of the diagrams. And so just knowing how to program seems to be very appealing to architecture students so that they can do more on their own without having to rely only on buttons and menus that commercial software provides them with. All right, well, thank you for that question too, Tom. Can we go next to Zachary from the US, if you'd like to say what state you're from perhaps and your question? AUDIENCE: Hi, yeah, so I'm from New York. I'm a mechanical engineer. So I did a lot of computer science in high school and just the relevant programming in college, but not too deep into computer science. And so it's been a very nice refresher to take CS50 and build-- and get back into that skill set, but also develop it. And so my question is, once I complete CS50, what would you recommend as either a next level course or more materials to, I guess, grow further, do more advanced stuff? DAVID MALAN: Yeah, let us ask you one follow-up question first. Of the several weeks of CS50, has certain types of material appealed to you most, would you say? AUDIENCE: You know, I think I'm probably in week 4 or 5 at this point. I haven't gotten to where you can do more [INAUDIBLE] application. But the idea of getting to a point where I can apply it seems attractive to me, but I haven't gotten there yet. DAVID MALAN: OK, well Brian, you've very consciously taught a couple of follow-on classes to CS50. So why those topics, should someone consider? BRIAN YU: Yeah, sure. So the two follow-on to CS50 that I teach, which are accessible on our page, website on EdX, which are just pasted into the chat if you'd like to take a look at that, are I teach one class on web programming and another class on artificial intelligence, both of which I think are natural follow-ups to CS50 that are quite applicable in terms of the types of problems that you can solve with that baseline of knowledge-- so web programming in particular, because so many applications now are running on the web. Because the web is used on computers, and mobile devices, and other devices too. It's quite practical to be able to design a web application that people all across the internet can use and get some value out of. And then with artificial intelligence, this has perhaps more recently been a very fast-growing area in computer science where, increasingly, problems that we thought were difficult for computers to solve, we are actually able to solve now by use of some algorithmic techniques, and some artificial intelligence, and machine learning strategies. And so one of the things that the artificial intelligence class tries to focus on is producing those algorithms and introducing those ideas to enable you to be able to build artificially intelligent systems of your very own. So I think web programming and artificial intelligence are both very natural directions that you can continue to explore after CS50. But what you should find is that after finishing the class, you'll have the background in programming, the background in some basic web, or mobile, or game development such that you'll then be able to build some projects of your own. And I think one of the best things to do next after completing the class is just to think of projects that interest you and to try to pursue those as well. DAVID MALAN: Well, thank you to Zachary as well. Can we go next to Ramon Rodriguez, if you'd like to say hello, where you're from, and your question? AUDIENCE: Can you hear me? DAVID MALAN: Yes, we can. AUDIENCE: OK. I'm from Brazil. And I'm going to read the question from the forum, because it's quite long. So for the last two years, CS50 has gone through some important changes. It has transitioned from using PHP as-- it has conditions from using PHP to using Python as the back end language. Some videos from the shorts don't feature anymore in the list of recommended videos to watch. The web-development-focused content has been moved from the regular course syllabus to being an individual track determined with games, Android, and iOS tracks. And new courses like web development with Python and JavaScript have been created and released for free on EdX. So many changes have happened in the last few years. So my question is, what other changes and new stuff do you visualize happening in the next five or 10 years? And what kind of path do you see CS50 taking in the near future? DAVID MALAN: That's a really good question. And frankly, I would love to know the answer to your question. But a couple of thoughts do come to mind. I do think you've highlighted a number of the evolutionary changes that we've made over the past few years, from languages to structures of the class. For context, any of the changes we've made year after year are usually in response to changing trends, either in industry, or in education, or just because it's becoming easier to introduce students to more powerful techniques thanks to new and popular languages, and frameworks, and the like. So for instance, the PHP to Python change was a very conscious decision. We thought about it probably for two or three years. And at some point, we felt there was an inflection point where Python was just becoming so popular-- and it was useful not only for web programming, but for command line programs, but for data science applications and the like-- that it was just a very well-rounded language and therefore might serve students better during, and also after, CS50. And so finally, that tipped us over the edge. I think, moving forward in the future, honestly, if we knew what we might do differently in five or 10 years, we would probably just do it right now if we could. But I do hope that we will be able to do all the more real-world examples, real-world integrations with students that use, for instance, web-based APIs, third-party data services, and the like. Because one of the constraints right now, not so much on campus where you have the luxury of very good internet, and everyone has access to a computer-- but globally, not everyone has great internet access or very fast or very inexpensive internet, let alone an actual computer. And so I think once we are five or 10 more years down the road, and bandwidth is better, and people have better, more powerful phones, and laptops, and desktops, I think we'll be able to do more with those resources. And students will be able to learn and also produce even more amazing projects by building on the libraries and the frameworks that are then very much in vogue. So if I had to guess, I think there'll be more integration with internet connectivity if possible. Because right now, we tend to avoid dependencies on the internet. And the only counterexample to this really, annually, is CS50 finance, where we actually pull real-time stock data from a third-party site. That's an example of a project that works great for a lot of students, but not for all students if you need that constant connectivity. And so in fact, one of the projects Kareem and the team have also been working on are tools like an offline CS50 IDE so that if you don't have great internet access, or if you're in a plane, or on a train, you can still learn and still create. So we're hoping those things are easier too in the years to come. Oops, sorry, still muted. AUDIENCE: Can I ask a follow-up question? DAVID MALAN: Sure, maybe a little-- a briefer one if you would. AUDIENCE: Yeah, sure. So I have first watched-- I have first watched CS50 lecture from the 2015 version. And not much has changed. Only the web development content has moved to an isolated track. My question is, do you see the core content changing in the next few years? Or do you plan to keep it the same with the Scratch, the C language, pointers, data structures? DAVID MALAN: Good question. I think the short answer is don't know yet. I do think there is this common backbone that CS50 has had for not even the past five years, but the past 10, even 20 years. In fact, even when I took the course, I learned many of the same ideas. And that was some 20 years ago. But what's changing, I think, is how we can present the material, the examples we can use, the libraries and demonstrations that we can do. But I think, as an introductory course, there will long be a common backbone even as some of the implementation details do change. But ask again in five years, and I we can answer that better. Thank you for that question, Ramon. Can we go next to Francis Tang, please, if you'd like to say where you're from and your question? AUDIENCE: Hello, everyone. I'm from Brisbane in Australia. I think par of my question has already been answered by Brian. But basically, what I wanted to find out was what's a pathway offered by the uni beyond this CS50 course? And can this be done online or through distance learning? And where would that lead us in the future? DAVID MALAN: Sure, Brian, do you want to pick up from where you left off on that? BRIAN YU: Yeah, sure. So if you're asking about courses that Harvard University specifically offers that students take after CS50, there are quite a number of them. Unfortunately, not all of them are available online, though there are many other universities that also offer courses through EdX or through Coursera that are follow-up classes that you can take after having some fundamental programming experience. So one that David and I like to recommend is-- Princeton University, for example, offers an algorithms class that they teach, also available on Coursera. So I've pasted the link for that there. I think algorithms is a logical place to go next after CS50 potentially such that after you've had some exposure to data structures and algorithms, that class in particular goes into more depth into the design of algorithms and thinking about how you can make them efficient, not only in terms of how long they take to run, but also how much memory they require to be able to run those algorithms. So that's definitely an area, potentially, of interest. But aside from that, I think the courses that are available will depend upon what interests you. So if you're interested in more of the hardware and the circuitry of computers, there are courses available on that. MIT, for example, has a three-part course on EdX about computer architecture. And so I've pasted the first link to that in the chart if that's something that you'd be interested in as well. And then I mentioned before that I teach a class on artificial intelligence. And certainly, if that's an area you'd like to pursue, we teach a class on that as a follow-on to CS50. And their are other courses available there as well. So I know that Stanford has quite a well-known class on Coursera about machine learning. And so that might be one worth exploring as well. But even beyond the couple that I've pasted links to in the chat, there are many other courses available online. If you just do a little bit of searching as to topics that might interest you, I'm sure you'll be able to find options. DAVID MALAN: Thank you for the question, Francis. Can we go next to Aaron Chan, if you'd like to say hello, where you're from, and your question? AUDIENCE: Hi, everyone. Can you hear me? DAVID MALAN: Yes. AUDIENCE: Awesome, yeah, so I'm from Vancouver and working in Hong Kong currently. So I've taken this course for just about two to three weeks, halfway through the introductory. And I've taken around halfway through the web development with Brian. And I'm just blown away by the material, first of all. So it's-- thank you for that. So I think my question has to do with-- I've been looking at online courses for the last few years. And it's-- I always hear people say, like, it's all up to your own determination and discipline to learn online. But I always thought it's like kind of half true, half false. Because the material is always questionable. So obviously, with your course, I think you've proven some of that to be false. Because it is up to yourself to learn. But I just want to hear, from your opinion, what is still the next stepping stone? Or what's the main difference between, even for this course, learning online versus someone sitting in the classroom at Harvard? What is the main difference, in your opinion? And what's the next step? DAVID MALAN: Yeah, it's a really good question. We think about that a lot. Because besides the freely OpenCourseWare version of the class that many of you might have engaged with, we of course offer the same class here in Cambridge on campus for some 800 undergraduate students each fall. I think the biggest difference with the on-campus class versus the online, honestly, is the support structure. Those students who are officially registered in the class on a smaller scale are able to benefit from a lot more human interactions, from what we call teaching fellows, or TFs, as well as our course assistants, or CAs, most of whom themselves are former students of CS50 who've taken the class, done well, and are now teaching the class to their peers. And that, I think, makes a big difference. Because you have this community of students who, one, have gone through it before, and therefore have empathy as well as understand the material. But two, you have people to whom you can turn in person when you're struggling with some problem. Now you can approximate that same support structure online, and we do through Harvard's Extension School, or continuing education program. For some 13 years, we've had students taking the course online as well. And we use Zoom and other technologies to hold office hours, and hold sections, and other such teaching resources. But I think it's never quite the same, right? Even we are all-- all 500 of us are currently on Zoom. And it's pretty good. It's certainly better than nothing, we would hope. But it's not quite the same as all sitting around in a large room, and being able to look at each other, being able to really see each other's facial expressions without video cutting in and out. So I think there's an intimacy to taking any class in person or on campus that also helps keep people focused. So for instance, for many years, we worked closely with a good friend of ours named Sadie Coltham, who was a faculty member at Miami Dade College in Florida in the US. And he had a number of students taking CS50 essentially online by way of the videos, and online problem sets, and the like. But even though his students could just be watching the lecture videos online every week, he instead invited them to come to campus at Miami Dade. He reserved a classroom and literally would hit play on the lecture videos that I had given some weeks prior in Harvard. And it was an opportunity, one, for people to just interact, two, for people to ask questions of each other, three, to have some support structure so that you have a day, and a time, and a place to do something. Because as many of you probably know, it's very easy to start procrastinating, or fall behind, or you sort of disengage unless you're really on top of your work. So I think with on campus learning, you have all the more of a support structure and a pressure, a good social pressure, to keep up, perhaps, with classmates. And so that's why we've spent so much time trying to help stand up communities, whether it's in the US or abroad, of just small groups of students, whether officially organized or unofficially, just so that people have communities of people to help them along. So I think online education is good. And it's absolutely better than having no access at all. And to Ramon's question earlier, I think when internet access gets better, and better, and better, will the online experience get even more powerful than it currently is. But there's always something a little missing, something that makes people want to convene. So the more you can do that, for instance, in your own communities, in Vancouver, or back home, I think the more successful students can be. Thank you for that one. Hope that wasn't too long of an answer. But we think about that one a lot. All right, can we go next to Efiani from Nigeria? Sorry if I'm mispronouncing. AUDIENCE: Yeah, yeah, good evening. Can you hear me, everybody? DAVID MALAN: Nice to meet you. AUDIENCE: Yes, thank you, [INAUDIBLE]. My name is Efiani, from Nigeria. Hello? DAVID MALAN: Yes, we can hear you. AUDIENCE: [INAUDIBLE]. And I want to know how [INAUDIBLE] comfortable coming in through mechanical engineering. DAVID MALAN: OK. AUDIENCE: It's something I think about. And I usually find-- I don't find enough [INAUDIBLE] help to-- that help to bring this together. For example-- I'm sorry if the question is too long. DAVID MALAN: No, that's OK. It's a little hard to hear you. It sounds like there are small children nearby. AUDIENCE: I'm sorry. DAVID MALAN: That's OK. AUDIENCE: OK, so basically, I am interested in data science, yes? And I want to see how I can integrate data science into mechanical engineering. Because I believe-- I think quite analytical than practical. So that is my question, basically. DAVID MALAN: Let me lean on Brian a little bit. I have very little experience with mechanical engineering. But I think Brian might have some more strengths on the data side. BRIAN YU: Yeah, I also don't have a lot of experience in mechanical engineering myself, although I do know that, as I think David mentioned a little while earlier today, Computer Aided Design, or CAD, is a quite popular and growing field where we're using computational tools and technologies to be able to facilitate the process of the designing of the mechanical systems. And so that's definitely one place in which these fields interact. And more generally, computer science is a incredibly powerful tool now for doing modeling and simulation-- so being able to try to simulate an environment and see what happens in a test situation. And with computers becoming increasingly faster and more powerful, you're able to create better and better simulations, which can be quite helpful if you're going about designing a mechanical system or trying to solve other types of problems. So that's definitely one area where I see those fields intersecting. The other one that's quite of interest to me is the field of robotics. And especially as you start to see more autonomous robots, as you think about things like-- self-driving cars are a big focus of research of a lot of technology companies nowadays. This is yet another area where you need not only very good design from the mechanical and physical side, but also some thought into integrating that with the software side of things and writing the code in order to make these systems work. And so I think there, there's a lot of value in having someone that does span across multiple disciplines, being able to connect computer science to mechanical engineering or something else more generally. And that's something that we try to do in CS50 is try to connect computer science to other fields to demonstrate how the same simple set of tools and primitives that you learn in computer science have a lot of applicability towards solving other problems in other domains and other disciplines regardless of what it is that you might be trying to achieve or trying to solve. DAVID MALAN: Both are very promising fields. So the intersection would be even more powerful. So thank you for the question. Can we go next to Steph, if you'd like to say hello, and where you're from, and your question? AUDIENCE: Hi, I'm from Canada, but I'm living in the UK. So I just started looking into front end development a couple of weeks ago. And I just kind of dove right in, and did a bunch of HTML and CSS, and built a little web page, and thought that was enough, and then just started learning JavaScript. But I'm kind of trying to rewind, and just focus in, and master one thing before I move on. So I was wondering if you had any suggestions of what sorts of projects are a good idea to make just using HTML and CSS, just to focus in and master that before moving on to JavaScript? DAVID MALAN: Sure, more personally, I can say that a good exercise for me two weeks ago was to redo my own personal home page on Harvard's website. It was noted to me by one of our teaching fellows that, I think, I hadn't touched it in, like, 10 years. It looked very dated. It did not work on mobile. There was no mobile when I made it. And so it was a really fun opportunity to start from scratch, and try to recreate the layout that I wanted, and have the aesthetic that I wanted, and learn a bit more HTML along the way. Because a lot of that has changed even from when I first made the site. And then I also made heavy use of Bootstrap, the free CSS and JavaScript library that we introduce in CS50, which was useful. And there's a lot of tinkering there and a lot of frustration trying to get things to work. If it's not too tacky, I'll paste the URL of my home page into the chat window if you'd like to see what I came up with. And it's still a work in progress. I have, now, a list of to-dos that I want to keep adding to it. But I think just finding some project that's of personal interest is the best way to get your hands dirty and learn all the more. Because what you'll find, when you have a very specific personal goal in mind, you want to do something and achieve something specific. And darn it, if you can't figure it out, how to do it in HTML or CSS-- so there'll be a lot of googling. There'll be some Stack Overflow. And that's the best way, I think, to get more comfortable. Now more academically, in the follow-on class, Web50, to CS50, Brian, I think, does an amazing job at connecting the creation of a home page to the real world. If, Brian, you want to speak to how you might deploy a personal home page? BRIAN YU: Yeah, so there are a couple strategies you can use if you want to take the HTML and CSS you've written for a personal home page and make it available on the internet. One of the easiest ways to do so is using a service called GitHub pages built into GitHub, which CS50 uses for submitting your own problem sets. So if you started to take CS50, you probably already have a GitHub account. And with a free GitHub account, you can freely put your own personal website on the internet. And so I'll paste the URL for GitHub pages into the chat. So if you'd like to build a website of your own for yourself, you can use GitHub pages in order to do so. That's what I personally use for hosting my own personal website. And I know that it's quite popular for other people as well. DAVID MALAN: And in fact, what's nice about Brian's follow-on class, the web class, is, if you go to this URL here that I'll also paste into the chat window, he goes into more detail on various features of HTML, and CSS, and layouts. We really just do the basics in CS50. That might be a fun way to get a bit of a crash course on other things you can do and then try applying it to a real problem. Well, thank you, to Steph. Can we go next to Andrea, or "An-dray-a," from Hong Kong, if you'd like to say hello? Is it Andrea? AUDIENCE: Yes, hi. DAVID MALAN: Hello. AUDIENCE: I'm originally from Colombia, but I'm living in Hong Kong. DAVID MALAN: Nice to meet you. What question's on your mind? AUDIENCE: So I started to do the course for business professionals. And I previously studied industry 4.0. So I I'm interested into data and blockchain. And I wonder if you have some recommendation in some work that you have done regarding this. DAVID MALAN: Good question. It's a topic that's not currently in the business class. We did integrate it more recently into some of CS50's newer materials. And Brian, do you want to go ahead and maybe paste your favorite tutorial on Blockchain technologies, the YouTube video that we've started using in assignments? BRIAN YU: Yes, let me grab that one. One moment. Yeah, so I have just pasted into the chat a video that I quite like as an introduction to bitcoin, and block chicken, and how those technologies work. It's by Grant Sanderson, who makes the YouTube channel 3Blue1Brown. And I think, in this video, he does an absolutely wonderful job of starting from first principles and building from ground up how it is that you would imagine designing a decentralized system for exchanging money, for example, and then building that up to how it is that blockchain actually works. So I'd highly recommend that video if that's something that is of interest to you if you're interested in learning more about how these technologies actually work. DAVID MALAN: And at some point, we'll likely update the business class too, Andrea, to integrate some of these newer topics that have become very applicable to the business world too. So no plans just yet, but odds are, on the horizon. Well, thank you for that question. Can we go to Neban Najib for your question if you'd like to say hello, and where you're from? And how do you pronounce your name? AUDIENCE: I'm from Oman. So I'm actually a high school student. And I'm a humanities student. So I wanted to ask, how can a humanities student benefit from CS50? DAVID MALAN: That's a good question. So as of two years ago, Brian, and I, and our colleague Doug started collaborating with our friends at Yale University on a class that a colleague of ours there, Benedict Brown, had created, which was an intersection of computer science and the humanities, often called the digital humanities. This, for instance, is a class where, at Harvard, we would introduce students to a number of new technologies. For instance, we used Node.js, we used View, we used React. And in the context of those technologies, we asked students to apply those technologies to problems specifically in the arts and humanities. Early on, we introduced some of those projects ourselves. But at the end of the semester were students asked to solve some problem of their own in the world of arts and humanities, perhaps some other class they were taking and the like. And Brian, do you want to give folks a sense of the kinds of projects that students might tackle in the humanities? BRIAN YU: Yeah, so there are quite a number of applications in the world of the digital humanities in terms of where computer science can be useful. And often it comes with using computer science to be able to process large data sets that would otherwise be infeasible to process by hand, for example. So if you have large curated collections of photos of artwork, for example, or large curated collections of literature, for instance, it might be helpful to be able to use computational tools and algorithms to be able to analyze those very large data sets. And so here, there's an intersection between computer science, and some fields in the humanities, and data science, for instance, where there's a lot of potential applications there. My own undergraduate research when I was in college was about applying computer science to the problem of analyzing literature, and being able to look at a bunch of documents where you might not know who the authors are, and to be able to do some analysis of that literature. And so I have been working at the intersection of computer science and trying to solve problems in the humanities. And there are definitely other domains within the digital humanities where people are also using computers to be able to solve these sorts of problems. DAVID MALAN: Indeed. Well, thank you for that question as well. Can we go next to Megan if you'd like to say hello, where you're from, and your question? AUDIENCE: OK, can you hear me? DAVID MALAN: We can, yes. AUDIENCE: OK, so I'm just starting the intro to computer programming, but I'm kind of a overthinker. So I already know, in the future, that I do want to get into cybersecurity, whether it's network security or pen testing. I just want to know what steps or courses I should be considering, or that you recommend I take, to lead me in that direction. DAVID MALAN: Yeah, that's a really good question. Let me defer to Brian in a moment to see if he has any course recommendations. But my first reaction is that reading a lot, honestly, and keeping an eye on certain blogs is honestly the best way to acclimate yourself to the security world. It's kind of an unfortunate thing, but it feels like every week, every day almost, you read about something bad that has happened in the world as it relates to computer security. Most of us probably are familiar with all of the articles that have been written about Zoom, for instance, in recent weeks. Thankfully they've addressed a lot of those. But they made a number of poor design decisions early on. And I think that the value of reading lots of blogs and articles about security is that you start to notice patterns in humans' behavior. So you know what to keep an eye out for so as to avoid those problems in the future. And two, you just start to understand how to go about looking for and detecting these threats proactively. So I can paste a couple of resources, for instance. There's a very famous gentleman by the name of Bruce Schneier, whose website I just pasted into the chat window. He has a blog and a lot of other resources there. He actually spends time lately at Harvard as well, at the law school. And he is a security researcher, speaks commonly on the subject. And so following people like him might be of interest. Another popular blog is Krebs on Security. Let me go ahead and paste another URL there. You might want to keep an eye on that blog and that website. For instance, I've pasted the specific link to just one article about Zoom so that you can better understand those issues as well. And then really, you can look almost anywhere in the tech world for security-related stuff. For instance, Tech Crunch, or Slashdot, or even just keeping an eye on Google News is a good place for public-facing information. Brian, on the academic side, do you have any thoughts? BRIAN YU: On the academic side, I don't know of any classes that are specifically oriented for cybersecurity. But there are definitely a lot of classes I know of that are about cryptography, which is very related in spirit, about how to-- what sort of algorithms you can use in order to make sure that information is secure, especially as you're transmitting it over the internet, for example. And so here, for example, is one class on cryptography offered by Stanford through Coursera which might be of interest there as a potential more mathematical and more formal look at how some of the algorithmic side of cryptography works. DAVID MALAN: And Megan, I can paste one other URL into the chat window for what's called USENIX. This is an association that holds annual security conferences that, years ago, when I was in graduate school, I actually participated in regularly. It looks like their next conference is coming up later this summer. It says Boston, but I'm guessing it's not going to happen in person most likely. So maybe, all the better, it will be online. But that's a community too, if you're a university student now, you might be able to, in the future, travel to conferences like those, or at least read the papers that are published there. And that too is a great way of getting acclimated. And if you google around for security "tutorials," when it comes to pen testing, or penetration testing, as you alluded to earlier, there's a lot of cool stuff you can do with technology these days. And I'm sure there are online resources like, you download a virtual machine that some security instructor has configured to have a whole bunch of vulnerabilities. And you can use it to actually hack into the virtual machine and learn something about the process. And then what's also popular these days-- and let me see if I can find a link for this final resource. It's very-- here's just one. I've not participated in this myself. And it looks like this is the past one. But contests called capture the flag, or CTF, are very popular these days. And these are opportunities to compete, either by yourself or on a small team, to try to hack into things and figure things out before another team figures things out. So that's another really fun way to learn more about this world, CTF, or capture the flag. Well, thank you to Megan for your question. Can we go next to Ronaldo, if I'm pronouncing it correctly, if you'd like to say hello and where you're from? AUDIENCE: Hello. I'm originally from Venezuela. But now I'm a refugee in Colombia. DAVID MALAN: Nice to meet you. AUDIENCE: Yeah. Well, I have various questions, so I don't know which one to pick. But the one in interested in at the moment is I'm really struggling sometimes when I tackle a really big project. And I get stuck. And I get this feeling like I don't want to code anymore. Because I feel like I'm not prepared, that this is not what I should be doing. And I get very anxious, like maybe I'm picking the wrong career. Because I love programming. But sometimes I get flustered and overwhelmed. DAVID MALAN: I know the feeling, honestly. So I think the best answer we can give you is empathy. Even something relatively simple, like my personal home page that I mentioned earlier, mushroomed into such a big project. Like, I thought I was going to sit down one evening and kind of whip up a new and improved mobile-friendly website. Because I had all the content. I just needed to write new HTML, new CSS, and so forth. But no, that project ended up taking multiple weekends, much longer than I had intended. And like I said earlier, I still have a list of issues, or to-dos, that I still want to get to. They may be less important than some of the things I already finished. But I think this speaks to the fact that a lot of projects are just never complete. Or even I am never happy, 100%, with how they've turned out. So here too, not to be a broken record, but I think the best advice really is to break these bigger programming projects down into smaller pieces. And be happy if, each day, you've just crossed one thing off that list, or maybe on a good day, two or three. But describe your to-dos, and describe your features or your goals as precisely as possible so that you can literally work top to bottom and make incremental progress. At least if you're like me, you'll start to feel a lot better about it at the end of the day. Like, at least he can go to sleep knowing you got something done. But if you're trying to tackle big projects and you, like me, expect that you'll get everything done at once, I do think you and I are just setting ourselves up for disappointment. Because even after, what, 20 years of my programming, I still am shocked how consistently, any time I try to do a programming project, it takes at least twice as much time as I expected. And that's on a low estimate. It probably takes me three times or four times as long. So this is not uncommon. So if you love this, I would just change your habits if you can, not your passions. Well, thank you for that question, Ronaldo. Let's go next to Anmal. And if we can put Kareem on deck-- Kareem, are you still there with us? KAREEM ZIDAN: I am, yes. DAVID MALAN: All right, we have a question for you from Anmal. So let's go ahead and spotlight Anmal, if I'm pronouncing it right, if you'd like to say hello, and where you're from, and your question. AUDIENCE: Hello. Yeah, am I audible? DAVID MALAN: Yes. AUDIENCE: Yeah, hi, so I'm from India. And the question that I wanted to ask is, for example, just yesterday, I was doing week 3, PostgreSQL. And it took me like three or four hours just to set it up properly. And when I told this problem to a senior of mine, what he told me is that you should go for a Dockerized environment. You should containerize your app so that you are able to eliminate the first step you have to do to set up environment variables and things like that. So is Docker the way forward? And are we going to see it in CS50 course in the future? DAVID MALAN: Good question. Kareem, do you want to take the first part? KAREEM ZIDAN: Yeah, sounds great. So Docker is obviously one of the most popular tools or technologies that have become very useful in recent years. In fact, pretty much all of our-- CS50's web applications are backed by Docker. And the CS50 IDE itself is backed by Docker. And it definitely makes a lot about the process of developing an application or distributing an application easier in that it allows you to, what they call, containerize your application, or package it with all its dependencies and all the version that you need so you don't have to worry about, would it work on this system? Would it work on this machine? What's installed here? Are they conflicting versions of packages that are maybe required by other applications? All of that stuff goes away. That, of course, in addition to what your friend alluded to, that Docker Hub, or the repository registry of Docker images that exist online from which you can pull any number of premade Docker images for you-- among them is obviously Postgres, MySQL, different Python versions, different versions of other tools and packages. I personally use that. I think it's definitely worth it to learn more about Docker and start using it. I think Brian, in his web class, if I recall correctly, had one of the lectures that introduced Docker and Docker Compose. BRIAN YU: We did [INAUDIBLE]. [INAUDIBLE] Docker. DAVID MALAN: Sorry, Brian? BRIAN YU: Yes, we do introduce a little bit of Docker and Docker Compose in the web programming class. KAREEM ZIDAN: Yeah, so I would definitely take a look at that for a start. Docker also-- I think the documentation, the official documentation, is great. And I'm sure that there is a numerous number of online tutorials that you can look at and sort of get a sense of how Docker works or how to get started using it. DAVID MALAN: Indeed, and Anmal, if you'd like to make it easier to get started, I've just pasted into the chat window a tool that we use here in CS50's team called CLI50 for Command Line Interface 50. This essentially gives you what's called a headless environment-- so no GUI. It's just the black and white terminal window that connects to your own Mac or PC so that you can run tools like you're trying to when you're on Mac or PC without setting everything up manually yourself, like SQLite. And this is actually a subset of what CS50 IDE is. So Kareem has built a Docker image on top of this command line interface image that adds more GUI features and other IDE-specific software. So as Kareem notes, we use Docker for everything. Whether it makes it into CS50, I think, itself will depend on just how user friendly it gets. I think the reality is that Docker is pretty easy to get up and running on Macs, at least newer Macs nowadays. It's a little more of a headache on certain PCs. And so that's not ideal, I think, for some students to set up their own machines if they run into technical support difficulties at the beginning of the class. But it's on our radar. And I would hope to answer one of our earlier questions too at the same time, that this is one of the kinds of technologies that will get better and better over time and make it even easier for students to use on their own machine. Well, Brian, any final words before we wrap up? BRIAN YU: Just wanted to say, really enjoyed getting a chance to talk to you all today. Hopefully we'll have an opportunity to do this again soon. But thank you so much for all your wonderful questions. Sorry we didn't have a chance to make it to all of them. But hopefully next time, we'll be able to get to more. DAVID MALAN: Indeed, thanks so much for our special guest Kareem and to all of CS50's team who's behind the scenes helping us out. And indeed, we'd love to answer even more questions next time. We will send you an email if you registered for today to let you know when the next one is. All our best to you, and your family, and friends, and colleagues back home. Have a wonderful day.