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