This blog is about my work and play. Mostly work, but fortunately my work quite often feels like playing. I’m Mathias Ricken and a recent PhD graduate from the Programming Languages Team at Rice University. I’m also one of the principal developers of the DrJava integrated development environment, and I used to be instructor in the Computer Science department at Rice. I’m mainly interested in programming languages, concurrent programming, object-oriented programming and computer science education.
My main project is about testing concurrent programs (blog category). Two of the goals are race detection and schedule-based replay for Java programs, in the specific context of unit testing. I have also created invariant checker that allows the programmer to make statements about the concurrent behavior that have to hold true. I’m in the process of annotating the Java API with those invariants, but that’s a gargantuan effort. I’d love to get some help here.
Of course, my work has spawned some side projects as well. First, I really wanted Java annotations on local variables, something that is legal according to the Java grammar, but not supported by any of the current Java compilers and JVMs, so I did my first javac hack and created LAPT-javac. Allowing the invariant checker to perform Boolean operations of existing invariants was very cumbersome with the annotations defined in the Java standard, and the problems could all be solved very simply by allowing subtyping for annotations. I therefore created my second, much more important javac (and Java API) hack, xajavac (blog category), which greatly extends the capabilities of annotations. I’m currently lobbying for it to be included in some future version of Java or a JSR.
Recently, I have worked on Mint (blog category), a multi-stage extension of Java. Multi-stage programming (MSP) provides a safe way of generating code at run-time. In mostly-functional languages like MetaOCaml, this has been used to reduce the performance penalties of abstractions such as loops, recursion or interpretation. The main advantage of MSP compared to other techniques, such as string or LISP quotations, is that MSP guarantees type safety for the generated code statically, at the time the program is compiled.
I have also dabbled with some other limitations of Java, such as the lack of tail-call optimization and the very restrictive nature of
final variable initialization, but I haven’t had enough time. I’ve published a few papers on object-oriented design and CS education, and even started writing a textbook (blog category), but again, there’s not enough time for me or for my co-authors.
During the last few years, I’ve also been quite involved in the development of DrJava (blog category), a Java IDE specifically targeted at students. My work with DrJava is mostly “productive procrastination”, and I have introduced many “80%/20%” solutions: Features that work in most cases, but not all, but they greatly enhance the productivity. I believe DrJava has now become an IDE that can actually be used for large projects as well; in fact, we do all our DrJava development in DrJava. The enhancements are “80%/20%” and not “100% solutions because often we lack the infrastructure.
I’ve been a teaching assistant for many semesters, so there are some rants that go along with it. For the first time during the Fall 2008 and Spring 2009 semesters, I was an instructor and tought full courses on my own. I was thrilled, and I wrote a bit about this experience too (respecting confidentiality, of course). In the semesters since, I have supervised students doing independent studies in Computer Science. Then there’s also some fairly general stuff about grad school, of course. And there are some ramblings that are somewhat off-topic.
I hope you’ll enjoy reading my blog (although it serves mostly as a work diary for me). If you want to comment, please email me at mgrickenriceedu, and I will gladly set up an account for you.
I took the header photo in Finland, where my mother grew up as a child.