department of informatics

Bachelor courses offered by the PAI group

Imperative Programming

Professor: Béat Hirsbrunner, Assistant: Ammar Halabi

Description: Introduction to a basic system programming language (C): Memory model, static and dynamic memory allocation. Constants, variables and basic types. Statements and control structures. Advanced types: pointers, arrays and structures. Functions, procedures, argument passing modes, scoping, Unix processes and threads. 

Abstract data types: Stack, queue, linked list, priority list and binary tree. 

Introduction to the Unix programming environment: Command line, inclusive pipe and input/output redirection. File system and privileges, inclusive hard and symbolic links. Regular expression and shell variables. C-Shell scripts, makefiles, gdb debugger and performance tools. Secure remote access and X Window.

Objectives: The student will first develop the ability to read C code, use Unix commands and test simple C programs. Then she/he will learn to write, debug and test C programs including simple concurrent programs, and use more advanced Unix tools (like X11 remote access, makefile, C-Shell scripts). Finally she/he will learn to specify classical abstract data types in C.

Operating Systems

Professor: Béat Hirsbrunner, Assistant: Fei Peng

Description: This course studies the principles and concepts that govern the design of modern computer operating systems. In general terms, the course covers the two primary functions of an operating system: insulating users and applications from details of the computer hardware, and managing the allocation of resources to improve efficiency. Specific topics covered include : The process and threads models of computation. Interprocess communication (IPC): semaphores, monitors, message passing, barriers. Classical IPC Problems: Philosophers, Producers-Consumers, Readers-Writers, Sleeping Barber. Process deadlock detection and recovery, avoidance and prevention. Basic memory management, swapping, paging and segmentation. Principles of Input/Output (hardware and software), and case studies: disks, clocks, terminals. File system specification and implementation. Introduction to distributed operating systems. Case studies: Unix, Linux, Mac OS X and Vista. 

Furthermore, there will be a lab which will allow the students to implement some new features in the kernel of an open source Unix operating system (e.g. Minix or Linux).

Objectives: The student will learn the basic concepts of operating systems and the most important computer architectural issues that govern the design and implementation of an operating system.

Computer Architecture

Professor: Eduardo Sanchez, Asssistant: Jan Kühni

Description: Le cours Architecture des ordinateurs permet d'étudier le fonctionnement des ordinateurs à partir de leur architecture, c'est-à-dire avec une vue matérielle.

Programming Paradigms

Professor: Michèle Courant, Assistant: Patricio Lerena

Description: Le cours commence par une mise en perspective historique de la programmation et des langages de programmation. Un chapitre important est ensuite consacré à la programmation logique en Prolog. Il est suivi d'une étude de la programmation logique parallèle basée sur le langage Strand, avec une mise en pratique en Erlang. Sont ensuite explorés le paradigme des agents et systèmes d'agents, le style fonctionnel, dérivé du langage Lisp, et quelques autres paradigmes pouvant organiser la pensée en programmation, comme la notion d'aspect, rencontrée dans la programmation impérative et objet, et certains modèles réactifs ou à flots de données. Le cours est accompagné d'exercices qui permettent de mettre immédiatement en pratique les concepts présentés dans divers langages de programmation.

Objectives: Se familiariser conceptuellement et pratiquement avec divers paradigmes de programmation, c'est-à-dire apprendre à penser et à programmer dans des styles différents de ce qui est expérimenté dans la programmation d'aujourd'hui, centrée sur les styles impératif et procédural / objectal (avec Java, C, C++, Shell,...). Expérimenter les paradigmes logique et logique concurrent, et découvrir le style fonctionnel, les agents, les aspects, etc. Les connaissances acquises constituent à la fois une culture générale indispensable à tout informaticien(ne) universitaire, une voie de maîtrise dans l'art de penser et de résoudre les problèmes, qui sont l'une des caractéristiques de l'informatique considérée comme science à part entière, et un élargissement dans la connaissance pratique des langages de programmation.

Reference books 

  • Leslie B. Wilson and Robert G. Clark : Comparative Programming Languages, Third Edition, Addison-Wesley 
  • Leon Sterling and Ehud Shapiro : The Art of Prolog - Advanced Programming Techniques, MIT Press 
  • Ian Foster, Stephen Taylor : Strand : New Concepts in Parallel Programming, Prentice-Hall 
  • Michael Wooldrige : An Introduction to MultiAgent Systems - Second Edition, John Wiley 
  • http://www.ai.sri.com/~delacaze/alu-site/alu/table/books.htm#style
  • M. Felleisen et al.: How to design programs, MIT Press, 2001
  • H. Abelson & G.J. Sussman: Structure and Interpretation of Computer Programs, MIT Press, 1996

Project: Concurrent, Parallel and Distributed Computing

Professor: Pierre Kuonen, Assistant: Dani Rotzetter

Description: Ce projet aborde quelques modèles de programmation concurrente (en C), parallèle (en C++) et distribué (en Java)

Objectives: Les projets de deuxième année poursuivent le même objectif que ceux de première année (mais avec des exigences plus élevées), soit le développement de logiciel d'une certaine importance. Sous la conduite d'un-e professeur-e et d'un-e assistant-e, les étudiant-es apprennent à définir un cahier des charges, à concevoir, à implémenter puis à tester une réelle application.

Project: Robotics

Professor: Béat Hirsbrunner, Assistants: Muriel Bowie, Jan Kühni

Description: Sous la conduite d'un-e professeur-e et d'un-e assistant-e, les étudiant-e-s apprennent: 

  • des concepts fondamentaux de l'algorithmique et d'un langage de programmation 
  • à concevoir, implémenter et tester une application par étapes, 
  • les concepts de base de la robotique autonome et de la simulation (un environnement matériel différent de l'ordinateur classique et avec des pratiques de développement logiciel spécifiques).

Objectives: Les projets de première année offrent aux étudiants une première expérience de développement de logiciel d'une certaine importance. Sous la conduite d'un-e professeur-e et d'un-e assistant-e, les étudiant-es apprennent à définir un cahier des charges, à concevoir, à implémenter puis à tester une réelle application. Les projets de deuxième année poursuivent le même objectif, mais avec des exigences plus élevées.