I was recently interviewed by Sally Phelps, the Director of Postgraduate Planning at Olin. We talked about computer science at Olin, which is something we are often asked to explain to prospective students and their parents, employers, and other external audiences.
Afterward, I wrote the following approximation of our conversation, which I have edited to be much more coherent than what I actually said.
I should note: My answers to the following questions are my opinions. I believe that other Olin professors who teach software classes would say similar things, but I am sure we would not all say the same things.
|Photo Credit: Sarah Deng
Q: What is the philosophy of Olin when it comes to training software engineers of the future?
To understand computer science at Olin, you have to understand that Olin really has one curriculum, and it's engineering.
We have degrees in Engineering, Mechanical Engineering, and Electrical and Computer Engineering. But everyone sees the same approach to engineering: it starts with people and it ends with people. That means you can't wait for someone to hand you a well-formulated problem from a textbook; you have to understand the people you are designing for, and the context of the problem. You have to know when an engineering solution can help and when it might not. And then when you have a solution, you have to be able to get it out of the lab and into the world.
Q: That sounds very different from a traditional computer science degree.
It is. Because we already have a lot of computer scientists who know how data structures work; we don't have as many who can identify opportunities, work on open-ended problems, work on teams with people from other disciplines, work on solutions that might involve electrical and mechanical systems as well as software.
And we don't have a lot of computer scientists who can communicate clearly about their work; to have impact, they have to be able to explain the value of what they are doing. Most computer science programs don't teach those things very well.
Also most CS programs don't do a great job of preparing students to work as software engineers. A lot of classes are too theoretical, too mathematical, and too focused on the computer itself, not the things you want to do with it, the applications.
At Olin, we've got some theory, some mathematical foundations, some focus on the design of software systems. But we've turned that dial down because the truth is that a lot of that material is not relevant to practice. I always get a fight when I say that, because you can never take anything out of the curriculum. There's always someone who says you have to know how to balance a red-black tree or you can't be a computer scientist; or you have to know about Belady's anomaly, or you have to know X, Y, and Z.
Well, you don't. For the vast majority of our students, for all the things they are going to do, a big chunk of the traditional curriculum is irrelevant. So we look at the traditional curriculum with some skepticism, and we make cuts.
We have to; there's only so much time. In four years, students take about 32 classes. We have to spend them wisely. We have to think about where they are going after graduation. Some will go to grad school, some will start companies, some will work in industry, Some of them will be software engineers, some will be product managers, some will work in other fields; they might develop software, or work with software developers.
Q: So how do you prepare people for all of that?
It depends what "prepare" means. If it means teach them everything they need to know, it's impossible. But you can identify the knowledge, skills and attitudes they are most likely to need.
It helps if you have faculty with industry experience. A lot of professors go straight to grad school and straight into academics, and then they have long arguments about what software engineers need to know. Sometimes they don't know what they are talking about.
If you're designing a curriculum, just like a good engineer, you have to understand the people you're designing for and the context of the solution. Who are your students, where are they going, and what are they going to need? Then you can decide what to teach.
Q: So if a student is interested in CS and they're deciding between Olin and another school, what do you tell them?
I usually tell them about the Olin curriculum, what I just explained. And I suggest they look at our graduation requirements. Students at Olin who do the Engineering major with a concentration in computing, they take a relatively small number of computer science classes, usually around seven. And they take a lot of other engineering classes.
In the first semester, everyone takes the same three engineering classes, so everyone does some mechanical design, some circuits and measurement, and some computational modeling.
Everyone takes a foundation class in humanities, and another in entrepreneurship. Everyone takes Principles of Engineering, where they design and build a mechatronic system.
In the fourth semester everyone takes user-centric design, and finally, in the senior year, everyone does a two-semester engineering capstone, which is usually interdisciplinary.
If a prospective student looks at those classes and they're excited about doing design and engineering -- and several kinds of engineering -- along with computer science, then Olin is probably a good choice for them.
If they look at the requirements and they dread them -- if the requirements are preventing them from doing what they really want -- then maybe Olin's not the right place.
Q: I understand there are student-taught software classes – can you tell us more about that?
We do, and a lot of them have been related to software, because that's an area where we have students doing internships, and sometimes starting companies, and they get a lot of industry experience.
And they come back with skills and knowledge they can share with their peers. Sometimes that happens in classes, especially on projects. But it can also be a student-led class where student instructors propose a class, and they they work with faculty advisors to develop and present the material. As an advisor, I can help with curriculum design and the pedagogy, and sometimes I have a good view of the context or the big picture. And then a lot of times the students have a better view of the details. They've spent the summer working in a particular domain, or with a particular technology, and they can help their peers get a jump start.
They also bring some of the skills and attitudes of software engineering. For example, we teach students about testing, and version control, and code quality. But in a class it can be artificial; a lot of times students want to get code working and they have to move on to the next thing. They don't want to hear from me about coding "style".
It can be more effective when it's coming from peers, and when it's based on industry experience. The student instructors might say they worked at Pivotal, and they had to do pair programming, or they worked at Google, and all of their code was reviewed for readability before they could check it in. Sometimes that's got more credibility than I do.
Q: What does the future look like for computing at Olin?
A big part of it is programming in context. For example, the first software class is Modeling and Simulation, which is about computational models in science, including physics, chemistry, medicine, ecology… So right from the beginning, we're not just learning to program, we're applying it to real world problems.
Programming isn't just a way of translation well understood solutions into code. It's a way of communicating, teaching, learning, and thinking. Students with basic programming skills can use coding as a "pedagogic lever" to learn other topics in engineering, math, natural and social science, arts and humanities.
I think we are only starting to figure out what that looks like. We have some classes that use computation in these ways, but I think there are a lot more opportunities. A lot of ideas that we teach mathematically, we could be doing computationally, maybe in addition to, or maybe instead of the math.
One of my examples is signal processing, where probably the most important idea is the Fourier transform. If you do that mathematically, you have to start with complex numbers and work your way up. It takes a long time before you get to anything interesting.
With a computational approach, I can give you a program on the first day to compute the Fourier transform, and you can use it, and apply it to real problems, and see what it does, and run experiments and listen to the results, all on day one. And now that you know what it's good for, maybe you'll want to know how it works. So we can go top-down, start with applications, and then open the hood and look at the engine.
I'd like to see us apply this approach throughout the curriculum, especially engineering, math, and science, but also arts, humanities and social science.