DAVID MALAN: Hello, world.
Can everyone hear me OK?
Well, so nice to see so many people and
so many familiar faces and names, now.
These are CS50's office
hours, which, if unfamiliar,
are a tradition on campus for students
to be able to visit professors
in offices and ask them questions about
courses they're taking, about computer
science or life more generally.
These office hours via Zoom are meant
to be an online adaptation of that
for anyone around the world online.
And I'm so pleased to be joined, as
always, with CS50's own Brian Yu.
BRIAN YU: Hi, everyone.
So good to see everyone here
today, and looking forward
to hearing all of your questions.
DAVID MALAN: And we have a
very special guest, as well,
whom you might have seen on video
over the past several years, CS50's
own Tommy MacWilliam.
TOMMY MACWILLIAM: Hey,
excited to be here.
Great to meet everybody.
DAVID MALAN: So we'll
dive in in just a moment.
But for those less familiar, a quick
tour of what's available to you
in terms of Zoom's interface--
along the bottom of your screen,
you should see a Participants
button, or some such button
in your own spoken language.
Do go ahead and click that, and
you'll see a list of everyone
else who's in the room here right now.
Also along the bottom of
your screen is a Chat button.
Do go ahead and click
the Chat button, and you
should see a chat window appear
under the Participants window.
In fact, if everyone would like to
say hello to everyone else here,
and where in the world you
are from in the chat window,
you should start to see a whole
bunch of messages scroll by quickly.
So please feel free to do that.
And if you would like to share
links to related resources,
or answer questions of other people
in the chat during these office hours,
please do feel free.
However, if you'd like to ask
a question of office hours,
I'm afraid the chat window
scrolls by too quickly,
and too many hands tend to go up.
We're going to use a Google
Form, as always, instead.
Brian has kindly just shared
his screen with the URL
that you should visit if you would like
to ask a question during these office
hours about CS50, about computer science
or the real world more generally.
Go to cs50.ly/ask-- if, Brian, you
wouldn't mind perhaps pasting that
into the chat window, as well.
So do take the next couple of minutes
if you'd like to ask a question of me
or Brian or Tommy via that URL there.
In the meantime, why
don't we go ahead and get
to know Tommy, whom you might
recall from CS50's Mobile Tracks
on Android or iOS.
If you're currently taking CS50x 2020,
you might not have gotten that far yet.
But at the end of the semester,
you'll have an opportunity
to follow a different track of interest
to you, either on web programming,
on game development, or
on one of Tommy's tracks--
on Android and iOS.
But before we start to take
questions from the group, Tommy,
do you want to share a bit about how
you found your way to computer science?
BRIAN YU: Yeah, sure.
So I grew up in Boston, and
went to Harvard for undergrad.
And so I started learning computer
science when I was in high school.
I don't know if anybody
remembers-- there was this TV
show on in the early
2000s called "BattleBots,"
and it was about these little robots.
And there was this arena,
and the robots would fight.
And I thought that was
the coolest thing ever.
And in high school, a friend of mine
was starting this robotics team,
and I thought it was
going to be "BattleBots."
It wasn't.
It was just robots moving
pieces around a board.
But I thought that
was the coolest thing.
And so that's why I started
learning programming.
So I just taught myself, just read some
articles and books on C programming.
And then, when I entered
Harvard as a freshman,
I took CS50 in my first semester.
And that was actually my
first actual CS course.
And I'd never-- before, when I was
writing robots, they all run in C.
And so I'd call malloc all the time.
And I didn't know you're
supposed to call free.
And that was one of my
first memories of CS50--
oh, man, I've been doing
this wrong for four years.
So yeah-- and then, I was one of the
head TFs of CS50 for three years--
so around 2010 to 2013 or so.
And then, I was also involved
with the first version of edX--
so the first version
of CS50 we put on edX,
and helping them with
filming videos of me,
but also doing some
software development--
so things like our discussion
boards and submission software.
I helped write early versions of those.
DAVID MALAN: And you might recall
Tommy from most recent years, too.
If you followed along
with some of CS50s videos,
he has wonderfully laid out a prep
and practice for technical interviews.
In fact, if I may, let
me share the URL of that.
If you'd like to watch a
little something later,
and if, indeed, you
yourselves are ready for
or are thinking in
the future of applying
for technical jobs of some sort,
whether it's programming or the like,
do take a look at that
video there, which you might
find helpful preparation, as well.
So since last leading that
session, Tommy, you've gone off
and started your own company.
Would you like to share a
little bit with folks about what
problems you're trying to solve?
TOMMY MACWILLIAM: Yeah, definitely.
So we've been working
on this new company.
It's called Serenade.
We started working on this after
a really good friend of mine,
who was an engineer as well,
developed this injury in his wrists.
It's similar to something like carpal
tunnel, if you've heard of that before.
But it basically made typing at a
keyboard really painful for him.
And what Serenade is is this
platform where you can write code
by speaking rather than typing.
So you could say into your microphone
something like, "Create a function
called main," and "Add an
argument called arc C,"
and it'll transcribe that
and actually transform that
into syntactically valid code for you.
So that means that anyone with
some sort of injury or disability
that prevents them from
typing can actually
be able to write code full
time and be productive again.
So that's what working on, building
up the first version of that
and trying to bring it to
everybody who needs it.
DAVID MALAN: Brian has kindly shared
the URL of the website, serenade.ai,
if you would like to take a look.
And if you've just joined us, just
a quick reminder that if you'd like
to ask any questions of me or Brian or
Tommy during these office hours today,
do go to cs50.ly/ask.
We won't be relying on Zoom's blue
hands or the chat window, which
tend to fly by a little too quickly.
But in just a moment,
we'll start fielding
some of those questions, as well.
Lastly, Tommy, I always
describe you, I'll
admit, to folks as probably
the best programmer I know.
And in fact, for those less familiar,
when Tommy was still at Harvard
and we used to travel with the team
to conferences around the world,
I was always struck by just how Tommy,
you could program in any environment.
We would literally be waiting for an
airplane to take off at an airport,
and Tommy would be sitting on top
of his luggage fixing some bug
or implementing some feature.
And so it occurs to me that you
might be particularly well suited
to give people advice on how you
actually become a good programmer,
and what it means to
be a good programmer.
TOMMY MACWILLIAM: Man,
that's a fun question.
It's a shame we only have an hour.
I could spend a lot of time on it.
I think for me, I just really love it.
And I think something
that a lot of developers
have is they get into this mindset
of, OK, I need an eight-hour block,
and I need to be super focused.
It takes me 2 hours to get up to speed.
And I think that's the natural feeling.
But I think once you get
into this mindset of,
OK, I have 30 minutes
in between meetings.
What's a task I could do in 30 minutes?
And maybe that task is really small.
It could just be, I found a couple
of typos in the documentation page.
Let me just go fix them and push them.
But that's something
I think about a lot.
OK, given my day, I have
all these different slots.
Let me try to plan for
these small little tasks
that I can do in between
these larger things.
And once you do that, you
can get into this mode
where it doesn't take as much
time to get into that flow state.
You can just jump in and work on it.
I think it's just the
little time blocks thing--
if I do that, then I'm going
to feel like I'm productive.
I've accomplished that goal.
And so that's the mindset I have with
productivity, as I try to plan my day
and say, I have four hours of
time between meetings today.
How can I best spend that time?
I think it takes a lot of practice.
But once you get used to that,
you can just get into that mode.
DAVID MALAN: Yeah, I'll
admit it really does work.
I think I must have called or texted
Tommy months ago, maybe a year or two
ago now, just completely frustrated
with how long everything was taking.
And I, too, was the type of person who
needed to clear the entire day in order
to accomplish anything with code.
But I've actually gotten much
better now at quantizing projects
with just small, bite-sized tasks.
And if you're familiar
with GitHub, you can
create what are called issues, which
are like a to-do list for yourself.
And so I find myself, when I add issues
to GitHub, actually adding five or 10
of them.
But each of them is very small.
Because honestly, it's
just such a happy feeling
when you're able to check
something off and be like, done.
Even if it's just a tiny part of
the goal, you at least do feel--
or I certainly do--
like you're making progress.
So why don't we begin to take
some questions from the group?
And again, if you would like to ask
your own, don't raise your hand,
or don't try to ask in Chat.
Instead, go to cs50.ly/ask.
Sujeet, would you like to say
hello, and where you're from,
and ask your question of the group?
Sujeet?
STUDENT: Yes, thank you.
David, the question is,
what next step after CS50
would you recommend for
someone aspiring to make
a software or an app which works by
having access to a massive database?
For example, something like a building
information modeling-- the BIM,
as it's called in architecture--
or something like a food
delivery app where users
can choose from a variety of functions?
DAVID MALAN: Yeah, let me send
that question to Tommy, perhaps.
Tommy, prior to Serenade,
worked at Quora, which I daresay
is a company with a very large data
set, and can perhaps speak to this best.
TOMMY MACWILLIAM: Yeah,
I think what's cool today
is that there are so many free
APIs out there that you can
use to build your own larger data set.
So I think one thing
to do is just practice.
Look around at some of these
APIs, or these large data
sets that are released
by large companies,
and just try to do something.
Try building some simple
analytics, or build something
on top of that data set.
And then, that'll teach you these
skills that you'll learn to--
someday, when you have
your own large data sets,
you'll know what it's
like to manage that.
So definitely leverage some of those
free resources that are out there.
And then, try building
something yourself.
DAVID MALAN: Well, thank you,
Sujeet, for that question.
Can we go next to Thejas, if you'd like
to say hello and where you are from?
Thejas?
STUDENT: Yeah, hello.
I'm Thejas.
Yeah, I'm 13, and I'm taking this
course to learn programming in depth.
So a major problem with me is that I
take a long time to solve one problem.
Say a problem set takes me over a week.
So I wanted to ask you how to
approach a problem set differently
from a different angle
so I can solve it faster.
DAVID MALAN: Yeah, that's
a really good question.
Brian, do you want to offer
your advice on that one?
BRIAN YU: Yeah, absolutely.
And the first thing
I'd say is absolutely
don't feel bad if it's taking you
a week to solve the problem sets.
Even at the college,
we give students a week
to complete each of the
problem sets, and we know
that they are challenging problems.
So if you, in a week, are
able to solve a problem set,
that's something
definitely to be proud of.
But in terms of how to think about
approaching problems, this is in part,
I think, something that will come
with a little bit of practice.
But one thing you'll find in
computer science in particular
is that a lot of problem
solving really is
about identifying similar problems
that you have solved before,
or that other people have solved before.
And the more that you
program, the more that you're
working on solving
these sorts of problems,
the more you'll be able to recognize
when there is a type of problem
that someone else might
have already solved.
And the other thing I'd add, just
in terms of thinking more generally
about how to brainstorm and think about
different solutions to other problems,
is to talk to other people.
So CS50 has a community
of other students
you're welcome to talk
to about these problems.
And oftentimes, just by
sharing perspectives,
you might hear some other
perspective from someone else
that might be valuable to you.
And you might have some valuable
perspectives to offer to someone else,
too.
DAVID MALAN: And I can
definitely empathize, too.
I feel like every project I tackle
when it comes to programming
always takes that long.
And it never seems to be done.
There's always new features or
bugs to tackle the next day.
Well, thank you for
that question, Thejas.
Can we go next to Frederick,
if you'd like to say hello
and where in the world you are from?
Frederick?
STUDENT: Hello, my name is Frederick.
I'm from Germany.
And I'm thinking about
going into computer science
as teaching, as an educator, as well.
And I was wondering if you could share
some things which maybe were different
than you expected when
you started teaching,
and maybe some things that were
like you expected, as well.
DAVID MALAN: Yeah, I think
probably any of us can answer that.
One of the thoughts that
comes to mind is just how much
work goes on behind the scenes.
For instance, I feel
like to this day, I'm
constantly having to
explain to friends or family
that, yes, even though CS50 only meets
for two-hour lectures once a week,
that doesn't mean that I'm free the rest
of the day and the rest of the week.
Somehow, all of the time is filled
by preparing for those classes,
fielding questions from students
or other teaching fellows,
thinking about the next
week's material, thinking
about the next year's
version of the class.
And the same goes for the spring
semester and the summer term,
too, where we're constantly
reinventing this class, at least,
and working on new versions thereof.
And so I would say that
there's just really
a lot that goes on behind the scenes.
And it's a much bigger
managerial challenge,
I would say, than it is
only a teaching challenge.
Tommy, reflecting back on your TFing
days, do other thoughts come to mind?
TOMMY MACWILLIAM: Yeah,
that's definitely one.
I think I would go to a CS50 section
and think, oh, wow, that was great,
and underestimate the amount of
time it took to prep all of that.
I think another thing that I
thought was pretty interesting
was that when I explain
something, there's
something that naturally resonates
with me-- maybe some particular way
of explaining pointers or something.
But what resonates with me is
often very different with what
might resonate with somebody else.
And so I think that something
I learned to appreciate
was trying to explain the same
thing in a few different ways,
since those different things would
resonate with different people.
So I thought that was always
pretty interesting to see.
DAVID MALAN: And Brian,
how about you, as well,
having not only TFed, but also taught
and created these most recent courses?
BRIAN YU: Yeah, I think that in
the process of creating a course
and thinking about what
the curriculum should be,
and what types of projects
students should be working on,
I think one thing that has really
surprised me in CS50, at least,
has just been looking at
the end of the semester
and how much students
are able to achieve
in a fairly short amount of time.
And just realizing that even students
who don't come into the class
with prior programming
experience, which is true of most
of the students who take the class--
it really is amazing
what just a little bit
of practice and learning some
of the basic building blocks
can do in terms of helping students
to use those building blocks to build
something of their own, take
advantage of and learn tools that we
didn't teach as part of the class.
So that always impresses me
every year, especially when
looking at students' final projects
and seeing what they create.
DAVID MALAN: Yeah.
Thank you, Frederick, for that question.
Can we go next to Akash, if you'd like
to say hello and where in the world
you are from?
Akash?
STUDENT: Hey, I'm from
New Orleans, and I
wanted to ask about how I could improve
my coding skills from problem solving
and from a logical standpoint.
DAVID MALAN: Sure.
Brian, you're maybe the closest
to having gone through school.
Do you want to speak to that one?
BRIAN YU: Yeah, sure.
So when you're trying
to solve a problem,
and you're trying to think about
it logically, I think the first--
well, a couple of things I'll say.
The first thing I'd say
is that oftentimes, you
can start, if you're
trying to solve a problem,
just by thinking about what the most
obvious solution is, even if it's not
the most efficient, even if it might
not be the easiest to implement.
But you start with something,
some way to solve the problem.
And then, you might be able to think
about it a little more critically
and ask yourself, all right, if
I have a solution that might not
be the most efficient or the best
way to solve a problem, how could I
improve upon that solution
and make changes to it?
So one thing I suggest
to all of the students
that I work with is after you finish
writing a piece of code the first time,
you're not done yet.
Go back and look at
it, and see, is there
a way you can make that
code better and improve it?
And that process of
reflecting on your own code
will make you a better thinker, and
will make you a better programmer.
And the other thing that
I'd say is similar to what
David mentioned a little in
response to a previous question--
just to take bigger problems and try
and break them down into smaller pieces.
Often, a big problem can sometimes
seem unmanageable for how on earth
are you going to try to tackle it.
But if you can segment it
into smaller bits you're
going to tackle one piece at a
time, those individual pieces
are often things that are easier
to figure out a solution for,
and when taken together, can
end up solving a bigger problem.
DAVID MALAN: Well, best of
luck with your studies, Akash.
How about Huawei?
Can we go to you next, if you'd like
to say hello and where you're from?
STUDENT: My name is Huawei, and
I'm from San Jose, California.
DAVID MALAN: Nice to meet you.
STUDENT: And I'm 63.
And I'm not ready to retire.
In my career, I have
reengineered before.
DAVID MALAN: OK.
STUDENT: Yeah, so I have
actually two questions.
The first question is I'm
disabled, and oftentimes, I
have problems when I'm writing code.
Because I only have one hand, I make
a lot of mistakes, and I'm [INAUDIBLE]
not that fast.
And [INAUDIBLE] waiting until
the end to compile the code
and find out all these types of errors.
I was wondering, is there any
method or any new technology
that can enable a disabled person
to program, to write code better,
more efficiently, and more effectively?
DAVID MALAN: Yeah, I'm
really glad you asked
this today, because Tommy
is exactly the person
that I would ask this question of.
Tommy, do you want to speak to this?
TOMMY MACWILLIAM: Yes, so I'm actually
currently working on a project
to help people with
disabilities write code.
So a good friend of mine
was in a similar condition.
He injured both of his
wrists and basically couldn't
use a keyboard at all.
And so we're building this
new product called Serenade.
You can go to serenade.ai.
It's basically a platform
to let you write code
by speaking rather than typing.
And so there's no need
to use a keyboard at all.
You could just dictate code by saying
something like, create a function,
add an argument, add a return value.
And it'll write all the
syntactically correct code for you.
So yeah, that's something that we hope
will help folks with disabilities.
And there's some other
software out there, as well.
Dictation in general
is built into Mac OS.
So you can tell the Mac
to click different things.
And so there's lots of
cool software coming out
to help folks with
different disabilities
use a computer more effectively.
DAVID MALAN: Indeed.
Huawei, did you have a second
question, a follow-up, as well?
STUDENT: So I'm trying to work
on one of my projects, actually.
I tried to start a startup to do--
the idea was pretty much done
from a hardware standpoint.
And I tried to develop--
or hire somebody, or do it myself--
application software, so I
can actually market this.
And I have customers for this already.
So for a person like me--
actually, I'm a beginner
in doing this programming.
And my brand is to try
to apply [INAUDIBLE]
and use deep learning and
simple artificial intelligence
to finish this project.
And from a beginner's
standpoint, can somebody tell me
how long would it take for me to
learn and to complete this project?
DAVID MALAN: That's
always a good question.
And because of your interest in AI,
let me turn to our expert Brian,
here, if I could.
BRIAN YU: Yeah, I'm not sure I
can give an exact time frame.
It's probably going to vary based on
the project and what kinds of things
you're going to be doing.
But one thing that I would
say is that nowadays,
if you want to use artificial
intelligence and machine learning
inside of a project, it's
not necessarily a requirement
that you know all the details of how
exactly to implement a neural network,
for example, or how to actually
write any of these AI algorithms.
Because increasingly, there are
libraries, just off-the-shelf tools,
out there that will do a lot of the
mathematics of the machine learning
for you, so that even if you don't
know the mathematics yourself,
you can still use those tools to
be able to integrate something
like machine learning into a
project that you're working on.
So that might be something
worth taking a look at.
DAVID MALAN: Indeed.
And Huawei, I've gone ahead and
pasted my email address into the chat,
malan@harvard.edu.
With regard to the
software to facilitate
typing more readily, if
you'd like to email me,
I'm happy to connect you with
Tommy, if he doesn't mind,
so that you can take a
closer look at the software
if that might help you in particular.
TOMMY MACWILLIAM: Yeah, absolutely.
DAVID MALAN: Well, allow us to go next
to Stefan, if you'd like to say hello
and where you are.
I hope I'm pronouncing
your name right, Stefan.
STUDENT: I'm Stefan.
I'm from Romania.
So my question is, when
you finish the eight weeks
and you're choosing
your track, what would
be the criteria on which
to base your choice?
And do you think it's important
to choose one and focus on it,
or try all of them in order to explore
different aspects of programming?
DAVID MALAN: That's a good question.
There's certainly no downside
in trying all four of them,
ultimately, though perhaps not
before finishing just one of them.
For those unfamiliar, CS50x 2020 has,
indeed, an end-of-semester choice
of tracks, one of which
is web programming, which
tended to be the only track in
years past, another of which
is on game development,
led by CS50's own Colton
Ogden, who you might have met
at a previous office hours.
And then, two of them are led by Tommy,
in fact, on Android or iOS development.
Tommy, given that you
teach half of them,
do you want to speak to how someone
should think about choosing?
TOMMY MACWILLIAM: Yeah,
it's a good question.
And I agree with David.
Yeah, there's no harm in
doing all of them, eventually.
But it's good to focus on one at first.
I think it's just, what are you
most interested in building?
I've always enjoyed
building mobile apps.
And so I think if you're interested
in, how can I build an iOS app,
or use a lot of the cool stuff that
the Android and iOS ecosystem provides,
or put an app in the App Store?
If that's something you've always
wanted to do, that's a good track.
Or if you really enjoy
playing games, and you've
always want to make your own game,
that's a way to think about it.
I think none of the tracks--
I don't think any is harder than any
other, or have any prerequisites.
So just think about what do
you want to be able to build?
What's your goal?
What would you really
want to be able to create?
And then, pick the track
that most aligns with that.
DAVID MALAN: Yeah, absolutely.
Thank you, Stefan, for that question.
Can we go Isadora next, if you'd like
to say hello and where in the world
you are?
Isadora?
STUDENT: Hello, my name is
Isadora, and I'm from Brazil.
But I'm currently staying
in the US right now.
My question is that I've always
had some problems and, of course,
some challenges with computer science,
but I was always interested in coding.
And sometimes, I feel
a little intimidated,
especially seeing people
younger than me that are already
doing things like that, already learning
about all types of coding languages.
And in your opinion, do you think
there's a certain age and time
to actually start learning about it?
Or it doesn't matter as long
as you're interested in it,
and you actually want
to, let's say, improve
what you want to do in your career?
DAVID MALAN: Yeah that's
a really good question.
It's a really common question,
honestly, that we see online a lot
among students posting on CS50's
Facebook group or subreddit on Reddit.
And I think the short answer
is, no, it is never too late.
You are never too old.
And I would just try to put
that worry out of your mind.
In fact, just a few days ago, someone
posted in CS50's Facebook group
asking the question, is there
anyone over the age of, I think, 50,
it was at the time, or 55 they were.
And it was so heartwarming to
see just how many people started
coming out of the woodwork
and commenting on that thread
that they, too, were older
than that particular age.
And I know it can feel the opposite way,
perhaps because maybe younger people
are just spending a lot more
time on social media, perhaps,
and so you just see a lot
more of that activity.
But no, I mean, certainly
within CS50, in our courses,
we see students who
are very young of age,
and are getting a very early start,
to folks who are mid-career and just
want a change or learn something new,
or to folks who are in retirement
and are just trying to
pick up some new skill
or build some new tool or the like.
So truly, it is never too late.
And I would try as best you can to
just put that worry out of your mind.
There's going to be plenty of
other worries and challenges
when it just comes to the coding itself.
And I would focus on the technical
problems, not not anything
related to age, for what it's worth.
Well, thank you for
that question, Isadora.
Can we go next to [INAUDIBLE],,
if you'd like to say hello
and where you are from?
STUDENT: So my question is--
this is a question I've been
wanting to ask for a long time.
I've actually asked in the last--
what do you call it-- in
the last office hours.
But I think I asked my
question a little late,
or submitted my form a little late.
So I didn't get a chance.
So my question is very simple.
Where does CS50 leave you after
you finish a course in terms
of your computer knowledge?
Specifically, if I finish CS50
and I go to the iOS track,
would I be able to jump into,
what do you call it, making
full-fledged apps in the App Store?
DAVID MALAN: That's a good question.
Tommy, do you want to speak to
how you thought about the tracks,
and what is a realistic
outcome for students?
TOMMY MACWILLIAM: Yeah, absolutely.
So when I was thinking about
building out the iOS track,
I really wanted to empower
people to build an iOS app
as their final project.
And so the track will
cover things like how
to connect with an API or a website,
or different visual elements
for arranging the UI of your app.
So I think a description
of where it leaves
you is you'll be able to
build your first simple apps.
And it provides a good foundation
for you to go and learn more.
I think it could be impossible to cover
the entire iOS SDK in just one course.
But we really wanted to
build this foundation
where you can go off and learn
all these things yourself.
So that's where we wanted
to leave you-- the ability
to build something more complicated.
DAVID MALAN: Yeah, thank you, Tommy
and [INAUDIBLE],, for that one.
Zayde, can we come to you next, if
you'd like to say hello to everyone
and where you're from?
Zayde?
STUDENT: OK, hi.
I am from New Jersey, USA.
My question is a bit general, but I
want to ask about what level of math
do you recommend for someone going
into computer science, or for me
specifically, computer engineering?
I've noted that as you start
breaking away from that abstraction
that Python and Javascript, for example,
have, and you start getting deeper
into what a computer is more formally,
there is a certain level of math that
starts to rise up.
So I just want to know beforehand--
what level of math do you expect
a computer scientist or computer
engineer to have, formally, before
they start coding or understanding
computers in a better manner?
DAVID MALAN: Sure.
Brian, do you perhaps want
to field that, framing it
not just as what you should
know before starting CS,
but also what you should eventually
know mathematically in CS?
BRIAN YU: Yeah, so I
think just to begin,
you're probably good with just
some working knowledge of algebra.
Because when you're
assigning variables to values
and manipulating those values,
there's some algebra-like concepts
that are involved there.
And then after that, I think it
depends in large part as to where
in computer science you want to go.
It's a fairly diverse field where
there are a lot of different things
that are happening.
If you want to go into something
just like building a web application,
like what I cover in the web
development course that follows CS50,
there's really not a
whole lot of math there.
It's more just thinking logically and
thinking about the different pieces
we can put together.
But as you start to think about
things like as applications start
to grow bigger with more
users and more data,
and you start to think about trying to
make sure that your algorithms are more
efficient, then trying to do
some calculations as to what
is the efficiency of this
algorithm going to be,
what is the most efficient
way to solve this problem,
there might be some more math there.
And so depending on where in
computer science you end up,
you might find that things
like probability and statistics
can often be quite helpful for
certain areas within computer science.
If you're interested in diving much
deeper into artificial intelligence
and machine learning, then
some more advanced math topics,
like calculus and linear algebra, are
probably going to be more relevant.
But that's not going to
be true of all people that
are doing work in computer science.
It very much depends on
what your interests are.
DAVID MALAN: Thank you,
Zayde, for that question.
Can we come next to Malcolm,
if you'd like to say hello
and where you're from?
STUDENT: Hey, guys.
How are you guys doing?
I'm Malcolm from Atlanta, Georgia.
I want to say thank you, first
of all, to all of you guys
for putting so much
energy into this class.
It's awesome-- absolutely awesome.
And it helps a lot of people.
So thank you, first of all.
My question is, I've always
been a man of-- why use
10 words when you can use 100 instead?
So keeping things short and
simple, I use sweedo-code,
and I overcomplicate that, as well.
So what's your tip on keeping things
simple and basic instead of too
specific, and making too many steps in
your sweedo-code, whatever it's called?
DAVID MALAN: Yep, pseudocode.
Yeah, it's funny you should ask
this today, because literally just
yesterday, when Tommy and I were
talking about today's session,
I texted him a screenshot of the TV
show "The Office," if you're familiar.
And there's a scene in
one of the episodes where
Kevin, one of the characters,
jokingly says something like, "Why
use many word when few word do trick?"
So literally, I sent Tommy
this meme just yesterday.
And I think in the context of
pseudocode, I can offer my perspective.
And then, let me turn it to Tommy, too.
But I would generally think about
pseudocode on maybe two levels--
high level and lower level.
And below the lower level, I
would say, is your own code.
So if I'm sitting down and trying to
implement a solution to some problem,
or specifically implement some function
in C or Python or some other language,
my first implementation in
pseudocode should probably only
be 10 or 20 lines max.
And for instance, to make this more
real for me in a teaching context,
anytime I show pseudocode on the
projector screen in CS50's lectures,
I deliberately make sure
that it fits on the screen.
And so as such, that
pseudocode's first version
really does need to be
5, 10, maybe 20 lines.
And if you've taken CS50x already,
you might recall the pseudocode
for searching a phone book.
You might recall our discussions in
some years of making a peanut butter
and jelly sandwich.
So you might want to mentally
constrain yourself and say,
what could I fit on a PowerPoint slide,
or a Keynote, or a Google Slides slide?
But invariably, that's going to be
too high-level to be useful sometimes,
where when you sit down to actually
translate your pseudocode into actual C
code, or Python, or any other
language, you might realize, wow,
I really waved my hands
at some of these details.
And so you need to change one line
of pseudocode into maybe five more,
and really get into the weeds
of the implementation details.
So I would say that might be
phase 2 of your pseudocode.
And then, I would, somewhat arbitrarily
but from personal experience,
say after that, then you'd probably
want to start translating it
to actual code-- so high-level
pseudocode, low-level pseudocode,
and then actual code.
But Tommy, you, of course,
spend a lot of time
working on projects in the real world.
Would you propose different heuristics?
TOMMY MACWILLIAM: I think that's right.
I think before I sit
down and write any code,
I try to make sure I have an
understanding of the problem
I'm going to solve, and what
the solution actually is.
I think sometimes, when
I just start writing code
before I really know what the
solution is, that's when I can
get the meandering, really long code.
And so sometimes, when I catch
myself writing a function that
seems overly complicated
or overly long, I'll stop
and say, let me take
a step back, make sure
I actually understand what I'm doing.
I think a related thought I often have
is when sometimes you're writing code,
you end up writing a bunch
of different, let's say,
if statements to handle 10 different
cases when in reality, some of it
is actually generalized,
and it can be shared.
So whenever I write a piece of
code, I try to ask myself, OK,
is this sufficiently general?
Is there any way I can make
this even more general,
or share this code with
something else so that I'm not
duplicating functionality
or covering too many bases?
And even just forcing yourself
to go through that exercise--
every time I commit code, I do that.
I look at, here's all the
new code I just wrote.
Is this simple enough?
And even just forcing
yourself to go through that
can help you see, oh, actually, this
code is duplicated from over here.
Let me simplify that.
DAVID MALAN: Thank you,
Malcolm, for that question.
And just a reminder-- if
you've joined us more recently,
if you would like to ask a
question of me or Brian or Tommy,
please do go to cs50.ly/ask, which
will lead you to a Google Form.
If, Brian, you wouldn't mind pasting
the URL once more in the chat,
that's a lot easier
for us to keep an eye
on than all of the
hands and chat messages
that might be flying across the screen.
And if asking a question, too, per the
form, do make sure your camera is on
and your microphone is ready
so that when we call on you,
we can have you speak
your question yourself.
Venu, can we come to you next?
And if you'd like to say hello
and where you're from, Venu?
STUDENT: I'm Venu.
I'm from India.
I'm 15 years old.
And I just started CS50
about two months ago,
and now, I'm about to finish the course.
My question is, even
though I'm exceedingly
passionate about programming, I'm
willing to pursue a career in finance,
So how can a person
like me, who's not going
to pursue a career in computer science,
proceed with programming in the future?
DAVID MALAN: Yeah, really good question.
Brian, do you want to speak to that?
BRIAN YU: Yeah, absolutely.
And you're definitely not alone.
Even within CS50, most of
the students who take CS50
are not people that are
studying computer science
and intending to pursue a career
in computer science specifically.
They're taking it because they think
it's a valuable skill to know about.
I think that's definitely true.
Even if you're not pursuing
a career in computer science,
in most areas within the
world nowadays, computers
intersect with other fields
of our lives so much.
And there are likely going to
be ways in whatever you end up
doing to be able to apply computer
science to what you're working on,
to find ways of automating
things that take a lot of time,
or trying to figure out how
you can solve big problems that
would be unreasonable for
humans to solve in your field,
but that a computer might
be able to help with.
And then, even outside
of your work, plenty
of people that learn how to
program just find programming fun.
And even if it's not something
they pursue as a career,
you can always program and
create projects of your own,
just as a hobby, and
just to do something
that is interesting and
creative and enjoyable to you.
So definitely-- many ways
to keep programming and keep
doing interesting work,
even if you're not
pursuing computer science specifically.
DAVID MALAN: Thank you,
Venu, for that question.
Can we come next to Nicholas,
if you'd like to say hello
and where you're from?
STUDENT: Hello, this is Nicholas
from Texas in the United States.
My question was-- so first,
I'm a pharmacist by trade.
And I wanted to know, is there a
direct path or a preferred path
from being a self-professed novice to
someone who can code, with the goal
in mind being to be able to develop
applications and programs to help
make clinical decisions?
DAVID MALAN: Yeah, that sounds
like a really worthy goal.
Tommy, do you want to speak to this
and the applications in the real world?
TOMMY MACWILLIAM: Yeah, absolutely.
So I think that CS50 is a
great foundation for starting
to build those applications.
And so after taking CS50, I would
start thinking about what types of apps
you want to build.
It sounds like a web
application could be
appropriate for what you're describing,
and maybe even some machine learning
in there, too.
So yeah, I don't think
there's just one path.
I think everyone's
path can be different.
And so I would just go through,
what interests you the most?
This goal sounds awesome,
of building this app.
And so think about what
functionalities would
I need this app to have, and then go
off and try to learn those technologies.
But something I believe is the best way
to learn is just by building something.
And after CS50, you should have
the tools to just start building.
And eventually, you might say,
oh, I need this other skill,
because I've decided that
I need some ML in this app.
So I can go off and take an ML course.
But really, just learn by
doing, and build something,
and see where it takes you.
DAVID MALAN: Thank you, Nicholas,
for the question, as well.
Can we come next to [INAUDIBLE],,
if you'd like to say hello, too,
and where you are from?
[INAUDIBLE]?
STUDENT: Hi, I'm
[INAUDIBLE] from Indonesia.
And I've been doing CS for two
months in a week [INAUDIBLE] now.
And one thing that
[INAUDIBLE],, actually,
is when you are debugging
something, are you
supposed to understand each
of the bugs that you change?
Or should we just--
I changed this, [INAUDIBLE] I changed
[INAUDIBLE],, and hopefully, it works.
[INAUDIBLE] are we supposed to
understand the changes that we make?
Or should we just change
things and hope it will work?
Because I did that in the [INAUDIBLE],,
changing the numbers and things.
DAVID MALAN: Sure.
So your microphone is
a little staticky, so
let me just read the
question you typed in, too,
just to make sure everyone
heard you correctly.
So when it comes to
debugging a program, are you
supposed to understand each
change that you make in order
to make that program work,
or simply just change things
up and see whether it works or not?
So it's a really good question.
And it's so common among students who
are learning how to program first.
And I would say that
yes, absolutely, you
should be understanding
everything you are doing.
And I can totally appreciate that
when you're tired, or stressed,
or you have a homework
assignment due, frankly,
you probably just care mostly
about getting it to work,
submitting it, and moving on.
But if you really want to
become good at programming,
there should never be anything about
your code that you don't understand.
Now, it might take a while-- maybe
several months, several years--
to get to that place of comfort.
But that should always be your goal.
There really is no magic
when it comes to programming.
Assuming that your compiler is working
and your programming environment is
working, if there's a mistake or
something that's weird going on,
odds are it's your fault, not
the tools or anything else.
And I think the best
way to learn, really,
is to go down the
metaphorical rabbit hole, such
that if you don't understand
something, try to figure it out.
Use a debugger.
Walk through your code, step by step.
Ask a friend, assuming you're allowed
to in the context of a homework
assignment, and see if they
see something that you don't.
And in fact, the only thing that ever
disappoints me about a new programmer
is when they just give up, and they
say, oh, I don't know why it fixed it,
but it fixed it.
That's not learning.
That's just submitting.
And so I would encourage you--
and it will take practice-- to
always strive to understand things,
even if you don't see it at first.
Come back to the problem,
days or weeks later.
And there's nothing more gratifying
than realizing that you do understand
everything going on in a program.
And over time, there will be fewer and
fewer things that you don't understand.
Well, thank you for that
question, [INAUDIBLE]..
Can we go next to [INAUDIBLE]?
[INAUDIBLE]---- I'm sorry if
I'm mispronouncing your name--
if you'd like to say it as
well, and where you're from?
STUDENT: Hi, I'm [INAUDIBLE] from India.
DAVID MALAN: Nice to meet.
STUDENT: So my question is, there are
services, like [INAUDIBLE],, that's
created a [INAUDIBLE] by drag and drop.
But there's no need for them
to write any code manually.
So how do you think this is going
to affect development in the future?
DAVID MALAN: Yeah, this is
actually a new buzzword-- no-code
or low-code tools, like Wix, and
Squarespace, and other tools,
where you can program
almost like Scratch
by just dragging and dropping
things that actually make web
applications and mobile applications.
Tommy, do you want to
speak to this trend?
TOMMY MACWILLIAM: Yeah, it's definitely
this really interesting trend.
And I think ultimately,
the goal of this movement
is to enable anybody to write code.
And so I think where these tools are,
they're a really great starting point.
If you want to just
prototype an app, there
are tools like Bubble, and
Webflow, and a few other ones,
where you can not only
build a static site,
but build something like
a login functionality,
or some way to visualize data.
And so I see them as
this great entry point.
Anyone can build a prototype and
get something up and running.
I think ultimately, once you want to do
something more complex and at a larger
scale, you'll probably need to do
some of the programming yourself.
But I think what this will do is
inspire a large group of people
who weren't able to build anything
before to build something and get
their foot into the door to programming.
And then, they can learn more of
the formal programming from there
and build something more complicated.
DAVID MALAN: And for
what it's worth, I myself
was just experimenting
with some of those tools
recently, not because I
didn't know how to code,
but because I figured this tool
could actually just speed up
the development process for me.
I could drag and drop some things,
generate, in my case, some sample HTML
code, but then copy/paste the
HTML into my own code files
and make some changes.
And that's where I think
things are especially powerful.
If you only know how to
drag and drop these puzzle
pieces on Wix and
Squarespace and the like,
you can't really fine-tune
things the way you want.
You can't quite get it to do
or look just the way you want.
So still understanding HTML, CSS,
and any number of other programming
languages I think just gives
you more power, ultimately.
And so trying to understand
things early on from the bottom up
can then just make those tools
even more useful for you.
Well, thank you for that question.
Can we go next to Samuel?
If you'd like to--
or, I'm sorry, [INAUDIBLE]?
If you'd like to say hello,
[INAUDIBLE],, and where you're from?
STUDENT: Yeah, amazing.
Thank you very much.
I am Samuel [INAUDIBLE] from Ghana, but
I'm currently staying and volunteering
in Kenya.
My question is, does studying
CS50 or computer science
make you a computer hardware
or software [INAUDIBLE]??
DAVID MALAN: Yeah, really good question.
Brian, do you want to answer this?
BRIAN YU: Sure, yeah.
So taking CS50 and
studying computer science,
at least, will probably focus a
little bit more on the software
than on the hardware, at least
in CS50 as an introductory class.
But I'd say that it's a good
starting point for regardless
of whether your interests
lie in software or hardware,
because the two are interconnected.
You need to make sure that the
software is integrating well
with the hardware and the
computer that you're actually
running the software on.
And so learning about
the types of things
that you'll learn in a class like
CS50, an introduction to thinking
about programming but also
thinking about what it
is that your programs are
doing in an underlying sense,
inside of the computer, thinking
about memory, thinking about data,
and how that data is represented,
and how that data is stored,
will start you down that path
of thinking a little bit more
about what's going on inside
of a computer's hardware.
But if you're interested
in computer hardware,
there are other classes that are really
focused on computer hardware itself
that'll give you a much better, more
in-depth exposure to those areas, too.
DAVID MALAN: OK, well, thank
you, Samuel, for that question.
Can we come next to Sayed, if you'd
like to say hello and where you're from?
And I hope I'm pronouncing
your name right.
STUDENT: Hi, my name is Ruiz, actually.
DAVID MALAN: Ruiz, my apologies.
STUDENT: My question, basically, is
that I am basically trying [AUDIO OUT]..
DAVID MALAN: Oh, I think
we lost your audio.
Ruiz, I'm not sure if you can hear me.
I don't think you can.
But I'm going to go ahead
and read your question aloud.
Ruiz is a lawyer and more
interested in the computers field.
How does he bridge his
career, or any suggestions
on how he can balance
both of the courses?
He's taking CS50L, or CS50 for
lawyers-- if, Brian, you wouldn't
mind pasting that URL into the chat.
And Ruiz, I'm not sure if you
heard me, but we had trouble
hearing you and your microphone.
But allow me to speak to this.
I teach this course, CS50
for lawyers, with a colleague
of mine, CS50's own Doug Lloyd.
And I would say among our
goals with that kind of class
is not to turn students into
programmers or engineers.
Indeed, it's not meant to be a
bottom-up class, so to speak,
but really a top-down one, so that
lawyers and others in the real world
have a better understanding
of how technology works,
and how they can make informed decisions
that somehow intersect with technology.
So in the world of law, for
instance, intellectual property
is a very common field
of pursuit among lawyers,
where we have to decide
who owns something
and what it means to own
that code or that algorithm.
It's very often the case that
lawyers are involved in government,
and making decisions that impact
citizens and laws for a community.
And so understanding what
net neutrality, for instance,
means, and how the
internet itself works,
so that you can make informed decisions
when it comes to governing, I think
is another one of our
aspirations-- granted,
with just one small class of our own.
But there's just so
many people in the US,
and I'm sure abroad, as well, who are
in positions of power in government
and are making very
uninformed decisions.
They just don't even understand the
technology that they're legislating.
And you might have seen
this a year or two ago
when Mark Zuckerberg, for
instance, on Facebook's behalf
testified in front of the US
Congress, and so many people
on the other side of the table didn't
really even understand the platform.
And so I think that's symptomatic
of having a population that
doesn't necessarily understand the
technology that you and I and all of us
use every day.
So that, I think, is
really the opportunity
from a class like CS50 for lawyers
to make more informed decisions that
do the right thing for other people.
Well, thank you, Ruiz,
for that question.
Can we go to Pratek next,
if you'd like to say hello?
Pratek, if you'd like to
say where you're from, too?
STUDENT: Hello, I want to ask that--
I want to do Python.
So what would be the best way
to learn Python as a beginner?
DAVID MALAN: The best
way to learn Python--
Brian, what suggestions
do you have on this?
BRIAN YU: Yeah, so if you--
actually, Pratek, if I could ask
a follow-up question to you--
is Python your first
programming language?
Or have you already had
some prior programming
experience in another language already?
STUDENT: I have done Java, C++, firstly.
Then, I'm moving to Python.
BRIAN YU: OK, so if you've already had
a little bit of programming experience
in some other language,
like Java or C++,
one thing that you'll probably find is
that the syntax of Python is not going
to be all that difficult to pick
up once you already have the basics
of the syntax of some other language.
But all these languages all have
a lot of the same constructs.
They all have loops.
They all have conditions.
They all have functions.
They all have variables
that have different types.
So a lot of the ideas that you already
know will translate quite well.
There will just be, at the beginning,
at least, some syntactic differences
that you'll have to get used to
about the different language.
And then, you can dive into
some of the more nuances there.
I think a good place
to start, for example,
might be CS50's own Python lecture,
which will show you side by side some C
code, which is like C++ or Java, and
then what the Python equivalent of that
might be.
But then, what I find
personally works well
for me is looking at
Python's own website that
has sample code that shows you how to
use some of the built-in functions,
and how all that works.
So taking a look at other
people's code in Python,
and translating that into what I
already know about other languages,
I think can be a helpful
way to get started.
And then after that, I'd suggest
trying to write something in Python.
The best way to learn a language
is to get practice working with it.
So if you pick a project
that's interesting to you,
and see if you can
create that in Python,
that will definitely
help you learn, too.
DAVID MALAN: I've pasted a couple
of links, based on Brian's response,
too, Pratek, that you might
find helpful in the chat,
both to our website,
our lecture on Python,
as well as to Python's own tutorial.
Well, thank you for that question.
Can we come next to Sam, if you'd
like to say hi and where you're from?
STUDENT: Hi, I'm Sam.
I'm from England, and I'm
studying at Edinburgh.
Now, firstly, I want to say a
huge thank you for all this,
for making this course.
I think it's great.
Now, you mentioned a few questions
ago about the proverbial rabbit hole,
and how sometimes you wish
people would go down it.
Now, I love the idea of being
a self-sufficient programmer.
I find this rabbit hole a
little bit doubty, sometimes.
Sometimes, you need the
wave-of-the-hand explanation.
So I was wondering which online
resources, alongside CS50,
would be useful when
looking for help, basically?
DAVID MALAN: Yeah, really good question.
Tommy, what resources
do you recommend people
turn to for help with
learning and solving problems?
TOMMY MACWILLIAM: Yeah, I think--
so going to a language's documentation
or a library's documentation
is a really good starting point.
In particular, as you're
going down that rabbit hole,
you can see exactly what are
all the different functions that
exist, what are the parameters those
functions expect, how do you use them.
But I think my favorite
way to learn a new library
or to go down that rabbit hole is
to look at other example usages.
So whenever I'm learning-- let's
say I found some new iOS library,
and I want to learn how to
use it inside of my code base.
The first thing I'll look
at is just some examples.
So how are other people
using this library?
What functions are they calling?
And then ask myself, why
might they be calling them?
And then, from that example,
maybe go into the documentation
and say, OK, here's
what this function does.
So this is why they might be using it.
So I like to go in that order.
But everybody is different.
Some people like going
the other way, and they
want to read the entire
documentation page first
before they look at any examples.
But a lot of languages
and libraries nowadays
have some really great
resources that you
can read through and guide your search.
DAVID MALAN: Yeah, and
you're probably already
familiar with sites like Stack Overflow,
which I've pasted into the chat.
And Google will very often
lead you to Stack Overflow.
But to Tommy's point,
just yesterday, I was
trying to understand how to do something
in Python with a certain library
that Python offers.
And honestly, Python's
documentation is not
very straightforward half of the time.
It doesn't tend to have
very user-friendly examples.
So literally, I typed in
the name of the function
I was interested in, and then space,
and then "example" or "sample."
So literally, just find me
someone else on the internet
who can explain to me what the
documentation was trying to say.
So I think it goes both
ways, in that sense, too.
But at the end of the day, once you
do get more comfortable, hands-down,
seeking out the canonical
definitions of functions--
that is to say, the
references, the online sources
from the language creators
or the frameworks creators--
is a great way to get comfortable.
And often, too, it's admittedly not
written to be very user-friendly.
So you'll get to that point of comfort.
But that's where you can get
the most definitive answers.
So it's something to work up to.
Well, thank you, Sam, for that question.
Can we come next to, let's say, Amarta?
Amarta, if you'd like to say
hello and where you're from?
STUDENT: Hello, I am from Pakistan.
My question is, I'm very new to
CS50, and I want to ask how to start
or where to start.
I'm already confused, too, but
I'm not with knowledge of it.
So please guide me how to go through
the course, and from where to start.
DAVID MALAN: OK, sure.
So Brian, do you want to give
a quick expert's advice on how
to go through CS50x successfully?
BRIAN YU: Yeah, certainly.
So in terms of the website
for where to start,
you can go to cs50.edx.org, which
I've just pasted into the chat,
as a place to begin.
And I think if you're
looking for a place to start,
where to get the most
out of the course, you
should generally
start-- so the course is
divided into a number
of different weeks,
where each week focuses
on a different topic.
And my advice usually is start
the week by watching the lecture,
and following along, and trying
to see if you understand it.
And if there's something in the
lecture that went by too quickly,
or you didn't quite
understand it, you can always
go back to that point in the lecture.
You can look at the notes or the source
code associated with that lecture
to get more information.
And in addition to the lecture,
there are also some shorter videos
produced by Doug Lloyd,
another member of our team,
who talks about a lot
of the lecture topics
in even more depth-- so yet another
video resource that you can turn to,
as well.
So I would definitely take advantage
of those curricular resources.
And then, the other thing
that I would suggest,
in terms of just getting the most out
of the course and getting started,
is to take your time.
It's not a race to see how
quickly you can finish the class.
You'll really get the
most out of the class
if you're taking the time to
understand all of the code
you're writing, if
you're taking the time
to try to improve your code
after you've written it,
so that you really leave each
of the weeks of the course
really feeling like you've
understood those concepts,
and you feel confident in your
ability to work with those ideas
and write programs based on
what it is that you've learned.
So one week at a time, taking
advantage of those resources that
are made available to you--
and there are many CS50 communities
out there of other students
who are taking the course,
as well, that you're always
welcome to talk to and interact
with to get help and support
as you're going through it.
DAVID MALAN: Thank you,
Amarta, for that question.
I think we have time for just
one or so more questions.
And let me let folks know that
if you've attended these before,
you'll know that at the very end,
we try to take a group photo--
and we'll do that in
just a minute or two--
where we invite everyone to turn
on their cameras and wave hello,
if you would like to take part.
But first, let's go, lastly, to
Emmanuel, if you'd like to say hello
and where you're from.
STUDENT: Hi, my name is [INAUDIBLE].
I'm from Brazil, and I'm 14 years old.
My ask is, how can I
improve my programming logic
and [INAUDIBLE] to get [INAUDIBLE]?
DAVID MALAN: How can you
improve your programming logic
and get better at that?
STUDENT: Yeah.
DAVID MALAN: Tommy, would you
like to field our final question
and forward thinking advice?
TOMMY MACWILLIAM: Yeah, sure.
So I think the best way
is really just practice.
And so one thing that I talk about
in that interviewing seminar is
something like interviewing is a skill.
And there's so many interviewing
questions you can just read.
And whether you're interviewing
or not, those types of questions
are really great practice,
because they're often
designed to be solved in
20 to 30 minutes or so,
and they're very well specified.
And so there are sites like LeetCode,
and Topcoder, and Project Euler,
that just have a bunch of problems
that you can just go in and practice.
And a lot of those problems
are really logic-based.
It's less about, how
do I build a website
or integrate a database
library, and more about, here's
some interesting problem you
can solve, and let's like
apply your critical thinking
and logic to solve it.
So those are pretty fun to do, if you're
interested in practicing on those.
So I think those types
of problems there--
spend 30 minutes on one,
maybe try one every day,
and you'll see you're just
getting better and better at it.
But yeah, that's the best answer--
just the more practice, the
better you're going to get.
DAVID MALAN: Thank you, Emmanuel,
for that question, and Tommy as well.
So if you would like, please
do turn on your camera
now if you would like to
appear in the group photo.
And this always takes an
awkward number of seconds,
because we need enough time to
click from left to right through all
of the screens of people who
are in attendance here via Zoom.
But if you'd like to wave or smile or
generally look your best for just a few
more seconds, allow me to see if Brian
would like to offer some parting words.
BRIAN YU: I just wanted to say it was
really good to hear from all of you
today.
We hope to do this again soon.
I want to say thank you to
Tommy for taking the time
to join us today and provide
your insights on software
engineering in the real world.
It's been great to hear
about your answers, as well.
So thanks so much to everyone
for all of your great questions.
I'm sorry that we didn't have a chance
to make it to everyone's questions.
There were a lot more questions than
we had time for in just this hour.
But we'll try to do this
again soon so that hopefully,
if you didn't get a chance to
have your question asked today,
you'll be able to ask in the future.
DAVID MALAN: And Tommy, as
we all finish waving here,
some final thoughts for the group?
TOMMY MACWILLIAM: Oh, it
was great meeting everybody,
and best of luck with CS50.
I'm really excited to see so many
people going through the course,
and I'm really excited to see
what you can build afterwards.
DAVID MALAN: Well, thank
you to our special guest,
and to everyone for tuning in.
This was CS50.
