The world today is driven by data. From social media platforms and online banking systems to scientific research and government records, databases lie at the heart of modern digital infrastructure. Understanding how to design, manage, and interact with databases is a foundational skill for any computer scientist.

This course, is designed for second-year students in the Licence program in Computer Science. It aims to introduce both the theoretical concepts and the practical skills required to work with databases. Throughout this course, students will gain a solid understanding of relational models, database design, query languages (such as SQL), normalization, and the principles of database management systems.

The course also includes hands-on practice, encouraging students to apply concepts through real-world scenarios and projects. By the end, students should be able to model data effectively, write complex queries, and understand how databases support applications at scale.

Whether students choose to specialize in software development, data science, artificial intelligence, or systems engineering, the knowledge gained in this course will serve as a vital component of their computing education.

This preface marks the beginning of a journey into one of the most essential and impactful areas of computer science. I invite all students to approach it with curiosity, critical thinking, and a drive to apply their learning to solve real-world problems.

The objective of this course is to  introduce  the theory of formal languages.

Languages ​​allow humans to exchange information and ideas and to communicate with machines.

The languages ​​used between humans are called 'natural languages', they are usually informal and ambiguous and require interpretation by a human brain to be interpreted correctly.

The languages ​​created by humans to communicate with the machine are the formal languages  or artificial languages. They must be formalized and unambiguous in order to be interpreted by a machine, this is the goal of this course.

The course focus on understanding how software manages hardware to provide a convenient, efficient, and secure environment for users and applications. Key learning goals include grasping process/memory management, resource allocation, and user interfaces. Students learn to bridge hardware and software, ensuring fair resource sharing, error handling, and system security. 

This course aims to have an overview of communication networks, to present their role as well as the different equipment that compose them. It explains the fundamental principles of networks, such as switching modes or the structures of protocols in layers. It allows to understand the functionality of the main techniques used in modern networks, without going into the details of each of them, by introducing the Internet as an example of a network.


Recommended prior knowledge:

Architecture of a computer system, Binary representations of information, Operating system