Courses

Hybrid Quantum Computing

A gentle introduction to Quantum Computing from a Software Engineering perspective.

Instructor: Juan Manuel Murillo

During the last decade there have been significant advances in the construction of quantum computers. It is reaching the point of having the first quantum processors (QPU) capable of addressing problems of a certain magnitude. The first computer with 400 qbits has recently been announced and the launch of a 1000 qbits computer has been announced for 2023. These advances have motivated that the discipline of Quantum Programming, which had remained latent for several decades, is now gaining relevance day by day.

The success of Quantum Computing systems will depend not only on having powerful QPUs but also on the fact that software engineers are able to develop quantum software components and integrate them into classical systems. However, it is common for software engineers who try to approach the field of Quantum Computing to find great difficulty in doing so. Some of the reasons for this are as follows. On the one hand, the programming model based on quantum circuits that integrate quantum gates is of a very low abstraction level. This forces software developers to approach the theory of quantum information and the mathematical bases of quantum mechanics, which requires a great effort. On the other hand, Software Engineers usually try to approach quantum software development from the same perspective they are used to. However, the principles of Quantum Computing are very different from those of classical computing. Realising on that and understanding the differences is an additional gap that is difficult to bridge.

This course aims to help software engineers to address the aforementioned difficulties. The course introduces basic concepts of Quantum Computing and quickly goes on to show the structure of a quantum program and the main techniques and patterns used to develop them. Likewise, the integration of a quantum programs in classical software systems is also addressed. All the above is done from a practical perspective.

AI for Health

Instructor(s): Gianluigi Greco, Francesco Calimeri, and Pierangela Bruno

In recent years, we have been witnessing a significant increase in the number of applications of Artificial Intelligence in healthcare. Such applications proved to be able to improve healthcare assistance, and pave the way to effective personalized medicine and treatment information.

A number of success stories have been produced while tackling different problems and tasks. For instance, inductive data-driven techniques such as Deep Learning have been profitably used in the support to medical imaging diagnostic and computer-assisted surgery via detection, segmentation, and classification of specific pathologies or elements of medical interest; on the other hand, deductive knowledge-driven techniques have been employed for decision-support systems, master surgical scheduling, chemotherapy treatment scheduling, resource planning.

In this short course, we provide an overview of the most used Deep Learning approaches for the analysis of pre- and intra-operative images and of some of the most effective scheduling/planning solutions based on Answer Set Programming. We will illustrate recent advancements, innovative solutions, and real-world applications proposed in the field, with a special focus on the automatic instance segmentation task.

Students will also have the possibility to experiment and test learned knowledge in a real-world case study, via tech-demo sessions.

Shape Your Own Programming Language

Instructor(s): Walter Cazzola, and Luca Favalli

Often the development of ad hoc programming languages that integrate features from various languages and paradigms represents the best choice to express a concise and elegant solution to complex problems.

However, the task of creating a programming language can be daunting, discouraging the development of domain-specific or problem-oriented languages. To address this challenge and promote the development of clean and concise solutions, we created Neverlang. This language workbench offers a mechanism for constructing custom programming languages using features from existing languages, with the composability and flexibility of Neverlang enabling the development of new languages by simply combining features from pre-existing ones and reusing corresponding support code, such as parsers, code generators, and integrated development environments (IDEs) or language server protocols (LSPs).

This course introduces the basic concepts of language development and provides an overview of Neverlang and its language product line approach. The course also includes a hands-on session where participants will work together to build a domain-specific language (DSL) and its full ecosystem.