First Day: A New Chapter at the JKU
It’s Wednesday. Is this important? It’s my first day in a new position. So, perhaps the real question is: what’s going to be important to me from now on?
Let’s get the titles out of the way first: Today is my first day as Universitätsprofessor. That’s a full professor, chair, W3 Professor, gewoon hoogleraar, or similar. Yeah, there are lots of different names in different countries. It’s also my first day as the head of the Institute for System Software. The term institute is used here for something that’s a research group in many other places. This means I have the opportunity to work with a number of very smart people to offer university courses in the field of programming languages, compilers, and more broadly system software. It also means I am asked to advise, mentor, and support others in their research journey, from taking their very first steps, up to becoming their own independent academics, and professors in their own right. To me, this sounds fun. I am asked to help people learn, pursue knowledge, and develop their skills. Something I not only enjoy, but also find important to prepare the next generation to tackle the problems of our time. However, this also means I reached the end of a journey. That’s it. I am a full professor now, and I have convinced enough people that I am not entirely terrible at this job. Or so we all hope…
At this point, I already have to thank all the people at the JKU for the very warm welcome I received over the last few weeks. Particularly, thank you Peter, Herbert, Markus, and Karin, for all the support to get me started here! Similarly, I wouldn’t be here without my dear colleagues and mentors at Kent and in the wider programming language research community. You know who you are, I hope.
What Now?
With the new job and responsibilities, I need to think about what’s now important to me. What follows isn’t a detailed plan. I had already been asked to formulate one of those, and I’ll continue to work on realizing it. Instead, I wanted to think here a bit broader.
Teaching: Advocate for Fundamentals
Let’s start with teaching, since my first lectures will already be next week.
Our institute teaches various courses, including software development, compiler construction, advanced compiler construction, system software, dynamic compilation and run-time optimization, and principles of programming languages.
My impression from early discussions with colleagues is that I will need to work on making sure that we can keep teaching these fundamental topics in the future. While there seems to be a very strong push for AI everything, I remain to be convinced that this means that the fundamentals are any less important. On the contrary, it feels that we need to keep reminding people of classic techniques that are guaranteed to work, are correct, and efficient. So, when it comes to teaching, I think an important part of my job will be advocating for the fundamentals.
Of course, looking at the material I’ll teach this term on compiler construction and system software, perhaps I can adapt it in future years. Currently, 6 out of 13 compiler construction lectures are on parsing. This makes me want to work out what the most useful learning outcomes for such a course should be today.
Research: Take Risks and Pursue Problems Too Hard for Industry
Some people seem to advocate for exploring new things and expanding one’s horizon when reaching this career level. Indeed, I have the chance to take risks, explore new research topics and communities, and ways of working.
If there’s a single tag line for the work I have in mind, it might be: improve language implementations to better enable old and new kinds of applications. After all, I like to explore ideas that enable developers to make better use of computing systems.
This will take new ways of looking at problems. For instance, with few exceptions, I have been shying away from very formal work in the past. Though, a while ago I started dreaming of defining a new kind of high-level memory model, for which we may need a more formal approach in addition to building working prototypes. Looking at today’s memory models, they seem too low-level for dynamic languages such as Python and Ruby. I already gave a few talks about the background of this work and will also give one at SPLASH. This will be a huge project, and a risky one. Not least because it’s unclear whether the language communities care enough about the issue until they start suffering from not having a memory model more notably.
And then there is interpreter performance, a topic I have been working on for a long time already. Since I am now in a group with a long history in the area of compilers, I would like to double down on generating fast interpreters. Interpreters, the way we build them today, have a lot of headroom in terms of performance. The classic ones, implemented in C/C++, and even more so, the ones on top of meta-compilation systems. The work of Haoran Xu suggests that we can do much better. Unfortunately, it’s a really hard problem, for various reasons. Something that doesn’t fit into the short and mid-term priorities of most companies. But we can chip away at it slowly and steadily, benefiting lots of programming languages in the process.
I’ll also continue to work with my colleagues at Oracle on compiler topics and with colleagues from PLAS. We’ll keep doing fun stuff, some of which we’ll present at SPLASH in two weeks, including work on making programs slower (yes, slower!) and approximating the ground truth profile for sampling profilers.
I’ll stop here for now. Seems like I do need to get on with the actual job… somewhere in Science Park 3. I am looking forward to starting to work with all my new colleagues at the JKU and seeing which new collaborations and cooperations we can begin. If you’re a student and interested in a project, please see the Open Project’s page, where I will post more concrete project ideas in the future.
I suppose I’ll also occasionally still be on Mastodon, BlueSky, and Twitter.