[00:00:00] SY: Last year, more than a hundred thousand developers participated in Call for Code 2018, a virtual hackathon with the goal of finding ways to reduce the impact of natural disasters through technology. Submit your idea by midnight Pacific Time, July 29 for your chance to win $200,000 and support from IBM and other partners. Last year’s winner was Project OWL, a deployable mesh network that brings connectivity to survivors of natural disasters which you can learn more about in Episode 1 of this season. Start building your life-saving app today. Just a heads up that after this episode’s end credits, we’ll be playing a trailer of Command Line Heroes, the other podcast I host that’s all about open source and produced by Red Hat. So stay tuned.

[00:00:54] (Music) Welcome to the CodeNewbie Podcast where we talk to people on their coding journey in hopes of helping you on yours. I’m your host, Saron, and today, we’re talking about computer science with Harvard Professor David Malan who teaches an extremely popular class called CS50.

[00:01:11] DM: I only felt like I could call myself a proper computer scientist after I had finished graduate school, frankly.

[00:01:17] SY: It’s the largest class at Harvard with 800 students, but it’s also really accessible to the rest of us. It’s all online. So you can watch the lectures and work on those problem sets yourself. David shares what he’s learned about computer science and from teaching and how you should approach your own learning journey after this.

[00:01:42] You might have already heard us talking about bootcamps on this show and how important they’ve been to changing people’s careers and their lives. Well, Flatiron School is one of the best. The education you receive and the skills you gain and the community you’ll have will prepare you for the rapidly growing tech field. Go to flatironschool.com/codenewbie to learn more. That’s flatironschool.com/codenewbie.

[00:02:04] Actualize Online Live is an online bootcamp created and taught by expert educators. It’s 100% live and can be taken from the comfort of your home. They use video conferencing, so you get to actually see and talk to your instructors and classmates in real time. That means you have live interaction and feedback, not just during instruction but during all your exercises and projects as well. Learn more at actualize.co/codenewbie. That’s actualize.co/codenewbie.

[00:02:34] If you’re designing a website or building a mobile app, you’re probably going to want to take payments at some point. Square APIs allow you to easily implement their payment form on your website. And with their In-App Payments SDK, you can add it to your mobile app. You don’t have to worry about dealing with PCI compliance because they’ll take care of that for you. Don’t let anything come between you and your money. Start building with Square over at squareup.com/go/codenewbie.

[00:03:06] SY: So you’ve been teaching this class if I did my math right about 12 years.

[00:03:10] DM: Indeed, just finished the year 12.

[00:03:11] SY: A little more than 12 years. Yeah. This is the largest class at Harvard. It’s got over about 800 students.

[00:03:17] DM: Correct.

[00:03:17] SY: So tell me about why it’s so popular and why you’ve been doing it for so long.

[00:03:21] DM: You know, I certainly think there’s an interest increasingly these days in just better understanding technology and also learning not only some concepts from computer science but also the practical skills that derive from having learned how to program so that folks can solve problems in their own fields, whether it’s analyzing data or creating something digitally. I think we’ve certainly benefited from trends in industry where tech is very hot now so to speak. And once you have a critical mass of students who have taken an interest in the field, particularly among those students we call less comfortable who might have historically not even considered exploring computer science, they presumably tell their friends and those friends tell other friends and so you have a bit of momentum indeed on campus around the course.

[00:04:00] SY: What is so fascinating to me about CS50 is it is very, very different from most college courses and what people expect from a college course. For folks who’ve never heard of CS50, never seen a video, never been to your class, can you tell us a little bit about what it looks like, what it feels like to be there?

[00:04:17] DM: I think we’ve focused on usually on the course’s culture and the community, to be honest. I think we focused very much on the accessibility of the course, not in making it any easier than it ever was but really in improving the slope via which students come on to the course. And by that, I mean, one of the first changes we made in 2007 when I took over the course was introduced Scratch, a graphical programming environment from MIT’s media lab that was officially targeted at younger students and after-school programs, but we rather adopted it for a college audience and older really to send the message of just how accessible programming can be when you don’t have the syntax and the text and the semicolons getting in the way and it was a way to have students share their projects and show their friends, their family members literally by sharing ultimately a URL when MIT added that feature, too.

[00:05:02] SY: There’s also the delivery of your lectures, which is very unique. I mean, there’s a lot of production that goes into it. You use a theater, right? You’re in like a stage.

[00:05:12] DM: Indeed.

[00:05:13] SY: You’ve used lots of props. You’ve used Muppets.

[00:05:15] DM: Drag as much falling trash as you can through this trash can.

[00:05:20] SY: You’ve used phone books.

[00:05:21] DM: But what’s nice about this old-school technology is that we can now tear this problem in half…

[00:05:27] SY: You’ve used peanut butter and jelly.

[00:05:29] DM: Put the knife in the jam. Scoop it.

[00:05:33] WOMAN: Yeah, dump it on the bread.

[00:05:37] SY: This is a very different type of lecture. Tell me about what that looks like. If I’m sitting in the audience, what do I get by going to CS50?

[00:05:44] DM: The goal I think of lecture, not only for us but in general, should really be to excite, to inspire, and to sort of whet students’ appetite for what you can do with the particular field. And so we really try to make the in-person experience a little something special and to make students feel part of a shared collective experience. We try to bring students up onto that stage as often as we can to participate in demos, whether that’s operating a program or a game on my computer or physically presenting demonstration of some algorithm in front of all of their peers, filming these lectures too and making them available to anyone on the internet really who’d like to tune into the course as open course where we also aspire to provide those students with a window into Harvard’s classroom, so to speak, so that as best we can they can feel part of that same classroom environment.

[00:06:28] DM: All right. This is CS50, Harvard University’s introduction to the Intellectual Enterprises of Computer Science & the Art of Programming, and this was apparently me around the time that I sat where you guys now sit. Thanks to the teaching…

[00:06:42] DM: Thankfully, the videos are very deliberately shot in 4K. We’ve experimented with virtual reality. The design of which really is to hope that the technology and the flat computer screens will ultimately get out of the way and the students truly finds themselves immersed in the experience.

[00:06:56] SY: And I think what also makes the CS50 experience so special is that, you know, with the production stuff set aside, you’re a really good teacher. It hit me when I realized that 30 minutes into your Lecture 0 video, you had yet to talk about coding, but you explained Big O notation and binary search without ever saying Big O notation and binary search. You just explain the principles of it and I don’t think anyone in that class who hadn’t heard of these words before realize that they were actually learning some relatively advanced computer science topics in Lecture 0, which is absolutely incredible. Tell me about your teaching philosophy. How do you approach these topics?

[00:07:38] DM: Well, thank you, first of all. Over time, I realized especially through teaching just what a range of audience there is in the room in any class really and I certainly don’t think that we’ve watered anything down about the course, we certainly haven’t dumbed anything down per se. We have been much more sensitive to the fact that students might not know our priority as much of their classmates. And so you really do want that on-ramp, that slope to be gradual but to start low enough that you can really bring everyone with you.

[00:08:03] DM: And I’ve taken comfort since in taking over this class and found it inspiring that these days 68 percent of the students in this room and in this room last year had no, never taken a CS course before. So if you do have that mental model of everyone to your left and your right surely must know more than you, odds are it is not in fact the case…

[00:08:23] SY: And this is very relatable for our community, our audience because for a lot of us, we’re just getting started. We’re very new. We didn’t play with computers and figured out how to code things when we were 12. We’re entering this for the first time as adults. So when you’re working with that demographic, what is the hardest part about teaching to folks who are just so, so new to computer science?

[00:08:45] DM: The human support is one of the most challenging simply because of the scale on which we happen to operate with this particular class. And I think when programming takes time and problems are hard and you have a lot of students interested in learning it and only a finite number of staff who can guide them along the way, even if you have as strong as a 1 to 5 ratio of one teacher to every five students, you know, even that it’s hard to spend 5, 10 minutes with a student if that means it’s to the exclusion of spending time with other students. So I think thereto is why we try to emphasize the collaborative aspect of programming for us. One of the biggest challenges is honestly supporting students as well as we’d like to interpersonally.

[00:09:23] SY: And on the other end, what is the hardest part for students?

[00:09:26] DM: The newness of the material and the world. I think a lot of students haven’t necessarily had an experience academically or extracurricularly where precision and where logical thought is just a precondition for succeeding ultimately, whereby the program’s just not going to compile or run if your thoughts aren’t quite as clear. So I think there’s an onboarding period where it just takes time and it takes practice and I think that can be very frustrating and very difficult for students. And honestly, the solution there beyond seeking out support and providing support is really just to allow yourself enough time.

[00:09:58] SY: So let’s dig into the curriculum a little bit. So you mentioned that you start with Scratch. How would you describe Scratch actually? It’s kind of like puzzles building blocks.

[00:10:06] DM: Oh, well, I would disagree. I would say flat out it is indeed coding. It happens to be a graphical, even though a week later we’re going to transition to something more traditional, so to speak, a text based language like C. Well, you’re not going to be dragging and dropping it anymore, but you’re still going to be creating the same concepts, creating the same shapes. It’s just that curly braces are going to take the place of the little yellow puzzle piece that you might have otherwise just drag the previous week. And I think that’s a great way to start whether it’s with Scratch or Snap or any of Code.orgs material. There’s a lot of these block-based languages these days.

[00:10:36] SY: Yeah.

[00:10:36] DM: If folks Google something called Blockly, that’s actually a block-based language that you can actually use into your own languages and increasingly I think our folks building on top of Blockly.

[00:10:47] SY: Okay. So we start with Scratch, then we move on to C. Why C?

[00:10:51] DM: I think with C, there’s just so little if any magic. Anything that you want the computer to do you have to make it do that. And at the end of the day, all that you have access to is the ability to perform logical operations. If you want a data structure like a tree or a hash table or even an array, you need to make that yourself, whereas higher level languages like Java and Python and C++ tend to give you more of that out of the box and that’s wonderfully useful and incredibly empowering, but I really like the bottom-up approach.

[00:11:22] SY: So why Python? Why not JavaScript, Ruby, or different high-level language?

[00:11:26] DM: Yeah. So this is a very slippery slope into religious debate certainly.

[00:11:30] SY: Yeah.

[00:11:30] DM: But I think Python is certainly in vogue these days, which is a good thing because insofar as half of the students who take CS50 here on campus at least will only take CS50 as a CS course and then they’ll go back to their own fields and ideally want to apply lessons learned to their own field. The reality is that Python is very useful and utilitarian. It’s got a vibrant community and lots of APIs and libraries and so forth. So that’s just a plus. Syntactically, it’s pretty close to C. It does add some of its own nuances, but it’s not a huge leap as might be the case with certain other languages. And I should say contextually, we actually used to use PHP for many years and I actually thought that was a superior language when it came to transitioning from C to something higher level. Syntactically, it was almost identical. You just have to prepend your variables with dollar signs essentially. It allowed us to explore web programming, which is a wonderfully accessible field and of interest to students. It’s documentation with Stellar. It had examples. It was standardized how your inputs and outputs. And so some of that was lost when we transition to Python including I think the documentation. I do think it’s harder to learn Python than PHP was for students. But I just felt it was time ultimately and I think Python has been working well for us, but it does have some abstractions that we didn’t have necessarily in PHP.

[00:12:52] SY: Coming up next, David talks about what you should consider when designing your own CS curriculum, how he ended up teaching CS50, and his advice for folks just getting started after this.

[00:13:10] Flatiron is a global school with immersive and online courses designed for passionate people who are ready to change their lives. Check out Flatiron School’s free 75-hour bootcamp prep where you can learn not just coding languages like JavaScript and Ruby, but also how to ace your job interview. By the way, did you know that they’re now part of WeWork? Which means they now offer classes at a growing number of WeWork locations around the world. A bold change begins with a single step. To take yours, go to flatironschool.com/codenewbie and learn more. That’s flatironschool.com/codenewbie.

[00:13:44] Actualize Online Live is not only a super convenient way to receive a top-notch bootcamp instruction from the comfort of your home, they also have nifty tools to help you learn everything from new coding concepts to syntax. They even produce a free weekly video called “Think Like A Software Engineer”, which teaches you things like how to debug code, how to research problems, and how to teach yourself new languages. Learning the mindset of a software engineer is the key to getting past the hurdles that can bog you down as you code. Check out the series at actualize.co/codenewbie. That’s actualize.co/codenewbie.

[00:14:21] We’ve talked about open source a bunch of times on this podcast, but frankly, open source is so big and complex, and fascinating that it needs its own show, and it has one called Command Line Heroes. It’s produced by Red Hat and it’s hosted by me. That’s right. I’ve got another podcast talking to incredible people about all things open source. We talk about the history of open source, the introduction of DevOps and then DevSecOps, and we even do an interview with the CTO of NASA. And that’s just the beginning. We also dig into cloud and serverless and big data, and all those important tech terms you’ve heard of, and we get to explore. If you’re looking for more tech stories to listen to, check out redhat.com/commandlineheroes. That’s redhat.com/commandlineheroes.

[00:15:07] Square has APIs and SDKs to make taking payments easy whether you’re building a mobile app in iOS, Android, Flutter, or React Native. If you want to embed a checkout experience into your website, it’s super easy. Square has processed billions of transactions so you know it’s tried and true. Start building with Square over at squareup.com/go/codenewbie.

[00:15:34] SY: Okay. So if we look at the curriculum, we start with Scratch. That gives you the understanding of what programming is and how it works without necessarily having to worry about a lot of syntax issues. Then we go to see which is all about really appreciating what programming is all about and getting to feel all the pain points and the power of what a language can do and then we move onto Python, which is a little bit more real world applications, a little bit easier in a lot of ways, and then they can take Python and move on to other fields. Is that a fair analysis of the curriculum?

[00:16:06] DM: It is. And toward the end of the semester too after introducing Python and a bit of HTML and CSS for the context of web programming, we also introduce students to a bit of SQL for database querying so that they have a place to store their data when building a web-based application. We also do introduce students to JavaScript along the way in the context of HTML and CSS specifically so that they can do things like validate user’s input via forms or make AJAX queries or that is to say HTTP requests from browsers to servers so as to make their user interfaces all the more dynamic. So we really do give students this taste as part of the latter portion of the course of a broader domain of software development so that they really do have some exposure to different paradigms in all of those languages and different applications thereof.

[00:16:48] SY: I’m wondering. For folks who are listening who are teaching themselves how to code besides taking CS50, if they were to create their own curriculum, would you recommend the same journey of something that is more straightforward and a lot of syntax then going really deep then taking a step up?

[00:17:06] DM: I think it depends on the audience. So for instance in addition to CS50 here at Harvard, I also teach a course called CS50 for MBAs. MBA is Master of Business Administration, which is a graduate degree in business. And for that audience, we increasingly have students who are interested in learning something about programming and computer science and engineering more generally. But they know they’re not going to go, become software engineers. They don’t want to become that and so they don’t necessarily want when enrolling in the course as much of a bottom-up understanding. They’d really like to have the vocabulary with which to have informed discussions with engineers. They’d like to have a better sense of the decision-making process that happens in software engineering and so forth. So for that audience, for instance, we don’t introduce C. We focus on Python and maybe a little bit of JavaScript just to give them a bit of exposure to breath. We can’t go as deep as a result. We also spend less time on programming, but it would be I think a little too hard to do justice to a language like C if we’re only going to spend an hour in class on it. I’d like to show them some more range of what you can do with programming and the reality is you get that with something like Python. So I think it depends on your audience and what their goals are and what your goals are as the teacher.

[00:18:17] SY: If your goal as the student is, “I want to get a job, I’m not happy with the job I have, I want to get into coding so I can become an engineer at a company,” what are some things that I should keep in mind to help me build my own curriculum?

[00:18:32] DM: So I think that a bottom-up approach to your learning is compelling and I’m certainly a little biased insofar as I happen to teach a course that does exactly this and I don’t doubt there are plenty of other courses via which students could be very successful in learning how to program. But I think students, based on questions we get asked quite often, should worry a little less about what languages they learn at least early on. I mean, case in point, the only languages I myself learned as a student formally were C in CS50, a little bit C++, and a course called CS51, as well as a bit of Lisp, which is a different type of programming language in that same course CS51, and every language thereafter I now know. I think I’ve been self-taught, but that was the result of this foundation in getting a range of languages what are called procedural languages in C, object-oriented languages in the form of C++, functional languages in the form of Lisp. And that was enough of a broad-based background to then sort of bootstrap myself and with some difficulty in some time certainly to learn PHP and to learn SQL, to learn JavaScript. More recently I’ve been learning a little bit of Ruby as well. And so I think students perhaps spend a bit too much time strategizing early on when what’s really important is just understanding programming and understanding principles of software engineering and design. And everything else can be picked up along the way. And so that would be my biggest takeaway is really look for foundational experiences and classes and teach with that in mind as opposed to teaching a specific language.

[00:20:02] SY: I think it was your last lecture in a course where you said that students are not just software engineers, but computer scientists. What is the difference?

[00:20:11] DM: When I say computer scientist, I mean someone that does understand these underlying concepts that we explore in CS50 and certainly many more in other CS courses. If you focus on being a software developer and you can certainly be equally successful in solving problems and writing code, but in my mind, you don’t necessarily have that same foundation. You might have learned or your entry point might have been at a higher entry point at a different level of abstraction and that certainly doesn’t need to be the case and at the end of the day these are just terms and with their own semantics and you could be both a computer scientist and a software developer. But the distinction that I’ve tried to make for some students is sort of at the level of entry and where they begin and where their understanding starts and I think the lower level your understanding can be the more astute and observer you’ll be of code that you see and write in the future, I think the deeper and understanding you’ll have and the more our weight you can bring to the table in design discussions and conversations because you really do understand some of the lower level implementation details and trade-offs in time and space and performance and so forth. For me, that’s the distinction, but they’re certainly not mutually exclusive.

[00:21:15] SY: So getting that foundation and being a computer scientist, does that require having a full degree? Is it just about taking that one CS50 course? Is it about reading a couple of books? At what point can I say, “Okay, I have the foundation, now I can move on to JavaScript”?

[00:21:32] DM: I mean, I can say from my own personal experience, I only felt like I could call myself a proper computer scientist after I had finished graduate school frankly.

[00:21:42] SY: Oh, interesting.

[00:21:42] DM: As an undergraduate when I took some, I think I probably took eight or so courses, give or take, in computer science and then I took many other courses in related fields and electives in Harvard’s core curriculum. I didn’t really feel like I could call myself yet like a computer scientist, you know, programmer maybe, but even then budding programmer and learning programmer, but it was after taking another eight or ten or twelve courses in graduate school where I felt, “Okay, at this point, if I can’t call myself a computer scientist, I don’t really know who could,” because everyone goes through the same trajectory if they’re becoming faculty or going off into research and industry. So that isn’t meant to be discouraging but rather I think what you learn as a computer scientist is really what I try to message in CS50 and in the classroom and it really speaks to the sort of level of comprehension, of sophistication, of abstraction that a student learns at. You don’t need to worry so much about the title per se but really the methodology I think of learning and people can ultimately call themselves software developer, computer scientist whenever they feel they’re ready. For me, it took some time.

[00:22:46] SY: And I think that’s a big question in our community too is deciding, “Can I go straight into a programming language that I know I’m going to use on the job? Or should I take some time and get into the fundamentals? And if so, how much time do I spend and should I get a CS degree?” Should I get a CS degree is probably the most… one of those popular questions that we get and you have one, actually a PhD as well, I’m wondering how valuable do you feel that degree is in the real world? Is it as directly applicable? I think we like to think it is. Or is it more about informing the way we code or how do you see the value of that?

[00:23:23] DM: It’s a good question and I should probably do defer to folks who are actually making hiring decisions in the real world as to just how much value they place on it. I mean to some extent, a degree, whether in computer science or anything else is really just signal. It’s a signal from a university or an institution, accredited, or otherwise that is saying, “We attest to this person’s background in or excellence in some particular field,” and that’s indeed what a transcript does. So in that sense degrees of any form tend to be useful mechanisms or heuristics that employers can rely on because there’s been some filtration so to speak by another presumably reputable entity. So there’s a utilitarian aspect certainly I think for any degree, CS or otherwise. With that said, if one’s aspiration is to be a software engineer, case in point, I took two courses in computer science after which I was entirely self-taught when it came to software. And so I think that’s also a testament to the fact of just how self-empowering software engineering can be and even computer science more generally, whereby once you do kind of have the lay of the land, you know what your interests are, your comforts are. You can kind of dive deeper in any number of different directions. And so as such, you don’t need a degree to learn. You don’t need anyone’s permission to learn and you certainly don’t need to enroll in informal program to learn. But with that said, I think it depends. Reading a book does not I think a computer scientist make or a software engineer make because it’s a very passive experience presumably. It really is in the application of things you’ve learned or read or heard and maybe that’s the form of programming. Maybe it’s the form of writing proofs. Maybe it’s the form of building a system physically. I think it really needs to be some active experience. And so we got asked every once in a while by students online, “Is it okay if I just watch CS50’s lectures and not do the problem sets?” Well, yes, it’s certainly fine if you’d like to do that, but I do think practically speaking the returns are lower, whether it’s CS50 or any other course. So I don’t think degrees are requisite, but they do provide structure and I do think the value of formal classes free or otherwise is that hopefully the person teaching the class has given some thoughts to how best to present the material, how best to structure it that you yourself just might not be able to figure out on your own just by Googling and poking around online and finding your way. Leaning on folks who are pedagogues is perhaps a useful thing if their teaching style matches well with your learning style.

[00:25:47] SY: And now it’s time for Tales from the Command Line brought to you by Red Hat. Since we’ve been talking all about teaching computer science, we’ve brought in Tom Callaway, a senior program manager at Red Hat who also oversees a lot of the technical curriculum development that they do for their CO.LAB Program. Tell us a little bit about CO.LAB.

[00:26:08] TC: Red Hat created the CO.LAB Program to provide an opportunity to do STEM outreach to middle school girls, specifically to students who haven’t had a lot of exposure to STEM curriculum and programs in the past. And the goal of the program is really to help them understand how the concepts that make open source work can be applied in their lives as well without scaring them off and trying to frighten them with GitHub or anything.

[00:26:33] SY: Yeah, because you only really get a day with them, right? You can’t really build an app in a day at that level when you’re just getting started. I feel like they’re really difficult.

[00:26:41] TC: Yeah. I mean, one of the things that we discovered was that they didn’t even have a sort of basic computer UI interaction skills that so many of us take for granted. I mean, their interactions with technology are mostly through things like smartphones and iPads. And so when we would tell them to do something like, “Well, go to file and open a document,” they couldn’t do it because that’s just not in their universe of practical skills.

[00:27:07] SY: Oh, that’s so fascinating.

[00:27:08] TC: And so for us we have to really keep that in mind and we want to make sure that because we don’t want to have them have an experience where we expose them to some technology and they get frightened by it and they go, “Well, this isn’t for me,” because at that age is really pivotal where even a single resounding negative experience can really turn them away and they can say, “You know what? This is not a girl thing or this is not a me thing,” and we don’t want them to have that interaction with us.

[00:27:32] SY: Tell me about this idea of teaching open source, because that seems to be a big part of your curriculum as well, teaching kids what it means to be open and to do things in the open and that’s so interesting to me because I’ve never thought of open source as something that is teachable. It feels like a culture, a community, a mindset. How do you teach kids to be open?

[00:27:54] TC: You know, when we look at this, we immediately knew that we weren’t going to have the opportunity to teach it in a sort of traditional computer science sense. You can’t teach programming in a day and have it be a meaningful and positive experience, especially not for people at this age and experience. What we decided to do is sort of to distill open source into its core concepts. At its core, open source is collaboration. It’s sharing, it’s remixing, it’s transparency. And so these are concepts that we felt like we could, through an experiential learning, give them the chance to see how they work in practice. And so it’s about helping them to collaborate, to work together to solve problems, to encourage them to share what they learn as they’re learning it. One of the tasks that we do in CO.LAB is we have them build a digital camera out of a Raspberry Pi. And almost all of these cases, the girls that are going through this program have never had any sort of electronics device without its cover.

[00:28:52] SY: Interesting.

[00:28:52] TC: And so here we’re handing them a single board computer that has no case, that has no cover, and telling them, “Okay, now we’re going to start connecting wires to it and now we’re going to start putting the connectors in the right place, in the right order.” And like with any sort of process with students, there will be students that pick it up quick and there will be students that take a lot longer to figure out what’s going on. And so we actually encourage them is to when we see that’s done or we see someone that has figured it out is to say, “You know, you don’t have to come to the educator to get that answer. You can get that from your peers.” And very quickly, they start collaborating together to build these cameras to understand what they’re accomplishing. And this helps reinforce that not only can they do these tasks but also that they can work together to get it done quicker.

[00:29:38] SY: So that’s interesting because I totally get the transparency, the collaboration part, but usually in an open source project, there is a set of core contributors, right? Everyone can technically join the project, but there is usually a set of core contributors and even sometimes there is a board involved in a big open source project and then there’s also the chance that there is a benevolent dictator for life, right? That’s a concept as well. So when you think about the social structure around open source, is that something that gets taught as well or how do you deal with that?

[00:30:13] TC: We do have a lot of those structures in place to make sure that the experience flows well. So we have someone that’s acting as the educator in the room. We have an adult that is from their school or group that is there to make sure that they stay on task. So in that sort of analogy, we have that top-level project leadership as just an educator in the room who is saying, “Okay, that’s nice. Time to stop taking selfies and get back onto what we want to do.” We set ground rules for what our expectations are, like there’s no cellphones involved in the program when we’re doing it. Everyone is very clear on what we are expecting from them and what we can give them in assistance.

[00:30:55] SY: So teaching open source and teaching the principles of open source, that is a decision that you all made and decided that it is important to do. Why is it so important? What is the value of teaching these principles when you could technically teach them a lot of different things?

[00:31:10] TC: It goes back to the core of what Red Hat is about. I think that open source is so important to everything that we do at Red Hat that we wanted to sort of build a program that would help prep the next generation of entrepreneurs, of people who maybe they’re starting a company, maybe they’re working for a company or maybe they’re just interacting with the next 50 years. I mean, when I was a kid in the ’80s, technology was a thing that if you didn’t know technology, you could still get around, you could still do everything you needed to do and today that’s not the case anymore. Technology is so much a part of every aspect of our lives that pretty much no matter what you’re going to be when you grow up you’re going to need to have a comfort level with technology in order to be successful at it, and we wanted them to understand that through the ideas and techniques that open source presents, you cannot only be comfortable with technology, but you can be the master of it.

[00:32:13] SY: So tell me about how you’re connecting it back to the real world because having that very special one day of building and playing with camera sounds awesome, but if the overall mission is to expose them to technology and make them hopefully excited about doing STEM stuff in the future, how do you connect it back to jobs, to degrees, to the real world?

[00:32:38] CT: One of the things that we’ve done is we’ve tried to reach out to local academic institutions when we go and do CO.LAB so that they can send someone that is a student in one of these programs who is using technology in their studies or their research and let them come and talk to these girls and say, “You know, here’s how I use technology in what I’m studying,” and then they can see, you know, our educator, they look at her and they see, “Wow! This is someone I could be 20 years from now.” But we want to try and shorten that gap. We want to try to sort of put somebody in there so we had somebody come in from a school and say, “You know what? I’m a computer science major,” or, “I’m a marine biologist and this is how I use technology in my research.” And then they can say, “Well, you know, not only can I see where I’ll be when I’m a grown-up, but maybe this is me when I go to college.”

[00:33:28] SY: Yeah.

[00:33:28] CT: And this is how technology impacts and this is how open source impacts what they do.

[00:33:34] SY: I’m wondering if you have a story about a girl who came in. Maybe she’s a little bit shy, maybe a little bit intimidated by technology and how that day changed her mind. Has that happened?

[00:33:47] CT: Oh, it happens every time we do a CO.LAB.

[00:33:49] SY: Yeah.

[00:33:49] CT: There’s always a girl who comes in and the first thing she says is, “My brother would love this. My brother would love doing this.” And in almost every single time by the end of the CO.LAB, she switched over to, “I had no idea I could do this. This is so cool. I want to show my brother so that we can do these things together.” And that’s the turning point for me is because I know that there’s so much the society builds up that says that this is a girl thing, this is a boy thing. And if we can, through open source, help that girl to see that she can participate in this, that this is not a gender-driven thing, this is a humanity thing. It fills me with so much hope for the future every time we have that experience and the good thing is that we have that almost every single time.

[00:34:41] SY: And now back to the interview. So I want to talk a little bit more about you as a person and as a professional because you’ve studied a lot of things. You have a ton of accolades and you’ve studied things like botnet, cybersecurity, digital forensics, which I think is absolutely fascinating. Why teaching?

[00:34:58] DM: This is all a big accident, I think, right place, right time. With that said, I did go into graduate school and pursue a PhD so that I could teach and that I would have the credentials on paper to open doors if I wanted to teach at a place like Harvard or really any university where there’s typically requirement of an advanced degree. But I found my way to teaching fairly accidentally. And as I tell students occasionally in CS50, I ran for student government essentially in college, I think junior year, and lost horribly. And I still remember one of the most memorable experiences, not in a good way, was the debate that, the candidates, we all had. And I just remember performing very poorly and being very poorly spoken and just not nearly performing at the level that the candidate who actually won did. And my response to that ultimately was ironically to pursue a teaching opportunity because I figured that might be one of the best ways to get better at speaking in public composure and so forth.

[00:35:53] SY: Interesting.

[00:35:54] DM: And so senior year of college did I TA, a course called “Introduction to Technology” essentially and this was taught through Harvard Extension School, the continuing ed program. And then fast forward to the end of that semester, the instructor at the time decided to step down and there was a vacancy and I somehow talked my way into as a senior in college becoming the lecturer for this course at Harvard Extension School that same introduction to technology and I was the one giving the lectures and designing the curriculum and I was so determined to prove myself because I was the youngest person in the room literally. I was still 21 or so years old and it was mostly adults in the classroom. And that was the one and only time I’ve worn a suit with suspenders teaching. I thought a suit, a suspender, and my glasses would make me seem older than I was. I’m not sure it really worked. I don’t know. But that really what my appetite for teaching. And thereafter, I really found a passion for it and I loved the performance aspect of it, the connection that you have with the students, and the material. So I went off and taught high school for a year. I then taught at Tufts briefly up the road from Harvard, and then started the PhD program. And then in my final year, when I was about to graduate that my advisor who was the previous instructor for CS50, he decided to step down as he was becoming dean of a school in the university. And so I somehow talked my way into that job for what was supposed to be a year and somehow or other, 12 years later, here we are.

[00:37:13] SY: So you’re great at teaching and great at talking.

[00:37:15] DM: Talking myself into what seemed to be temporary roles. Yes. That’s for a while.

[00:37:20] SY: So you studying all those really advanced technical topics, has that influenced or played a role in how you teach?

[00:37:26] DM: Oh, for sure. I’d like to think that some of the topics we explore in CS50 that are atypical for an introductory course are the result of just my own personal interest in certain higher level concepts that I myself might have only learned in higher level courses as well. I think a lot of faculty raised eyebrows when they see just the range of topics we explore in the course. You yourself mentioned asymptotic notation or Big O notation. We get right into that very early on. And I think with the proper setup and I think with the proper abstractions can you indeed teach fairly advanced topics earlier than might be traditional and it’s all the more empowering and I think interesting for students rather than spend a week or a month on loops or another week or a month on functions, which that’s fine if students need that amount of time, but it’s hard to see the forest for the trees when you’re so focused on minutiae and lower level details that are important, but they certainly don’t excite. Most students probably don’t get too excited about for-loops, but they might about cryptography or forensics, which are just domains in which you can apply those same fundamentals of loops and functions and so forth.

[00:38:32] SY: So for folks listening who are hoping to get that computer science foundation, hoping to move forward in their careers and just be more comfortable, I think, with the world of computer science, what advice do you have for them?

[00:38:43] DM: I think take your time and don’t fear failure. I mean, I myself only got up the nerve my sophomore year of college to even take computer science class, the same class as CS50. I was too intimidated. Freshman year, I shied away because the course, the fields, the industry had this reputation to be where and I just assumed that everyone else would surely know more than I. And that’s just a very unproductive unhealthy approach, I think, to learning anything. Everyone should feel equally empowered and able to go learn something new if it’s of interest to them. If you find that some course whether it’s CS50 or something else just isn’t working for you or resonating, that’s fine. Stop and just try something else. Don’t give up on the field. See what’s the best fit for you.

[00:39:27] SY: Now at the end of every episode, we ask our guests to fill in the blanks of three very important questions. David, are you ready to fill in the blanks?

[00:39:36] DM: Sure.

[00:39:37] SY: Number one, worst advice I’ve ever received is?

[00:39:40] DM: I can’t help but think that most anytime tech support has told me to reboot my computer is not the right advice because I’d like to think that I’ve tried that already and that’s why I’m calling technical support. And so I’m not sure that’s the worst advice, but it’s definitely recurring. And I think that frankly by educating all the more people to troubleshoot problems themselves and to think critically, we can probably move away from those rules of thumb and actually have deeper discussions when people call in with their technical problems that they do need a helping hand with.

[00:40:10] SY: Number two, my first coding project was about?

[00:40:14] DM: First one that comes to mind that wasn’t assigned to me was my own final project in CS50 when I took it in college and it was a program written in C, designed to enable students and teachers to sign up for time slots on some high-end computer equipment that the university had. This was meant to replace a sheet of paper.

[00:40:34] SY: And did it replace sheets of paper?

[00:40:36] DM: Probably not because tragically C was not the right language in which to implement such a solution, but it was the only language I knew at the time and it was admittedly meant to be a proof of concept, but the experience unto itself was valuable. It’s just that most people signing up for the machines wouldn’t have had the know-how to open up a terminal window and run a compiled C program. So it was really just a proof of concept of the idea.

[00:41:00] SY: number three, one thing. I wish I knew when I first started to code is?

[00:41:05] DM: Just how long problems will take to solve and how addictive it is to solve not just those initially foreseen problems but any number of new features that you suddenly start to envision and you realize how better and better you can make some solution.

[00:41:20] SY: When did you first learn that lesson?

[00:41:22] DM: I’m not sure I have yet. It still takes me much longer than I intend to solve problems in code.

[00:41:27] SY: Me too. Well, thank you so much David for spending some time with us and sharing all your knowledge and expertise on teaching, on learning.

[00:41:35] DM: Thank you as well.

[00:41:43] SY: This episode was edited and mixed by Levi Sharpe. You can reach out to us on Twitter at CodeNewbies or send me an email, hello@codenewbie.org. Join us for our weekly Twitter chats. We’ve got our Wednesday chats at 9 P.M. Eastern Time and our weekly coding check-in every Sunday at 2 P.M. Eastern Time. For more info on the podcast, check out www.codenewbie.org/podcast. Thanks for listening. See you next week.

Command Line Heroes trailer:

[00:42:20] GC: At the end of the meeting, they were in agreement. They wanted one data-processing language. The language which came to be known as COBOL.

[00:42:27] SY: That’s programming pioneer, Grace Hopper. We told her story last season and there was so much love for the tale of Hopper and the early days of programming languages that we decided to follow up with a whole season of amazing language stories. This is Season 3 of Command Line Heroes, an original podcast from Red Hat. And I’m your host, Saron Yitbarek. In Season 1, we tracked the emergence of open source.

[00:42:55] MAN: I think a world without open source is almost bound to be evil.

[00:43:00] SY: In Season 2, we pushed the limit of what developers can shoot for.

[00:43:04] MAN: One day we’re going to put humans on Mars. We’re going to explore even further to find Earth 2.0.

[00:43:11] SY: But we cannot wait to share Season 3 stories with you. Each episode takes you further into the world of programming languages. We’ve been out on the road, listening to hundreds of developers and sysadmins, and your excitement for languages, your curiosity has inspired us to devote a whole season to exploring their secret histories and amazing potential.

[00:43:33] MAN: The language I love the most right now is Python.

[00:43:35] MAN: One language I love is JavaScript.

[00:43:39] WOMAN: Okay. I know this sounds weird, but a language that I love is VAX Assembler.

[00:43:48] SY: There’s no wrong answer. We’ve got COBOL. We’ve got JavaScript. We’ve got C and Perl and Go. We’re taking you to the college campus where basic was COBOL together. We’re diving deep into shell scripts so we can master the language of ops. Around the globe, heroes are using programming languages to develop a brighter, more open future. And we’re all along for the ride no matter where we’re coming from.

[00:44:13] WOMAN: We now see all of these collaborative projects that are interwoven. So it’s quite an evolution.

[00:44:19] WOMAN: Most programming languages, you can just learn a bit and you can really like make it do whatever you want.

[00:44:26] SY: It’s a meeting of the minds between humans and our technologies, a journey that extends the possibilities of programming past anything that’s come before. Command Line Heroes Season 3 drops this summer. You can subscribe today wherever you get your podcast so you don’t miss an episode. Check redhat.com/commandlineheroes for all the details.