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.