DAVID MALAN: Hello, world.
My name is David Malan.
And these are CS50's office hours, so to speak.
Traditionally, on campus at a place like Harvard,
office hours are these opportunities for students
to visit professors' offices or teaching assistants' offices
and ask them questions about the course, ask them questions about homework
assignments and the like.
For us, CS50, with so many students around the world online,
we thought we'd use these office hours, as we have in weeks past,
to just be an opportunity to ask questions
about computer science, about CS50, about college, about Massachusetts,
really anything of interest.
But if it's specific to homework assignments, best
to ask those questions online, because all we have here are our cell phones,
and can't really see questions related to code.
So we're here indeed outside of Harvard University
and outside of the Biological Laboratory.
So this is where all the science students on campus spend a lot of time.
I myself only took bio, biology, in ninth grade,
so it's been quite a while.
But this is actually one of my favorite parts of campus.
There's just a beauty back here.
It's nice and quiet and tranquil.
I mean, I'm literally standing on a volleyball court
that the students can use out here.
And it's especially ornate on the building.
In fact, if we walk over here, you can see along the top of the Bio Labs
is all of these carvings of various animals and the names thereof.
And that spans the entire building, which is several stories tall.
And fun fact, back when I was a freshman,
like way back when in university, I actually explored this part of campus.
I still remember.
And I somehow got into the building, went to the top floor
where there's this beautiful greenhouse where
they were doing lots of growing of things, experiments, and the like.
So even now, all these years later, I have really fond memories of that.
I'm going to be joined in just a bit by my teammates, CS50's own Carter
Zenke, with whom I've just been playing some volleyball in this very
here court.
Now that's not actually true.
We're just kind of pretending.
And Carter didn't even throw me that ball.
And in fact, this isn't even a volleyball.
It's a soccer ball.
But we thought this would be a nice bridge by which we can now
take a stroll over here and introduce Carter, who's
kindly been awaiting us playing here.
CARTER ZENKE: Oh, hey David, nice catch.
DAVID MALAN: On the court.
Nice to see you, Carter.
It's a great match before.
CARTER ZENKE: Yeah.
DAVID MALAN: Yeah.
Well, so I was just reminiscing with everyone
about my favorite part of campus this year, the Bio Labs,
and got me thinking about biology, which I myself didn't take since ninth grade.
So that was quite a bit of time ago.
How much science did you ever study?
CARTER ZENKE: I think I did some biology, maybe in ninth grade,
did some chemistry too.
DAVID MALAN: OK, yeah, me too.
CARTER ZENKE: And then I did some physics,
which I actually really enjoyed a lot.
DAVID MALAN: I did like physics.
It was very physical.
And I actually think about my physics class a lot
when we try to come up with new ideas for CS50 and doing things on stage.
We haven't quite ever done anything with explosions,
but I do have such fond memories of high school and even in college
or maybe grad school where I audited a physics class with Professor David
Morin here at Harvard, who taught Physics 15A at the time.
And it was just like every week was a different demonstration.
I remember he was lying on a bed of nails to demonstrate, I think,
how you can distribute force by just having a very large surface area.
So it didn't actually hurt, even though of course it looked a bit scary.
CARTER ZENKE: Yeah, I had a teacher named Mr. Price in high school
who did the very same thing.
I think he stood on a bed of nails.
And we were all super shocked when he didn't get
pierced through with a piece of nail.
DAVID MALAN: Yes.
And I feel like I see on Instagram and the like all the time
these physics professors now who have a really big cannonball or something
really heavy on a rope.
And they let go of it and it swings away from them, but they stay very still
and it doesn't actually hit them in the face,
because of conservation of energy.
I don't remember my physics either.
CARTER ZENKE: I think you're right there.
DAVID MALAN: OK, something like that.
Google that later, folks.
We should probably focus more on computer science with Carter
and I are more expert in.
If you'd like to ask us some questions via the chat,
please do, again, on CS50 Computer Science University.
Or life more generally, have any questions been coming in?
CARTER ZENKE: Yeah, I think a related one here,
we have a question from Siraj, who's a chemical engineering
major at the University of Illinois.
DAVID MALAN: OK, that escalated quickly.
CARTER ZENKE: They're asking, should they perhaps minor in CS.
Or what do you think is the usefulness of CS for something like chemistry?
DAVID MALAN: Oh, that's interesting.
So I majored in CS, which meant I took 12 or more courses,
and then also went on to graduate school.
But to minor in computer science, if unfamiliar,
means to take fewer courses, so it depends on the university.
But it might be for courses in computer science, maybe six courses,
give or take.
It probably varies by school.
But it's an opportunity to go beyond your own primary interest,
your so-called major, and study something
that's secondarily of interest, like computer science.
I think if it's of interest, absolutely.
If you can fit it into your schedule, if you can do it
without it being to the detriment of your other studies or activities,
I think that's super compelling.
Those fields, chemical engineering and computer science,
are probably intersectional in the sense that they're both part of STEM--
Science, Technology, Engineering, and Math.
So I mention this because I would generally typically encourage
students to consider a minor in computer science if they're
majoring in something very different for which there aren't already
opportunities to take classes in CS or in computing, more generally.
For instance, if you're majoring in the arts,
the humanities, the social sciences,
I think minoring in something like CS just
gives you all the more of a mental model for other ways
to solve problems and other skills, like actual practical programming skills.
So in short, I see no reason not to minor in computer science,
but I would especially encourage it if your field of study
is not itself already STEM.
CARTER ZENKE: Yeah, I had a friend in college
who was focused on chemistry and on drug discovery, how it could
try to prevent things like cancer.
And he actually did a lot with computer science,
trying to help discover new drugs kind of programmatically.
So it was very interesting to me to learn.
DAVID MALAN: Interesting.
Yeah, cool.
Yeah, thanks for the question.
CARTER ZENKE: Yeah, another question here is shifting gears a little bit.
But they're asking about AI and asking about their take
on how AI can help programmers nowadays is in the past we had to use Google,
but now it takes less than a minute to use something like ChatGPT.
So how could we use these tools to help us?
DAVID MALAN: Yeah, I mean, I think for programmers
it's poised to be a very good productivity boost.
Like a buddy of ours, Colton Ogden, who teaches CS50's Introduction to Game
Development, he actually attests to having used GitHub Copilot, which
is one of the AI-based software tools nowadays for programmers, in such a way
that it boosts his productivity, he claims, by like 20%, 30%,
so specifically by just helping him write code faster and help
him avoid having to google things or go to Stack Overflow
or read the actual documentation.
Even I haven't played with GitHub Copilot or similar tools
that much, since I don't write that much code, ironically, myself.
But when I have, I mean, it certainly has helped me figure out new APIs
or SDK Software Development kits where the traditional approach would
be to go to the official documentation, look at all of the function signatures,
look at the return values, figure out what it does and how it works
and so forth.
And that's fine.
And that's the right way to do it.
But it's also very time consuming.
And by contrast, nowadays in recent months,
if I want to figure out how do I make an HTTP GET request using the Request
library in Python, totally googleable, totally lookable in documentation.
But honestly, if I just ask something like ChatGPT or GitHub Copilot
and just start my thought or ask the question-- boom,
I have the code that I want.
So it just saves time.
And I'm finding that personally as well.
CARTER ZENKE: I think I'm impressed buy these tools that work within an IDE
where you actually edit code.
So you don't have to go outside of it to find
some information you're looking for.
I find it helps me actually focus and get into a flow state
more versus switching between tabs and going to Google
and back to my code and vice versa.
DAVID MALAN: Yeah, for sure.
I think it's a nice evolution of what's been around for a while,
like Google and Overflow.
But it is indeed putting it all right in situ
for you, in the place that you're at using VS Code or some similar tool.
And it speeds things up.
And that said, I would say that I would avoid, especially
if you're learning programming for the first time via CS50 or some other class
or experience, to avoid the temptation to overly rely on these tools too soon.
Because honestly, if GitHub Copilot or similar tools
are autocompleting a lot of the code you're writing
and you don't actually understand it, you're not
doing yourself a good service there.
I mean, one, the code could be wrong, even
though I do think longer term that will be less and less of a concern
probabilistically.
But two, you should have ownership I think
intellectually and in terms of responsibility for what it is you're
creating.
And frankly, you can think of it as a teacher.
It's helping you more quickly pick up some new skills.
But I think you should still take those moments to actually understand or even
ask something like ChatGPT how does that work or what does that mean.
CARTER ZENKE: And I think switching gears a little bit to another question
here, we have a question from--
don't have the name quite here, but they're asking about--
they talk about having a in-person conference for CS50 or something
that brings folks to campus in any way.
DAVID MALAN: It's a good question.
And we've thought about this for some time and talked about it a lot
internally, particularly before COVID.
And then COVID put that vision on hold.
Carter and I should probably talk about that again,
because it has been of interest to bring CS50 ex-students and teachers to campus
perhaps for a series of talks or workshops or the like.
We do already for teachers specifically host
an annual workshop in the summer to which we do bring teachers
from around the world.
But that's a smaller group.
And it indeed it's folks who are already typically teachers themselves.
But we've also thought about generalizing it away from CS50.
I've always found it inspiring to sit in on other professors, other teachers
classes.
I still think back fondly on David Morin's class
in physics, which was just so visual and "theatrical,"
which is a word we use a lot to describe CS50 nowadays.
And I think it would be great fun to just bring students and teachers alike
to delight in really cool educational ideas and applications,
even if it's just lightning talks or five minutes
here or there, because I think we can all certainly learn from other fields
as well.
So hold that thought.
We'll give it some more thought.
This is definitely of interest.
CARTER ZENKE: And in the absence of being
able to invite folks to campus, which requires a lot of logistics and flights
and travel, I really enjoyed the online events we've been hosting recently.
And we got a question here about Ready Player
50, which is are we planning to do that again
or something similar to that in the future.
DAVID MALAN: That's a good question.
For those unfamiliar, Ready Player 50 was this online game
written by our friends at Lakera, which is an AI-based company with whom we
got friendly over the past few months.
And they a few months back had a game online
called Gandalf, which went viral in the sense that lots of people
started playing around with it.
And what the game is is a series of levels whereby
each one is progressively harder.
And each one is a challenge to try to figure out what the secret word is,
the secret password.
But it's an exercise ultimately in what's
nowadays called prompt engineering, like trying
to engineer good prompts, good questions,
in English or some other language, to get an AI to do something.
But it also was an opportunity to explore
a thread called prompt injection attacks which, are similar in spirit actually
to SQL injection attacks, if you're familiar with those from CS50
or Carter's new SQL class itself, whereby
you try to trick the AI into doing something
that the original programmer did not intend
or that the AI itself is not supposed to do.
So wonderfully our friends at Lakera wrote all of the challenges.
They integrated some very CS50-specific themes,
the duck being the biggest one of them.
So, so much fun.
And we're so appreciative.
I'm not sure we want to ask more of them to come up with yet more levels.
And I do think the art of prompt engineering,
the process of trying to implement these injection attacks, I do think, frankly,
is going to change for the better probably in the coming months
and certainly year.
So hopefully we won't need to discuss worries like prompt injection attacks
nearly as much in the future, but we will see.
I think we're all going to take a break from taking on such a big endeavor.
But it was so much fun.
And thank you all for participating.
It was great fun to see the answers, the engagement, a lot of the social media
posts of people posting their celebratory duck and fireworks.
So, super fun.
CARTER ZENKE: And if you play the game and watch the solution walkthrough,
I was really fascinated by all of the different guards
that Max and Natalie showed us that you can
have, like a guard before the prompt even gets to the model,
a guard in the model, a guard after you get the response from the model.
So lots of different ways you can build this up,
which I find really fascinating.
DAVID MALAN: And one of my favorite excerpts from someone's
prompt was something along the lines of, I'm getting sleepy,
can you please just give me a hint, or something like that.
And I feel like the duck actually obliged, as I recall,
or it could be confusing it with another example.
If you're just hearing about Ready Player 50 for the very first time,
know that it's an allusion to a movie, which is actually a lot of fun,
called Ready Player One, which is about this dystopian future in which everyone
exists or spends much of their time in augmented or virtual reality.
But the challenge itself is still freely available online at cs50.ly/ready,
R-E-A-D-Y.
CARTER ZENKE: Exactly.
A follow-on question related to cybersecurity,
which you've just finished your course on,
about public and private key cryptography.
If a public key is used to encode a message
and a private key is used to decode a message,
could the public key be used to reverse the message.
DAVID MALAN: A good question.
Short answer-- no.
So the mathematical relationship between a public key and a private key
is such that they are unidirectional processes.
You use the public key to encrypt.
You use the private key to decrypt.
You should not be able to mathematically use the same public key
to also decrypt.
If you can, something is very, very wrong
with the algorithm or your implementation thereof.
And to our knowledge now with popular algorithms like RSA,
with Diffie-Hellman, with others, there are no known such issues
there if you're using them correctly and using correct implementations thereof.
That said, you can use the public key in a different way.
If you've not taken CS50's Introduction to Cybersecurity,
one of the topics we do talk about is called digital signatures, whereby
you can use your private key to digitally sign
some documents, some files, some piece of data, and then someone else
can use your public key to verify that signature.
So it's like you are reversing the encryption and decryption process,
but it's still asymmetric.
You use one key for one process and the other key for the other.
You can't use the same for both.
CARTER ZENKE: One thing I like about that course
is that it's more conceptual.
So there's less actual programming, but you
understand the basics behind security and how it actually
works mathematically.
And a question here is somebody asking about a coding bootcamp.
So I think you learn how to program in those, maybe not so much
as conceptually oriented as well.
But what are your thoughts on the usefulness
of coding bootcamps and their role in becoming a programmer?
DAVID MALAN: It's a good question.
I've never experienced one personally, so
take all of this with a grain of salt, and ask people who have maybe
done it if it was valuable for them.
My sense of a lot of bootcamps in the US, at least in recent years,
maybe a little less so now, is that there were so many of them
and they were so darn expensive, honestly.
Like in the US, like thousands of dollars.
That said, they're typically very immersive whereby
you spend several days, several weeks, maybe even several months,
working alongside of others, being mentored by folks more experienced
than you.
And so I think it depends on, one, the reputation
of the bootcamp you're considering and, two, what it is you're
actually paying for.
Probably the most valuable thing to pay for would be actual human support.
So you'd want there to be some good ratio between the number of paying
students and the number of teaching teachers, whether they're the staff
or they're teaching assistants or course assistants
or however they're called, because I think that's probably
the most valuable thing.
If I were to pay Carter to tutor me essentially,
that's a similar analog where I'm hopefully
getting a lot out of that one-on-one interactions.
He knows me, I know him.
I can ask him very specific questions instead of just googling.
But if the bootcamp is much more hands off where you're left on your own,
where you aren't very easily able to talk
to other humans who are more experienced than you,
it's probably not worth paying very much for.
I think that's how you should think about the value.
CARTER ZENKE: And a follow-on question we got here was,
do we think it takes 10,000 hours to be a pro at something like programming.
DAVID MALAN: Oh my god.
CARTER ZENKE: And I think my take on that
is it's not so much the number of hours as it is the kinds of practice you get,
the kinds of relationships you build.
I think it's one thing to learn from a book on your own,
but another thing to go out and actually talk
with people who are in the field to learn
from them in this hands-on environment, and can help you become a pro I
think much, much faster than just learning on your own in some ways.
DAVID MALAN: Yeah, I do think so.
That sounds like a really high number certainly and arbitrary.
And for what it's worth, I learned how to program in a university environment.
So I literally took CS50 25 some years ago.
Then I took really one other software class
called CS51, which is not freely available online,
but there are analogs to it online, surely,
that teaches us about functional programming, which
is a different type of program that we scratch the surface of in CS50,
but not very much, and object-oriented programming.
And those were really the only two courses
in which someone else taught me languages in particular.
In fairness, I took one other very software-centric class years later,
which was on operating systems, where you essentially build pieces
of a Linux-like operating system.
But what was valuable about that course was that you work with a partner.
So a friend of mine and I, we teamed up, as did other pairs of students.
And it was my first opportunity to learn how to collaborate
with someone else on code.
And it was funny.
We got along wonderfully well.
It was a perfect marriage in terms of partnership,
because he and I would meet at like the beginning of the week.
We'd literally go into a classroom with a chalkboard.
We'd talk about the APIs, Application Programming Interfaces,
that we want to design.
And we would then have a to-do list.
Like, OK, I'm going to go back home for the week and work on these functions.
He's going to go back to his room and work on those functions.
And then amazingly, all these years later, I'm still amazed
we actually got this right.
Five-plus days later we'd get back together.
And he had implemented his code.
I had implemented my code.
And therefore I could just call his functions.
He could call my functions.
And we meshed very well.
But that was a hugely valuable experience.
So it's not just a matter of hours spent.
It's not just a matter of getting stuck in tutorial hell where all you're doing
is taking lessons, taking lessons.
Like you really do want to apply it.
And so long story short, I took formally three software classes.
And everything else since has been self-taught.
I don't think I'm necessarily a great programmer.
I feel like I always am embarrassed by code I wrote last year.
So hopefully that means I'm just getting better and better.
But this is 25-some years in, so that's probably not uncommon for folks
to hopefully feel that way too, making progress.
CARTER ZENKE: I think it's a very good example of how much of computer science
is not just programming, like actually sitting down and talking
to somebody else and whiteboarding things and trying
to design a system is very important part of computer science as well.
DAVID MALAN: And funny enough, it doesn't even have to be a whiteboard.
So Kareem Zidane, whom some of you might remember,
is one of our former staff members.
Took CS50x online from home in Egypt years ago,
but then he spent several years with us here in Cambridge.
And he and I actually used to be in very good shape.
And we would go jogging along the Charles River,
which is a very well-known river and beautiful place
to jog and walk and bike here.
And we would have some of our most rigorous design discussions,
things for which we didn't necessarily need a whiteboard and visuals.
But we could argue with each other or talk through design possibilities.
And at least for me, it was a great way to trick me into exercising,
because I'd be so distracted by the argument he and I are having verbally
that I didn't even realize that we already
just ran a mile or two along the way.
So yeah, we agree.
CARTER ZENKE: A comment here, it's related.
Somebody who says they feel sometimes scared
to collaborate with somebody because they often
feel like they don't know as much.
Do you have any advice for how to collaborate
with people who might know more than you or might be more experienced than you?
DAVID MALAN: My gut wants to tell me, avoid it, it's too stressful.
No, I definitely feel that way with some of my more experienced friends
who are full-time professional software engineers
and surely know more than I do.
But that said, those are exactly the friends whom I'm constantly texting
or direct messaging when I do have questions.
There's this relatively short list of humans, some of them
former students who are now in the real world and industry, whom
I would happily now reach out to with questions.
And honestly, I feel like life's too short to pretend you know more
than you do.
You might as well just show your hand.
Be like, I have no idea what this means.
But if you're willing to figure it out and if you're
generally smart enough and experienced enough
that you have enough of a mental model to learn
some new feature of this language, because you already this language,
I just think you should just embrace that and actually seek out
people who are better than you and who do know more
than you, because otherwise you're not getting anything out of spending time
with people who aren't that way.
CARTER ZENKE: I was going to say, I think one thing I've tried to do
is try to find those places where I can learn from other folks,
even though it can feel scary and daunting.
And it's really worked out, I think, for my own development and knowledge
as well.
DAVID MALAN: I mean, amongst CS50's past team members, if some of you
online know them, like Tommy MacWilliam for years ago who taught some
of CS50's Tracks on mobile some time ago;
Colton Ogden, formerly of our team, who now works full-time in software
development; Brian Yu, who was our former preceptor,
did a lot of teaching as well.
Those folks are all people whom I keep in--
some of them might be favorites in my phone
so that I can text them all the easier.
CARTER ZENKE: I have a question about a variety of courses that we have,
and actually a question on our SQL course, which
just came out on October 1.
DAVID MALAN: Oh, I hear good things.
CARTER ZENKE: Yeah.
DAVID MALAN: What an interesting choice you've made in asking this question,
Carter.
CARTER ZENKE: Yeah, so the question is, is it
easier than something like CS50x, CS50w, and CS50p.
And I would say, probably not so much easier as it is just
like a different skill set.
So in SQL, you'll learn how to work with databases and data sets, which
you can work with a little bit in CS50, but not
as deeply as say you would in SQL.
And one thing I like about SQL is that you're writing the language
to do something you want it to do.
And it figures out how best to do that for you
in the underlying database management system at the end of the day.
DAVID MALAN: Interesting.
CARTER ZENKE: Yeah.
DAVID MALAN: I do think the workload is different.
Like CS50x is much more work and therefore is much more
rigorous and time consuming.
I would probably liken CS50 SQL to CS50 Python
in terms of accessibility and workload.
CARTER ZENKE: Agree.
DAVID MALAN: But a different type of problem.
CARTER ZENKE: Yeah, and the goal is to give you a variety of data
sets to work with that are all inspired by the real world.
So you get this variety of practice you can use as you're
beginning your journey in SQL.
DAVID MALAN: Well, I hear good things.
You can sign up for free at cs50.edx.org/sql, or S-Q-L.
We did get some hate on the internet for my saying SQL all the time,
because there's a fan base out there that likes to say S-Q-L.
CARTER ZENKE: Oh, really.
DAVID MALAN: Feels like it takes too much time for me.
CARTER ZENKE: I feel like the course would be a little bit longer if I
said S-Q-L all the time.
DAVID MALAN: Yes, yes.
CARTER ZENKE: People who've already taken CS50 already,
what's one tip you have for them to understand a hard concept, something
like pointers or programming syntax in C or in Python?
DAVID MALAN: Teach it to someone else.
This is like a secret weapon in education.
We tell this to our own teaching fellows or teaching assistants
when we do training at the start of every semester at Harvard or Yale.
I learn-- and I do think a lot of people learn so much more when you actually
have to teach a topic than when you're just
sitting there being taught a topic.
And for me at least, it is because, one, I'm
now responsible for others' experience.
And so I take even more responsibility, I
think, for making sure I do a good job.
I think part of it is embarrassment avoidance, whereby
I don't want to be caught too frequently not knowing
the answer to some question.
It's totally fine not to know the answer sometimes and be like,
I'll get back to you tomorrow.
Let me google it myself, read up on it.
Because presumably, you have a better ability to find that information,
understand and process that information, and then explain it ideally
in simpler terms to a newer student.
But I do think you want that not to be the common case where
you're getting back to people on 51% of the questions that they've asked.
That doesn't feel ideal.
So when I prep for classes, including CS50 nowadays, any time
I'm like, wait a minute, why is that, I find myself going down
these intellectual rabbit holes where I'll google, I'll go on Wikipedia,
I'll ask ChatGPT nowadays, I'll ask CS50's own Glenn Holloway
or Rongxin Liu, who are more learned than I in so many areas of code,
just to make sure I do understand all of the lower level implementation details.
In case in point, in week 5 of CS50 a week ago,
if you were watching the live stream, I embarrassed myself
because I was trying to get a program called get.c to deliberately crash
when you introduce a segfault, a memory-related error In C.
And it was just flailing because I couldn't
get the darn code to actually crash, as I could have sworn I did before class.
But in retrospect, I must have tested something else instead.
And I couldn't quite remember why it wasn't working this time around.
And so I emailed with Rongxin and with Glenn behind the scenes.
And Glenn pointed out and gave me some sample code
for code that would much more deterministically actually crash.
Long story short, what I wasn't realizing
is that it would be easier for me to have used not one malloc call but two,
back to back, so that the memory I'm allocating is adjacent.
And then he suggested that I overflow the first buffer
by typing in something really long.
That would overflow not only part of the memory malloc
gave me for the second chunk, but also header information, so metadata
that the actual malloc function in the system library
is managing for you underneath the hood tucked away.
And then if you try freeing both of those pointers returned by malloc,
then you do indeed induce a segfault. And you can actually see the overflow,
because whatever you typed into the first buffer
actually overlaps the second buffer.
So a conversation I wished Glenn and I had had before class, and not after.
But even I, after time, forget certain details or forget what it was I
did last year that worked really well.
And so I mess up too.
CARTER ZENKE: It seems like a creative solution to me.
I'm wondering how you think Glenn knew to do that?
DAVID MALAN: Oh, I think he's just much smarter than me.
CARTER ZENKE: More experienced?
DAVID MALAN: Yeah, that's fair.
CARTER ZENKE: Let's see, other questions here, some on certificates,
so going back to this idea of taking courses for certificates
versus taking courses in college.
Do you have recommendations one way or another?
Or how should somebody decide between course
at a college, course for certificate, things like that?
DAVID MALAN: I mean, part of the decision
nowadays is probably cost, frankly.
And if by certificate you're alluding to freely available courses like CS50
or others on edX, Coursera, and the like,
then there's a lot of high-quality free educational content out there nowadays.
And that's wonderful.
I think the catch for a lot of people, and probably people like me,
is that without having some skin in the game, so to speak, without actually
paying some tuition, I frankly am probably
less likely to finish the thing that I started.
So there's something to be said for having some commitment,
even if it's financially or maybe it's socially, taking a class,
be it free or paid, with a friend.
Now much like my jogs with Kareem-- and part of that was motivated by,
I'm not going to embarrass myself by in front of Kareem
by not going jogging with him.
So I would go and maybe he was doing the same.
So it was a win-win.
But with that said, I think what you're also paying for frequently, even
at places like Harvard online through Harvard Extension School and the like,
you're paying for support.
You're paying for human time and access to people
who presumably are more learned at that point than you
in some subject who are hopefully good teachers, who can therefore hopefully
help you navigate what is, yes, freely available out there on Google,
Wikipedia, ChatGPT, but can deliver it in a way that is maybe optimal for you
more so than the internet alone can do.
So I think it depends on what opportunities
you have in front of you, who it is that's teaching these classes.
But I certainly don't think you have to pay
for something if you want the knowledge even though we certainly still live
in a world where traditional credentials, degrees,
and so forth still do open doors.
CARTER ZENKE: Yeah, they do.
And I think if you're going to take that step
and pay the money to take a course, I'd try
to make sure you're able to put in the time to talk with people in the class,
to ask questions of the professor or the teacher
just to make sure you're getting all you can
out of it from that human time that's involved with the course as well.
DAVID MALAN: Yeah, absolutely.
I'm happy to field any questions too or ask them of you, if you'd like?
CARTER ZENKE: Yeah, sure.
If you want, you can scroll through here a little bit.
I think we're getting towards the bottom of our questions here.
But I think one other one is, have we considered using examples
to ease new programmers by letting them know that you won't ever
be a master at programming and forget basic things all the time.
DAVID MALAN: Can you ask that once more?
CARTER ZENKE: Yeah.
Have we considered using examples to ease
new programmers in by letting them know you won't ever
be a master at programming?
DAVID MALAN: Oh, well, hopefully that came across in my comments
earlier that even after 25 years I feel I'm a better programmer this year
than I was last year.
So I do think it's an evolving process.
And that's not only because I'm seeing other examples of code.
I'm learning different design techniques or paradigms over that many years too.
The world is changing, the languages, the technologies the libraries
are changing.
People's methodologies and design patterns, as they tend to be called,
are evolving.
So there's just better ways to do things nowadays than there were 25 years ago.
So there's always new runway in front of you.
So I would just embrace it.
What we tell our teaching assistants here on campus
when we're training them at the beginning of the term
is to get comfortable being uncomfortable.
Because as soon as you're comfortable, you presumably
maxed out what it is you're going to get out of the experience.
So the fact that even I still get nervous getting up
on stage and in front of CS50 and hoping that no one asks a question that's
really beyond me, I think is good, because it
motivates me to keep learning.
And it keeps it fun and interesting.
CARTER ZENKE: And I think this reminds me
of we just talked to some of our friends in Nicaragua
who are teaching CS50x there.
And they had this same question of, their students
often feel like they aren't smart enough or aren't
able to put in the time to understand the concepts.
And I think what we advise is just setting the expectation.
Like, this is going to be hard.
It's going to require you to ask a lot of questions.
And you're going to want to put in the time for it just to understand it.
DAVID MALAN: Yeah, so true, so true.
CARTER ZENKE: A few more questions here.
DAVID MALAN: Yeah, here have a question from David M. who's
curious to understand from Carter what your process
was like for creating a new class like CS50 SQL.
So it's not just one that already existed that you
were modifying or iterating on.
Like, you literally had to start from scratch.
So what was your process for doing that?
CARTER ZENKE: Yeah, so there's this idea of backwards design and designing
a course.
And I like this idea because you tend to start
at the end, which is, where do you want students
to be when they finish that course.
I think for us that was, we want students
to have this basic understanding of SQL, to be able to make their own databases,
to be able to go off and manage databases if they'd like,
and also to see how it's relevant to their own daily lives
and their own real world.
So that was our goal for students.
I think for me it was this process of, how
do I first figure out the content I need to teach in the lecture.
What should be included every week so you actually
get that stepping stone towards that ultimate goal?
And then the question became, once I've shared this content, what
are the problems that are engaging that test you on that content
and give the actual skills to practice what we taught in lecture?
DAVID MALAN: Interesting.
CARTER ZENKE: Yeah.
DAVID MALAN: Yeah.
So if you're thinking of designing your own course,
whether it's several weeks or even just one class,
that's hopefully perhaps some helpful advice too.
Let's see.
There was a question here that popped up about AI, which
we've been asked before, but maybe you can offer your perspective.
CARTER ZENKE: Sure.
DAVID MALAN: How do you feel about the threat of AI
to the software engineering field?
CARTER ZENKE: To the software engineering field.
DAVID MALAN: The dark side of the question with which we began today.
CARTER ZENKE: It's an interesting question.
In terms of a threat, I see more of the threats
along trying to have AI make too many decisions for us a little too quickly
and relying on a little too much at the very beginning.
I think it's worth taking some time to figure out
what AI does particularly well and what it doesn't do very well,
and trying to put in some safeguards so we don't go too off the rails
too quickly, if that makes sense.
DAVID MALAN: Yeah, I think that makes sense.
And if I can maybe extrapolate from this question,
I do think we've seen a lot of questions from folks
online about, should they even bother learning programming now
if AI is going to be writing more code.
CARTER ZENKE: Yeah.
I think you absolutely should.
It's still worth understanding these first principles
that have helped build things like AI.
And I think if we have more people who are
more well-versed in those principles, we're
better off able to make AI that helps us in the long-term.
DAVID MALAN: We have a question for Carter too about CS50 SQL.
How do you shorten the full two-plus hour-long CS50 lecture down
to an hour on the Section tab on the CS50 website?
I think we might be conflating two types of material here, perhaps?
CARTER ZENKE: Yeah, I think what you might be talking about
might be the sections where we've been doing this--
DAVID MALAN: Yes, and maybe compressing the material, not the videos
themselves.
CARTER ZENKE: Exactly.
So if you've been tuning in live this semester,
we've been having our live lectures in Sanders Theater with David, followed
by sections led by me and our own CS50 office.
I think the question is asking, how do we condense this full two and 1/2
hour lecture down to a section video, which is only like an hour long.
DAVID MALAN: Yeah.
CARTER ZENKE: And I think for me the question
is, starting again from what do I want you to learn,
ultimately I want you to learn how to do the problem set well and independently.
And so I pick and choose the pieces of content that will help you do that best
and hopefully give you some exercises to practice that on your own
or with a group in section, and then go off independently and focus
on the problem set afterwards.
DAVID MALAN: OK, fair.
Question here from Sandesh.
I get your point, although which free resources would
you recommend beyond CS50.
CARTER ZENKE: Beyond CS50.
Just speaking personally, I found a few others helpful.
I've found some of our friends like Free Code Camp.
They have really good resources for friends--
DAVID MALAN: Good with those folks.
CARTER ZENKE: So they have really good ones
on web development, all kinds of other languages.
So I really encourage you to check out Free Code Camp as well.
DAVID MALAN: And a question from Mark.
How do you know you're ready for the workspace?
I know I'm improving and growing, but I just
can't get myself to start applying to jobs.
CARTER ZENKE: Yeah.
That's something I felt. I think maybe acknowledging
you might never quite feel ready.
And the way you get ready is by just doing it, just submitting
the application, just sending your name out there and saying,
I want to do this.
And I'll learn what I need to learn be able to do it as well.
DAVID MALAN: And if it helps Mark, go get a job.
Like, CS50 is telling you it is time to leave the nest and go pursue a job.
And in all seriousness too, even if you ultimately
find that you're not quite ready for jobs for which you're
finding interviews, the experience and the practice of going
through those motions of interviewing with folks,
getting a sense of the questions that they ask,
getting a sense of how you conduct yourself, what you can do better,
is honestly invaluable too.
So I think it's actually better to probably start the process even
before you feel you're ready, because that process will only
make you feel more ready.
And heck, best outcome could be that you find an opportunity that
is actually a good fit along the way.
And boom-- you tripped yourself into finding that job sooner
rather than later.
It doesn't seem like there's any downside to starting now.
So that's Mark's--
CARTER ZENKE: The worst you'll hear is no, and then you try again.
DAVID MALAN: How about time for a couple more questions before we wrap.
So, we have a question here.
What should a student do after completing the CS50 course
in Cybersecurity, which, mind you, is not completable yet because we're
posting it every couple of weeks.
CARTER ZENKE: So I'd probably make sure you do the rest of the course
if you think you've completed it right now.
But after that, I would say maybe think about how
you want to apply that knowledge.
For me, it was very interesting to just learn more
about the first principles of cybersecurity
and think about how I could better understand things like safety and AI,
for instance.
So I think just trying to ask yourself that question
of what do you want to learn now that you've understood
is part of CS50 Cybersecurity.
DAVID MALAN: Nice.
Maybe a final question about the road ahead for folks.
Bernardo asks, is it greedy to try learning many different concepts
or technologies, even if you feel like doing it.
CARTER ZENKE: Certainly not greedy.
I think the good thing about knowledge is that it's available to everyone.
You taking it doesn't diminish it for everyone else.
DAVID MALAN: That's very well said.
CARTER ZENKE: I think one thing I'd caution, though,
is trying to take on too much at one time.
I think I've fallen in the habit of wanting to learn five different things
and only focusing on each of them a little bit
and not focusing on one or two with all my attention.
And so I'd probably say it's better to choose at the very beginning, maybe
two or three things you want to learn.
And make sure you give them the time actually learning those.
DAVID MALAN: Really well said.
Well, thank you so much to our friends Vlad and Max
who are here behind the camera, helping us film this.
This will indeed be posted on demand thereafter if you joined us late
but would like to catch up on some of the questions
that classmates and others asked.
Any final words from you?
CARTER ZENKE: Thanks for tuning in.
I hope to see you next time.
DAVID MALAN: Indeed likewise.
And I think if we were a TV show, what we would do is end by Carter
and I running off playfully to go play some more volleyball.
So should we do that and run off camera?
CARTER ZENKE: All right.
DAVID MALAN: All right.
See you later.