1st cycle (updated for 2026-2027 academic year)
1st year
– Algorithm Analysis and Design
Prerequisites: Students are recommended to have a basic programming knowledge, particularly in constructing sequences, conditions, and loops (e.g., if/else, for, while) and in defining simple functions. It is recommended that students have previously taken: Programming Principles (1st year).
– Computer Architecture
Prerequisites: Students are recommended to have a basic programming knowledge, particularly in constructing sequences, conditions, and loops (e.g., if/else, for, while) and in defining simple functions. It is recommended that students have previously taken: Programming Principles (1st year).
– Imperative programming
Prerequisites: Students are recommended to have basic knowledge of structured programming, specifically regarding the construction of functions, passing parameters, and the use of variables (e.g., int, float, char, printf, scanf in C). It is suggested that students have previously taken: Programming Principles (1st year).
2nd year
– Algorithms and Data Structures
Prerequisites: Students are recommended to have knowledge of structured programming and algorithm analysis, including the implementation of recursive functions, loops, and concepts of computational complexity (e.g., O(n) notation). It is recommended that students have previously taken: Algorithm Analysis and Design (1st year).
– Operational Research
Prerequisites: Students are recommended to have knowledge of matrix operations and calculus, particularly in solving systems of equations and manipulating matrices. It is suggested that students have previously taken: Linear Algebra (1st year).
– Object Oriented Programming
Requirements: Students are recommended to have knowledge of imperative programming, particularly in defining functions, manipulating data types, and flow control. It is suggested that students have previously taken: Imperative Programming (1st cycle).
– Operating Systems
Prerequisites: Students are recommended to have knowledge of the C programming language, particularly in the area of dynamic data structures (e.g., linked lists using struct and malloc/free, memory management, and pointers), as well as knowledge of the internal organization of a computer. It is recommended that students have previously taken: Imperative Programming (1st year).
– Data Analysis and Visualization
Prerequisites: Students are recommended to have programming skills, including the manipulation of data structures, loops, and functions in a programming language. It is recommended that students have previously taken: Programming Principles (1st year).
– Hardware and Sensors
Prerequisites: Students are recommended to have skills in the planning and assembly of electronic components, as well as C programming skills for the development of practical embedded systems projects. It is recommended that students have previously taken: Digital Systems (1st year) and Programming Principles (1st year).
– Client-Side Web Programming
Prerequisites: Students are recommended to have a basic understanding of Java programming, specifically regarding function definition, flow control, and data type manipulation. It is suggested that students have previously taken: Object Oriented Programming (2nd year).
– Computer Networks
Prerequisites: Students are recommended to have knowledge of C programming (e.g., use of sockets: socket(), bind(), connect(), send(), recv()) and of process management and inter-process communication at the operating system level. It is suggested that students have previously taken: Imperative Programming (1st year).
3rd year
– Multimedia Encoding and Representation
Prerequisites: Students are recommended to have knowledge of programming and data structures, and may use any programming language acquired throughout the course, whether imperative (e.g., C) or object-oriented (e.g., Java). It is recommended that students have previously completed at least one of the following subjects: Imperative Programming (1st year) or Object-Oriented Programming (2nd year).
– Mobile Applications Programming
Prerequisites: Students are recommended to have knowledge of object-oriented programming, specifically regarding the use of classes, inheritance, and interfaces (e.g., Java class, extends, implements). It is recommended that students have previously completed: Object-Oriented Programming (2nd year).
– Server-Side Web Programming
Prerequisites: Students are recommended to have a basic understanding of object-oriented programming, particularly regarding class definition, encapsulation, and code reuse. It is suggested that students have previously taken: Object-Oriented Programming (2nd year).
– Computer Science Safety
Prerequisites: Students are recommended to knowledge of computer networks (e.g., the TCP/IP model, HTTP/HTTPS protocols, DNS) and operating systems (e.g., user management, file permissions, processes). It is suggested that students have previously taken: Operating Systems (2nd year) and Computer Networks (2nd year).
– Artificial Intelligence and Machine Learning
Prerequisites: Students are recommended to have algorithmic programming skills, including the implementation of decision structures, loops, and functions, as well as the ability to manipulate and analyze datasets. It is suggested that students have previously taken: Programming Principles (1st year) and Data Analysis and Visualization (2nd year).
– Integrated Project Laboratory
Prerequisites: Students are recommended to have a solid technical background, covering software engineering, imperative and object-oriented programming, data persistence, web interface development (client and server), network communication, and mobile development. It is suggested that students have previously taken: Software Engineering (1st year), Imperative Programming (1st year), Object Oriented Programming (2nd year), Databases (2nd year), Client-Side Web Programming (2nd year), Computer Networks (2nd year), Mobile Applications Programming (3rd year) and Server-Side Web Programming (3rd year).
– Systems and Network Security and Administration
Prerequisites: Students are recommended to have knowledge of the internal organization of a computer, process and user management at the operating system level (e.g., Unix/Linux commands: chmod, ps, netstat, iptables), as well as knowledge of network protocols (e.g., TCP/IP, HTTP, DNS, DHCP). It is suggested that students have previously taken: Operating Systems (2nd year) and Computer Networks (2nd year).
– Information Systems
Prerequisites: Students are recommended to have a basic understanding of business information modeling and organization, as well as basic skills in querying and manipulating databases (e.g., SELECT, JOIN, INSERT in SQL). It is suggested that students have previously taken: Databases (2nd year).
– Distributed Systems
Prerequisites: Students are recommended to have knowledge of object-oriented programming, including the use of interfaces, inheritance, and encapsulation (e.g., Java interface, extends, synchronized, Thread), as well as a basic understanding of network communication. It is suggested that students have previously taken: Object-Oriented Programming (2nd year).
2nd cycle (updated for 2026-2027 academic year)
1st year, 1st semester
– Applied Machine Learning
Prerequisites:Â knowledge of programming, data structures, fundamental algorithms, and the basics of machine learning.
– Intelligent Sensory Systems
Prerequisites:Â knowledge of programming and basic concepts of electrical engineering.
– Semantic Web and Web 3.0
Prerequisites: knowledge of web development, databases, and basic computer networks.
– Cybersecurity (optional)
Prerequisites: knowledge of computer networks, operating systems, and the fundamentals of cryptography.
– Data Science (optional)
Prerequisites: knowledge of programming and basic concepts of machine learning.
– 3D Modeling and Animation (optional)
Prerequisites: practical knowledge of advanced data structures, structured programming, and object-oriented programming.
– Wireless Sensor Networks (optional)
Prerequisites: knowledge of computer networks.
1st year, 2nd semester
– Smart Mobile Applications
Prerequisites: knowledge of object-oriented programming and fundamentals of machine learning
– Advanced Distributed Systems
Prerequisites: knowledge of distributed systems and object-oriented programming
– Applied Computer Vision
Prerequisites: knowledge of programming, data structures, and fundamental algorithms, as well as the fundamentals of machine learning.
– Data Science (optional)
Prerequisites: knowledge of programming and basic concepts of machine learning.
– Mobility in Heterogeneous Networks  (optional)
Prerequisites: knowledge of computer networks.
– Virtual and Augmented Reality  (optional)
Prerequisites: knowledge of advanced data structures, structured programming, and object-oriented programming.
– Digital Transformation  (optional)
Prerequisites: knowledge of information systems.
For further information please contact Prof. Nuno M. Ribeiro (nribeiro@ufp.edu.pt)

