DAVID MALAN: All right, and why don't
we begin even as others join us?
So my name is David Malan.
I'm here with CS50's own Brian Yu
for what are called office hours.
Here on campus, what office
hours traditionally are
is an opportunity for students at
Harvard to drop by a professor's office
literally and chat about the
course, chat about a problem set,
chat about the real
world more generally.
And so what we thought we'd do today,
as we've done a couple of times
thus far online, is hold
Zoom-based office hours
so that CS50's community
around the world
has an opportunity to meet with
each other as well as chat up me
and Brian here on Zoom.
If you are not familiar, just a couple
of features of Zoom you should know--
odds are, in the bottom left-hand
corner of your laptop or desktop,
if you're not using a
mobile device, there's
a mute button and a start
or stop video button.
Do turn on your video
if you haven't already,
just so that we get a sense
of who's in fact here.
This time we've automatically
muted everyone by default.
Otherwise, as we've
experienced in the past,
there's quite a bit of background noise.
So Brian, and I, and CS50's team
will be able to unmute you for you
when it comes time to ask a question.
And in the middle of
your Zoom window, there's
probably a participants
and/or a chat button.
And if you click on the
chat button, you should
be able to interact via text with
other people who are here on the call.
And Brian and I will
occasionally, this afternoon,
use the chat window to paste in any
URLs that might be of interest to you.
One other change, this time,
that we thought we would try out
is rather than do virtual hands
using Zoom's feature, which
got a little overwhelming
for me and Brian
to keep track of who
was asking questions,
CS50's own Ramon Galvan
is going to help us
manage the questions by
soliciting questions in advance
from everyone here via this URL.
So if you'd like to ask
a question of your own,
please take a moment now or at any point
over the next hour to ask it via that
URL there cs50.ly/question.
That will lead you to a Google form
where you can ask your question.
As before, please forgive if we can't
quite get to everyone's questions
in the time allowed.
We'll invariably do more
of these in the future.
So we'll do our best.
And in fact, Ramon's going to help
us cluster similar questions together
so that if multiple people, this
time, have asked the same question,
we'll try to answer them all at once.
So feel free to take a moment
to ask your question there.
We won't be using Zoom's
blue hand feature.
But please feel free to chat in the
chat window during today's session.
And we're so pleased to see.
It looks like we have
some 360 CS50 community
members from around the world.
So welcome to all.
RAMON GALVAN: When is the next
episode of the CS50 podcast coming up?
DAVID MALAN: That is a
really good question.
For that, let me turn
to my friend Brian.
BRIAN YU: Yeah, it's
a very good question.
For those of you who
don't know, David and I
co-host a podcast that used to be hosted
by CS50's own Colton Ogden as well.
You can find those episodes on YouTube,
and also on most podcast players.
Because of the current
global health situation,
we've been outside of our
normal office in Cambridge.
And we've been working from home.
So we haven't been able to meet up in
person to record the podcast the way
we normally do.
But certainly, we're hoping to
get back on another episode soon.
DAVID MALAN: Indeed.
If you are a Spotify
user, allow me to go ahead
and paste the URL of the podcast
if you'd like to check it out.
Previously, I did this with CS50's own
Colton Ogden, and then most recently,
Brian.
So if you Google "CS50 podcast" as
well, you can find it on iTunes,
you can find it on YouTube, and a
bunch of other channels as well.
All right, who do we have next?
Ramon?
RAMON GALVAN: All right,
we have Priyah up next.
AUDIENCE: Hello.
DAVID MALAN: Hello.
Would you like to ask your question?
AUDIENCE: Yeah, I was wondering,
after I do the CS50 cour--
sorry, the course-- what do I do next?
Because I've really been enjoying it.
And for my GCSE stuff,
I took computer science,
but I didn't really
understand half the stuff.
And then I did this.
I'm on week two, and I get so much.
So thank you, everyone
who is on the CS50 team.
So yeah, just wanted
to say that as well.
DAVID MALAN: Great.
And Priyah, where in
the world are you from?
AUDIENCE: I am studying in Thailand,
but I'm originally from the UK.
DAVID MALAN: OK, well, nice to meet.
Well, for those
following along via chat,
I've pasted one URL into the chat window
which just shows other courses of CS50.
Often, here at Harvard College, a
common next course for a student to take
would be, here at Harvard,
what's called CS51.
And what that is, a course on what's
called functional programming as well
as object-oriented
programming, which is to say,
a common next step for a student
after taking a class like CS50
would be to learn a different
type of programming.
In CS50, we tend to learn what's
called procedural programming.
You sort of write your code
line by line, step by step.
But there are other ways of
thinking about solving problems
in other languages, with
which you can solve problems
in a conceptually different way.
So CS51 itself is not online.
But there are other classes
on functional programming
and on object-oriented programming,
which would be a good next step.
And then there's more
application-oriented classes
that you can take.
For instance, Brian teaches
a class on web programming
that I'll let him speak to next, which
is, indeed, freely available already.
BRIAN YU: Yeah, so at the URL
that David posted in the chat,
which is edx.org/cs50, you can find some
of CS50's follow-on courses that you
can take after completing
the regular course.
And one of those is a course
that I teach on web programming
where we pick up where CS50 leaves off,
diving a little more deeply into how
to build web applications, and some
of the security ideas behind that,
and thinking about how you think
about scaling web applications
as they start to grow larger as well.
So depending on your interests--
CS50 will introduce you to
a lot of different fields
and aspects of computer science--
there are a lot of different
directions that can take you
after completing the class.
AUDIENCE: Thank you so much.
DAVID MALAN: Yeah,
thanks for the question.
Let's see who we have next.
RAMON GALVAN: Well, David, I'm going
to cluster quite a few questions.
But a lot of people are
interested in learning
what courses CS50 offers after CS50.
Especially of interest is the AI course.
DAVID MALAN: Yeah, so for this
one too, I can toss to Brian.
In addition to the web
course that he alluded to,
he also teaches a course
on artificial intelligence,
which is another apt follow-on Brian?
BRIAN YU: Yeah, so the
artificial intelligence course
is also designed to pick up
from where CS50 leaves off.
And it's specifically
about using Python to be
able to write artificial
intelligence programs,
designing computer programs that are
able to do intelligent things that you
might ordinarily think are
reserved for just people.
So for things like playing
games, or for things
like understanding human
questions and trying
to be able to answer those
questions, or for trying
to figure out what's inside of an
image by using self-driving car
type of technology to
identify what road signs are,
for example, those are the sorts
of questions that we explore
in the artificial intelligence class.
And over the course of
the class, you get a sense
for what some of the common
strategies are for trying
to solve these sorts of problems.
And you get to write some
of your own Python code
to be able to create artificial
intelligence of your very own.
DAVID MALAN: And let me ask, before
we move to our next question,
if you did submit a question
via cs50.ly/question,
do make sure your video is on.
Because we much prefer to have
you ask the question on video
than just us reading it aloud.
But with that said, who do we have next?
Fernando, would you like to--
where in the world are you from?
And what's your question?
AUDIENCE: I am from Chile.
DAVID MALAN: Nice to meet you.
AUDIENCE: And my question
is, what can I do
once I finish the course later on for
not getting stuck or going further
in my programming skills so I can have
like a more solid way of taking this
seriously in the future?
DAVID MALAN: Yeah, so
that's a good question.
And I would propose we answer it
from a non-course-directed-- it's
very common for students
online especially
to wonder, what course should
they take next, what course
should they take next?
And this is sort of an endless cycle.
And you never actually
necessarily do something
with all of the knowledge
and skills you've acquired.
So I would say one of
the best ways to proceed
after taking one or
more courses like CS50
is to find some project of
personal interest to you.
Maybe this is your own
personal home page.
Maybe this is a web application
for your parents' small business.
Maybe this is an application for a
student group that you're involved in.
In short, find some problem
that can be solved by software,
or perhaps even hardware, that you think
you have some of the skills to solve,
and then figure out
everything that you don't.
Like, very early on
when I was in college,
the way I learned C all
the more was by writing
a program for letting other students on
campus find the upcoming shuttle buses.
So Harvard has a lot of buses that drive
all around campus bringing students
from point A to point B. And
one of the most gratifying
projects I took on that really
taught me more about programming
was to write a program that
helped people look up the days
and times of those next shuttles.
And so wherever you see a problem
that can be solved with software,
I would try to take that on.
And better yet, take on a project
that you don't necessarily
know how to do yet yourself.
Like, it should scare you a little bit.
You should have, maybe,
no idea where to start.
And hands down, that will
be the most rewarding way
of learning something
new when you really
have to teach yourself most of it.
AUDIENCE: Thank you.
DAVID MALAN: That helped.
AUDIENCE: Thank you so much.
DAVID MALAN: Sure.
Let's see, who do we have next here?
RAMON GALVAN: Give me one second.
Ooh, I think he just left the chat--
or left the video feed.
Let's see.
Well, I can ask the question.
The question was, are there any teasers
for the upcoming updates for CS50 Web?
BRIAN YU: Sure, I can
take that question.
Yeah, so the web programming class,
which is currently available on EdX,
is due for a refresh that will be
launched over the summer on July 1,
I believe, is the day that will happen.
And there are a couple
of changes to what's
going to be included in the
new version of the class.
A lot of the big ideas are
still the same about thinking
about how to go about designing a web
application and how to think about all
of the pieces that need to come
together to make a web application work.
But among the new things are going to
be an increased focus on Django, which
is a Python web framework just
designed to make it easier
to get set up with web applications
that deal with a lot of data.
So if you're imagining
a web application that
might have a lot of users that have
a lot of data associated with them,
something like a social
networking website
or an e-commerce website
for example, we'll
spend some more time focusing on that.
In addition, the new class also covers
a JavaScript framework called React,
which some of you may have heard of.
And React is a framework
that is designed
to make it easy to build really
interactive user interfaces.
So if you're using a lot of
modern web applications nowadays,
where things on the page
are changing all the time,
without needing to reload the page,
you're seeing notifications pop up
and chat messages pop up, a lot of that
is because of a reactive web framework.
And so over the course
of the new CS50W, we'll
spend some time focusing
on what that really means
and how you can build those
sorts of user interfaces.
DAVID MALAN: And in fact, if
you would like a sneak preview,
I've pasted into the chat window the
URL of Brian's new version of Web 50
at Harvard Extension School.
You won't be able to
submit the projects yet.
But starting on July 1, the
new version of that cause
will be freely available
on edx.org as well.
All right, Ramon, who do we have next?
RAMON GALVAN: We have Vasu, or "Vashu."
AUDIENCE: Yes, sir.
Hi, sir.
DAVID MALAN: Yes, hello.
Where are you from, and
what's your question?
AUDIENCE: I am from India.
So I have the question.
So after doing the CS50 course,
what all I will learn through it?
And I'm basically new
to computer science.
So I am just very--
I want to ask what all we
will do around the course.
DAVID MALAN: Sure, so CS50 itself is--
or CS50x, on EdX--
is meant to be an introduction to
computer science itself, which means
you'll learn a lot of the fundamental
ideas of computer science.
For instance, how do you
represent information?
How do you solve problems
using a computer?
How do you represent large
amounts of information
efficiently to facilitate what
are called algorithms, step
by step processes for solving problems?
As such, we'll talk about how computers
search very large data sets, how
computers sort very large data
sets, the exact kind of problems
that the Googles, and Facebooks, and
Microsofts of the world do every day.
Toward the end of the semester, we'll
transition from those primitives
to applications thereof.
We'll introduce a bit of web programming
using a language called Python.
We'll use a framework, which is
a free library, called Flask.
And we'll also introduce students to
languages like SQL for databases, HTML,
CSS, and JavaScript for web
programming so that you ultimately,
at the end of the semester, are able
to build something of your very own.
So with that said, while it's an
introduction to computer science
primitives, it's very much
a hands-on software class.
And so at the end of it,
you should be very well
prepared to go on and take
other classes in programming
and solve problems
using your own devices.
Thanks for the question.
AUDIENCE: Thank you.
DAVID MALAN: Let's see,
who do we have next, Ramon?
RAMON GALVAN: Coming up is someone that
has their video currently shut off.
So I think I will have
to find someone else.
Give me a quick second.
Again, please, if you
want to ask a question,
do have your video turned on
so we can have you on screen.
Here we go.
DAVID MALAN: Eric, you're live.
Would you like to say where
you're from and your question?
AUDIENCE: Hi, I'm from New York.
I was going to ask about
continuing classes,
but it seems that we've
already kind of covered that.
But I was curious more about continuing
for Mac OS and iOS development,
or maybe if we were going to
use Python for Bash scripting
or that kind of stuff.
DAVID MALAN: Yeah, and how you
can go about learning those?
Or what's the question precisely?
AUDIENCE: Just like
what courses you would
recommend to look into that stuff.
DAVID MALAN: Sure, so on the iPhone
front, if you have an iPad, or iPhone,
or the like, the course that, years ago,
I first learned iOS development on was
Stanford's.
I did a quick google here.
That might not be the very latest URL.
But Stanford's course, that I
just pasted into the chat window,
is called CS193p.
And that should be
freely available online.
It was a wonderful,
rapid-fire introduction
to a lot of the basics
of iOS development.
Brian, do you want to
speak to the Python front?
BRIAN YU: Yeah, sure.
Just to add on a little bit with
regards to iOS and Mac OS development,
most of development for
native Mac and iOS apps
are done in a programming language
called Swift developed by Apple.
And so if you're interested
in learning Swift,
I think Apple's own documentation and
Apple's own website on this matter
does a very good job of trying to
introduce the language for beginners
who haven't seen it before.
So that URL over there will take
you to Apple's developer page
for how to learn the Swift language.
And getting a good
understanding of that language
is a good first step,
because it's really
a language designed to make it easy
to then go and build applications
for the Mac or for iOS.
And then if you're planning to develop--
so then, if you're planning to
write your own Python scripts that
run on your computer as well, for that,
you don't need a programming language--
a full graphical interface like
what developing a Mac or an iOS app
will give you.
But the Python scripts that you've
written in CS50, for example,
might be a good starting
point there for just
getting a sense for the types
of problems that you can solve.
So in the class, you'll, for
example, write Python scripts
that can analyze DNA samples, for
example, and open up CSV files,
and be able to process them.
And so those are some of the building
blocks of a lot of other scripts
that you might write.
So depending on the problem
you might try to solve,
you might look for what
aspects of those problems
you know how to solve using the
tools you've learned in the class,
and then go out and do some research as
to what missing pieces you might need
to fill in in order to solve the problem
you're trying to solve with the script.
AUDIENCE: Thanks.
DAVID MALAN: Thanks
for the question, Eric.
All right, who do we have next, Ramon?
Musadique, if I'm pronouncing
your name correctly?
AUDIENCE: Yeah, you are right.
DAVID MALAN: Sure, you would
like to tell us where you're from
and what your question is?
AUDIENCE: Yeah, I'm from Pakistan.
And my question is--
that is a general type of question--
what are your productivity
hacks, especially when you're
learning something new and complex,
when it is really difficult, at
times, to stick with your goals
and to keep the momentum?
So how would you explain your time
schedule or your productivity hacks
to learn better?
DAVID MALAN: Yeah, it's
a really good question.
Let me start with Brian,
because he was smiling the most,
and perhaps has the best ideas, first.
BRIAN YU: I like this question a lot.
I think a lot about trying to
figure out how to manage time
and how to make sure to
stay productive on things.
One thing I do, which I don't think
a lot of people do-- but I find it,
personally, very helpful--
It's something called time
tracking, where, basically, I
keep track of how much time I
spend on any particular task.
So if I'm learning something
new, I'll keep track
of how much time I'm spending on that.
If I'm working on a
particular project, I'll
keep track of how much time
I'm spending on that project.
That does a couple of things for me.
One, it helps to keep me
accountable, because I'm
keeping track of how much
time I'm spending wasting, not
doing something productive.
And I'm also keeping
track and really holding
myself accountable to how much time
I'm spending working on things.
And it's also a useful reflective tool.
So at the end of the week,
I can go back and look
at what I spent my time
on in the past week
and think about if that's
really what I wanted
to be spending my time on or not.
So I think the takeaway
there is just access
to data about what I am using
my time for has been helpful
for me, personally, in
thinking about how to make
sure I'm productively using that time.
DAVID MALAN: Brian do you want
to paste the URLs of one or two
of the software programs that
you've found useful for that?
BRIAN YU: Yeah, so the one I
personally use is called Toggle.
I just pasted the link for that there.
It's a web app.
It's got mobile and
desktop apps as well.
But basically, you just
click on a button when I say,
oh, I'm going to check
my email now, or I'm
going to work on trying to learn how
to program in this language right now.
And at the end of the week,
or at the end of the month,
it produces some nice reports
where you can go back and look
at how you were spending your time.
DAVID MALAN: And
Musadique, I would propose
that my approach to life, for better
or for worse, is a little more organic.
I am amazed by Brian's
level of organization,
as evinced by that software there.
But I would say there's two
things, at least for me,
that tend to help me keep on track.
Certainly, when I want
to work toward some goal,
I try to make sure that I have decided
in advance on at least one thing
that I want to accomplish
during the day so that I have
a well-defined goal, especially if it's
a large project that I know I'm not
going to finish in that given day.
And so I try to decide that,
OK, I'm going to fix this bug,
or I'm going to implement this feature.
And in fact, that
relates to my second rule
of thumb, which I actually learned from
one of CS50s former teaching fellows.
This was a fellow.
Some of you might remember
him from past shorts of CS50.
His name was Tommy MacWilliam.
And he was extraordinary when
it came to writing software,
because he could be in
the middle of an airport
waiting to board a flight with his
laptop open, implementing some feature
or solving some bug.
And it always blew my
mind just how he would
make use of every possible
moment of productivity like that.
Whereas I-- at least when it
comes to writing software,
generally, I need to clear my desk.
I need to get everyone out of the room.
I need to have like eight hours
straight so that I can actually focus.
And so I've been trying
to get better at that
and trying to be more like Tommy's
approach by saying, all right,
I know I can't solve
this whole problem today.
But you know what, I'm going
to have this list of issues
in GitHub or in some other tool.
And I'm just going to bite off
one, maybe two, maybe three.
But I try to quantize it step
by step so that I at least feel
good about making some progress.
That's a really good question.
Thank you for asking that one.
I think we have Emmeline next.
If, Emmeline, you'd like to
say hello and where you're from
and ask your question?
AUDIENCE: Hi, my name is Emmeline Wong,
and I'm tuning in from Dallas, Texas.
And I really appreciate
all the resources
that you've made available for
us to be able to take CS50.
The app, the web app,
everything's awesome.
I was trying to find out how to get
a copy of all the questions I asked,
so I'll just go by memory.
So I was curious--
so I like what you mentioned about
how the way you stay motivated
is to have a personal project where
you can practice the skills on.
So the two questions I had
were, what's a good way for us
to assess ourselves to
know that we're ready,
for example, to
participate in a hackathon
or to contribute to an open source
community like Cloud Native Computing
Foundation?
I know that's way down the line.
But I just thought, for
example, with language--
I speak Mandarin-- there's HSK levels.
And I was curious,
from a computer science
standpoint, what do you and Brian
recommend for us to test where we are?
Is there some kind of
standard in the industry?
Thank you.
DAVID MALAN: Sure, I mean, I
would say, short answer, no.
And I think if you're already thinking
about doing something like a hackathon,
you're ready.
No one's going to keep you
out of it, and no one's
going to stop you from participating.
And even if, upon
participating, you realized,
wow, everyone to the left
of me and to the right of me
really seems to know
more, that's a good thing,
to surround yourself by
people who can teach you
a little something new and who
can challenge you a bit more when
it comes to whatever project it is
you're working on the hackathon.
And I think that if you
wait until you feel ready,
that day might never quite come.
Because odds are, there's
always going to be
something more to learn and more
comfort that you think you can achieve.
So if you're already thinking
about it, I think now is the time.
And then just to give you a more
concrete data point, at Harvard,
we have the so-called
CS50 hackathon, which
is at the end of the semester for
us, which means, after three months,
CS50 students are ready to
participate in a hackathon.
Granted, our hackathon focuses
on CS50's final projects.
So it is not necessarily
an open-ended project
that you don't all find out
about until you get there.
But I think a more
concrete rule of thumb
would be, after CS50
itself, after three months,
you're certainly ready and encouraged
to try something like that out.
Brian has, in fact, taught at and
participated in a few of these things
and can perhaps give you a
more personal perspective too.
BRIAN YU: Yeah, I mean, I would
definitely agree with the idea
that hackathons and these
types of experiences
are really learning experiences.
You're not expected to
know exactly how to solve
the problems that you're trying to
solve when you enter the hackathon.
It's meant to be a
collaborative opportunity where
you can talk to other
people about the problems
you're trying to solve
and get feedback and ideas
for how you might approach them.
As for working on open
source projects and trying
to contribute to those
projects, what might be
a good first step is to first
start just by trying to read some
of the code in other people's projects.
It's a very different experience
writing your own code from scratch
than it is to look at someone else's
code and try to read and understand it.
And that's a good skill
to develop as well.
It's one of the reasons
why, later in CS50,
we have you start to read some of our
own distribution code for problem sets
that we give to you as practice
with reading other people's code.
And reading other open
source project code
can help you to better
get a sense for how
they work and can be a good stepping
stone if, later on, you then want
to contribute to those projects as well.
DAVID MALAN: And I--
AUDIENCE: Thank you.
DAVID MALAN: Yeah, and
on the open source front,
I've just pasted the URL of a
website that is super simple.
This is a project that
someone made just to help
people look up their GitHub user ID.
In addition to your
GitHub username, everyone
has an integer that's their
unique identifier that can be
useful for certain types of projects.
And so I found my way to that website.
And as of a few months ago,
there was a bug in that website,
and it wasn't quite displaying
information correctly.
And I realized, wow, wait,
I can probably fix this.
So I found the GitHub repository
in which the code was stored.
I literally made one
change to one line of code
and submitted what's called
a pull request, which
is a request for the owner of
the code to actually merge it
into their code base.
And I was just so happy when he
actually said yes, like, thank you
for the change, and merged my one-line
change into the project, which is only
to say that if you start using other
people's tools or free and open source
libraries in your own
projects, when you discover
that that program or that library has
a bug, or it's missing some feature,
I think one of the best ways to get
involved in the open source community
is try to go implement that
feature or try to go solve that bug
yourself and submit what's called
a pull request, just like I did.
And it's the most gratifying thing,
which is admittedly a very geeky thing.
But it was a lot of fun just
contributing to a project
and learning something new
about someone else's code.
So I would encourage
you to try that too.
Solve problems in things
you, yourself, use.
All right, up next, we have Asher.
If you'd like to say hello, and
where you're from, and your question?
And we just need to unmute you.
Asher, go ahead.
AUDIENCE: Hi, am from
New York City as well.
And just answering Emmeline's,
at the last office hours
I asked a similar question.
And then afterwards,
there was a bug with the--
there was a feature request
for the submit50 program.
And I submitted a single pull
request that changed one line.
And it was the best
feeling ever, just to have
your code running when you run that.
But my question is, I always seem--
I always seem to do well
on the problem sets.
But whenever it gets to projects, I
have trouble figuring out ideas or just
getting started.
So do you have a sort of
process for doing that?
Or is it just find what
needs to be solved?
DAVID MALAN: Personally,
I have a to-do list
that seems to be infinitely long
that I will never get through
by the time I'm done programming.
So thankfully, I'm in a position
where I just have more projects
that I want to take on that I can.
But I think your own
instincts are just right.
When you see something, that's
an opportunity to jump on it.
And very quickly, I think, will
you start to see more, and more,
and more opportunities or projects
that you want to get involved in.
And then the harder question is going
to be which of those to prioritize.
Brian, you've taken on some
of these yourself too, yes?
BRIAN YU: Yeah, so actually, what
you just pointed out, I think,
is a really good suggestion,
which is keeping a list,
just some sort of to-do list of
things you would like to do someday.
Because oftentimes you'll notice
something that you wish existed
or that you wish were
slightly different.
But you're out and about.
You're not really at home, sitting
in front of a computer in a position
to actually start writing some
code to work on a project.
And just the idea of
maintaining a list of things
that you want to do so that when you
notice something you can write it down,
that's really helpful such that,
later on, you can go back to that list
and refer to it.
I find checklists and
a list of things to do
is a very helpful
organizing tool to make
sure I'm organized about
the things that I'm doing,
and also very helpful just
for being more aware of things
that I might want to do some day and
then remembering those later instead
of forgetting them.
DAVID MALAN: Yeah, and to
Brian's point about a list,
this past weekend I spent updating
my own personal website for, like,
the first time in 10 or 15 years.
And even once I finished
it, I already had
a list of, like, seven,
or eight, or nine
more to-dos that I still want to get to.
It's sort of diminishing returns.
Like, it's smaller features or slightly
more information and I want to add.
But that is just to say
that if I wanted to,
I could spend all day long
tackling some of these to-dos.
And you'll start to see that, I
think, if you start making a list.
AUDIENCE: Thank you
DAVID MALAN: Sure, up next, we have
Jabock, if you'd like to say hello
and where you're from.
AUDIENCE: Currently, I am taking
CS50 web development course.
And I am amazed by how
Brian Yu teaches us.
And I love him very much.
And my question is, as the project
begins to grow bigger and bigger,
how do we plan so that we can quickly
plan and work on that project?
DAVID MALAN: Can you--
can you elaborate?
I'm not sure we followed exactly.
AUDIENCE: I mean to say that as the
project begin to larger, supporting
CS50 web development final project.
DAVID MALAN: What to do?
AUDIENCE: How can we manage the--
how can we manage the project and
think about in terms of database
and all of those?
DAVID MALAN: Sure.
Brian, do you want to speak to that?
BRIAN YU: Yeah, sure.
So I think this is sort of in two parts.
One is in, when you're planning
for a large web application,
it's often helpful to think
about, before you even
start writing any code, what the
different components of the application
are going--
is going to be.
What do you want to-- what features
should the application support?
What should users be able to do?
What kind of data do you need to store?
So thinking first about those
questions is probably a good step.
And then what you might want to do
is to divide some of those features
into different milestones for yourself.
Likely, it's not going to be feasible
to take a big web application
and just write the entire
thing in one afternoon.
But rather, you'll build
incrementally in the same way
that, in the first weeks of
CS50 with your Scratch project,
you probably built it
incrementally, adding a few scripts,
and testing it out, and seeing what
happens, then adding a little more,
and testing, and seeing what happens.
The same principle holds true
for larger applications as well.
You'll probably set
milestones for yourself
such that the essential
features happen first.
You work on writing those.
You work on testing them
and seeing how they work.
And once you're
comfortable with those, you
can begin incrementally adding
to that project as well.
But going into the project
with a general plan
and being willing for that
plan to change, I think,
is a good place to start.
DAVID MALAN: And even though
in CS50, we have everyone sign
up for a GitHub account, as you know,
we don't really use GitHub that much.
Although other courses that follow
on from CS50 do use it a bit more.
But having the right tools in place,
I think, is really helpful too,
Jabock, such that I just pasted two URLs
into the chat window for github.com.
And there are alternatives.
You can use GitLab and Bitbucket.
And there's other third parties as
well that provide the same services.
But if you look at a couple of
those URLs, if you're not familiar,
a lot of these tools like GitHub make
it easier to build large projects
and to collaborate with other people.
I alluded to pull requests with
Emmeline's question earlier
and the ability to submit
your code to someone else
to incorporate into their project.
There's the notion of
a code review, which
is an opportunity for a
friend, or a colleague,
or a random stranger on the
internet to provide you,
or in my case, me, with
feedback on the code
that you are trying to
contribute to a project.
And then there's what are called
issues, or projects, or project boards,
which are features that
sites like GitHub support
as well that help you organize,
to Asher's point earlier,
a lot of your ideas and to-dos.
And you can assign them
from one person to another.
So getting the right
tools in place, I think,
can help you be all the
more productive as well.
All right, next up, we have
Bryna, if I'm saying it right,
if you'd like to say hello.
AUDIENCE: Hi, yes,
you're saying it right.
DAVID MALAN: Nice to meet you.
Where are you from, and
what's your question?
AUDIENCE: Well, I'm
from Atlanta, Georgia.
DAVID MALAN: Nice to meet.
AUDIENCE: Thank you.
Well, my question is, in
regards to data analysis--
that's where the-- that's the path
that I want to put myself into--
what other courses or
what kind of path do you
recommend for somebody
pursuing that career?
DAVID MALAN: Ah, that's a good question.
So I think the buzzword du jour
would be data science these days,
which is an amalgamation of programming,
of statistical methods to larger data
sets so that you can ask
questions of that data.
Brian, do you perhaps have some
go-to links or courses offhand?
Otherwise I can try to find on my side.
BRIAN YU: Yeah, so I've heard--
I haven't taken the class
myself, but I know that Coursera
offers a popular class on data science.
So I've pasted that link there
as something you might look into.
So you can certainly do data
science in a programming language
like Python, which CS50 teaches.
This course in particular
uses a language
called R, which is also very popular
for writing statistical programs
and doing data analysis
with programming.
And so that language
I'll also paste there,
for the website for the R
Project, which is the project that
organizes that particular language.
So that might be something
worth looking into as well.
There are definitely multiple options
you have in terms of languages
to use for data science.
But Python and R are both
quite popular for that.
DAVID MALAN: Yeah, and also,
on the database side too,
SQL is also very powerful as well.
We look at it a little bit in
CS50 and in Brian's web class.
But getting more comfortable with
analyzing large corpuses of data using
SQL can be very powerful as well--
very popular area right now.
All right Emmanuel, you're
up next from UK, I gather.
AUDIENCE: Yes, hi there, Professor
Malan, Brian, all the CS50 community.
I'm a professional musician, a
classical guitarist specifically.
I've been taking CS50 as an introduction
to coding during these times
where we're staying at home trying
to develop a hobby, and potentially
a side profession, let's say.
And just to say, it's surpassed any
expectations I had about programming
and just how exciting it could be.
So my question is, what have you seen
as overlaps between arts and coding?
And are there perhaps overarching trends
that you may have observed, perhaps
amongst your CS50 alumni community?
DAVID MALAN: Yeah, it's
a really good question.
Brian, do you want to speak to this
first given your musical tendencies?
BRIAN YU: Yeah, sure.
So speaking more generally about
the arts, David and I actually,
a couple years ago now,
were teaching a class
on programming in the
digital humanities.
So the digital humanities
is an entire field
that's really all about the intersection
of humanities, and the arts,
and computing.
So there's a lot of interesting
work that's going on there.
With regards to music specifically,
CS50 actually had a problem about music
a couple of years ago.
I'll paste the link to that
problem there if you're interested.
AUDIENCE: Thanks.
BRIAN YU: But that was a program
where you could write some C code,
and it would-- oh, I see
David posted the link too--
where you can write some C
code to actually generate
some music of your own based on
some representation of sheet music.
But especially now, with
artificial intelligence,
the intersection between
computation and music
is getting very interesting
where there's actually
artificial intelligence, in particular,
variants of neural networks, that
are able to generate
musical compositions that
are almost indistinguishable
from compositions
that a human might have
composed themselves.
One of the most famous ones
there is OpenAI's MuseNet, which
is a neural network that can be used.
I just posted a link to it there.
But you can hear samples
of music that was
generated by artificial intelligence.
And this, I think, is one of
the really interesting powers
that some modern techniques
in artificial intelligence
are now able to do is they can
generate compositions like that.
DAVID MALAN: Yeah, and
suffice it to say too,
there's this intersection of
computing and music certainly,
when it comes to consumer applications.
If you have Shazam, for
instance, on your phone,
this is a piece of software on iPhone
and Android that you can hit a button
and figure out what song is playing in
a restaurant, or at a friend's house,
or the like.
And it does that generally
by quantifying the music
into small, little
signatures or fingerprints
that can then be looked
up in a database.
YouTube, and Facebook, and
others are using computing
to detect when copyright
has been violated
and someone has maybe uploaded, when
they shouldn't, a copy of some song
by looking at patterns that
uniquely identify that song as well.
And at the risk of maybe embarrassing,
but hopefully flattering, Brian
himself is quite the musician.
And I've just pasted,
into the chat window,
60 seconds of Brian playing the
piano on the stage of Sanders Theatre
at Harvard.
And in fact, it was Brian's
talents a few years ago
that inspired that new music problem
set that he, too, pasted earlier.
All right, well, thank you, Emmanuel.
We have up next Ben carpenter,
if you'd like to say hello
and where you're from.
AUDIENCE: Hi. yeah,
so I'm Ben Carpenter.
I'm from western Massachusetts actually.
So I was hoping to ask what you guys
thought the best option for when
you're trying to work
through a problem set
and you just kind of
can't get something.
And hopefully you've hit
the 70% plus on check50.
When is it the right time to
just kind of say, let's move on?
DAVID MALAN: Yeah, that's
a really good question.
My personality is such that 100%
is usually when I would quit,
which is tough.
Because there's often
diminishing returns of your time
where you might spend 10% of
your time on 90% of the problem
set, but 90% of your time
on 10% of the problem set.
But gosh, the sense of
gratification, honestly, for me,
for that last 10% or
30% is really where I
think a lot of the sense of pride and
accomplishment is for the very reason
that it's so much harder sometimes
to solve those final bugs
or figure out that corner case.
But I think the upside of trying
to adopt that behavior in general
is that you just get so
much better over time
at solving problems in your own code.
And the peak, I think, is when you
become a sufficiently comfortable
programmer that no
matter what your bug is,
you are confident that if you just give
it enough time, you will figure it out.
You don't need to ask a teacher.
You don't need to ask a friend.
You don't need to post
on Stack Overflow.
You begin to acquire a confidence that
you've done bugs like this before.
Yes, they take a long time,
but you know you can solve it.
And so I think that's the upside,
I think, of conditioning yourself,
training yourself to try
to go past that 70% point.
Now in the real world, of
course, there's trade-offs,
and there's other demands on your time.
Maybe you have other classes
you want to do in well.
Maybe there's work or family
matters that you need to attend to.
And that's more of a
personal judgment call.
But I would encourage you not to be
satisfied with satisfactory performance
alone and to push yourself that
additional 30% or even 10%.
AUDIENCE: Would you say that--
sometimes when I get
stuck on a problem, right,
my instinct is to move on and come back.
Like, I've been trying to do the image
filtering problem set for a long time
now, like almost all week.
And I've just-- I've gotten
everything except for the blurring.
And it looks like it's coming out right,
but the math with the actual check50
is coming out wrong.
So I'm wondering if it's a good time
for me to just move on to the next one
before making the submit.
DAVID MALAN: So personally,
I wouldn't deprive yourself
of that sense of satisfaction
of actually figuring that out,
especially since you've
been so determined.
But I would encourage you to consider
that maybe you're doing something wrong
in the sense that, if you keep spending
more, and more, and more time on it,
maybe you're not putting
very good-- very--
you're not using that time very smartly.
You're doing the same
thing again and again
and expecting something to
change, when really, what you
should maybe be doing is
sitting down with a family
member, or a sibling, or friend and
talk them through the problem, right?
Teach them what it is
your code is doing.
This is the equivalent of the
rubber duck, a photo of which I just
pasted into the chat window.
Just hearing yourself talk through
the problem can work wonders.
And I do this all the time with Brian,
with Kareem, with others on our team,
just talking to them
about what I'm working on.
Then all of a sudden,
I have that aha moment.
I don't even need Brian
or Kareem to be there.
But the fact that they
let me talk at them
helped me understand
where I was going wrong.
And so maybe that's
helpful in your case.
I also find it helpful to go
for a jog, to go to sleep,
to just do something else, but
kind of put it on the backburner.
And I've lost track of how many
problems I've solved literally when
I'm just getting ready to go to sleep.
I sit up and, like, oh, that's it.
And then three hours later, I'm
still awake, but I've made progress.
So whatever you keep
doing, don't do that.
Try to shake things up a bit somehow.
All right, let's see.
Next up, we have Yousef, if you'd like
to say hello and where you're from.
AUDIENCE: Hello, this
is Yousef from Tunisia.
I took CS50 last year in July
and finished it successfully.
I want to thank you, all the CS50
teams, for this amazing course.
And I want to mention Kareem for helping
me, fixing the CS50 IDE defined issues.
Thank you, Kareem.
So I have a couple of questions here.
So my first question is about
JavaScript in this time of the year.
Especially the TypeScript
is a new language.
So will JavaScript still
be successful and used?
Or will it flow down?
And my question is, when I
want to go for an internship,
for Google, for example, and
I'm a JavaScript developer,
I don't find that they are
interested in JavaScript developers.
They just want you to
be a Python or Java.
So what do you think about this?
And my final question is how to
contribute to CS50 on GitHub.
Thank you.
DAVID MALAN: Sure, I think
on the last question,
if you want to go to github.com/cs50 and
look at some of our open source repos,
many of them have open issues, which
you're welcome to contribute to or ask
questions about.
As for JavaScript, it is an
incredibly popular language right now.
It's not going anywhere,
I think, anytime soon.
Brian, do you want to speak to it and
its application in the real world?
BRIAN YU: Yeah, certainly one of
the most popular languages out there
at the moment in terms
of what's being used.
Every year, Stack Overflow
does a developer survey
of what are the popular
languages right now.
And if you look at the most
popular languages list,
JavaScript is at the top of
that list for this past year.
I just pasted the link
in the chat there.
And it's been at the top of the
list for a fair amount of time.
Now what you might notice
is that Stack Overflow also
has a most loved languages list.
And JavaScript does not rank
very highly on that list,
in particular because, with all the
different versions of JavaScript,
with all the quirks of the language,
it's very easy to write JavaScript code
that you think will
work but doesn't quite
work the way that you would expect.
And it's for that reason
that, as you mentioned,
there have been a lot of extensions
to JavaScript, other languages that
are JavaScript-like that end
up compiling to JavaScript
that can be translated into JavaScript.
So among them are
languages like TypeScript,
which you mentioned, which I happen
to personally like quite a lot.
Other ones include
CoffeeScript, for example.
And so these languages try to solve some
of the problems with JavaScript while,
at the same time, still allowing them
to run inside of a web browser the way
that JavaScript code normally can be.
So I happen to quite like
TypeScript in particular.
But there are a lot of different
extensions to JavaScript
that are designed to try to keep
the practical side of JavaScript
while adding some additional
features, adding some safety
features to make it easier to use.
DAVID MALAN: And one of
the upsides of JavaScript
is arguably that it can increasingly
be used both on the client
side and the server side.
In CS50, we introduce it
to students on the client
side whereby it's running within the
browser itself alongside HTML and CSS.
But thanks to a runtime
called Node, or Node.js,
you can use JavaScript
on the server side.
And that, as a principle,
is just very compelling.
Because if you and your development
team can all work in the same language
everywhere, it decreases cost
arguably, decreases time.
So it's a very vibrant ecosystem,
but it does change very frequently.
There's always something
new in that world.
All right, up next, we have
Louis, is you'd like to say hello
and where you're from.
AUDIENCE: Hey, hello, guys.
I am from France.
Actually, I'm Brazilian,
currently live in France.
I have a question about frameworks
as we talk about web development.
We show a lot of discussion on
Twitter about React and Angular
that are two different
kinds of frameworks.
So I would like to ask,
which one is better?
I mean, we see a lot of people
saying that React is better
because it's easier to--
I don't know-- to learn, and also many
people saying that Angular is better.
So which one is better, then?
DAVID MALAN: Either
way, you're not going
to get an officially
accurate response here.
Because this is very much one
of these "religious" debates.
But Brian, want to speak to this given
your experience with the web class?
BRIAN YU: Yeah, so React and
Angular are both frameworks that
are designed to do similar things.
Both of them are
JavaScript frameworks that
are designed to make it easier to build
interactive interfaces on the web.
React happens to be
developed by Facebook.
Angular happens to be
developed by Google.
Both of them have learning curves.
Both of them have their
advantages and disadvantages.
So you're really never going to get a
definitive answer on which one is best.
Ultimately, it might
vary a little bit based
on what it is that you want
to be working on specifically,
that especially, if you're contributing
to a project that already exists,
it may already use Angular, or it
may already use React, for example.
So both are very popular.
Both are definitely in demand.
They do use different languages.
They both ultimately use JavaScript, but
React uses an extension to JavaScript
called JavaScriptX, or JSX, that makes
JavaScript look a little bit more
like HTML.
And Angular uses a
language called TypeScript,
which we mentioned a
little while back, that
specifically adds more strict types
to the JavaScript language too.
So trade-offs to both, and they're
just used in different circumstances.
I don't think you'll get a
definitive answer about which one
is necessarily better than the other.
But everyone has their
personal preferences.
I personally like React,
but people will disagree.
DAVID MALAN: Yeah, React does
have a lot of momentum lately.
And honestly, if you aren't
working at a company that already
uses one framework or the
other, and you're just
trying to decide for
yourself which one to learn,
honestly, I would take a look
at tutorials online for both,
implement the equivalent of hello world
in both, or something more advanced,
and just see which one
seems more pleasant to you.
Odds are you'll fall on one side
of the fence or the other as well.
All right, next up we have
Nitten, if you'd like to say hello
and where you're from.
AUDIENCE: I'm Nitten,
from Mumbai, India.
And my question was that I have been
learning computers since the past three
years now in school.
But I didn't really get my basics right.
Like, I've been learning Java and C++.
So what books, or resources,
or language would you
recommend so that I can get
my basics and concepts right?
DAVID MALAN: Yeah, I don't think
those are bad languages at all.
Both of them are what are called
object-oriented programming languages.
They're both very common
as first languages,
either in high schools or universities.
So I don't think you're
going wrong there.
With that said, I think Python
is very much in vogue these days.
And learning it is--
probably opens up
possibilities for you as well.
As Louis pointed out,
JavaScript-- or someone earlier--
JavaScript certainly is
very trendy now as well.
But I think it should depend on
what you want to get out of it.
Because you are currently
studying C++ and Java,
which are very similar
languages in spirit.
Syntax-wise, they're very different,
but they can do similar things.
So to one of the first
questions that was asked today
about other types of
classes to take, I would
encourage you to look into what might
be called functional programming.
This is something that you can
learn a bit with JavaScript.
You can learn it somewhat with Python.
You can learn it with more
specialized languages like Lisp,
for instance, or ML, or OCaml.
Those are classes-- or
those are languages--
that force you to learn how to
program in a somewhat different way.
But I don't think you're off on a bad
start in any way by starting with Java
and C++.
So next up, we have Sukantra,
if I'm pronouncing it right,
if you'd like to say hello.
AUDIENCE: Yeah, hello, I'm Sukandra.
I'm from India.
And my question is, how
would you advise the students
to approach the problem sets,
particularly which involve coding?
DAVID MALAN: Can you read it once more?
I was having trouble hearing you.
AUDIENCE: My question
is, how would you advise
the students to approach the
problem sets, particularly which
involve coding?
DAVID MALAN: Oh, how to approach
the problem sets, especially
those that involve coding.
Brian, do you want to take this first?
BRIAN YU: Yeah, sure.
So I think with CS50's
problem sets in particular,
it's a good idea to start by reading the
background section for the problem set,
which will usually introduce
any of the necessary framing
to understand what the project is and
what it is that you're supposed to do.
And then after that, with any
problem that you try to solve it--
I mentioned this a
little while back too--
but a strategy that I
find very helpful is just
to work on building it incrementally.
So if you're trying to work on
the Mario problem, for example,
you need to take an input, and
make sure the input is valid,
and build a pyramid of that height.
Rather than write all of that
code and then try to run it,
start by just writing a program
that takes in user input.
Make sure you can do that.
And once that's working, go ahead and
build the next piece on top of that.
If you write all of the code at
once, it becomes a little bit
harder to think about and a
little bit harder to debug
if something doesn't quite work right.
Whereas if you start small
and then add to that,
that can make it a little bit easier
to know, when something goes wrong,
what might be going wrong
and just make it easier
for you to think about
trying to solve the problem.
So while the problem
sets might be vague,
breaking them up into smaller
pieces can be helpful for that.
And the walkthrough videos that we
associate with each of the problems
try to help you towards that too,
trying to break the problem into smaller
steps that might be more easy
to implement independently
and then putting all
those pieces together.
DAVID MALAN: And that's a good
question, in fact, very similar to one
other that Julie Lee, if I'm
pronouncing your name right-- if you'd
like to ask your related question here.
Julie?
AUDIENCE: Hi, I'm Julie.
I'm from Oklahoma.
And my question is kind of similar.
So I've been taking computer
science for the past two years now,
and I've learned, like,
three different languages.
And I always get stuck at
one point and try to give up.
So like, I have a problem
looking at a bigger picture,
because I try to focus
on the smaller parts.
But I have a hard time
implementing it altogether.
So how do you work through
getting stuck at a certain point?
And how do you get better at
looking at a bigger picture?
DAVID MALAN: Yeah, and by getting stuck,
do you mean with a particular feature,
or fixing some bug, or something else?
AUDIENCE: I think it's like when
I am stuck on a certain logic,
just not knowing how to
code the logic that I
need to figure out if that makes sense.
DAVID MALAN: Gotcha.
Yeah, Brian, do you want
to take that one first?
BRIAN YU: Yeah, so I
think this will depend
a little bit on your personal strat--
your personal style
for solving problems.
I often, when I'm struggling
with the logic of a problem,
find it helpful to write
things out on paper just to--
sometimes just writing
something down or drawing
a diagram or a picture of what my
computer's memory might look like,
for example, or what
data is being stored
where can often be
helpful for me when I'm
trying to think about
solving much larger problems.
Of course, that'll vary a
little bit by the problem.
But I find being able to
look at something more visual
helps me personally.
I learn very visually,
and I think very visually.
And so that's useful for me.
But it may-- that may
be helpful for you.
You may find that other
strategies work for you as well.
Certainly, other tools
like debuggers exist
for helping you to step
through your code line by line
and get a better understanding.
David mentioned rubber
duck debugging as well,
just talking the problem out loud.
Sometimes it's helpful for making
your thinking a little bit more
precise and a little bit more formal.
And that can sometimes reveal
where your bug might be
or how you might go about
modifying your logic.
So all of these are strategies
that may prove helpful.
DAVID MALAN: Yeah, and I can't emphasize
enough the idea of talking to someone
else, or if need be, a rubber duck.
I mean, even in CS50's office hours
on campus, when students come to me,
and Brian, and the courses
teachers, teaching fellows for help,
very often, we'll just ask the student
to explain their code on their screen
and ask them, what do you mean
for this code to be doing?
What are you trying to accomplish?
And so often, just by asking the student
to walk through their logic verbally
so that they, themselves, are
thinking about it step by step,
they too have that aha moment.
And they realize where
they've gone wrong.
So you can waste a
lot of time, honestly,
by just sitting in your
room or your dorm room
just banging your own
head against the wall.
But honestly, taking a step
back and talking to someone,
or talking to a duck, can really
help speed things up, honestly.
So as before, change the approach
you're taking, and see if that helps
gets you to a better solution.
I think we have time for
just another question or so.
Can we call on Angelia, if
I'm pronouncing it right?
AUDIENCE: Yeah, hi.
I'm Angela, from Jakarta, Indonesia.
DAVID MALAN: Nice to meet you.
AUDIENCE: Yeah.
My question is, I say, from the
courses that Brian and David are
really patient when they are teaching.
So my question is how to
develop such expertise.
I mean like public speaking and teaching
CS combining and solve, and always
technical skill.
Thank you.
DAVID MALAN: Well, thank you.
You're too kind, I think.
So one of the reasons I, at least,
went into teaching 20 years ago
was honestly because I wanted to
get better at public speaking.
As you may have heard me say in
one of CS50's classes, at the time,
I had run for the undergraduate
council at Harvard,
or the student government if familiar,
student council at the school,
just kids that generally try
to accomplish goals on campus.
And I ran for this election
and lost miserably.
Like, I did not win the election.
And part of that, I do
think, was because I
was very ineloquent at the time.
I had trouble conveying my ideas.
I performed very poorly in
one of the on-campus debates.
And so I was really
kind of angry at myself
that I wasn't better-spoken at the time.
And so I started
volunteering as a teacher
for one of the undergraduate
student groups that
allowed me to teach
classes to other students,
like HTML, and CSS, and
other such technologies.
I then was a teaching fellow,
or teaching assistant, my fall
of my senior year of university.
And then I was fortunate to
be able to teach my own class
my spring of my senior year.
And so it really honestly was
just practice, practice, practice.
And teaching particularly really
helped me organize my thoughts,
allowed me an opportunity,
again and again,
to try to communicate
clearly to other people
more so than if you're just giving a
speech or just presenting in a class.
Having to teach, I think,
was really a key ingredient.
And I think it helped
technically that I just
enjoyed what it was I was teaching.
I really enjoyed programming.
I really enjoyed computer
science on the whole.
And so being able to
teach something I was
passionate about just really helped.
Brian, what was the case for you?
BRIAN YU: Yeah, I think I would
agree with just about all of that.
I think the practice is the key thing
that helps make you a better teacher.
Just getting experience, even if it's
just explaining something to a friend
or to a peer, that helps
you to start to think
about how to take the ideas
that might exist in your head,
and put them a little bit
more precisely into words,
and in particular, to be
able to explain something
in a way that is accessible to someone
who hasn't seen the topic before.
But I often think
about, when I was first
learning some of the material, the types
of explanations that worked and didn't
work for me and trying to
come up with explanations
that can help to explain
very technical topics,
but hopefully in a bit of it easier
to understand and more accessible way.
And it definitely helps that
the topics that I get to teach
are things that I find
really interesting.
With the artificial intelligence class
that was released this month on EdX,
I had a lot of fun preparing
that class and thinking
about what topics I wanted to cover.
Because they're all
topics that I personally
find very interesting and exciting
in computer science right now.
And so the opportunity to be
able to teach about those topics
and to talk them through in a lot
of detail I found very exciting.
And so I hope that does
come across in the classes.
And I'm glad that
you've been enjoying it.
DAVID MALAN: And I hope you'll
all forgive if we don't--
if we haven't quite gone
to everyone's questions.
We're going to have to
log off momentarily.
