SOFT specialisation

Printer-friendly version

Master of Applied Sciences and Engineering: Computer Science

Specialisation: Software Languages and Software Engineering (a.k.a. “SOFT”)

Academic Year 2018-2019
 

What.
The specialisation “Software Languages and Software Engineering” is all about studying the Art, Science and Engineering of software construction. Obviously, students entering a Master in Computer Science already have good “basic” programming skills. The SOFT specialisation deepens and broadens this competence to the level of true academic mastery: students having successfully finished the specialisation are well-prepared for a career in “software construction”, be it in research or industry, be it on a small or large scale, be it theoretical or practical. Our ambition is to educate top-notch specialists in the domain of “software construction technologies of the future”. After all, SOFT students graduating in 2020 will retire in 2067! The SOFT specialisation therefore heavily focuses on the scientific aspects of programming languages and software construction (rather than focussing on currently popular mainstream software technologies).
 

As a student in the SOFT specialisation, you will study, use and apply various 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 die hards — on a theoretical and/or implementation level. In order to support every student’s interests, the Software Languages Lab is well-equipped with state-of-the-art hardware (RFID, Arduinos, Raspberry-pi, microcontrollers, smartphones, manycore machines, a cluster machine, GPUs, …) for you to work with during your studies.

 The SOFT specialisation (see table below) 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.  

Who
.
There are
two different “background profiles” among the students that flow into the SOFT specialisation:

  • a) Students who finished a BA in CS at VUB (or a bridging programme, e.g. “schakel”).
  • b) Students with a BA in Engineering (e.g. ECT-ICT ) and students who obtained their BA in CS in another institution. ULB students taking SOFT electives also fall in this category.

Depending on your background, you might have to plan your electives slightly differently.

Programming languages form one of the most important tools for computer scientists. The VUB has a long-standing tradition (and an excellent international academic reputation!) in teaching programming languages at a very high level. A.o., BA students learn Scheme and Scala. At the MA level, we expect all SOFT students to be fluent in at least one such “higher-order language” and to have a deep scientific understanding of their features (e.g. lambdas, continuations, generators, …). Even though the SOFT specialisation is by no means limited to programming alone, a solid understanding of such higher-order programming techniques is assumed.

Students of type (a) have this background by construction. For many students of type (b) this may not be the case. Therefore, we have designed a special boosting course at the MA level (called “Higher Order Programming”). We strongly encourage all students of type (b) to take it!

How. The SOFT master programme consists of 3 “foundational electives” that are mandatory for all SOFT students. Together with Software Architectures (a course that is mandatory for all MA students), these 4 courses form a solid foundation for the SOFT programme. All other courses are optional and can be freely combined. Courses labeled as “broadening” can be taken in parallel with the foundational courses. Courses labeled as “deepening” are preferably taken after finishing some of the foundational courses. However, we invite students to carefully read the course descriptions (and talk to the professor in case of doubt) since a lot depends on one’s individual background.

Name of the Course

Professor

Level

Sem

ECTS

pre/co-req

Higher Order Programming (HOP)

J. Nicolay

boosting

1

6

Functional Programming (FP)

W. De Meuter

foundations

1

6

HOP

Meta Programming and Reflection

E. Gonzalez Boix

foundations

1

6

HOP

Cloud Computing and Big Data Processing

J. De Koster/

J. Nicolay

foundations

1

6

HOP

Multicore Programming

J. Sartor

broadening

2

6

HOP

Performance Analysis and Evaluation

J. Sartor

broadening

1

6

Distributed and Mobile Programming Paradigms

E. Gonzalez Boix

broadening

2

6

HOP

Next Generation User Interfaces

B. Signer

broadening

1

6

Interpretation of Computer Programs 2

W. De Meuter

broadening

2

6

HOP

Compilers

D. Vermeir

broadening

2

6

Software Quality Analysis

C. De Roover

deepening

2

6

Capita Selecta of SE

C. De Roover

broadening

1+2

6

Capita Selecta of PL

D. Devriese

deepening

1+2

6

FP

Programming Language Engineering

T. D’Hondt

deepening

2

6

HOP

Fundamenten van Programmeertalen

C. Scholliers

deepening

1

6

FP

 

  • Higher Order Programming (full description)
    This is a boosting course in functional programming that was especially designed for students who already know how to program well in some mainstream language with limited functional characteristics (e.g. Java, C#, Python,...). We advise all students with a non-VUB BA background to take it. It can be combined in the same semester with Functional Programming. 
  • Functional Programming (full description)
    This course is an advanced course in functional programming. It exposes students to advanced programming techniques and properties of statically typed functional languages (such as Haskell). It requires prior knowledge in functional programming (e.g. VUB’s BA curriculum or Higher Order Programming). The course can be taken in the same semester as Higher Order Programming.
  • Meta Programming and Reflection (full description) (Moved to 1st semester in 2018-2019)
    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 like AOSD. The course requires prior knowledge in object-oriented programming.
  • Cloud Computing and Big Data Processing (full description)
    The Cloud Computing and Big Data Processing course is a two-part course that introduces students to a number of selected topics. In the context of web and cloud programming topics include security, asynchrony, consistency, decentralization and reactivity. In the context of Big Data Processing topics include cluster computing, fault tolerance, data locality, partitioning and shuffling. There are no specific prerequisites for this course but knowledge of Javascript and other web-related technologies is a plus for the Cloud Computing part and knowledge of Scala (as taught in Software Architectures) is a plus for the Big Data Processing part.
  • Distributed and Mobile Programming Paradigms (full description)
    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. The course assumes basic knowledge of parallelism and distribution.
  • Multicore Programming (full description)
    Nowadays programmers are expected to be able to parallelize their programs to take advantage of many processors at once.  In this course, students will study different paradigms that make parallelism/concurrency trade-offs, including message-passing, programming for a shared-memory machine using transactional memory, and programming for massive parallelism on a graphics machine.  There are no formal prerequisites for this course, but I expect a strong programming background and understanding of sequential code in C, C++ and Java. Because 2 of the languages we use are functional, it will help to have prior exposure to a language with first-class functions and higher-order programming.
  • Performance Analysis and Evaluation (full description)
    This course will demystify how to evaluate and analyze the performance of programs, particularly those written in managed languages. We will look at the software stack, and discuss how each of the layers – the application, the compiler, the runtime environment, the operating system, the processor, and the memory system – impact performance.  We will focus on the managed language runtime (i.e., the Java virtual machine) and the memory system’s impact on performance. We will also discuss best practices for setting up experiments and presenting your performance results. There are no formal prerequisites for this course, but a strong understanding of C and Java is expected.
  • Next Generation User Interfaces (full description)
    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.
  • Interpretation of Computer Programs 2 (full description)
    This is a MA-level course that is also accessible for VUB students in their 3rd BA year. Hence, some students may have already taken this course. The course studies advanced programming languages concepts using an interpreter-based approach. Topics include interpreters, continuations, type checking, actors, object models, classes, CPS-compilers. Higher Order Programming is required. 
  • Compilers (full description)
    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.).
  • Software Quality Analysis (full description)
    This course is about automated techniques that represent programs as data and 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.
  • Programming Language Engineering (full description)
    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.
  • Fundamenten van Programmeertalen (full description) (officially in Dutch only)
    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 (full description) (New in 2018-2019)
    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 (full description) (New in 2018-2019)
    A major recent scientific achievement in programming languages research is the development of the first realistic verified C compiler CompCert: a compiler that comes with a computer-verified rigorous correctness proof. In this course, we study basic concepts of verified compilers: both conceptually (what does it mean for a compiler to be correct) and practically (how does one build such a proof in practice). To do this, we first teach the basics of the main tool in this field: dependently-typed programming languages (in our case Agda). In addition to provably correct compilers, we also look at provably secure compilers.  This course is taught in a hands-on way, with students learning to program and prove in Agda and studying and extending important compiler passes. Evaluation is done through a course project (with an oral defence) in which students apply the concepts and techniques learned. Functional Programming is a prerequisite for this course, but this course starts a bit later in the semester, so both courses can be followed in parallel.