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.
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.
