The Stack Overflow Podcast

How a top-ranked engineering school reimagined CS curriculum

Episode Summary

The home team welcomes a student and a professor from engineering powerhouse Olin College for a discussion of computer science education and how Olin prepares its students to hit the ground running as software engineers.

Episode Notes

Olin College of Engineering has one of the top-ranked undergrad engineering programs in the US. Its computing curriculum is a concentration within the engineering major, not a standalone major. The upshot is a liberal arts-informed course of study with fewer math and theory requirements than a typical CS degree and a greater emphasis on practical, job-ready skills like code quality, testing, and documentation. To learn more about how software design is taught at Olin, explore the course.

Andrew Mascillaro is a senior at Olin majoring in electrical and computer engineering. He’s currently a software engineering intern at Tableau. You can find him on LinkedIn.

Steve Matsumoto is an assistant professor of computer science and engineering at Olin; his academic interests include crypto and cybersecurity. You can find him on GitHub or through his website.

Episode Transcription

[intro music plays]

Ben Popper Don't let siloed security tech get in the way of protecting your business. Cisco XDR simplifies security operations, empowering teams to act on what truly matters faster. Discover Cisco XDR at cisco.com/go/xdr. 

BP Hello, everybody. Welcome back to the Stack Overflow Podcast, a place to talk all things software and technology. I'm your host, Ben Popper: worst coder in the world, joined as I often am by my colleagues and collaborators, Ryan Donovan and Cassidy Williams. Hi, y'all. 

Ryan Donovan Hey, Ben. 

Cassidy Williams Hello!

BP So for those who don't know, Ryan is the Editor of our blog and our newsletter, and Cassidy is the CTO over at Contenda and has been a contributor to Stack Overflow’s editorial since I joined in 2019. Today we have a great topic. We're going to be chatting a bunch about computer science education. Cassidy, Ryan, y'all both went through this in a fairly traditional sense, right? 

RD Yeah. 

CW Yeah. Majored in computer science, graduated in 2014. I feel so old when I say that because, man, it's almost been 10 years.

BP Well, when you say it, it makes me and Ryan feel really old. 

CW That's the point! No, I'm sorry. 

BP Ryan, you went to CMU and did computer science or technical writing or a bit of both? 

RD Yeah, I had a little specialization in computer science. I took the Intro to Programming Fundamentals, a CS 001 and 002, and an AI course. But I had a lot of friends who were sleeping in the computer lab for their operating systems course and such. 

BP Gotcha, gotcha. Things could have gone differently, you could have stuck with AI at CMU back in the late-90’s and who knows where you'd be now. All right, very cool. We're going to chat with two folks from Olin College today, a bit about how they do curriculum, some of their thinking on software design, larger scale software systems, and also what these things are going to look like in the future, especially as the sort of generative AI revolution is changing a lot of our approach to education. So without further ado, I would like to welcome y'all to the program. Andrew, do you want to introduce yourself to the listeners? 

Andrew Mascillaro Hello, everybody. My name is Andrew. I'm a senior at Olin College of Engineering. I major in electrical and computer engineering, but I tend to spend a lot of my time doing assorted software projects. I’m excited to share some information about that with you today. 

BP Fantastic. And Steve? 

Steve Matsumoto Yeah, so I'm Steve Matsumoto. I'm an Assistant Professor of Computer Science and Engineering here at Olin College. I’m in my fourth year of teaching here. My specialization was in cybersecurity and privacy. I've been moving more into computing education as well. And like Andrew, I have graduate degrees actually in electrical and computer engineering, but most of what I do on a day-to-day basis is computer science. 

CW I'd love to learn more about Olin's computing curriculum. I've known some folks who have gone through that computer science curriculum over the years, but I've heard it's different from a traditional computer science curriculum, if you could talk more about that. 

SM Yeah, I'd be happy to talk about that. So one of the things that we try to be very clear about is that we are not a computer science program. That's why we, in fact, call it the Computing curriculum. It's, in fact, not a major of its own, but it's a concentration within the Engineering major. Part of the implications of that is that we have a very small footprint curriculum because of its status as a concentration within a major, rather than a major in and of itself. And so because we only have a few courses in which to deliver that content, we actually have to be very careful about what we cover within those and the skillset. So I would say that I think the last time I ran the numbers, we probably cover about 75%, in terms of credit hours, of what a typical computer science curriculum would cover. So we have basically three required courses. We have an introductory course, we have a theory course, and then a systems course. So basically the idea is that students take one course that is sort of a high level course and a low level course. They also have to take a discrete math course, and then they have room for about two electives. So all told, it's only about six full courses worth of material. But we try to offer a lot of education in terms of the skills that students will need to succeed. We know that we can't possibly cover everything that you'll need to know in your programming career, and I would say that even computer science programs can't really do that. But what we can do is try to equip you to hit the ground running in your career as a software engineer.

RD So is this more focused on the sort of application of the computer science ideas? I know the computer science program started as kind of math and still is heavily rooted in math and logic, so I wonder if you're getting closer to fingers on the keyboard. 

SM I would say that that is very much true. We do have –I think Andrew can probably speak more to this– but we definitely don't have as much of an emphasis on math and also on theory as probably other computer science courses. I mean, my undergraduate was in computer science and math so I feel like I had quite a lot of it. Here just the math requirement is effectively one course.

AM I would agree. Taking the courses it's like you jump straight into the development of interesting projects with the software as opposed to focusing on the theoretical aspect of it. For example, in a data structures and algorithms class, I made my final project a chess engine, since I really like to play chess. And so it was more about applying that knowledge quickly into something that is more tangible, something more exciting to the students than particularly focusing on the math aspect of it.

RD Is a lot of the coursework project-based like that? Are you just building things that you want to build?

AM Yeah, I would agree that a lot of it is building things that you want to build. For example, in the introductory to software design course, we have a series of projects, and some of these projects include reading DNA sequences or creating games or doing other web scraping projects, and this is how you learn how to code, if you will. It's less about memorizing the different sorting algorithms. You still learn some of those things, but it's more engaging so people tend to be really excited about doing the projects that they're working on in the course. 

CW What would you say are the pros and cons of approaching it in this way?

SM So I'd say from the perspective of teaching these things, I think one of the things is we find that students are really motivated to get a lot of different pieces of the project working to really explore and learn things that are going to be relevant to them. So our introductory course is called Software Design, and the final project in that course has fairly few constraints. All students have to do is to build a significant piece of interactive software. So for a lot of them, that's a game. They get to think about how to do game design, how to actually represent that in code, and they learn libraries that are relevant to that, which is often Pygame. But some students decide that they would rather go off and build a web app and so they'll end up learning Flask, for example. Or they want to implement a program that interacts with the webcam and so they'll go off and learn OpenCV, for example. So I think one of the nice things is that students can take what they are interested in and really pursue the pieces of programming that are going to be relevant to those interests. And I think that when we talk about computing, we want people to see how ideas from computer science and from software engineering can be relevant to whatever discipline you're working in, and I think that that's a really nice way to do that. I would say that the cons of doing things that way are that there are sometimes students who will go through, and I wouldn't say that they don't know specific ideas, but they might not recognize it as that because we don't formally teach it that way. So for example, sorting algorithms I think is a really good example of that where they might not know this is what quicksort is versus merge sort, but they understand the principles behind them because we're focusing on learning how to learn. So we kind of equip them with the skills to go out and find those things if they need to, but we're not having them trace through those different sorting algorithms on the board in class, for example. 

BP Just out of curiosity, is there an empirical foundation to the decision to teach this way versus perhaps a more traditional one? Do you find that this gives students the tools they need to succeed when they enter the job marketplace, or is this more of a philosophy of a certain kind of education pedagogical approach that just was developed uniquely at Olin?

SM I would say that from my knowledge of Olin's history, we have very much been a project-based school pretty much since its founding, and Olin is not that old. It's only about 20 years old. But we have often focused on all aspects, so this is not just in the computing curriculum, this is in all of our courses, we tend to be fairly project-based. And I think that is a big part of the sort of Olin culture, the Olin educational culture. There has been lots of research to show that this can be effective in certain ways. I would say that specifically within the computing space, there seems to be some evidence that it is useful, but it is not clear the extent of that. I know that a lot of that work has looked at things like self-reported surveys; people feel like they know more, or people feel like they know the things that are relevant to them. I don't know of too much work that actually shows that that is the case. 

RD In looking at the software design course, say you have a bigger emphasis on code quality testing and documentation. That definitely feels like a difference from what I experienced. Can you talk about the thinking behind that and how that shakes out in practice?

SM Sure. At least from the teaching perspective, one of the things that I found when I came here was that there was a lot of students struggling to do things like these larger projects, and part of that was because when you're first starting out with programming, you don't have all of the skills that you need to do a good job debugging or to really think about what your code is doing. And I think that in part, the emphasis that we put on writing your own tests and documenting your functions in a very detailed way, essentially forces you to engage with those ideas before your project gets too large. And I think that that can be really helpful because it's also a habit that you can continue to use in later courses. I'm sure that we have all written code and then come back to it a few months later and had to kind of page everything back in and remember what that code was doing or what the specific behavior of a function might be. So we really tried to emphasize thinking about that and making sure to document that. We encourage our students to think about the fact that your software may outlive you. Other people are going to be engaging with your code. That other person might be you six months into the future, but in any case, you want to make sure that you can continue to engage with that code with fairly minimal overhead. So we try to build up that habit early and I think that that has paid off. Somewhat recently I had a professor come to me and say, “I can tell which of your students have taken Software Design or which of my students have taken Software Design, because I can see that there's a very noticeable difference in code quality.”

AM And I will mention in my capstone project, a bunch of my teammates, it's a team of four working on a year-long project, it's very clear that the people in my group have focused on code quality. We've spent a lot of time writing tests for a Python package we're writing. It's got like 100% code coverage and we're being very meticulous about these details to make it readable. I would say it's definitely helpful to be able to learn these things early so that it's not as much of a surprise in an internship or in a job when these things tend to be a decent percentage of the development time. 

CW It feels like an incredibly practical approach that this is the way things probably should be taught. The theoretical stuff is important, but it's nice to know this practical way of building and learning to your interests and following best practices. Has it been something where it has reflected well for students generally in job placements and interviews where they're still able to do the whiteboarding interviews and those kinds of gross things that still stick around? 

AM I would say that I generally feel prepared for job interviews, et cetera, when it comes to knowing the software. You get a general conceptualization of how code works, and as long as you take the general algorithm course to know how, for example, to solve some of the interview problems, you're familiar enough with code to be able to jump right in. And there's minimal hesitation, for example, for writing the functions, the loops, et cetera, whatever needs to take place.

RD Because this is sort of a different way of approaching a college curriculum, what are the issues you run into? What are the new problems you've had to solve? 

SM I think for me, one of the major challenges that I've encountered in my past few years of teaching is that I've had to create a lot of the materials myself. I can adapt to some extent, existing materials, but I often find that if I want to do things like model good code quality in solutions, there's a lot of work that I might need to do to adapt an existing solution. So I probably spent quite a bit of time doing that. Or sometimes I find that a book will explain this concept in a way that is very common, it's the way that I learned it, but it makes it a little hard for students to connect that with reality. I can think off the top of my head of one example, which is that oftentimes when you learn something like class inheritance, oftentimes the example that's brought up is that you have an abstract base class, which is usually a shape or an animal, and then you have specific instances of that. And I think that can be in some ways helpful to grasp the sort of general idea of what inheritance is, but it's not a piece of software that I can imagine a person writing in practice. So typically the way that we try to introduce that, especially because a lot of our students choose to do games as their final project, is we actually introduce that as a game design. So we might introduce a class that is like a sprite or a character that has a set of stats and then certain characters might have specialized stats, but that type of application is much closer to what we might find in reality. But certainly creating those can sometimes be a lot of work.

AM Additionally, being a teaching assistant means that you have to do a lot more on the fly, since it's not just about knowing the answers to questions that are in a given problem set or knowing a specific set of curriculum. Sometimes someone will ask me a question about how to debug something in JavaScript for them for a project that they're trying to create, and then a few minutes later, someone is asking me about Docker or AWS Lambda, and it might be something that I've never seen before and I have to teach myself a little bit, and then I'll be able to help them out. It's exciting work, but it's definitely not your typical class. 

RD Yeah. We talked to one of our million rep users who basically use Stack Overflow like that. They answered a lot of questions in order to learn about specific software. 

BP Yeah, “What is this Git thing? I’ve got to get familiar with this,” and now they're the number one answer-giver, point-earner on the subject for whatever it was. So I guess a question for both of you, to what degree did Stack Overflow play a role in education, whether that's as a student and a learner or as a teacher? How do you feel about its use by folks to ask and answer questions, but also sometimes to copy and paste code? Where do you see it fitting in, for better or worse?

AM I think that Stack Overflow –maybe this is just the way I view it– it’s like the baseline documentation for software packages. If the software doesn't have good documentation, especially if it's a very small package or something that is hard to use like Pandas is sometimes, that tends to be one of the pretty popular ones, it's useful to be able to go to Stack Overflow for those use cases and then also for trying something completely new. For example, I was making a tool for a webcam in Bash and I needed to know how to use FFmpeg commands.

CW Oh, FFmpeg can do anything.

AM I know, it's so powerful, but also parsing those arguments, so it was nice to be able to use that. But it's also been a way for me to practice things that I already know. So I'll answer questions on Stack Overflow now. In fact, once one of my friends actually ran into my answer for one of their questions, which was amazing.

CW Nice, that's an amazing feeling. 

SM Yeah, and I guess from my perspective, personally, I use Stack Overflow pretty much every day, but when I use it in teaching, I actually find that it's a really good way to engage with the idea of basically how to ask good questions and how to read the answers to those questions. So oftentimes I use Stack Overflow like posts to teach students how to ask questions like, “Can you create a minimal working example of the problem that you're trying to solve? Can you really clearly articulate what the problem that you're trying to solve is where you might be stuck?” to really contextualize that question. And oftentimes in class, I will rely on live programming. So oftentimes I might have a problem that I have posed for myself, but I actually haven't written the solution because I think that actually modeling that process of, “Hey, this doesn't work. And actually I can't remember what this specific command is. Let me go and search for how to do this.” And oftentimes I will pull up a Stack Overflow post and sometimes I'll talk through, “Okay, this response was accepted, but it's actually not quite good and here are the reasons why.” I think learning to do that is a really valuable skill as a programmer, and it's something that I think can really only be taught by watching people go through that or by going through it yourself. So I find it is a really valuable tool for teaching. I also find it really valuable for myself because oftentimes there are some things that are not documented and you just need to go and ask. I remember personally, at some point I was having some problem with my Tmux configuration file, and I spent a lot of time trying to come up with a good minimal working example for this. And I asked this question and then I got a response from the maintainer of Tmux who actually explained, “Hey, there's this very specific behavior. This is why it's doing the thing that it's doing.” And that was actually super helpful.

RD I'm super jealous of y'all learning to code with Stack Overflow at your fingertips. 

BP And I have one more question to ask. What have you been doing with the latest wave of generative AI? What's your experience asking a coding question to ChatGPT versus asking on Stack Overflow? And these new AI models, which are quite good sometimes at providing code, debugging code, talking about code, what role do you think they'll play in sort of the educational experience you've been working on? 

SM So personally, I actually haven't used ChatGPT very much, and part of the reason for that is actually that I'm trained in cybersecurity and privacy and I try to be fairly privacy conscious online. And we had a talk here where part of it was about some of the ethics of AI and there was a sort of interactive exercise that was like, “Hey, use ChatGPT and find this stuff.” And I went to go do it and it was like, “You need to give us a phone number,” and I said, “Okay, I have this Google Voice number that I can just provide it,” and then it said, “No, you actually have to give us a real phone number.” And I thought at that point I was like, “No, no, I'm not going to do that,” so I kind of just sat out the exercise and I followed along with someone who was sitting next to me. But because of that, I haven't actually used it much myself, but I've seen students use it in class and it can do a lot of really cool things. And for me, I actually don't mind it that much. I gave students an exercise to put together a configuration file for CMake and they just threw it into ChatGPT and it spit out more or less a perfect configuration file. I mean, it was a fairly simple project, and I was like, “Oh, that's really cool that ChatGPT can do that.” But I think for me, I try to format at least exercises and projects in a way that you really have to demonstrate understanding. It's not just about getting the code to work. And in general, my assignments tend to be that correctness is usually only about half of the points. Did you use good style? Did you actually think through the ideas? Did you engage with the ideas? Those are, to me, much more important. So I think ChatGPT is a useful tool for helping you turn those ideas into code, but for me, I do try to focus much more on the ideas more than the code. 

AM In the last couple of months I've explored ChatGPT mostly for fun just to see, “Oh, how powerful is it? What can it really do?” I made a prank website for one of my friends with all the code being generated on ChatGPT. 

CW Perfect.

AM And I was like, “Wow, it can actually create canvas elements in JavaScript and upload photos or do image processing, create forms, et cetera.” I'm sure it can do a lot more than my silly use cases, but for now it was just out of personal interest. 

BP Right. But you're not too worried about competing with it for a job after you matriculate this fall.

AM I haven't thought about that too hard yet. 

CW I think it's going to be a long time before we have to really worry about our jobs. Knock on wood, who knows. You're going to be laughing at me next year, but we'll see.

[music plays]

BP All right, everybody. It is that time of the show. We’ve got to shout out somebody who came on Stack Overflow and spread a little knowledge, helped to save a question from the dustbin of history. Awarded two days ago to FirstOne, “How do I get column names for a given MySQL table?” Thanks, FirstOne, for popping in to give an answer. Congrats on your Lifeboat Badge. You've helped over 35,000 people, so we really appreciate it. I am Ben Popper. I'm the Director of Content here at Stack Overflow. You can always find me on Twitter @BenPopper. Email us with questions or suggestions; it's podcast@stackoverflow.com. And if you like the show, why don't you do me a favor. Leave us a rating and a review. It really helps. 

RD I'm Ryan Donovan. I edit the blog here at Stack Overflow, which you can find at stackoverflow.blog. And you can find me on Twitter @RThorDonovan.

CW I'm Cassidy Williams. I'm CTO at Contenda. You can find me @Cassidoo on most things. 

AM I'm Andrew. I'm a student at Olin. You can find me on GitHub @Intermezzio. Check out any of my projects that you find interesting. 

SM I’m Steve Matsumoto, Assistant Professor of Computer Science and Engineering at Olin College. You can find me on GitHub @Syclops. You can also email me at smatsumoto@olin.edu, or you can visit my website, stevematsumoto.net. If you want to learn more about the software design class, you can visit softdes.olin.edu. 

BP All right. Well thanks to you both for coming on. Appreciate the conversation. And to everybody else, thanks for listening. We'll talk to you soon. 

CW Bye!

[outro music plays]