DAVID: Hello, world this is CS50 here on Harvard University's campus.
And in particular, we're in the Radcliffe Yard.
So nowadays, the Radcliffe Yard is home to the Harvard Admissions Center
as well as the Information Center.
So if you're looking to learn a little something about Harvard
or apply to Harvard, you can come to this particular spot on campus.
But historically, it wasn't actually used for those purposes per se.
In fact, the reason that it's called Radcliffe Yard is because this
was actually home to what was once Radcliffe College, which
was another university that women enrolled in years ago, before,
unfortunately, Harvard didn't allow women to enroll in it.
Indeed, in years ago, a small number of women
could enroll in Harvard College classes.
But it wasn't until 1972 that the schools truly were co-ed.
And in effect, it became Harvard Radcliffe College.
In fact, when I myself went to Harvard years ago in the mid-1990s,
I technically applied to Harvard Radcliffe College
and graduated from the same.
And funny enough, the year I graduated, 1999,
is when finally Radcliffe College evolved
into what's now called the Radcliffe Institute for Research.
And the Research Institute now focuses all the more
on academics inclusive of anyone in the university, particularly
those housed here.
But nowadays, it is indeed Harvard College as the undergraduate part
of Harvard University.
So allow me to stroll just past you all now here
and join CS50's own Carter Zenke for a chat about whatever's on your mind.
Hey, Carter.
CARTER ZENKE: Oh, hey, David.
Fancy seeing you here.
DAVID: Fancy seeing you here.
It's so nice to see you.
CARTER ZENKE: Nice to see you, too.
Just checking some of the beautiful air on this fine quad.
DAVID: It is.
It is nice to be outside here.
And so even though this is, in fact, a quadrangle,
it's not the Radcliffe quadrangle, or quad, as it's called,
which is actually around the corner and up the street a bit.
And that's where a lot of undergraduates nowadays live.
They're dormitories, in effect.
But back in the day, it's where the women of Radcliffe College
used to live around the corner and down the street.
But now everything is much more inclusive and integrated with everyone.
CARTER ZENKE: Nice.
Well, thanks for the history lesson.
DAVID: Well, thank you very much.
I learned this on the tour, and perhaps a bit of Wikipedia as well.
CARTER ZENKE: Nice.
DAVID: So I think we're here, though, to answer some questions about CS50,
and computer science more generally with our friends, Vlad and Max helping us
out.
CARTER ZENKE: Yeah, a few friends joining us
live have a few questions we could ask you if you're OK with that.
DAVID: All righty.
All right, sure.
Let's do it.
CARTER ZENKE: Nice.
So one question I see here is, if someone takes CS50x
and they're trying to master all the concepts but they take more than one
year, is that OK or should they think about doing something else?
DAVID: Yes.
So I think it depends on the reasons.
I think if you have the time, you should ideally
try to spend maybe minimally three months,
maybe on average six to nine months.
Once you hit the 12-month boundary, that's fine, too.
We've absolutely had students who might take two years,
maybe even a little more because they start and stop.
But the catch with that is that you probably just lose
some of the material in your mind.
And you might end up having to rewind or redo a problem set.
Even I only use, and in turn teach C in the fall semester every year.
And so even I have to refresh myself.
So if you're spreading any class, especially CS50,
out along that much time, you're probably just
doing yourself a disservice.
So I would try your best to keep up and try to aspire for less than a
year being ideal.
But people certainly succeed thereafter.
CARTER ZENKE: Yeah.
And so one of the things you would learn if you took [INAUDIBLE]
is how to build your very own software.
So a question comes from someone in the chat here.
Could you guide them on how to contribute to open source software?
DAVID: Yeah.
OK.
So first, actually, Carter, what do you mean by open source software?
CARTER ZENKE: Well, open source software is software for which the source
code is open and online.
And the source code is the code you might
write to actually build that software.
Some folks, when they write software, put that code online
for everyone to see and for others to contribute to as well.
DAVID: Yeah.
So companies like GitHub have been a big part of this.
So if you go to github.com and you access
any number of the repos or repositories that are on the website,
you're looking typically at open source code.
And if you can't see it at all or if you get like a 404 message,
it could very well be there.
It's just, it's private or closed source code.
But GitHub and GitLab and Bitbucket and similar sites
are all about making it easier to not just host your code and version
control, keep track of different versions,
but also make it very readily available to other people.
So to be honest, if you want to do something in the open source world,
I think it's most fun and probably most straightforward
if you pick some piece of software, like a library or a framework
or any piece of software that you yourself use or have used before.
And if you spot a bug in it or if there's
a missing feature that you wish that tool could do,
then you can minimally go to a website like github.com.
Go to the repo for that software.
Click on the Issues tab.
And create an issue, which can mean any number of things.
It can mean a bug report or it can mean a feature request.
And I would just strongly encourage you, if you go that route,
to just always be very detailed.
Don't ask in a short, terse sentence what it is you're seeking
or what it is you're reporting.
Try to save the maintainers of the software
the trouble of figuring out what is it you're seeing that they're not
so that they can really dive in and focus on the problem,
not focus on the question that you're actually asking.
And so examples might include if you do web development,
like if you use bootstrap, for instance, and you
notice, oh, I wish bootstrap did this, or, oh, bootstrap is not
supposed to be doing that.
You can open an issue.
Or better yet, what you can do once you're comfortable with the software is
you could download the source code from GitHub
or technically clone the repository into your own account.
You could then make changes using github.com's GUI or Bitbucket
or GitLab, whatever the case may be.
You can then save the change in your repo.
And then open what's called a pull request to the other repository, which
essentially means you click a button.
You create a name for it and maybe a description thereof.
And that then shows the owners of the code
that you cloned what changes literally you are proposing.
And if they like them, they can literally click a button
and merge the two together.
If they don't like what you've done or if they have questions or concerns,
they can comment on it.
So it's actually a really nice way to get into the ecosystem.
And I will say, honestly, I think my proudest
moment was, there was not even a bug.
I think it was like one line of a comment in English
that was just incorrect.
I think I might be making this up.
But it was something like that-- very inconsequential.
But I figured out how to actually clone this repository,
submit the pull request.
And in this case, it was to the Git source code itself, so the tool
you actually use to use websites like GitHub and the like.
And I was very proud when that finally got approved.
But I spent hours making sure I didn't embarrass myself
by making sure I hadn't screwed up or done something wrong.
So it can be time consuming, too.
CARTER ZENKE: Yeah, and you make contributions both big and small,
I guess.
DAVID: Yes.
CARTER ZENKE: Yeah.
DAVID: Yes.
CARTER ZENKE: Nice.
One of the things I like about open source software is anyone
around the world can contribute to it.
And thinking about our Spanish-speaking students,
is there a version of CS50 in Spanish?
DAVID: Sort of.
So there has been in the past, where we have actually
had human translators translate the transcripts
for the lectures in a format called SRT files which are subtitle
files, essentially, in text format.
We haven't done it over the past couple of years.
It is our hope to do so again.
In fact, on our to-do list is to put all of our transcripts
or SRT files in a GitHub repository publicly so
that people can submit pull requests.
I will say that it is always, over the years, such a bigger undertaking
than people think it is.
For better or for worse, a lot of words come out of my mouth.
And these are long lectures.
And then we have Doug Short's and yours and Brian's walkthroughs.
So it's a lot of content.
So honestly, we're more optimistic moving forward
that we're going to be able to leverage artificial intelligence and tools,
like from Microsoft and GitHub and OpenAI--
sorry-- Microsoft and Google and OpenAI to actually do
these translations for us.
And then maybe we humans just kind of make tweaks.
But we don't translate every darn word, which just takes forever.
CARTER ZENKE: Yeah.
I think it's hard with so many variations of the course
that we have the CS50x, CS50p, and so on.
DAVID: Yeah.
CARTER ZENKE: And the question here is, how many variations are there
actually in the CS50 universe?
DAVID: I think there are 12 currently.
And among them are indeed CS50x, which is like the backbone of the curriculum,
but also quite rigorous.
And so what you can take before that or sometimes during
or after is CS50p, which is an introduction to programming
with Python, specifically.
So it's not so much about CS and algorithms and data structures.
It's about programming in Python.
There's a similar class taught by Brian about Scratch,
so similarly meant to be a very accessible class,
but focused on programming.
We have introductions to computer science
more generally for managers, people in business, for consumers,
and simple average citizens who just want to learn more
about technology, and also for lawyers.
And those classes, too, can be taken before or during or after CS50x itself.
But then there are some follow on classes, too--
soon to be Carter's own introduction to databases with SQL,
another programming declarative language;
a new class from me on cybersecurity debuting on--
CARTER ZENKE: October 1st?
DAVID: October 1st, indeed.
And then we have Brian's web programming class, Colton's game development class,
and Brian's AI class.
And if I had actually been putting up more than three fingers at a time,
we'd know the final count.
But I think it's 12.
CARTER ZENKE: Around 12.
And--
DAVID: Yes.
CARTER ZENKE: --if that isn't enough, have you
thought about a course on data science?
DAVID: It's a big - of 12.
CARTER ZENKE: Big 0.
DAVID: A course on data science--
we have.
It's not on the short term to-do list.
But we've been thinking about it, but no plans just yet.
CARTER ZENKE: Gotcha.
A question from [INAUDIBLE] I believe--
when studying CS50, should I try to be proficient in every language
in the course, like the C program, like Python,
or so on, or just be well acquainted?
DAVID: Well equipped or well acquainted?
CARTER ZENKE: Well acquainted.
I think, yeah--
DAVID: That's a fine line, I feel.
CARTER ZENKE: Well, the question is proficient in every language.
DAVID: Oh, proficient in every language.
CARTER ZENKE: Yeah, versus just kind of acquainted with it.
DAVID: Well, minimally acquainted, yes.
I think it's useful to know a bunch of different languages,
not just to accumulate them on your resume or your GitHub,
but rather so that you know about different types of programming
languages and different paradigms.
There's procedural or imperative programming.
There's declarative programming.
There's functional programming.
There's object-oriented programming.
And there's overlap among some of those.
But at least by seeing different languages,
you see what's possible in code.
And it makes it honestly easier to pick up new languages or new libraries
or understand source code because you just have a bigger mental model of how
you can solve these kinds of problems.
But I would say it's probably especially valuable to be proficient in-- that is
very good at--
minimally one, if not a couple of languages.
And that can be a bunch of different popular ones nowadays.
But you can't really go wrong with Python.
If you're interested in data science, to the question earlier,
R is quite popular there; Java, super popular; JavaScript, super popular.
And then if you want to do web stuff, you have to know HTML and CSS.
So your hands are somewhat tied.
Then there's the whole mobile ecosystem.
But in short, I would get breadth in a bunch of languages but depth
in at least one.
CARTER ZENKE: I agree with that.
DAVID: Yeah.
CARTER ZENKE: Another question relatedly is,
should someone try to do all of CS50 courses-- all 12 or all--
well, around 12 courses that we just talked about?
DAVID: No, probably not.
I think doing all of the courses we offer
would probably be equivalent to what the internet calls tutorial hell,
where you--
not because they're bad, but because you just get
stuck in this infinite loop, if you will,
of just always learning, always practicing,
but not necessarily applying.
So it's fine to keep learning.
But if you're not really taking that knowledge, those skills out for a spin
and solving actual problems, you're only solving my problems, Carter's problems,
Brian's problems, Colton's problems.
You're not actually solving problems of your own
or of your friends or family or colleagues.
So we typically, at Harvard College here,
for instance, would recommend that minimally
before students go get a summer job or certainly a full time job,
that they take at least two software classes, like a class like CS50
in procedural programming and then another class
in functional or object-oriented programming just
to round themselves out; if they can, maybe another class
in algorithms and/or data structures.
So you go more deeply into that world.
And after that, you can start to branch out more.
But I don't think it would be a good prioritization of life
to sit down and not go off into the real world
and build your own things until you're done with all 12
of CS50's courses, which doesn't feel like an optimal use of time.
CARTER ZENKE: Probably not a good use of time.
DAVID: I said optimal.
You said good, but optimal.
OK.
CARTER ZENKE: One thing I like about those courses, though,
is they're for beginners.
DAVID: Yeah.
CARTER ZENKE: So if you were to begin learning computer science over again,
would you do anything differently from how you first did it?
DAVID: Oh, interesting.
And as I answer this, if you want to tee up something for me to ask you,
happy to take over the iPad.
CARTER ZENKE: Sure.
DAVID: Would I do anything differently?
So to this day, I kind of regret not having taken or made time
for or had time for a course in graphics,
whether it's for gaming or whatever else;
a course in artificial intelligence proper back in the day.
All of my knowledge is much more recent, but I
wish I had taken a more foundational course early on, even
though, to be fair, it existed and the field existed some years ago.
But it wasn't nearly as topical as it is right now.
And I always wish I took a class in Compiler.
So in CS50, we talk about C and how you compile your code,
so to speak, from higher-level English-like syntax
into zeros and ones.
A compiler does that.
And there's some really cool, fun, low-level code
you can write to actually do compiler stuff.
So I just wish that I had taken, or had time
to take a few more classes like that.
And frankly, I wish I had found or made time over the past 20 years
to do those as well, since I'm still interested, clearly.
CARTER ZENKE: Yeah, that makes sense.
Yeah.
A question about front-end development here, if you want to take it.
DAVID: Oh, sure.
Carter, we have a question about front-end development here.
What languages and frameworks should I be familiar with
to be a good front-end developer?
CARTER ZENKE: I think it's probably worth
defining what front end actually is.
DAVID: OK.
CARTER ZENKE: So if you're not familiar, front end
is what you see when you go to a new website
and you see often some buttons or some text,
some places you could type things in.
That's what we call the front end of some site.
So if you want to build those kinds of designs,
you might learn a few languages, like HTML and CSS and JavaScript.
But within those, there are a few tools or technologies
you could use to help you use them all the more quickly.
So for instance, something like bootstrap, as I mentioned earlier,
is a tool to help you write CSS to style your pages to make
them look really pretty really quickly.
You might also learn things about JavaScript.
I think Angular is a popular framework, React as well.
Those help you build more interactive sites, again,
a lot more quickly than you could just on your own programming by yourself.
DAVID: Nice.
CARTER ZENKE: Yeah.
DAVID: OK.
Another question we have here-- are CS50 certificates, perhaps
from CS50 or Index, helpful in applying to Harvard, would you say?
CARTER ZENKE: So I think they could be.
They're a great demonstration of your knowledge.
If you've completed the course and gotten a certificate,
that means you attempt all the problem sets.
You got a good score on all of them.
It kind of knowledge, not just at Harvard,
but the other folks who might be interested in it as well.
So I'd say, oh, yeah.
DAVID: Yeah.
I don't think-- it certainly doesn't hurt.
And I think if it's accompanied by other achievements, other projects,
other goals that you've set your mind to, that's good.
I don't think I would approach it as, oh, I should take CS50 at Harvard
and get a certificate because it will help me get in here or anywhere else.
CARTER ZENKE: Yeah.
DAVID: It really should be part of a narrative.
If you're taking advantage of resources not just in your own school,
but ideally if your school itself is not very well resourced
or doesn't have courses in CS50, that you've gone above and beyond
and found things on your own, and better yet, done more than just CS50,
but have pursued higher-level opportunities as well.
CARTER ZENKE: Yeah.
DAVID: All right.
So let's see-- another question here.
Can you learn enough on CS50's course to start freelancing?
CARTER ZENKE: A really good question-- could you learn how to do freelancing?
So it probably depends on the freelancing you're thinking of doing.
If you're interested in some front-end web domain
like we just talked about or even back end, or doing, of course, anything
else with C or Python or HTML, CSS, and JavaScript,
I would say CS50 is a good place to start for that.
You could certainly get the fundamental skills.
You could learn to apply to new places and to show your skills to somebody
who's looking to hire you, perhaps.
DAVID: OK, compelling.
CARTER ZENKE: Yeah.
DAVID: We have another question here.
What advice would you give to someone who is struggling with hash tables?
And it's 1:00 AM.
Ha ha.
CARTER ZENKE: Oh, if it's 1:00 AM, my first advice is to take a break
and go to sleep.
Often, the best thing you can do is just,
if you're feeling stuck, feeling frustrated, just take a step back.
Take some time to yourself.
And then come back and approach the problem
with that fresh mind and a more awake brain.
For hash tables in particular, I found it helpful often
to just draw things out.
So if you go to our own lectures, you go to Brian's walkthrough,
Brian has some good visuals about what hash tables actually look like.
I'd encourage you to take that and draw it out.
And see what you're missing in your mental model.
Maybe add that drawing in to see if you can make it click in your mind,
but again after some sleep.
DAVID: All right.
So this one's a bit more specific to pursuing a job.
I've nearly completed CS50w, the web class, after CS50x.
While applying for developer jobs, I see a lot
of recruiters asking for a technical round of interviews.
But how common is the use of DSA, data structures and algorithms,
in web development, actually?
CARTER ZENKE: A good question-- so if you're applying to technical roles
at some company, you might often be asked
to do this technical interview in which somebody will often
give you a small coding problem.
That hopefully helps you demonstrate what
you know about programming and these fundamentals
like data structures and algorithms.
So I would say in a web developer role like that,
you might get some questions about fundamental data structures
and algorithms and so on.
So it could be good to know about.
Does that answering your question?
DAVID: Yeah, I think so because web development,
too-- it depends on what depth it is.
If you're just making static web pages with content,
then, no, you shouldn't really need to know
much about data structures and algorithms
because it's really just HTML and CSS.
But if you start writing JavaScript for more interactive code
and interactive websites, well, you're going
to be using things like arrays or objects
or other data structures, either that you've created
or maybe some libraries created.
So then, yes, it becomes more helpful.
And also, too, if you are the one architecting a full-fledged web
application that has a front end and a back end, then, yes, absolutely.
And so knowing something about data structures and algorithms
is a good litmus test for just how deep your knowledge is versus
how shallow it is.
If you just know HTML and CSS, you're only
going to be so useful on a team that's trying to build something,
for instance, from the ground up.
So it really depends, too, on the role that you're interested in.
CARTER ZENKE: I think most team members, when they're hiring,
are interested in how you're thinking about the problem, too.
So it's less so the extent of your solutions
correctness, but also more so how you talk them
through how you're solving the problem, sharing you're thinking as you go.
DAVID: Yeah.
All right.
So here's a big one, Carter.
I'm weak at problem solving.
What should I do?
CARTER ZENKE: Weak at problem solving--
I would say--
I'm going to push back on that and say I don't
think you're weak at problem solving.
I think you have the tools within you to help solve problems.
I wonder what kinds of problems you're trying to solve.
Are they related to computer science in particular?
Maybe feel free to follow up on that in the chat.
But I would say going back to some earlier
question about being frustrated or feeling like you couldn't make progress
on something, take a step back.
Think about what you want to learn.
Try to come back to that fresh mindset and thinking through, I can do this.
I can try this.
And that optimism should hopefully push you through a little bit
further than currently now.
DAVID: Yeah.
And honestly, it really boils down to practice
because honestly, the real value of doing homework in many classes
and just doing school in general is that you're not necessarily
learning specifically how to solve problems that you're going to encounter
in the real world, but problems that are similar to problems
that you might encounter in the real world.
And so by doing homework, taking classes, doing projects, writing
papers, you're just learning to recognize patterns and apply
those ideas to problems in the real world.
And honestly, that's what's so useful.
If you have this mental model, so to speak, of some problem
that you solved back in school or back at some other job
because when you encounter something new,
you kind of have an instinct for a starting point.
And that's absolutely going to be hard early on in school
because you just don't have that mental model.
And you don't have those examples to draw on.
So you just of have to power through because for better
or for worse, life is going to be full of problems, not necessarily all CS.
But you're just going to start to recognize how to navigate things
that are similar to past things--
CARTER ZENKE: OK.
DAVID: --I would say.
All right.
Let's see.
How about, Carter, is it good to take CS50w, the web class, and CS50
AI, the AI class, at the same time?
CARTER ZENKE: At the same time, I think it
depends on the time you have available.
If you are interested in both those things you have the time
to devote to both courses, why not combine them and do them both at once?
In my own educational directive, I find it
helpful to take two dissimilar courses and see how they
related in ways I didn't quite expect.
So I'd actually probably encourage you to try that out if you can.
If it becomes overwhelming, feeling like you're spending too much time on it,
feel free to do one then the other, either web first
and then AI next, or AI first and web next-- either one, I would say.
DAVID: OK, fair.
Let's see.
How about any books you would advise for memorizing code or learning coding?
CARTER ZENKE: Books to memorize code--
so I know there is a famous book for the C programming language written by--
is it Brian--
DAVID: Brian Kernighan, yeah, yeah.
CARTER ZENKE: --the author of that one.
So that one's actually useful for me as I joined CS50 and wanted
to learn how to teach C well.
What is the title of that book?
Do you know off the top of your head?
DAVID: Programming in C-- no.
CARTER ZENKE: Programming in C.
DAVID: Wait, no.
I really should know this.
Everyone calls it K and R--
CARTER ZENKE: Yeah.
DAVID: --by nature of the authors.
Wow, I should know this.
This is embarrassing.
CARTER ZENKE: Something like Programming in C, but if you can't find it,
you could Google K and R.
DAVID: We'll edit this part out.
Right.
OK.
CARTER ZENKE: OK.
Google K and R on Google.
And you'll find this pretty small book on the C language.
It covers pretty much all that you need to know about the C language.
I found that helpful because I could go through and find all the bits
and pieces of that language and see how I can combine them to build
the programs I wanted to build.
So that's a good job of breaking things down.
DAVID: Sorry.
It was even more obvious.
The C Programming Language--
CARTER ZENKE: The C Programming Language.
DAVID: It is what K and R is actually called.
CARTER ZENKE: Yes.
DAVID: That's embarrassing, but--
CARTER ZENKE: So go ahead and--
DAVID: But you knew how big a book it was.
CARTER ZENKE: Yeah.
DAVID: So that was something about that big.
OK.
All right.
Well, let's see.
How about, how much time, Carter, should someone
spend learning coding to become a really good programmer?
CARTER ZENKE: So I've heard some conventional wisdom is the 10,000-hour
rule.
You spend 10,000 hours, and you become an expert in whatever field
you want to learn.
I think it's from Malcolm Gladwell.
DAVID: OK.
That's a lot of hours.
CARTER ZENKE: That's a lot of hours.
I don't think that's quite--
DAVID: That's big, yeah.
CARTER ZENKE: --always accurate.
I think it more so depends on the kind of practice you're doing.
So the kinds of practice that you might get from CS50
is that practice of actually writing code, solving new problems.
That's what I think is valuable practice you might need.
So I don't think there's certain number of hours, but more so the kinds of--
the type of practice you're doing.
And I would say more so a commitment to staying with it.
If you do it this next month, try to do it the next month, too.
And one month leads to two, two to three.
Maybe a whole year leads to two, and so on.
And you find yourself becoming more and more expert as you go.
DAVID: Yes.
But I would emphasize, or I would argue that you should still
be applying what you're learning as you go
because if you're assuming 40 hours in a week,
that's 250 weeks to get to 10,000 hours.
CARTER ZENKE: Yeah.
DAVID: And that's like five years.
And I don't think someone should wait five years before feeling that they're
ready to emerge from tutorial hell.
CARTER ZENKE: Absolutely.
DAVID: OK.
CARTER ZENKE: Yeah.
DAVID: But I have heard that heuristic before as well.
All right.
How about time for a few more questions here?
Let's see.
A lot of people in the chat who knew the name of the textbook before we
did-- all right.
OK.
CARTER ZENKE: I'm proud of you all.
DAVID: Let's see.
All right.
Oh, so this is a question really for the group.
So others should feel to chime in, too.
But did you all take classes for fast typing?
How about you?
CARTER ZENKE: I actually did.
This was back in middle school when I was maybe around 13 or 14.
We had a program.
I don't remember the name.
But there was a wizard that would show up.
And you'd be on a spaceship.
And you'd type words fast enough to break the asteroids.
So maybe others have played that game
DAVID: Oh, interesting.
Yeah, I don't know what games or software we used,
but I, too, in middle school, I think.
And this was in the '80s.
And they had these very cheesy like pieces of plastic
that they'd put over your hands.
So you couldn't cheat and look at your actual fingers.
CARTER ZENKE: That sounds tough.
DAVID: Yeah.
And it's funny.
To this day, I don't think I type properly
because I think the way we were supposed to type
was keeping your hands positioned and just moving your fingers.
But I still kind of move my hands.
And it's just what feels most comfortable to me.
CARTER ZENKE: Is that good for your wrist or--
DAVID: I don't know.
CARTER ZENKE: I don't think--
DAVID: Maybe not, but that's what I do.
In fairness, actually, in graduate school years
ago, I did start to develop problems with my hands, which
wasn't so much a function, I think, of how I was typing,
but really how I was sitting.
And I developed what would generally be called RSI-- repetitive stress
injuries.
And it was really worrisome and really potentially debilitating, such
that I'd have to take a day-- a few days away from typing, or at least
typing significantly because I didn't want to do more damage.
And I knew at the time a couple of friends
had serious physical issues that had been the result of poor ergonomics,
so to speak.
CARTER ZENKE: OK.
DAVID: And so what I found helpful for years in my case
was I got not really a special desk, but a special keyboard tray that actually
didn't sit flat but actually angled downward
because I found it more comfortable to type like this for a while.
And I don't need that anymore.
And even now, I do think I'm a little lazy.
And if I'm on the sofa with my laptop, those are not the best ergonomics.
But I don't think I type as much as I once did on that way.
So I would be super careful.
And if you're ever feeling any pain in your wrists or hands
or forearm, stop and fix whatever it is you're doing.
And take time away from it if you can.
CARTER ZENKE: Posture is important.
DAVID: Yeah.
No, that was a worrisome time years ago.
All right.
This is harder to answer, I dare say, but what language
has the most potential for being the most profitable in the current world?
CARTER ZENKE: The most profitable--
I would say that answer is probably always changing in some sense.
I know there are surveys by Stack Overflow that try to figure that out.
I know you showed one recently in our business school class.
Is there one that topped that list?
Do you remember?
DAVID: I don't remember what it was.
But if you do Google Stack Overflow Developer Survey,
you will see some numbers there where they surveyed thousands of folks--
CARTER ZENKE: Yeah.
DAVID: --which might help.
I suspect at the top of the list--
CARTER ZENKE: JavaScript.
DAVID: JavaScript, Java--
CARTER ZENKE: Yes.
DAVID: --a lot of enterprise-focused languages.
Probably some more niche or older languages
where there's just fewer people who know them well is possible.
But honestly, I wouldn't learn a language strictly
because it's on the top of one of these lists.
I would take one step back from that and consider where or from
whom are you going to learn it well, and enjoy it, ideally.
And two, what opportunities might exist in your local town or community
or online?
And maybe strategize that way.
And I don't think you can really go wrong.
CARTER ZENKE: Agreed, because again, it's always changing.
So learn what you want to learn and what's
going to help you best tie it into computer science.
DAVID: Yeah, agreed.
I'm confused between cybersecurity and AI.
How can I find which is better for me?
CARTER ZENKE: I would probably take stock of your interest.
So cybersecurity might be interesting to you
if you're interested in how we can secure systems, keep data private,
keep hackers out, or even how you could hack organizations really for good
to help them find their own vulnerabilities.
You mentioned AI, though, if you're curious about maybe
taking in lots of data and finding patterns in that data.
If you've been interested in some of the recent elements in ChatGPT
or generative AI, one can make artwork and text and so on.
That might be a good reason to go study AI.
So it depends on your own interests here and taking
stock of what you like the best.
DAVID: Yeah.
OK.
Let's see.
I've got to do C++ for my university class.
But is it OK to learn concepts like OOP or DSA in Python?
CARTER ZENKE: I would say it's still OK.
Python tends to, we say, abstract some of those structures away.
So you get a lot of things for free in Python.
If you, for instance, want to make a linked list in Python,
you get that in something like a single line of code.
In C++ or in C, it takes many more lines of code.
You build it up yourself.
So I would say C++ or C might be better to actually understand how
the structures are built from the beginning.
But Python can help you use them more quickly as you develop in your career.
DAVID: OK, fair.
I think we have time for a couple more questions.
All right.
Let's see.
I've got one for our last question.
CARTER ZENKE: Do I want to ask that one to you or--
DAVID: We should both answer it, I think.
CARTER ZENKE: All right.
DAVID: How about this one, though, because we hear this a lot
from a lot of our online or adult students.
Do we have any future in the job market at the age of 49?
CARTER ZENKE: Absolutely.
I think we're always looking for programmers of all ages.
So it's never too late to begin and never too late to put yourself out
there onto that job market.
DAVID: Yeah.
No, and truly, certainly when it comes to technical skills,
I don't think people blink twice whether you're young, whether you're old.
It really boils down to, in most contexts, or many contexts, certainly,
just how good you are at what you do.
And particularly with so many online opportunities available nowadays,
increasingly work from home, wherever you
are in the state, wherever you are in the country or in the world.
That's opening up potentially new opportunities, too.
So I certainly wouldn't let age alone be a barrier if you have this interest,
if you have opportunities to learn it, be it online or in person.
I think that should really be lower on your list of concerns.
CARTER ZENKE: Definitely.
DAVID: How about for our final question?
It's a bit open ended.
But also, I think it's provocative.
What about the future of programming?
CARTER ZENKE: Oh, one thing that comes to my mind
immediately is I think you had shared this talk with me
and Wong Shing, one of our software developers
on the team, where someone was talking about the capabilities
of generative AI, like ChatGPT, to help us write code.
So if you go to ChatGPT, it'll help you write code.
I think it would be a little too helpful sometimes.
But I think there might be a transition towards writing code in
more an English language style, like trying
to tell an AI what you want the program to do,
and having it generate the code for you that you can then go in and critique
and update with your own knowledge of that language.
DAVID: Yeah.
CARTER ZENKE: Does that make sense?
DAVID: I agree.
I don't know how many years away it is.
But I would be thrilled, honestly, if I could just
tell an AI what it is I want some application
or software to do for me, so long as it interprets me correctly.
And I can be as imprecise with the AI as I
might be with a human who can read between the lines and know what I mean;
whereas computers typically won't give you
the benefit of the doubt in that way.
And I think, too, if I had to guess, in some number of years
a lot of software engineering will become more
like product management and actually designing the software at a high level,
but leaving it to the software itself to write itself, if you will.
So you and I can focus honestly on the interesting parts of the problem,
the juicy parts like what are the feature sets, how does it
work, what's the overarching design.
But you don't have to necessarily get into the weeds of writing code.
That might be fun in some cases.
But a lot of it increasingly is becoming boilerplate.
It gets a little repetitive.
It's similar to some other project you did.
It's just using API calls or using someone else's library.
And there's just the juicy part, honestly.
Even when Wong Shing and I and we talk about software,
it's like literally using the whiteboard or just
chatting open-endedly about what the software should do
and how it could do it.
Honestly, at least for me, that's the fun part of all of this.
It's the design.
And I do enjoy some of the coding.
But honestly, I also have to take such a deep breath sometimes
to just slog through other aspects of coding
or find enough time to do everything that it's a real turnoff.
So I think there's a real juicy opportunity there.
CARTER ZENKE: Yeah.
And we talk about one of things computer science
teaches you is how to be precise, so all the more reason
to learn computer science, then.
DAVID: Yeah.
Well, if you'd like to learn more about where
we are in the world, Google Radcliffe College,
which is now the Radcliffe Institute.
You can read more about the history here.
We, of course, are here representing CS50, which is Harvard's introduction
to the intellectual enterprises of computer science
and the art of programming with all of these follow along and also precursor
courses that we've chatted about a bit here.
And you can find all of those at edx.org/cs50.
Any final words for the group?
CARTER ZENKE: None for me.
See you next time.
DAVID: This was CS50.