Study track: Programming Languages and Systems (PLS)
High-level programming languages are a key enabling technology in modern software development. For any non-trivial programming task, it is essential for both quality and productivity that programmers can use the right language – whether general-purpose or domain-specific – to express their intent in a clear and natural way.
A well-crafted program in an appropriate language is both transparent and maintainable to humans, and suitable for further analysis and transformation by machines. With proper support from the language, programs can be subjected to automated or semi-automated formal verification and certification, as well as being compiled for efficient execution on current and emerging platforms, especially massively parallel ones, such as GPGPUs or FPGAs. In particular, after decades of relative obscurity, languages rooted in the functional-programming paradigm are now emerging as a front-runner for applications where productivity, correctness, and even performance, are central concerns.
In most IT fields involving research and advanced development, there is a growing need for professionals with a firm grasp of modern programming-language technology to exploit existing programming tools most effectively, or to develop new ones. This purpose of the Programming Languages and Systems track is to produce graduates with such competences.
The PLS study track is designed to give you a solid foundation in the principles of programming languages and formal methods, with a particular emphasis on exploiting programming-language technology in safety- or performance-critical application domains.
You will learn the basic concepts and methodology for formally defining the meaning of programs and languages, and for proving correctness, equivalence, and other properties of both program fragments and particular language features. You will also get a get a systematic knowledge of resource-aware models of computation, and of the various fundamental limits on computational performance, or accuracy of program analysis. The focus is on gaining long-lasting knowledge and skills, including the ability to learn on your own, that will last you throughout your career.
At the same time, you will get hands-on experience with performing analysis and transformations of non-trivial programs, with writing tools for assisting in such tasks, and with expressing practical algorithms from a variety of domains in a form suitable for parallel execution.
Graduates with a PLS-heavy profile typically find employment as software engineers or architects in industrial or financial enterprises, or as developers of programming tools at all levels, either for supporting in-house coding tasks, or to be distributed more widely.
You will be particularly demanded by companies dealing with technically complex specifications and interfaces, who can benefit from the use of formal or semi-formal methods, especially in safety-, security-, or resource-critical applications. There is also a rising need for PL specialists in banking and other financial organizations working with large-scale data systems.
Alternatively, you may continue your studies at the PhD level, whether in Copenhagen or internationally, where you will find that a documented solid foundation in theory and practice of programming languages is a strong asset in the application process, as well as in your subsequent research work.
If you want to follow this study track, your BSc background should include an introductory compilers or programming-language implementation course, as well as solid working knowledge of basic discrete mathematics (elementary set theory, induction proofs, big-O notation, etc.). On the other hand, even if you have no significant prior background in functional, declarative, or concurrent programming, you will in any case receive an introduction to those topics in the Advanced Programming course, prior to starting on the PLS track.
Sample MSc theses
To give you an idea of what an MSc thesis in the PLS track could be about, here are some representative examples of thesis titles from 2014 and 2015:
- Practical session types in Rust: Developing safe communication protocols for real-world applications
The recommended courses in the PLS study track are shown below. Keep in mind that, like for all the study tracks, none of these are actually mandatory, and you may replace them with relevant courses from other tracks, as you see fit.
|Block 1||Block 2||Block 3||Block 4|
||Advanced Programming||Advanced Computer Systems||Semantics and Types||Program Analysis and Transformation|
|Advanced Algorithms and Data Structures||Machine Learning||Computability and Complexity||Proactive Computer Security|
|Year 2||Programming Massively Parallel Hardware||Topics in Programming Languages||Thesis|
|Project or elective course||Parallel Functional Programming|