
Jürg Gutknecht
We Speak Your Language S04 E04
This episode of “We Speak Your Language” is a bit unusual.
It was produced the way we produce all episodes, namely by recording the interview live, in one take. We then submitted a first version of the transcript (where we suggested a couple of minor cuts) to Jürg Gutknecht.
Most interviewees make only minimal changes, but Jürg Gutknecht’s alterations to the transcript were more extensive, up to a point where the spirit of the interview was changed (which is fine: it takes a fool to never change one’s mind about anything).
Publishing an audio version so different from the transcript made no sense though, and we did not want to cheat, and re-record it based on the transcript, losing all spontaneity in the process.
Therefore, together with Jürg, we decided to only publish this transcript.
So, here is Jürg Gutknecht in his own words.
Darius Blasband :
Welcome.
I am Darius, and I will be your host today, here at “We speak your language”, the podcast for programming language nerds.
This is an episode I’ve been looking forward to for a very long time. Not that it matters this much, but it has been recorded in 20th century-fashion, sitting around a table like human beings, in gorgeous Zurich.
Our guest today is Jürg Gutknecht, and for us programming language people, he is a rock star. A living legend. He even got his own Wikipedia page.
Enumerating his achievements would be tedious though. So, instead, I’m going to introduce him with something a bit different, a personal anecdote. Please bear with me.
I was 25 years old, a barely adequate student, already trying to start a business, but very insecure in many ways.
I was in Zurich. Back then, I did not go on business trips that often, so it was a big deal to me. I was meeting with a company specialized in Modula 2 compilers. Those were the days…
We were having lunch at some lakeside restaurant outside Zurich, and en passant, I must have mentioned that I would have loved to meet Niklaus Wirth. I was a Modula 2 guy, and had been a Pascal guy before that. The people I was with then suggested I drop by at the ETH, where Wirth was working. It is not exactly Fort Knox, right? Why not?
So I got there, and found my way to Niklaus’s Wirth office. His door was locked. As I was standing in the corridor, wondering what to do next, this gentleman approached me and asked me what I was doing there.
The gentleman was Jürg Gutknecht.
He told me that Niklaus Wirth was on a sabbatical, and we started talking shop, as computer scientists do. Languages, compilers, the Lilith machine, Oberon, my own work. The conversation went on and on for a couple of hours, and he then had his researchers demonstrate projects they were working on, some advanced things around the Oberon operating system.
It is a great memory. I was a nobody, I definitely looked like a nobody, I showed up out of nowhere, and Jürg Gutknecht dropped whatever he was doing, and treated me like a guest of honour, infinitely graceful.
As my late and beloved grandmother would have said, Jürg Gutknecht is a Mensch.
Jürg, more than 30 years after we first met, welcome to the show.
How are you?
Jürg Gutknecht
Well, retired.
Darius Blasband
According to your biography, you were part of the Swissair real-time system programming team at the age of 18. How did that happen?
Jürg Gutknecht
Well, that’s a good question. I didn’t know what to do, to be honest, after obtaining my high school diploma. Then, by chance, I ran into a guy I knew, and I started talking to him.
I told him that I didn’t know what to do, and then he said, “Why don’t you come to Swissair? I’m actually working there. I had to take an intelligence test, and now I’m programming.” Of course, I didn’t know what programming meant at the time, but he explained it to me, and it sounded very good.
So I said, “Why not? Why not give it a try?”. The next week, I went there and asked, “What is programming exactly? How can I help, and how can I join the team?” They said, “We are starting a programming course next month. All you have to do is pass an intelligence test.”
And they explained how programming works, so on and so forth, and I thought, “Oh, this is really interesting.” I took the test, passed and then joined the team.
And you know, I’ve never seen that guy again to this day.
From the very first moment, I knew it was something for me, and so I gave it my best. But even before the course was over, another guy —someone from IBM—came to visit the class, and said: “We need people for our real time project. We’ve started a new project for airline reservation systems, online and worldwide, and we need people for that. Is there anyone in this class who would be interested in joining us?” It was the time when computers seriously found their way into Swissair. And so I thought, “Yeah, why not?” I basically thought I knew all about programming already. The class was of course still going on. But I thought that basically, I knew already what it is about. I didn’t have to finish this class. And so I applied.
Unfortunately, I had to do something called ‘operating’— basically doing everything required to make the system work. But that didn’t have anything to do with programming, so I was really just basically helping to make the computer work,. I had to do that for a full year. I had to be there at night and day, at very irregular times. It was good, but I thought, “Well, now I know this too.”
The system was an IBM 360 at that time, and during the night, not much had to be done. So I was able to check out the IBM 360 with whatever I tried. During the night I fiddled around with its hardware panel and so I already learned all the details, everything about IBM 360. But after a year, I insisted on joining the system programming team because I badly missed programming, So I started doing low-level programming, all in 360 assembler at that time.
Darius Blasband
Obviously.
Jürg Gutknecht
Just machine language basically. My neighbor in that team was an electrical engineer. He studied at the ETH and got his diploma at the ETH. And then, after a while, we were starting to become good friends. He urgently recommended me to enter a university curriculum, any kind of curriculum at the ETH. He said it’s always an advantage if you have an ETH diploma. As he was an electrical engineer, he recommended me to do the electrical engineering study, and that’s what I finally did.
With a heavy heart I decided to leave Swissair and to enter ETH, but my work at Swissair was not completely done, so I became what’s called a working student at IBM. And in parallel with my studies, I completed my work at IBM by developing something called a front-end processor. And in parallel, I studied electrical engineering. But after a while, I realized that what I’m really interested in was not electrical engineering but mathematics. So, I switched from electrical engineering to mathematics, still as a working student at IBM. And after, I don’t know, four or five years, I received my diploma in mathematics. I stopped working at IBM and started teaching mathematics at some high school in the Swiss Rheintal.
Darius Blasband
I think that was in your biography as well.
Jürg Gutknecht
So that’s my story, basically, from nowhere via numerous detours to teaching mathematics at some high school.
Darius Blasband
So, from nowhere to programming, then back to academia, to teaching mathematics.
Jürg Gutknecht
Yes. That was basically my first stage in the whole computing story. It was actually quite successful, and I liked teaching mathematics, but I didn’t do any programming during that time.
Darius Blasband
How did you get lured away from teaching mathematics?
Jürg Gutknecht
One day, by chance again—my career has had a lot of chances and accidental events—there was an announcement from Niklaus Wirth at ETH looking for assistants in an exciting looking project with the development of something called “personal computer” as its goal.
I knew Niklaus and his work, of course, but I hadn’t worked with Pascal at all. I knew he was the big guy in Pascal and programming languages, but for me, that was another world compared to what I did at IBM. But at the time, because I was still young, I thought, “Why not try and apply?” So, I applied and was accepted. To be honest, I think Niklaus was quite happy with my application. So, I left teaching and joined the team. From then on, of course, I didn’t do any Assembler programming anymore. As you mentioned before, I started with Modula 2. My good luck was that, at that time, the Lilith project was starting to become a reality, and I immediately dove into it.
I thought, “OK, this is a totally different kind of programming, a totally different kind of computer, but also very interesting.” It was a new world for me, but based on the same set of skills as with IBM.
Darius Blasband
So, I understand what you mean by a new kind of computer. That’s a topic I’d like to get back to. But in terms of programming, what made it so different in your eyes?
Because, as I said, I was a Modula 2 guy. I wrote perhaps 500,000 lines of Modula 2, and to me, Modula 2 was Pascal made right, to a vast degree. I know there is more to it, but from where I stood, it was not that revolutionary. It was well done, but not revolutionary.
Jürg Gutknecht
Well, I have to say again that I didn’t know any Pascal before and hadn’t done anything with Pascal, ever.
Darius Blasband
OK. That’s such a strange thing.
Jürg Gutknecht
I was directly switching from IBM assembler to Modula 2. It had been such a long time that I didn’t do anything in computing that, for me, it was a new start. The capabilities I needed for Modula 2 were essentially the same as before: logical thinking, structured thinking, and modular thinking.
It was just a different language. It was a very different language. It was also a very different task and project, of course, with very different goals. It was all very different. So, for me, it was like restarting a very different kind of thing than IBM, but the skills that I needed were the same. Commenting on your assessment of Modula 2 I later learnt that Modula 2 was basically Pascal made ready for large-scale programming.
Darius Blasband
The Lilith story—you and I are showing our age by even knowing what the Lilith machine was—but in essence, and correct me if I’m wrong, but my understanding is that it was a dedicated piece of hardware with a dedicated operating system, fully dedicated to Modula 2 as the implementation language, and all three were tightly coupled.
And because of this coupling, it had things like abnormally compact code. I remember reading a paper where it said that the typical executable was like 25% in terms of size. Back then, that mattered. Today, it probably wouldn’t.
So, it was very much a compact effort to do all things together as a single platform, right?
Jürg Gutknecht
Yes, it was a holistic system design at an ultimate degree of simplicity, that was intentional, of course. By the way I just recently learnt that these characteristics are shared by the original Linux design, and I am therefore invited to give a keynote speech at an upcoming Linux conference. What a nice surprise!
Darius Blasband
I was happy to be able to use Modula 2, but I couldn’t just go and tell people, “Oh, you have to replace everything.” In other words, I was bound by existing operating systems and so on. The truth is, it worked, it worked great, I can tell you that.
What I mean by “it worked” is that the promise of Modula 2, in terms of being a rational, organized, structured modular language, did wonders. There were reasonably effective compilers; that part worked. But we deliberately stayed away from any system-related things: parallelism, interruptions… The language was a bit incestuous in the sense that there were very high-level capabilities, and then you could write interrupt drivers and other very low-level things. Obviously, we stayed away from these.
Jürg Gutknecht
I would agree. For me, it was a language for completing this project and building applications for a single-user system. As you say, it was all bound together, and, of course, I not just accepted it but started to like it.
Darius Blasband
You embraced it.
Jürg Gutknecht
Not long after my switch from teaching mathematics to coming to ETH, I had to teach a course about programming.
Wirth at that time advised me to teach this course based on formal stuff done by Dijkstra, like “A Discipline of Programming”: invariants, preconditions, postconditions, and all that stuff. Still today, I think this is really the foundation of programming. It is a mathematical formalism but in contrast to so much abstract nonsense out there its knowledge is not just advantageous but truly essential for any kind of professional programming.
Modula 2 was the ideal language to show how that works because it was simple and the constructs were very much compatible with what Dijkstra basically said.
Modula 2 with the absence of any bells and whistles was surely the best possible language for teaching programming. It was two things in one: the implementation language for Lilith and a teaching language for programming. So, it was very handy for me to use Modula 2 for both purposes.
Darius Blasband
This is always a very contentious question. To possibly foul mouth our colleagues, what do you think of Modula-3, for instance?
Jürg Gutknecht
I don’t know Modula-3.
Darius Blasband
Modula-3, the way I saw it, was bloated. It was Modula II with way too many things added.
Jürg Gutknecht
I was not involved at all in developing Modula-3, to be honest.
Darius Blasband
I can imagine, but even out of curiosity.
Jürg Gutknecht
No, I didn’t study it. Maybe I had a look at it, and I had the same impression as you. The name is basically wrong. It sounds like the bells and whistles whose absence in Modula 2 I was praising so much just returned.
Darius Blasband
There was too much to it.
Jürg Gutknecht
This is a typical phenomenon where people pretend to understand something, particularly with people like Wirth and Dijkstra. They claim to understand what these people want and what these people think, but they just pretend and in the end do the exact opposite, they don’t really understand.
Darius Blasband
This is an interesting segue to my next point. I’m a bit emotional because, in the days where everyone starts with curly braces, it is nice to have people to talk about nice languages.
Jürg Gutknecht
That’s OK.
Darius Blasband
Obviously, when Oberon came out, I had a look, again, with the same caveat, namely that I work in the industry. Going for a complete operating system is unreasonable; I have to live in the outside world. So, I looked at Oberon as a language.
I understand that, from a logical point of view, Pascal got streamlined and simplified to some degree to Modula 2, and then Modula 2 was further simplified to Oberon.
I had a conflicting feeling that in some areas it went too far.
I said, “OK, listen, we really have to live just with WHILE-loops?” I know that everything can be expressed with WHILE-loops, but do I have to suffer through this? What’s the point?
Sometimes, when I talk to young people about language design, I say “syntax matters”.
Ultimately, syntax is the user interface of your language. So, if the syntax is inconvenient, you make people suffer. The fact that mathematically all loops can be expressed as a WHILE loop is not the point. The question is, you want developers to feel comfortable with expressing complex thoughts using the language.
Jürg Gutknecht
I can only agree.
Darius Blasband
When you look at Oberon compared to Modula 2, the only loop construct in the early versions — I think it was changed later—was the WHILE-loop.
Jürg Gutknecht
I think there was a REPEAT-loop as well.
Darius Blasband
Really? I have the feeling that it was just a WHILE. OK, I stand corrected.
Jürg Gutknecht
I am pretty sure there was a REPEAT-loop as well, because these are dual; you check the condition at the beginning and check again at the end. So, if I remember correctly there was also a REPEAT-loop in Modula 2 already.
Darius Blasband
But there was no FOR-loop. If you do something which is a mathematical quantification. the FOR-loop is a nice thing to have.
Jürg Gutknecht
I don’t remember these details, but the rationale was dropping the LOOP statement because it was incompatible with the Dijkstra formalism. However, the real innovation in Oberon was type extension. At the time when Niklaus and I developed Oberon, there was this big hype about object-oriented programming. That I still remember quite well.
We didn’t want to add the whole mechanism and syntax that comes with object-oriented programming, but we saw that the basic thing with object-oriented programming is the possibility to derive new types from old types.
And then you set an absolute minimum. All the languages, Pascal and Modula 2, were strongly typed, which is good, because types cannot be misused.
We thought, we could allow type extension, we could allow deriving new types from old types , without sacrificing strong typing. And that was actually the basic innovation in Oberon.
I don’t remember the others, to be honest. I agree with you, some steps from Modula 2 to Oberon may have gone too far in the strive for ultimate minimalism. For example, explicit definition module have been dropped in favor of “*” markings, something that I have never come to like.
Darius Blasband
To me, type extension is a form of construct that allows you to implement essentially single inheritance. You can extend the type, redesign its behavior, etc.
Jürg Gutknecht
Yes, that’s basically true. I agree.
But object-oriented programming is really much more than just inheritance, in my view. For that I regret that I am retired, because for me at the moment, even today, it’s only half-way done. In fact, object-orientation is trying to model the real world and giving programmers the opportunity to model the real world and to map some parts on the real world into programming and model the programs according to the metaphor of the real world. But still today, objects are only passive; objects have to be activated from outside, they have to be remote controlled. They don’t do anything unless you call them and you advise them to do this and that and so on.
I think that objects should be active, like in the real world.
We are objects that behave somehow and do something actively and that would be one more step towards mapping the real world into programs. That would give a high-level opportunity to map parallelism, concurrency.
Concurrency is a very important aspect of programming, today and in the future, because all systems are now multi-core or multi-processor, and still, we have to model and implement concurrency in programs at a very low-level of abstraction with threads, critical sections etc.
Darius Blasband
Semaphores…
Jürg Gutknecht
Yes, semaphores and all that stuff. If the objects could be active in some sense, you wouldn’t need all that. You could speak of objects and, of course, inheritance, but you wouldn’t need this low level stuff from the 70s.
Coming back to Oberon, I regret not having made use of this thought and of this idea of trying to implement active objects in the language. But at the time of developing Oberon, it probably wouldn’t have been possible, because Niklaus wouldn’t have accepted it. He still wanted to do absolutely minimal stuff and add minimal constructs and all that. I think he wouldn’t have accepted it.
Darius Blasband
I have a little point of history that I’d like to check with you and I apologize as it’s a bit of an obsession, and again for those listeners who don’t know: Modula 2 is highly modular, block-structured, strongly typed language with a fairly rigorous syntax. It was a fantastic language. You could say that it was the language of my youth so everything about it should be fun and good.
It didn’t have a garbage collector though. It was still an old-fashioned language with manual allocation and deallocation. And you didn’t have C++ pollution like constructors and destructors, so you didn’t have anything explicit. When needed to allocate and deallocate on your own.
Jürg Gutknecht
Agree, that was just missing.
Darius Blasband
Don’t get me wrong; it was a design choice, and I respect it. The part that interests me is that, unless I am badly mistaken again, Oberon has a garbage collector. Was this garbage collector justified by “Oh, we need it,” or were we dealing with more complexity where manual memory management was no longer an option? Or was it a way to say, “Now we can support type extensions in a good way”? Is there a correlation?
Jürg Gutknecht
Well, of course, garbage collection is a good thing, and it doesn’t disturb any of the principles that we have talked about. Collecting garbage is an artefact that should be done automatically behind the scenes of programmers. Garbage collection is a step forward in current languages and operating systems. I don’t think that in Modula 2 it was intentionally left out; it simply wasn’t considered at that time. When Modula 2 came out, to the best of my knowledge, there were no examples that implemented garbage collection at that time. When did C++ come out?
Darius Blasband
I think the 80s?
Jürg Gutknecht
So basically after Modula 2?
Darius Blasband
I think it’s a bit later than Modula 2, but please don’t quote me on this. I feel like we’re on a very strange programming history exam right now.
Jürg Gutknecht
I think it was later. There was no example that implemented a garbage collector at the time. My point is that it was not intentionally left out. When we developed Oberon, we did have examples, such as C++. I wouldn’t find any argument against automated garbage collectors.
Darius Blasband
I fully agree with you. If there is a garbage collector, I use the garbage collector, I welcome the garbage collector. I am not sure if it’s in this book or the previous one, but there is a little section where I explain why I love garbage collectors. And thinking that you can do it better manually is absurd.
Still, when I interview people, there are those who tell me , “Yeah, we have a garbage collector, but here are all the ways we can do without needing it.” And my answer is: why? At some point, I hope I’ll be able to talk with the people that implemented Rust. Rust is a language that is entirely designed around the idea of how to do programs without a garbage collector.
Jürg Gutknecht
I don’t know… I don’t like it. But that’s another topic. Again, garbage collection is an artefact, and artefacts should be put behind the scenes of programmers rather than have programmers “optimizing” them by hand.
Darius Blasband
Sometimes I hire people fresh out of school, and depending on their curriculum, they sometimes have never seen a language without a garbage collector, and they literally don’t know what it is. Which is fine, except that they don’t understand the performance implications. I agree with you: we need an automatic garbage collector; it’s a level of abstraction that we need. But when you’re facing performance issues, the garbage collector is often something you can look into; limiting the number of allocations etc. So I agree it has to be out of the way, but we have to know that it is there.
Jürg Gutknecht
No, we shouldn’t have to know. It should be there without us knowing. It should be completely behind the scenes. We shouldn’t have to do anything, as programmers, in favor of or against the garbage collector. It should be completely out of our consideration. As performance issues are not an argument in view of today’s hardware performance, I wouldn’t find a single argument against an automatic garbage collector.
Darius Blasband
As I said, sometimes performance. It’s rare, it doesn’t happen all the time, but..
Jürg Gutknecht
Just think of Moore’s law. Performance is about a factor of 1000 faster today when compared to the era of Modula and Oberon, so it’s not an issue anymore if you have a well-implemented automatic garbage collector.
Darius Blasband
So, when we met in Zurich, like 35 years ago—doesn’t make you and me feel any younger—on my way back to the station, I bought your book about Oberon. It’s a book that describes the Oberon system, not the language. I still have this book, but I remember being a bit frustrated because there was that thing saying there is the operating system, the environment, and this and that. And there was just a small chapter that talked about the compiler, and you had the most minimal compiler described there. I felt frustrated by the fact that the compiler was described as if it was considered a detail. I am a compiler guy more than a platform guy, so I am different than most, perhaps.
Jürg Gutknecht
Well, the important thing about compilers is the principles of their implementation, and these have been discussed in many of Wirth’s books and essays. From that point of view, Oberon compilers are just an example among many others, and they perhaps don’t deserve a king size treatment, in particular as compilers like automatic garbage collectors are basically just an artefact.
More generally, looking back and considering the technology of today, even programming languages, are more and more becoming an artefact. What is much important is the runtime system, the development environment (), the packages that exist, etc.—everything around the language.
For example, I still do a lot of programming in Python. It is not a very nice language, but the whole environment is extremely good and effective, and this is what counts in the end. At the time of Modula and Oberon we certainly did not foresee this trend, which was probably a mistake.
Darius Blasband
I wouldn’t call it a mistake, but it struck me. In many similar books, they describe the things and they say, “Oh we have a compiler“, and they often don’t go as far as describing it because it’s a big chunk. In Oberon, the compiler was a small enough chunk to be as small as a chapter, which struck me as unusual.
Jürg Gutknecht
Again, compilers should not be a big chunk because they should be designed and implemented on the basis of a few clear principles. The only difference between an Oberon compiler and a language X compiler is its compact size. And this should not be overcompensated by an overly extensive treatment in a book like “Project Oberon”.
Darius Blasband
But that was 30 years ago.
Jürg Gutknecht
Yes, it was 30 years ago. At that time, we developed the compiler ourselves. There wasn’t a huge team of people working on it, like, for example, with .NET. It was a single person who implemented the compiler on the basis, as I said, of a few clear principles of construction.
Darius Blasband
As a matter of fact, it’s funny that you mention this because there are other projects or efforts that you did where you stated explicitly that one of the design goals is that it should be able to be maintained by one person: an explicit and deliberate design goal.
Jürg Gutknecht
Yes, a single person will never misunderstand herself, and the person will come up with a construction all of one piece, which is infinitely beneficial. Understanding this would be a great achievement.
Darius Blasband
How would you describe your work when talking to non-computer scientists?
Jürg Gutknecht
You mean after my ETH time?
Darius Blasband
During your ETH time.
Jürg Gutknecht
Implementing systems from the ground up. Designing and implementing programming languages and personal workstations.
Darius Blasband
But that is still in very computer science terms. What if you’re talking to your butcher and your butcher says “Oh, by the way, mister Gutknecht what do you do for a living?” Wat would be your answer?
Jürg Gutknecht
Well, of course, I was teaching for a living, which was very important and still is. Unfortunately, the development there is not so fortunate. We just had a small event a week ago, and some of my colleagues joined us. One of them used to teach an introduction to programming, which he did for a long period. He told me that he just recently passed his courses to someone else and that this person was not really teaching as he should. Teaching programming has become sort of a side topic, but for me, it was the most important thing to teach programming from the ground up. Until the end of my teaching career, I was still trying to use Dijkstra’s principles in my instruction as a formal basis. That was definitely one thing I could tell: I was teaching programming and computer science, and the third thing was that I was developing non-trivial programming languages and personal computers, always with the goal of full transparency and understandability in mind.
Darius Blasband
OK, that’s a very nice, nifty answer.
What would you do if you weren’t involved in languages, compilers, and, in your case, systems?
Jürg Gutknecht
At the moment, I’m trying to understand historical cryptographic machines and I have to say that I’ve started to get very interested in cryptography.
Darius Blasband
Ok and beyond computing? If computing were no longer an option.
Jürg Gutknecht
Is cryptography still considered computing?
Darius Blasband
Come on, of course it’s still computing!
Jürg Gutknecht
I don’t know, I would not go on holidays. This is an interesting question. I would probably do a lot of mathematics; read about mathematical puzzles and paradoxes. I really still love mathematics.
Darius Blasband
What software project would you have loved to be a part of?
Jürg Gutknecht
Well, certainly the creation of the internet. Also, as the biggest obstacle today, in my opinion, is that if you want to do any programming and in particular programming apps, it’s really hard to get into the environment. So, I would probably like to work on simplifying the entry into programming applications and eliminating artificial hurdles.
Darius Blasband
It’s an area where we have virtually unlimited computing power now, which makes it much more interesting than it used to be. Now we can do crazy development environments that we could only dream of.
Jürg Gutknecht
Of course. I still think that everything is much too and unnecessarily complicated, making use of the internet, etc. I would probably even use AI to simplify the use of stuff on the internet. I don’t know if I would like to work on it myself, but I would definitely like someone to work on it.
Darius Blasband
What do you consider the most important quality for someone in our trade?
Jürg Gutknecht
Intelligence, I guess.
Darius Blasband
That’s very vague. So you just have to be smart?
Jürg Gutknecht
Intelligence, Yes, and also love to details and perfection.
Darius Blasband
OK, this is going to be a bit of fun. Now, if you had a magic wand and you had the ability to remove one programming language from the surface of the Earth, which one would you choose?
Jürg Gutknecht
Probably Rust.
Darius Blasband
If you could direct our audience to read one book, one article, or one author, computing related or not, what would that be?
Jürg Gutknecht
I think computing related I would recommend Dijkstra’s ” A Discipline of Programming” and not computing related I would recommend Thorwald Dethlefsen’s book “Schicksal als Chance”. a wealth of wisdom in it.
Darius Blasband
Two (very different) classics…
Jürg Gutknecht
Yes, I think that’s what I would recommend.
Darius Blasband
What book would you love to forget so you could read it again?
Jürg Gutknecht
Very probably, it’s the same answer as before. Both books need to be read many times to get the full contents out of them.
Darius Blasband
What would you like to be remembered for?
Jürg Gutknecht
I think for teaching programming in a very special and personal way. On one hand, I am a mathematician, and on the other hand, I have done a lot of constructive digital work. According to Wirth and many others, this combination makes a lot of sense. And I have to say, I really combined those two fields for my teaching.
Darius Blasband
Thank you so much, Jürg. It was wonderful having you. We hope you enjoyed this episode of “We Speak Your Language.” Stay tuned for next month’s episode.
Have a great day!
