Taking programming to the Next Level
Are you interested in programming? Would you like to improve your craft and learn more about how programming languages work? There is no better way than exploring programming language design and implementation.
Language Engineering & IDEs
Would you like to design a programming language with minimal effort? There are now some fabulous tools to design domain-specific languages (DSLs). Martin Fowler has even invented a new paradigm name for this approach: Language-Oriented Programming. You could either focus on designing your own language or creating teaching material for some of these fancy tools for DSL engineering.
IDEs are now a critical part of the language engineering. Most IDEs for Java are very nicely extensible and we are happy to supervise topics about extending Eclipse or IntelliJ with support for some language or tool. If you want a concrete project, see our suggested plugin topics.
If you'd rather look into some advanced Scala topics, please assist us preparing some teaching material for our future Scala course!
Making the world safe & secure with static analysis
If you are concerned about safety and security of software systems that are embedded into everything we do, there actually is something you can do to make the world safer for our children: develop static analysis tools! We have two projects where you can contribute immediately.
- Goblint is a static analyzer for C code that we develop together with the Technical University of Munich.
- Alvor is an analyzer that statically validates SQL sentences embedded in Java code.
Testing so much that fear turned to boredom long ago? Try verified programming...
Verified programming is the future of programming. There are different approaches to this, such as Agda2, Coq, F*, but perhaps the easiest to get started with is Dafny. It has a simple tutorial on Rise4Fun and also runs in Visual Studio. It is thus very nice for learning this approach to programming, but it's not merely a toy: Dafny is used within the Ironclad/Ironfleet project at Microsoft Research to verify distributed systems.
Here, you could write your own account of attempting to verify a small program. We will help you select a good example based on existing tutorials. You don't necessarily have to succeed with the proof in order to complete the writing.
Post-Rebel Dynamic Software Updates
The most successful commercial tool for dynamic reloading of Java classes is ZeroTurnaround's JRebel. Are there any academic developments in reloading since then? One very interesting tool seems to be Rubah. It would be very interesting to see what are the capabilities of this tool and compare it with JRebel. This is a good topic if you are also taking their course on Java Fundamentals and find Java technology interesting.