DAVID MALAN: This is CS50's office hours with, today, David and Brian.
If unfamiliar, office hours are an opportunity
at Harvard on campus for students to visit professors' offices,
literally, and ask questions about the courses they're
taking, about computer science, more generally,
or life after courses like CS50.
So we thought we would try to do the same here on the internet,
especially while everyone is home.
We do hope that everyone is doing well and is feeling
healthy, and family and friends, too.
And the goal of today really is just to have a chat about topics of interest
to you.
Ramon has brought some questions that classmates have asked in advance, too,
in case we need to call upon those.
And let me just give you a quick tour of Zoom, if unfamiliar.
In the bottom left-hand corner of your Zoom window,
there should be a Mute or Unmute button.
If you do ask a question today, do be sure to Mute or Unmute yourself
accordingly.
Next to that should be a Start or Stop Video button.
Do, if you have a webcam or camera of some sort,
keep it on during office hours so that we
get a sense of who were chatting with.
In the middle of your Zoom window is probably a chat icon
so that you can chat textually on your keyboard with classmates
who are in the room, as well, or see links
that we might paste during the chat.
And then last but not least, let me go ahead
and ask you, everyone, to do this.
Click on the Chat button and click on Participants
so that you see the names of everyone else in the chat room.
And below the list of participants on your screen,
you should see a hand icon.
That represents raising your hand.
If everyone could click that button just once so that we know who's here.
Wonderful.
So if you have a question at any point, please
feel free to raise your digital hand that way and Brian
and I will do our best to call on you.
And please forgive if there are simply too many
questions to ask during this hour.
We do hope to do more of these in the future.
[BACKGROUND TV NOISE]
Just to begin.
And we're going to also try to keep everyone's microphones muted,
generally, so we don't hear background noise or TVs or traffic,
but allow us to start right away here.
Prenab, can we start with your first question for Brian or myself?
PRENAB: Yeah.
Hi, am I audible?
DAVID MALAN: Yes, we can hear you.
PRENAB: Hi.
So a quick introduction of myself.
I'm Prenab Sabla.
I am a 14-year-old student from India, Bengali, India.
And firstly, I'd just like to thank both of you, professor David and Brian,
especially because I took the CS50 course last year,
the CS50 introduction one.
I'm doing the mobile development one, and so
[INAUDIBLE] the content is very accessible,
especially the way both of you explains.
Thanks a lot.
DAVID MALAN: I'm really glad to hear.
PRENAB: Yeah.
And secondly, my question is--
so I have a few questions.
And firstly, the first question I had was
that every year, this year's 50 introduction cause
has so many different problems.
However, there's one problem, mainly, that's been going on for years,
and that's speller.
And so how come speller's being that one constant problem that's been going on?
I mean, I've noticed that it's one of the most
hardest problems in the course.
And my second question is that this year, so I
was trying to help some students here and I
was looking at the week 8 problem sets.
And so unlike last year, where you had only one problem that was finance,
this year you had a whole rock barrage of problems, encompassing web, iOS,
Android, and games.
And so what was the idea behind the complete addition of problems?
Because it's been so much more interesting, and I myself
really want to retake the course just to see,
because there were so many changes this year, especially that one.
So what was the idea behind changing that and keeping the speller
problem, however, in there?
DAVID MALAN: Sure.
Why don't I try to answer the first question
and then turn to Brian for the second question.
So speller has indeed been with the course I think since 2007, when I first
started teaching CS50.
It has, indeed, always been a good challenge,
but it's really meant to be a very climactic problem for students
to solve in the very last week that we spend on C, the programming language.
I think it's incredibly empowering for students in a class
to actually implement their own hash table, specifically.
Or in the past, students had the choice of implementing a try, alternatively.
And I think the competitive part of it has
been appealing to a lot of students.
If unfamiliar, this problem set allows you to implement your very own spell
checker, for which we give you a big dictionary of 140,000 plus English
words, and you have to implement the fastest spell checker that you can
and the one that uses the least amount of memory.
And then we have a competition of sorts, a big board, a leaderboard,
where students are ranked, if they opt into this, based on how little RAM
or how little time their code has used.
And that seems to be a fun way of not making the course competitive,
but making one small piece of it so.
And Brian could perhaps speak best to piece set 8 and how and why it
changed so much this year.
BRIAN YU: Yeah, sure.
So this past year in CS50, we've introduced
at the end of the class what we call our various different tracks.
It used to be that at the end of CS50, everyone
would learn a little bit of web programming, which
was a lot of fun for many students and let them build some really
interesting and exciting projects.
But one of our goals this past year was to experiment
with the idea of students building other tools
and other applications that are interesting to them.
And especially nowadays, where so much of where programming is happening
and development is happening in mobile apps, like iOS and Android apps,
for example, we thought it would be nice to give students an opportunity
to learn to do that, too, if they wanted to.
So students now have an option at the end of the semester
to choose between web programming or iOS app development or Android app
development, or even game development, too,
since new tools and graphics libraries that have been developed over the years
are really making possible some really exciting game tools
and technologies that can be used to build games that you can actually play.
So these various different tracks we hope
are an opportunity for students to really see
the wide variety of applications of the skills
you learn in CS50, to be able to apply them to mobile context
and through web context, and more beyond that, too.
DAVID MALAN: Allow me to ask a question now of everyone.
If you open up your Chat window, I've just pasted the URL of a Google form.
We would love to know where everyone is from and what courses of CS50
you have taken or are taking.
So if you're comfortable, taking a moment to submit that form.
We'd love to take a look at the data after.
And if you do give us your email address, what
we'll do is when there's a future office hours with me, myself,
or any other members of CS50's team, we'll
send you a quick email, like I did for folks yesterday,
to remind you of the day and time.
Let's go over next to Asif.
And let me just ask, just so that we can field as many questions
as possible today, do start by asking just one question
and we'll do our best to come back around or keep in touch over email,
or the like.
Asif?
ASIF: Asif [INAUDIBLE] here.
DAVID MALAN: Yes.
Can you say again.
Your mic is a little close to your mouth, I think.
ASIF: Yeah, OK.
So my question is related to artificial intelligence.
Can you hear me?
DAVID MALAN: Say again?
ASIF: My question is related to artificial intelligence.
DAVID MALAN: OK.
Let's turn to Brian for this, who, as you may know, his course on AI
just launched yesterday.
ASIF: Yes.
Have you seen that movie Matrix?
[INTERPOSING VOICES]
DAVID MALAN: I have, yeah.
ASIF: Yeah.
In that movie, the humans are being plugged into a machine.
That machine is kind of a virtual role.
DAVID MALAN: Correct.
ASIF: Yeah.
And so my question is that is it possible to create
such a virtual world, with its own population of people?
In that movie, we are actually plugging in the real people--
I mean, creating virtual people with their own behaviors,
their own characters, a whole world with your own programming skills.
Is it really possible?
BRIAN YU: OK.
I think I misheard your question the first time.
I actually have seen that movie, now that you mention it.
So the question is about simulating people.
In short, a lot of what--
[INTERPOSING VOICES]
ASIF: I did not mean simulating.
I mean actually creating people.
Characters created in that world believe that they are really living.
They have no idea that they are being created by a program.
[INAUDIBLE]
BRIAN YU: Oh, real people in a simulated world?
ASIF: Yes.
BRIAN YU: Well, OK.
I guess that's gets a little bit less about artificial intelligence
and more into the world of like virtual reality,
is probably the closest thing we have to that now, in terms of you
have the ability to put yourself into a virtual space and experience--
[INTERPOSING VOICES]
ASIF: That was the thing I was saying.
The fact is that we cannot go-- we cannot actually interact with that
world.
I mean, that world is virtual.
The people inside is also virtual.
We are just playing God.
[INAUDIBLE]
BRIAN YU: Yeah.
So you want to just really just recreate an entire virtual world
that you can actually interact with?
At the moment, I think that's more in the realm of science fiction,
but you never know what happens with technology in the future.
DAVID MALAN: Thank you for the question.
Can we go over next to Ziad?
I'm sorry if I'm not pronouncing your name right.
Malik?
ZIAD: All right.
It's OK.
DAVID MALAN: And if you don't mind, when asking your question,
can you also pronounce your name for us and tell us what country you're from.
ZIAD: All right.
My name is Ziad Malik.
I am from Austria.
And yeah, I participated in CS50 because I want to be a leading computer
scientist one day, hopefully.
And now the first question is, I started with CS50 last week,
and I'm working pretty good with it.
But the problem is that when I work with a problem set
and when I try to solve a problem, sometimes on the more
comfortable problems, I struggle.
For example, the credit problem on week 1, I sat two days in front of that.
And I was really confused at the end, so I ended up
submitting only the cash problem.
And I wanted to ask, is there a way to improve my problem solving,
or can I learn it?
DAVID MALAN: Yeah, that's a really good question and not uncommon.
And don't get discouraged.
The more comfortable problems in the course's homework assignments
are, indeed, meant to be more challenging by design.
I think the best strategy, especially if you're
finding yourself hitting a wall, so to speak, where you're just not
sure how to solve it and you have tried reaching out
to anyone you might know locally or online for help, come back to it later.
Honestly, I think a very good strategy is
to do all of the less comfortable problems throughout the semester,
and then once you get to the middle of the semester, or maybe even end,
then go back and do the more comfortable problems.
And I bet you will feel yourself much more capable of doing those problems
and they will come much more easily.
But I think if you do them only within the individual week,
it's hard to solve some of them because you're not yet more comfortable,
but you will be after more weeks of practice.
ASIF: Thank you.
DAVID MALAN: Sure.
Good question.
Can we go over next to Shokiz.
I'm so sorry.
I'm not going to be able to pronounce this correctly,
but I think you see me going there.
Do you want to pronounce your name for us, [INAUDIBLE]??
Just remember to unmute yourself.
Still muted.
STUDENT: Hello.
DAVID MALAN: Actually someone-- oh, there we go.
Go ahead.
Yes.
STUDENT: Hello.
My name is Shaqi Jaquan.
Shaqi Jaquan.
DAVID MALAN: Yes.
And where are you from?
STUDENT: Shaqi Jaqan.
DAVID MALAN: Jaquan.
Where are you from?
STUDENT: I am from Uzbekistan.
That's central Asia.
DAVID MALAN: Wonderful.
What's your question?
STUDENT: My question related to, also again, improvement,
That is lacking of ideal or logical thinking in my mind
to when I'm solving any problems, relative
to maybe algorithmic equations.
I am going to solve any problems related to maybe sorting or such kind of arrays
and graphs.
I want to solve any problems related to algorithmic.
It doesn't matter what kind of resources you recommend
me to improve my logical thinking.
BRIAN YU: Sure.
That's a very good question and very broadly applicable to computer
science, in general.
I think I have two pieces of advice to give there.
Piece of advice number one is when you're
tackling a big algorithmic challenge, it's
often easiest to start by thinking about, what
are the smaller stepping stones I can try and get
through first along the way?
In other words, try and break down a bigger problem into smaller problems.
Ziad, for instance, was earlier talking about problems
at one credit, where you're trying to figure out
what credit card company produced a particular credit card number.
And that's a bigger challenge, but a smaller challenge
you might start with is, OK, given a credit card number,
figure out what the first two digits of the credit card number are,
for example.
That might be a smaller problem that's a little bit easier to tackle,
a little bit easier to reason about.
And by breaking the bigger problem down into smaller problems that
are easier to tackle, you can hopefully build your way up
to the answer to the bigger problem.
And the other strategy, I think, is just more longer term,
and it's about just getting practice with solving more problems.
The more problems you try and practice solving,
the better equipped you'll feel to deal with more problems in the future,
because you'll start to notice patterns.
You'll start to realize that this problem you're trying to solve now
is very similar, or has some things in common with a problem you've already
solved before, and that might guide you towards figuring out what
tools or algorithms and strategies you might use
for solving your current problem now.
DAVID MALAN: And I imagine you mean the computing problems specifically,
but it's perhaps timely to us today, I've just pasted into the chat window
the URL of CS50's annual CS50 X puzzle day.
Honestly, the entire design of that event is to empower students
to just solve problems more collaboratively.
So if you haven't seen that yet, you might enjoy
solving some problems this weekend.
Thank you for that question, too.
Can we go next to Christine?
STUDENT: Next question?
DAVID MALAN: Yeah, from Christine.
I think she's unmuting her mic.
Yes.
CHRISTINE: Hi, everyone.
Yes, I'm Christine and I'm from Dubai.
So my question is so I took communication in university,
back in the university, but I had my minor elective,
and I was supposed to go through the computer science route.
So is there a reason why any computer science courses has to start with C?
Because that's always been my struggle.
So after C, I think I was supposed to take JavaScript
after and then web development, but then C has always been my struggle.
I always struggle with it, so it kind of discouraged me.
So I ended up changing my elective, my minor elective after that.
Because my worry right now is if I am struggling right now with the C
part of the course, so my worry is, can I actually
take on the other languages that's in the syllabus?
So I'm quite scared about that.
DAVID MALAN: Yeah.
It's certainly understandable.
I would try not to be scared.
I would take comfort in the fact that many, many, many students at Harvard
and beyond have that same emotion.
I've just pasted into the chat window an answer I wrote on Quora, actually,
some time ago about why CS50 uses C.
Most intro courses these days don't, to my knowledge.
And in fact, it's much more common these days
for introductory courses to use Java or Python, which
I do admit can be more accessible, a little easier
to pick up, because they don't have pointers.
They don't have as many of the same pitfalls as a language that C has.
And they also have more features that make a few things more easy,
more easily done in code.
So I wouldn't get discouraged.
I think if you can take some other course first,
maybe in some other language, that's totally fine, if your school allows,
and then come back to a course in C. What many universities do
is they don't start with C, but if you are interested in what's called systems
programming, low level programming, then you will learn C
as your second or maybe third language.
So it really depends on the institution.
So certainly, don't get discouraged.
Certainly don't equate C with computer science, or even CS50 for that matter.
But if we come full circle to the question
earlier about pset5, our spell checking problem sets,
it's pretty rare for students, I think, in an intro class
to be implementing their own hash table only mid semester.
And that's indeed meant to be a challenge.
So if and when you're ready to get to that point,
I think you'll find C very enlightening and empowering,
but definitely challenging at first.
Don't get discouraged.
It just takes time and practice.
Can we go next to how about Ron W.?
If you'd like to say your name and where you're from, too.
RON: Yeah, it's Ron.
I'm from Germany.
I'm the flight nurse.
So I'd like to know why and how did you become a programmer,
and what tips do you have to stay motivated?
DAVID MALAN: It's a good question.
I think we can possibly each answer this differently.
I don't think of myself as a programmer, per se, even though I enjoy doing it.
I will admit, I don't think I personally would enjoy doing it full-time
as a software development job.
I've never really had that interest.
What's most gratifying for me about programming
is being able to literally solve problems that are of interest to me
personally or professionally.
A lot of the code that I've written, certainly in recent years,
is all related to CS50 in some way, either creating tools or adding
to tools that our students use or that our teaching fellows or staff use.
And so for me, I just get a real kick out of writing software
that other people use.
But I don't think, personally, I would want
to do it all day long, even though I have many friends who do exactly that.
Brian?
BRIAN YU: Yeah.
I mean I also don't consider myself-- like I'm
not a programmer professionally.
I do write some programs, but most of my job is in the education setting.
But I first really stumbled across programming
just by taking my first class in it.
In high school I took my first computer science class.
And just found it very empowering, in terms of the problems
it enabled me to solve.
I remember very early on just building some very simple programs that
were able to be useful to me and to other people.
And I think that was the motivating thing for me,
is the power that programming has to enable
you, with just a couple lines of code, to be
able to build something that was actually
impactful or useful or meaningful in some way.
DAVID MALAN: And as for practice, I think
I would just solve as many problems in code as you can.
If you're not taking courses, keep an eye on open source communities.
That is freely available code on GitHub and GitLab, and the like.
And those are good ways to practice, is by contributing to other people's code
bases and getting feedback from them as well.
Can we go next to Jacob?
If you'd like to say hello and where you're from.
Still muted, though.
JACOB: OK.
Hi, everybody.
I'm from Nigeria.
So I've not had any prior experience in coding.
I took CS50.
I did a bit of Python.
And C has been a bit tough for me as a newbie.
And I find it very difficult to solve most of the set problems.
I'm just talking pset2.
I've not been able to move past one.
And I don't know how long it took me to solve those problems.
And secondly, I'm thinking if I should go into web development or AI machine
and data science, but I'm not too sure.
So how do I decide on what to do?
Is it best to figure out what to do or just
keep learning and then, I don't know.
DAVID MALAN: Sure.
I think my short answer is that you should really
pursue courses that are of genuine interest to you
and not simply do them because you think you should.
JACOB: OK.
DAVID MALAN: Generally speaking, the advice we give students here, at least,
is that once you've taken two rigorous courses in software-- whether it's
CS50 and some other class or two different courses
altogether-- generally speaking, after learning
a bit of procedural programming, which CS50 teaches,
and functional programming, which other classes teach,
or object-oriented programming, once you have a breadth of background,
you really are able to then start taking on part-time opportunities
in programming, maybe even full-time entry level positions.
But a common next step, too, is data structures and algorithms.
As for web and AI, let me turn to Brian because he
happens to teach CS50's own versions of those two options.
JACOB: OK, thank you.
BRIAN YU: Yeah.
So certainly, if you're interested in web programming
artificial intelligence, we do offer courses about that, too.
I'll go ahead and paste the links for both of those in the chat,
for anyone who is interested in those.
There's the AI class and the web programming class as well.
And those are really just meant to serve as introductions
to the field of artificial intelligence and web programming.
So if you'd like, you can take a look at those
lectures there to get a sense for what AI is all about
and to get an opportunity to write some AI programs of your own.
The goal of both of the classes is really
to provide that sort of introduction so that if you
are interested in pursuing either of them in the future,
you'll have some projects under your belt.
You'll have some foundational knowledge to then go forth and work
on your own projects as well.
DAVID MALAN: And this is such a common question, honestly.
I mean, there's an infinite number of courses out there you can take,
either in universities or for free these days, and it's not clear at what point
you should stop.
But honestly, I think once you've taken a few courses,
it really is time to leave the nest, so to speak, just like a baby bird would,
and start to fend for yourself and say yes to some project
or say yes to some opportunity that scares you a little bit.
And you might not even be sure how you're going to do it,
but once you then get your footing and get your confidence,
I think you'll find that you can start taking courses
to fill in gaps in your knowledge, but not
necessarily to prepare you for opportunities that you don't yet
know about.
Thank you for that question.
Can we go next to Nadia?
NADIA: Thank you.
Thank you.
So my name is Nadia.
I am from Ukraine, from Kiev.
And thank you for the upcoming puzzle day.
I'm really excited.
It's the second year of mine.
And I was really bad last year.
Hoping for something better.
So I just actually found myself--
I completed the CS50 first introductory course last year,
and I was really excited about it, and I found myself really
worried that I lacked some theory.
And what I did, I bought some theory books, downloaded them,
started reading, and I did not really find a lot of value
in those because I could not fit all the information into my brain.
So how do you think that after completing the CS50 course, what
would be the best way for the student-- who I'm not from the computer science.
I did not have the computer science degree.
I'm a teacher.
So what it would be the best thing, to start different other courses
on computer science, maybe to do some logic tasks, or go to the leak code,
or actually fill in the gaps with the books on the theory?
So how can I move after that?
DAVID MALAN: Yeah.
Let me paste one link that I often recommend.
Some friends at Princeton teach this course here, which is freely available.
I just pasted it into the chat window on Coursera.
It's Princeton's introduction to algorithms part 1,
and there's also a part 2.
That's a very common next step when you want
to learn a bit more computing theory after taking one or more programming
classes.
More fundamental than that to computer science itself is this one.
I'm going to go ahead and paste the link of a book on Amazon.
This link might not work in all countries,
but you should still be able to see the title there, by Michael Sipser, who's
a professor at MIT.
And the book is called Introduction to the Theory of Computation.
This, for those unfamiliar, really gets to the heart
of what computer science is and what is possible with computers.
And I actually used that book when I was a student some time ago,
and Harvard uses it now in their introductory course,
or has over the years.
And that's a good, pretty accessible book,
but you would benefit certainly from doing some of the problems in the book
or from a course.
And Brian has taken more courses more recently, who can perhaps
speak even better to these options.
BRIAN YU: You actually stole my recommendation there.
I was also about to paste the Theory of Computation book by Michael Sipser.
If theory of computation is something interesting to you, in terms
of what computers can do and what and how
you think about computers, a little more theoretically, a little bit more
mathematically, that's a great book that I would definitely recommend.
NADIA: Thanks a lot.
Thank you.
I unfortunately have to go back to work, but it was a pleasure to talk to you.
And thank you for your course and the upcoming puzzle day, once again.
DAVID MALAN: Yes.
Good luck on the puzzles.
Practice makes perfect.
NADIA: Thanks.
Thank you.
DAVID MALAN: Can we go next to Guillermo?
If you'd like to say hello and where you're from.
GUILLERMO: Well, hi.
I'm from Uruguay.
You said my name right, I'm surprised.
DAVID MALAN: Thank you.
GUILLERMO: So basically, my question is to you, David, I was thinking,
you know how many people admire the way you explain your classes?
Basically what I'm trying to say is that when
you have to teach all these people, you have
to teach us, people without experience, or maybe
you like very experienced people, how do you
find a balance to explain something like computer science to all of us?
What's the key element in teaching?
I don't know if I can--
do you get what--
DAVID MALAN: I do.
I do.
No, thank you for the kind words.
It's not easy, and I don't know if we do a great job all the time.
But I think the simple answer is empathy and remembering
what it was like to not understand material yourself,
and remembering what it was like to feel like everyone else in the room
or in the class was smarter than you or knew better the material.
And to try to put yourself into the shoes, so to speak, of that student,
to help them with a narrative, both verbally and in the course's
homework assignments and slides, and so forth, get from the starting line,
so to speak, to the finish line without letting go of their hand
during that process.
And I think it takes practice.
I think it takes sensitization.
For instance, even though this course, CS50,
happens to be taught to our college undergraduates at Harvard,
I first got my start for teaching in a lectureship role at Harvard's extension
school, which is a much broader demographic of students--
young students, old students, everyone in between, who have gone
or who have not gone to college.
And so it was a much more diverse audience of students,
both in Cambridge and online.
And I think that, too, helped sensitize me to different learning styles.
I think we have always--
I have always-- had students who are of different backgrounds,
geographically, socioeconomically, academically.
And I think that helps, too, not assuming
that your student body is all of the same type or of the same mindset.
So in short, empathy.
STUDENT: Hi, David.
DAVID MALAN: Yes.
STUDENT: And Brian.
I'm from India.
I had a couple of questions.
I am [INAUDIBLE] for the CS50 course and it was amazing.
I had an amazing experience.
I haven't had any experience with the other courses, as compared to this one.
And I was pretty much interested in the Harvard courses,
so I searched on the Google and got some Harvard courses related to CS50.
That was CS20 and CS124, for [INAUDIBLE] mathematics and BSA.
Have you any plans for showcasing them in the edX?
DAVID MALAN: Really good question.
Let me turn to Brian, too, in part, because we've
been talking about this quite a bit.
BRIAN YU: Yeah.
So CS20 and CS124 are the courses you mentioned,
are theory of computation classes that are taught at Harvard.
CS20 is more of an introduction to the mathematics of computer science,
and then CS124 takes that a little bit further into the analysis of algorithms
and the efficiency of those algorithms in studying data structures.
So CS50 itself does not have a specific course that is about algorithms,
but if you are looking to take similar courses, David, earlier in the chat,
pasted a link to the Princeton Coursera algorithms
class, which covers many of the same topics, and CS124 does as well.
And so that I would suggest, as a class, to potentially
look at, if you're interested in continuing to study algorithms as well.
If you're also interested in algorithms, I
can tell you the textbook that is used for CS124,
the algorithms classes at Harvard, as well as other algorithms classes.
It's this one that I just pasted here, Introduction to Algorithms by Cormen,
Leiserson, Rivest, and Stein, often abbreviated to just
CLRS for the initials of the authors.
That's quite a popular and famous book about algorithms
and it's very comprehensive.
So if you're interested in studying and learning more about algorithms,
I would definitely suggest that book as well.
STUDENT: One more question.
DAVID MALAN: Sure.
Go ahead.
Go ahead, [INAUDIBLE].
STUDENT: Are there any extra problem sets related to the CS50?
DAVID MALAN: Problems sets related to CS50?
STUDENT: Yeah, apart from the CS50 problem sets?
DAVID MALAN: Oh.
Not per se, but if you go to this URL, which
I will paste into the chat window, we have
previous years of homework assignments.
The problem sets have changed over time, and if you look at previous years,
you'll see some older problem sets.
They're not maintained, as well, anymore,
though, so things like check 50 might not work anymore, but they're there.
STUDENT: All right, thanks.
Thank you.
DAVID MALAN: Sure.
Can we next go to Sabir, if you'd like to say hello and where you're from.
STUDENT: I have a question.
DAVID MALAN: Let's go to Sabir first, if we could.
Still muted, though.
There we go.
[INTERPOSING VOICES]
SABIR: Hi David.
Hi, Brian.
Nice to meet you.
DAVID MALAN: Hello.
SABIR: OK.
I am Sabir.
Currently in Turkey, but I'm from Nigeria.
I'm studying in Turkey [INAUDIBLE] studying masters
in software engineering.
DAVID MALAN: Wonderful.
SABIR: OK.
My question is, currently I'm doing a research on artificial intelligence.
But actually some of the lectures here, they [INAUDIBLE] language.
So [INAUDIBLE] not good in English.
So what kind of book do you recommend me for me
to learn artificial intelligence?
And again, see, I kind of have interest in C programming language.
And what increased that interest is you and Brian and the way you teach.
It's wonderful.
I almost lost that passion, but when I saw the way you teach,
it's kind of encouraging.
So what book can you recommend me, in terms of this C programming language,
to learn more of it.
[INAUDIBLE] C programming language, and so on.
Thank you.
DAVID MALAN: Sure.
Brian, do you want to start?
BRIAN YU: Yeah, certainly.
So thank you.
I'm glad you're interested in artificial intelligence.
Again, I think I posted this already, but yesterday we just launched
a course about artificial intelligence.
So if you're interested in an introduction
to some of the ideas in artificial intelligence, that course
we cover topics ranging from how you would solve various types and search
problems to how AI can play games to you how AI can understand human language
and translate languages, for example, as well as
topics in machine learning, like neural networks and other popular topics
there, too.
So that's something that you're interested in,
that course is available as well.
And I think you also asked about textbooks.
The artificial intelligence textbook that I happen to really like,
and the one that shares a lot in common with the course that we teach,
is called Artificial Intelligence-- a Modern
Approach by Stuart Russell and Peter Norvig,
and I've pasted the link to that book as well.
So if you're interested in a textbook about artificial intelligence,
that book is quite good.
And if you're looking for more videos, we
have videos and problems on the course on edX about artificial intelligence
as well.
DAVID MALAN: And I'm not sure if you mentioned C also.
I've just pasted into the chat window a link to a book
called Hackers Delight, which is a fun book on learning
C and all the lower of a level, as well as algorithms, more generally.
Thank you for that question.
Can we go next to Cabon, if I'm pronouncing it right?
If you'd like to say hello and where you're from.
CABON: Hi.
I'm from the US.
Wow, I did not expect that.
First of all, I'd like to thank David and Brian.
I finished CS50 recently.
It was the best course I've ever taken.
I noticed Brian released CS50 AI yesterday.
I looked at the first lecture.
And I tried to prom set.
However, I noticed that when you tried to download the distribution code,
the code doesn't actually function on CS50 IDE.
So I was wondering, after you finish CS50, what IDEs
or what terminals do you recommend to move on?
DAVID MALAN: Sure.
Brian, do you want to field that one?
BRIAN YU: Yeah.
So I'll start by just pointing out that for that very first problem in the AI
course, you should be able to run the program.
We distributed two data sets with that problem, a smaller data
set and a bigger one.
You should be able to get the smaller one working on the IDE,
but for the big data set, a lot of AI now is about analyzing big data.
You're unfortunately a little bit constrained by the fact
that the IDE is running in the internet and has a limited amount of memory
available to you.
So the big data set actually is too much memory than will actually fit the IDE.
And for that reason, it might be a good idea to start--
we want to encourage students to start programming on their own computers
as well.
And so the way to get started with that is really just
to start with a code text editor, and there are
a whole bunch that are quite popular.
Probably the most popular are the three that I'll paste into the chat now.
There's Visual Studio code, developed by Microsoft.
And then there is Atom, which is developed by GitHub.
And then there is Sublime Text, which is also quite popular.
They used to be a little bit more popular.
Any of the those three editors, which will
work on Macs or on PCs are on Linux, are probably good text editors
to get started.
They have all the syntax, highlighting, and the managing of different files
and terminals that you can run code in.
And so those might be a good place to get started, in terms of editing code
on your own computer instead of on the IDE.
Yeah.
Someone else also mentioned PyCharm.
That's another popular one, in terms of an IDE for Python specifically.
There are definitely others other than the ones we've just mentioned, too.
There are many different choices that you have available to you.
Here are just a couple of the popular ones that I happen to like.
DAVID MALAN: And I also just pasted the URL of Python itself.
Sometimes computers do come with versions of Python,
but it might be older.
So you can also download and install Python from their website directly.
Can we go next to Lori?
If you'd like to say hello and where you're from.
LORI: Hi.
I'm Lori.
I'm originally from the Dominican Republic,
living here in the States for a couple of years.
My question is in regards to just resources.
For example, it's hard to be a college student, especially
first generation college students.
So as professors, what are some, for example, communities
that you guys would recommend us to join or look into, just so that we have kind
of that camaraderie or that help, especially now that we're quarantined,
we can't have face to face.
DAVID MALAN: Yeah.
It's a really good question.
I have been following on Reddit a number of communities, which are nice.
I don't know if they are strictly university-oriented.
Odds are it's a broader demographic than that.
But let me see if I can paste the URL of at least one subReddit here.
If unfamiliar, Reddit is a popular site for discussion.
So Learn Programming is actually a really nice one.
I've found the discussions there to be pretty healthy and very supportive
of students.
There's another one-- let me see if I can find it real quick--
about computer science education more generally.
I'll see if I can find that soon.
Brian, do you want to chime in, though, with some thoughts,
too, while I look for that?
BRIAN YU: Yeah.
The other thing I'll mention is just CS50's own communities,
if you're interested in interacting with other CS50 students who are currently
taking or have taken any of our courses.
And there is a link to all of our various different communities.
It is definitely a very active group of students
that are on Facebook that are communicating and forming community
together, as well as on Discord that are always
chatting about CS50 or programming or any of the specific problems.
And so that can be a place where a lot of our own students online
have been able to find community.
And we've noticed that these has been even more active now that more
and more people are staying indoors.
So definitely other people there.
LORI: Yeah.
I have the Discord chat, and it's been really helpful, especially
like I said now that we're indoors.
So it's nice to have that camaraderie again.
DAVID MALAN: Indeed.
And I can paste the link of all of CS50's communities,
which should appear in the chat room in just a moment.
That's a link to all of our own specific ones.
And then the other subReddit I was thinking
of, which talks about life after college in computer science is this one here,
CS Career Questions on Reddit.
You might like that, too.
Both those communities seem very supportive of people
asking questions of each other.
STUDENT: I am from Hong Kong.
Right now I am in Taipei due to various reasons, political unrest
in [INAUDIBLE], or whatever.
I have some questions.
I have a couple of questions about the recent project,
and also a personal project, if it's OK if I ask.
The personal question is really short.
I'll just start with the technical question.
I always work around web developers in coffee shops
when I try to code in Python, and doing more of analytic works,
or even also a bit of financial derivative predictions with my client,
because my client knows math.
I don't know math.
But I find it very difficult to communicate with my web developers,
in the sense that recently, I was trying to use
fast API to build a server interaction to automate
some Excel spreadsheets via GUI.
And then I built an authentication endpoint,
where I locked myself out during the development of my API.
And then the web developers were like, may I look at your cookies?
And I was like, are those cookies gluten free?
So it gets to the point where it starts, as a Python,
it's very hard to communicate with JavaScript developers or other people
of different domains.
Is Python just to obstruct?
Python, you might as well think of it as English, and you can just search Google
and there would be a documentation for every single thing.
And it's just a different structure and way of thinking in Python.
That's my first question.
DAVID MALAN: Not really, honestly.
I think you won't have that same impression of the language
once, I think, you have more familiarity with other languages.
There are so many similarities among a lot of these more popular languages
today.
Python can be used procedurally.
It can also be used partly functionally.
Those are terms that I used earlier as well.
And I think you'll find that each of these languages
or environments or frameworks just has different ways of solving
the same problems.
Something like cookies has nothing to do with programming languages, per se.
It has only to do with HTTP, which is used by web browsers and web servers.
So if you're feeling that way, I would try to just give yourself
more exposure to other languages.
Take a very short course or read one or more tutorials on JavaScript.
Read a little bit about C++ or C#.
Just give yourself a little more breadth of exposure
and I don't think you'll put as much weight on Python
as being a standout, which I don't think it really is.
STUDENT: Yeah.
DAVID MALAN: Can we go next to Rashab?
If you'd like to say hello and where you're from.
RASHAB: Hey, David.
I'm Rashab from India.
So I took CS50 a couple of years ago, and after that I've
taken various courses, but every year I keep coming back to CS50
to look at the new problems and the new content.
And this year I think it was really amazing.
My question to you is I have moved on to doing research,
and I see a lot of undergraduate students
who are interested, but just started out in computer science, who
are interested in research.
So I started a community, so where we did like small projects
and contribute to open source, or [INAUDIBLE] students
to see [INAUDIBLE].
So what do you recommend, or are there students
at Harvard, graduate students, who are participating in research,
or would you recommend I do [INAUDIBLE]?
DAVID MALAN: Yeah.
Let me turn to Brian for this, because he's done this
more recently and more personally, too.
BRIAN YU: I didn't catch the end of the question.
So I heard how do undergraduates doing research do what?
Can you repeat the end?
DAVID MALAN: Still muted, Rashab.
RASHAB: Yeah.
Hello?
Yes.
How can I encourage undergraduate students
to participate in research, where they started out
starting with computer science, or get them
in a community where small projects are [INAUDIBLE]..
BRIAN YU: Oh, yeah.
That's a great question about encouraging undergraduates
to do research.
Just a second.
Yeah, about encouraging undergraduates to do computer science research.
I think one of the challenges with starting
to do computer science research just after taking one or two
classes in computer science is that there's a big learning curve
to be able to get up to speed on everything
you need to know about the research project and all the background
information for whatever the field of research happens to be.
And so if you want to encourage undergraduates
to be able to work with a particular research project,
I think trying to come up with smaller tasks that
are more easily graspable by someone who may not
have much experience in that particular domain of research
can be quite helpful.
I know that definitely when I was just starting computer science
and starting to do a little bit of research, that's what a lot of faculty
helped to do for me, was not require me to understand
the entirety of the project, but give me some smaller
piece of that project where I could focus just
on understanding that and tackling that, and then over time,
start to get a better sense for what the larger project is.
But diving into a big project all at once
can definitely be a little bit intimidating.
DAVID MALAN: Can we go to Roan?
ROAN: Hello, David.
I want to thank you all for-- can you hear me?
DAVID MALAN: Yes, we can.
ROAN: OK.
I want to thank you all for you and your team, for your effort,
and I really appreciate that.
I'm from Egypt.
My name is Roan.
My question is, do you recommend a specific website for training?
I know there are a lot of websites.
I want to know what you recommend the best ones are.
DAVID MALAN: For learning computer science and programming, specifically?
ROAN: For practicing.
DAVID MALAN: Oh, for practicing.
It's a good question.
A couple come to mind, and everyone else who's on the call
should feel free to paste your links in to the website.
Sometime ago, we started playing with HackerRank, which, despite its name,
as has a nice collection of introductory problems and more
sophisticated problems alike.
Brian, do you know some more recent options, too?
BRIAN YU: HackerRank is definitely quite a popular one.
The other one I really like, just because it has a big range of problems
that you can solve in any programming language,
is Project Euler, so I'll go ahead and paste that in there as well.
Project Euler basically just asks you a whole bunch of questions,
and in order to answer the question, it usually
involves writing some code in order to solve the problem.
And in that sense, you can code in any language.
You could write the solution in C or in Python or any other programming
language that helps you get to the right answer.
And so I find that to be a pretty interesting way
to find interesting computational problems to solve,
and after you solve it, to then think about how
you might go about solving it more efficiently
or solving it in a different language.
And there's a nice community around those problems as well.
And I see in the chat, there are many other suggestions
that people have that might be worth taking a look at, too,
for other sources of problems to solve.
DAVID MALAN: Simon, can we go to you next?
SIMON: Hey.
Yes.
Thanks very much for your time.
I'm Simon.
I'm from London, England.
I'm currently in my third year of an undergraduate degree
studying computer science.
And I'm doing my master's next year, but I still
have no idea what part of computer science I really want to go into.
It's something that Jacob touched on earlier.
Do you have any tips for exploring different areas,
whether it's systems or ML or logic?
Because I've done modules in each of them,
but I'm struggling to really pick a topic
to do my dissertation on and further research.
DAVID MALAN: And is that because you like too many of them
or you don't like enough of them?
SIMON: Well, I think it's because I like them all neutrally, but none of them
I really like a lot.
DAVID MALAN: Yeah.
I think when it comes to dissertations or theses or capstone projects,
I think if you have the ability to connect with one or more professors
and work more closely with them or with their research group, that
can tend to help crystallize your idea.
I think talking with faculty, too, about projects they're working on
is a nice way of you figuring out if, oh, I would really
like to work on that project, too, and you
can have a more visceral reaction to the opportunity.
Barring that, Brian just went through this
and published his own dissertation about a year ago,
if you'd like to chime in as well.
BRIAN YU: Yeah.
I think my approach to this, very similar in spirit,
was to look at what faculty around me were working on.
So I was at Harvard, so I looked at like Harvard faculty and MIT faculty, who
were nearby, just to see what types of research projects they were working on.
And for those that I thought they had interesting projects,
I just reached out to them by email, just strike up a conversation.
And not all of them got back to me, but some of them did.
And that was the beginning of a conversation, some of which
led to some research opportunities that I wouldn't have thought of.
And I think that can be an interesting approach, as opposed
to just starting from thinking about what
domain you want to work in, because the faculty are usually actively working
on one or more different projects that are at the cutting edge of research,
and so being able to hear from them about what they think
is interesting and exciting can often be a way to get inspired,
as well, in terms of the types of projects
that you might be interested in working on, too.
DAVID MALAN: And I hope you'll forgive.
We have a few minutes left here and we're
doing our best to get through as many questions as we can.
We'll invariably do another one of these.
So if you haven't already, please do fill out the Google form
that I've pasted, again, into the chat window with your email
address so that we can let you know in a week or two when the next one will be.
But we have time for a couple more questions I think.
Can we go to Joshua?
JOSHUA: Hello.
My name is Joshua.
I'm from a country called Rwanda.
My question is I just started CS50 about two months ago.
I'm in like week 4.
DAVID MALAN: OK.
JOSHUA: I was wondering if you could give me
some resources that can help me understand
coding better on like websites or applications, that
can help me understand coding better.
DAVID MALAN: OK.
Are there websites to understand coding better?
JOSHUA: Yeah.
DAVID MALAN: Yeah.
I would definitely take a look at the chat
a moment ago with a number of the practice
websites, which are really good.
We certainly distribute CS50 and CS50's courses on edX,
where there are dozens, if not hundreds, of free courses nowadays.
And I think taking a look at some of the topics of interest
to you on those websites is a good place.
Coursera.org is another good one as well.
That's where the Princeton class is as well.
I think it's an amazing thing right now.
It is so hard to not find something that's freely available
and of interest to you.
I would start with some of those URLs that we've pasted into the chat window.
Just scroll back through and maybe copy and paste it if you'd like to save it
today as well.
JOSHUA: Thank you very much.
DAVID MALAN: Sure.
STUDENT: I think it's my number.
DAVID MALAN: Can we go next to Asher?
If you'd like to say hello and where you're from.
ASHER: Hi.
I'm from New York City.
I am 15.
And my question was, I've had some experience with coding, about a year,
and I'm doing the tracks in CS50 now.
How would you recommend getting started with projects?
Are there any good websites where people put like offers out,
or how would you go about doing that?
DAVID MALAN: Projects, final projects in particular of your own design?
ASHER: Either that, or let's say once we finish with CS50, as you said,
after you take a few courses, you want to do projects
and then take courses to fill in the gaps.
Where would you recommend finding those projects
or finding people to do projects.
DAVID MALAN: I think there's certainly the freely available courses you
can pursue and any number of the practice problems
that people have been pasting into the chat window today.
But more than that, I would encourage you to seek the open source projects.
For instance, in CS50, especially in the Python portion of the class
and the web portion of the class, you might
recall that we used a number of packages, or libraries, code
that other people wrote.
Flask is one of them, and we used a number of others.
If you look in our requirements.txt files
for a couple of the final problem sets, you'll
see what other libraries we used for those homework assignments.
And so that is to say you've been using a number of free open source
libraries of code already.
Seek those out on GitHub.
Google the name of the library and the word
GitHub to find its repository online to see if it's there.
And then look on the Issues tab on GitHub and GitLab and other sites.
There's usually an Issues tab or similar that
shows you all of the missing features or bugs or problems with a library
or an open source project.
And one of the easiest ways to get started is to look through those issues
and see if you can solve one of them.
GitHub, for instance, even has labels that they use that will indicate,
for some repositories, good first contribution or good first timer,
something like that, relatively easier problems that you can figure out.
And the upside of this is you learn how to read someone else's code.
You learn how to collaborate with other people.
You get feedback for free from really smart people
who are working on that project as well.
So try to find one or more open source projects.
Even if it's just one line of code to contribute,
I think you'll get a big kick out of it.
And I certainly have.
I think it's the coolest thing, when some popular open source
tool has added even one line of code that I've contributed.
ASHER: Thank you so much.
STUDENT: Hi, David and Brian.
First, I'd just like to thank you guys for doing a wonderful job with CS50
and how all the students of being able to benefit from your teachings.
So I have two questions.
One is a short one.
So my first one I'd like to start out as a joke.
For your lectures 0, for scratch, how many phone books
did you tear in total by now?
DAVID MALAN: That's a good question.
I've been teaching the class for 13 years now, so I've torn at least 13
of them in the very first lecture of the class.
But I tend to use that demonstration elsewhere,
so let's say it's maybe 100 at this point.
Oh, still muted, if you'd like to unmute yourself again.
Question?
STUDENT: OK.
And my next question is for Brian, regarding AI.
So my question is, will there ever be a limit for AI
to really understand the world?
BRIAN YU: Yeah.
This is a really good question, and one that nobody has a definitive answer.
The question is about how good could AI be,
potentially understanding the world?
And that starts to get into what we generally call
artificial general intelligence, like a generally intelligent being that
is comparable to human intelligence.
And the answer is that people aren't really sure.
We've been able to create AI to solve very small scale problems,
like understand how to translate texts from one language to another
or understand how to play chess better than any other chess player.
But the problem of a general purpose intelligence,
that can learn the way humans do, that can adapt to new problems,
that's something that doesn't currently exist,
and people debate about what would happen if it ever did.
A really good book, if you're interested in this type of thing,
is a book called Superintelligence by Nick Bostrom.
It's a quite popular book on the subject.
I've pasted the link to that there as well.
And that really explores the question of,
is it possible to create an artificial being that is as intelligent as people?
And if so, what are the implications of that?
Could it be more intelligent than people potentially are, as well,
and what would happen as a result of that.
So I don't have a definitive answer on that.
I don't think anyone really does, but it's definitely something
that people are discussing and talking about.
DAVID MALAN: Well, we want to be mindful of everyone's time.
And I know we haven't gotten to all the questions,
but we'll definitely do another one of these soon.
Do fill out the Google form that's in the chat to give us your email address,
if you'd like to let us know.
I've also just repasted the communities link.
If you have questions that Brian or I might be able to answer online,
we're happy to do our best.
He and I are active on all of those communities.
Please join us for CS50 X puzzle day this weekend, if you would like.
And again, all of our best to you, your family, and friends, especially now.
Let me turn things back over to Brian to say a final goodbye.
BRIAN YU: Yeah.
Thanks, everyone.
Sorry, again, we didn't manage to make it to everyone's questions,
but we'll definitely try and do something like this again.
So if you didn't get your question answered today,
hopefully you can in the future.
But it was great to talk with all of you and chat with all of you,
and looking forward to seeing you at a future office hours
or in any of our online communities as well.