Specialisation Software Languages and Software Engineering

About

The SOFT specialisation covers the programming languages, development tools, and abstraction & composition mechanisms that are needed for building and maintaining large-scale applications. We offer courses ranging from theoretical foundations (e.g., type theory in Haskell, formal proofs in Agda), over programming language paradigms (e.g, multicore and distributed programming in Clojure  and Scala) and implementation techniques (e.g., compilers and virtual machines), to advanced software engineering topics (e.g., quality assurance and security, meta programming).

In Detail

The Software Languages & Software Engineering specialisation is all about studying the Art, Science and Engineering of software construction. Obviously, the students entering our master already have good programming skills. The SOFT specialisation both broadens and deepens this competence to the level of academic mastery. Our ambition is to educate top-notch specialists in the domain of “software construction technologies of the future”. After all, graduating students still have a career of more than 40 years ahead of them! The SOFT specialisation therefore heavily focuses on the scientific aspects of programming languages and software engineering, rather than the mainstream software construction technologies that are trendy today but might no longer exist tomorrow. 

As a student in the SOFT specialisation, you will study, use and design state-of-the-art programming languages, powerful software development tools and highly innovative software frameworks. Depending on your personal interests you will study them on a conceptual level, on a technical level or —for the diehards— on a theoretical and/or implementation level. Whatever sparks your academic interest, our department is well-equipped with state-of-the-art hardware to explore it in depth (a distributed computing cluster, some many-core machines, smartphones, microcontrollers, Arduinos, Raspberry Pis, GPUs, …).

The SOFT specialisation comprises three mandatory electives and a long list of electives that allow students to put their own personal emphasis on their studies. Students interested in programming languages can deepen their fundamental scientific knowledge of the semantics of programming languages or implementation techniques for programming languages. Students interested in the art of programming can become more expert in various advanced programming techniques such as distributed programming and multicore programming. Students interested in engineering large systems can take courses on analysing software construction data and on software quality. Finally, students with a broad interest can pick and choose from any of these strands of courses. 

 

Software Languages and Software Engineering is a specialisation in our 2-year MsC in Computer Science of 120 ECTS. Students of this specialisation need to succeed for the carefully designed core of 30 ECTS that is common to all four specialisations, the 18 ECTS of three mandatory courses within this specialisation, at least 12 ECTS of electives within the specialisation, an additional 30 ECTS of electives from this or any of the other specialisation, and for a research training of 6 ECTS and a master's thesis of 24 ECTS.

The following is the list of mandatory courses:

Functional Programming (foundational, 6 ECTS, sem 2)
This course exposes students to advanced programming techniques and properties of statically typed functional languages such as Haskell. It requires prior knowledge in basic functional programming, as taught in our bachelor curriculum or in the boosting elective Higher Order Programming which can be taken in parallel to this course.
Meta Programming and Reflection (foundational, 6 ECTS, sem 2)
This course introduces the different principles and techniques of meta-programming (i.e. programs that manipulate programs). Students are exposed to a number of compile-time and run-time techniques. In particular, the course discusses the programming model and meta facilities of two seminal languages in the domain, Smalltalk and Lisp, and it discusses mainstream forms of meta-programming such as aspect-oriented development.
Cloud Computing and Big Data Processing (deepening, 6 ECTS, sem 1)
Cloud Computing and Big Data Processing is an advanced two-part course that introduces the foundational concepts and techniques of these fields, and motivates and illustrates their use within related frameworks and tools. Topics for Cloud Computing include security, consistency, reactivity, and decentralization (blockchain). Big Data Processing topics include cluster computing, fault tolerance, and data locality, partitioning and streaming. Knowledge of JavaScript and Scala is a plus.

Software Languages and Software Engineering is a specialisation in our 2-year MsC in Computer Science of 120 ECTS. Students of this specialisation need to succeed for the carefully designed core of 30 ECTS that is common to all four specialisations, the 18 ECTS of three mandatory courses within this specialisation, at least 12 ECTS of electives within the specialisation, an additional 30 ECTS of electives from this or any of the other specialisation, and for a research training of 6 ECTS and a master's thesis of 24 ECTS.

The following is the list of electives within the Software Languages and Software Engineering specialisation:

Multicore Programming (broadening, 6 ECTS, sem 2)
Whether you are using a laptop, a smartphone, or a server in the cloud, your machine likely contains a multicore processor. If you want your program to efficiently use this hardware, you’ll have to learn how to write parallel programs. In this course, we study different programming models and techniques for parallelism and concurrency, including techniques based on message passing such as actors, shared memory using transactions, and programming for massive parallelism on a GPU.
Software Quality Analysis (deepening, 6 ECTS, sem 2)
This course is about algorithms that represent programs as data in order to reason about their quality. Topics include static analysis for detecting bugs, symbolic execution for generating tests, abstract interpretation for predicting information leaks, and program transformation for modernising programs. The lectures cover the formal foundations of these techniques, while the exercise sessions study skeleton implementations in Scala.
Distributed and Mobile Programming Paradigms (broadening, 6 ECTS, sem 1)
With the advent of wireless technology and mobile hardware, distribution and mobility of hardware and software are getting ever more important. This course studies different programming models and techniques for distributed applications that run on mobile hardware (including message passing, tuple spaces, etc). The course also teaches a number of fundamental results in distributed algorithms such as the FLT theorem, CAP theorem and their implications. Students apply the acquired knowledge by building a mobile system on Android.
Next Generation User Interfaces (broadening, 6 ECTS, sem 2)
After attending the course on Next Generation User Interfaces, the student has an understanding of the interaction principles introduced by new devices such as smartphones, multi-touch tables or gesture-based interfaces as well as the theoretical background behind these interaction principles. The student is able to reflect on the qualities and shortcomings of different interaction styles, while placing the user at the core of the interface design process. The theory is applied in a group project where students design and develop their individual next generation user interface.
Interpretation of Computer Programs 2 (broadening, 6 ECTS, sem 2)
This course focuses on the semantics of advanced programming languages. Interpreters are used to study advanced control mechanisms such as generators and continuations. Macro’s are added to a dialect of Scheme to study advanced data organisation techniques such as objects, classes, and actors. The boosting elective Higher Order Programming is required in case your bachelor did not include an introduction to functional programming.
Compilers (broadening, 6 ECTS, sem 2)
This is a traditional course in compilers. Knowledge of any modern programming language is assumed, as well as a background in elementary formal language theory (i.e. automata, regular expressions, context free grammars, etc.).
Programming Language Engineering (deepening, 6 ECTS, sem 1)
This course bridges the gap between conceptual approaches to programming language engineering and their practical applications in terms of efficient language processors. This course studies a family of virtual machines that start from a straightforward mapping of a reference implementation in Scheme onto a C implementation and progressively addresses concerns such as automated memory management, lexical addressing, partial evaluation, runtime pools and optimization in general.
Fundamentals of Programming Languages (deepening, 6 ECTS, sem 1)
This course is about theoretical aspects of advanced programming languages (type theory, Hoare logic, dependent types, …) and proving their properties in the proof assistant Coq. The course is officially taught at the University of Ghent by a professor who was formerly working at VUB. We have booked one of VUB’s tele classing rooms such that VUB students do not have to travel to Ghent. The course is taught in Dutch with English course notes and exercises.
Capita Selecta of Software Engineering (broadening, 6 ECTS, sem 1+2)
This course is about creating truly intelligent development tools by applying advanced machine learning and data mining algorithms to software engineering data. Topics include predicting the location of defects in source code using classifiers such as Support Vector Machines, prioritizing test cases using Genetic Algorithms, and uncovering repetition in commit histories using Pattern Mining.
Capita Selecta of Programming Languages (deepening, 6 ECTS, sem 1+2)
In this course, students first learn to work with Agda, a dependently-typed functional programming language that can be used to rigorously prove properties of programs and even general mathematical theorems. Next, they apply this knowledge to study the basics of verified and secure compilation. The course is taught in a hands-on way and is evaluated through a course project.
Security in Computing (deepening)
The student gains insight in the properties of building blocks for security and can apply them to build security protocols. The student learns to apply cryptographic libraries to tackle software security problems. The student can also reason about the security vulnerabilities in advanced software systems. The student gains insight in state-of-the art mechanisms to protect applications.

Software Languages and Software Engineering is a specialisation in our 2-year MsC in Computer Science of 120 ECTS. Students of this specialisation need to succeed for the carefully designed core of 30 ECTS that is common to all four specialisations, the 18 ECTS of three mandatory courses within this specialisation, at least 12 ECTS of electives within the specialisation, an additional 30 ECTS of electives from this or any of the other specialisation, and for a research training of 6 ECTS and a master's thesis of 24 ECTS.

Click here to consult the official program overview for the complete list of electives.

The following elective can only be chosen with the approval of the examination commission. It is intended as a boosting course for students who did their bachelor at an institution where there was less emphasis on functional programming.

Higher Order Programming (boosting, 6ECTS, sem 1)
This is a boosting course designed for students who already know how to program well in a mainstream language with only limited functional characteristics (e.g., Java, C#, Python,...), but who have not yet been exposed to truly functional languages (e.g., Scheme, Lisp, ML, Haskell, ...). It can be combined in the same semester with Functional Programming.