felienne-hermans.jpg

Training or Education? Three Perspectives on Computer Science Teaching

by Eduard Kamburjan — 23 September 2024
Topics: interview

Felienne Hermans is full professor of Computer Science Education at the Vrije Universiteit Amsterdam, and she also works as a high-school CS teacher one day a week at Lyceum Kralingen in the Codasium program. She is fascinated by the question of how we can teach everyone to program. In her PhD dissertation, she studied how we can help people working with spreadsheets better, by repurposing methods from software engineering. After her thesis, she switched her research focus to programming education. Based on her experiences in teaching programming to kids, she developed Hedy, a new programming language that makes it easier for kids to learn textual programming. She wrote up all that she learned about learning and teaching in The Programmer’s Brain, published at Manning. In 2021, she was awarded the Dutch Prize for ICT research. She also writes a quarterly column for De Ingenieur, the magazine for professional engineers in the Netherlands, and she has a weekly column in BNR Zakendoen (a Dutch national radio station).

What do you think is the biggest problem in computer science education?

That, as a field, we do not agree what we are doing exactly. I teach both computer science at a university and in the academy where we train teachers. In the academy, it is very clear what the end goal is: At the end of this year, this person must be able to teach in high school. Their job perspective is 100% clear. Even though we do not agree on everything in the teacher education, there is a consensus on this. In all the computer science places where I have worked and studied, we do not have this consensus. Are we educating scientists, or are we educating programmers? For example, the ACM curriculum does not have a course about research methods. And this ACM curriculum is extracted from what computer science programs are doing every 10 years. So apparently, we are not really educating scientists because we do not cover research methods in themselves.

We have universities of applied sciences, e.g., HBOs in the Netherlands, or FHs in Germany, which are supposed to specialize in educating developers. In the Netherlands, universities very desperately do not want to be HBOs. It is considered somehow “lower”, where the less smart children go, “HBO” is almost used like a slur. However, many graduates of CS also become developers, and that is a fact that is hard to embrace for universities, because it does not fit their self-image.

I think if we want to improve things, we have to be clear about what we are doing. And if we are doing science, we have to stop doing practical software development, and we have to teach people how to do proper science. Or we should teach developers, but that will require very different skills from professors, which they currently lack, because there are few university professors that know how to author, maintain and ship large software systems. I think that this is the core and the rest is a tower of problems on top of this dichotomy.

You use the term education of programmers? Do you mean training, or do you mean also education in a broad sense?

This is also the question that I’m asking: Are we educating people to build personality or preparing them for a job? There is a Dutch education philosopher Gert Biesta, and he names three parts of education: Having the skills to function, socialization into a community and subjectification, something like becoming your own person. I think we are doing a bit of the first two and very little of the latter. This is a great, deep question, one that is never discussed at any level in any computer science program. What are our goals? What are the life values that we are projecting or teaching to students?

The people that teach in computer science programs typically do not know any educational theory, they do not know any of these questions. And that in turn means that it is also not in the computer science program, and as a result, you cannot have conversations on education with people that do not know educational theory and the conversations remain shallow and devoid of deep research.

Often when we teach in universities, we have our university teaching certificate (UTQ), but we have a lot less educational background, not only educational theory, but also in didactics. And most of what I know from computer science qualification or just teaching qualification in university is very practical. How do I lecture? How do I talk to a room? How do I grade? How do I create an exam? And it is very good that this exists. When I was a student, those courses did not exist and it showed. It is necessary, but not sufficient. To be a good teacher, you need a really deep reservoir of knowledge, psychology, philosophy, and exposure to a lot of different ways of knowing. If we want education to be better, they would need to take such courses.

Do you think this has reasons in the history of computer science?

It is a common misconception about the origins of computer science that we are like this because we grew out of mathematics. Computer science actually did not grow out of math. Before the mid 70s, CS was not its own academic discipline: It was part engineering, part linguistics, part mathematics. Dijkstra, and other people, then pushed to have more mathematics in computer science—and then it was very thoroughly mathematicized and gained credibility. Before that, computer science was a lot more broad, for example, Noah Chomsky was a linguist and Herbert Simon was a political scientist who won both a Turing Award (Simon also won a Nobel Prize for economy). So, you see in the beginning of the field, it was much more diverse—and then it was made tremendously smaller and tremendously more theoretical because people were standing to gain from that.

But we have less tradition in some sense, and mathematics is a little better at educational theory. Mathematics education is a more proper research field and has been around for a long time, longer than it has for computer science. People that do math education have a better theoretical backing. They can also be limited in the type of philosophy that they know, but at least it has a good backing. So when computer science was mathematized, they took a part of mathematics but not the part about being serious about education.

Is there something specific about problems with education in the software sciences, such as software engineering, formal methods, or programming languages?

In terms of education, SE, FM and PL do things really differently. I would say the field of programming languages is worse in a certain sense in the ideological monoculture. Software engineering, at least the software engineering I know from when I was a grad student, actually had some ideological diversity in terms of research methods. For example, ICSE had papers that were formal methods. ICSE had papers that were user studies with interviews, ICSE had some papers that were theory building. It had quite a range of research methods. That is not exactly the same as education, but it is very close because it shows students that all of these things are computer science.

For example, in programming languages, you can have a theorem or maybe a benchmark. Those are almost all the accepted research methods in POPL or PLDI, and that also influences your educational program—we do not have a research methods course in most programs, so we only teach the research methods what we use. As opposed to many other parts of computer science. Or all the other parts of life, I would almost say.

Should we sit down as a community and agree on education and training and research measures, or at least it should be more diverse?

I know this is never going to happen, but I do think it would be a wonderful idea if computer science programs around Europe for university-level bachelors would meet and just get their minds straight. Are we educating scientists? Then we have to also be really clear about this in communicating. If you want to be a programmer, do not come to this program. The goal is to become a PhD. You can also be something else, but that’s the goal. Just as if you study philosophy or journalism, you may or may not become a journalist. But then, of course, that would greatly limit the people that would be interested in this, with serious financial implications that we can’t afford. Or we say we are educating programmers, requiring radical changes to the program.

Some universities have separate programs for software engineering and computer science. Would a way forward be to diversify what computer science means instead of putting everything under one umbrella?

Yes and no. Everything that you split up creates communication problems to the 17 and 18-year-olds, because you get the challenge of communicating how the programs differ. And the current trend in computer science research and education would always be a devaluation of software engineering. Because people consider fields based on theory and formalisms to be superior. So it is very hard to do this from a communication perspective, because one will be devalued.

You are teaching teachers and university students, but you are also teaching computer science in a high school. What do you think is the biggest difference, how programming is taught in high school and how it is taught in universities? And can universities learn from the way it’s done in high school?

I can only answer for the Netherlands, where I live and work. Here, there is hardly any difference because the high school curriculum was created by university professors that do not really understand high schoolers. So we end up in a situation where one of the end goals of our high school curriculum is: “A student should be able to decide how elegant an algorithm is.” They are seriously expecting 16-year-olds to do this, which my third year students in university cannot do.

But one thing I think that I learned from teaching in high school is that high schoolers really want to know why they’re learning something. University students also want this, of course, but if they already picked computer science and your course, they have more patience. Whereas for high schoolers, you have to motivate your decisions a lot, which is fantastic. We do not engage with our university students in the same way.