

- Do you want to be able to perform scientific calculations?
- Do you want to analyse data and learn to create models or forecasts for company profits?
- Do you want to tackle diverse projects under the guidance of Iceland's leading mathematicians?
- Do you want a diverse selection of courses that suit your interests?
- Do you want to open up future opportunities in challenging careers?
- Are you interested in arithmetic and statistics?
The programme is divided fairly equally between software engineering, mathematics and computer science. Teaching emphasises how software relates to the human and economic sides of the industry.
Students will learn systematic approaches to:
- Designing and developing software for profit
- Maintaining and managing software
Students will also learn about business economics and various kinds of administration.
Course topics include:
- Design and organisation of major programming projects
- Needs assessment and performance specifications
- Software development
- Major programming languages
- Design, analysis and use of database management systems
- Building human-computer interfaces
- Web programming
- Software testing
- Software maintenance
- Project management and quality management
- Business economics
- Artificial intelligence
- Scientific computing and optimisation
- Mathematics and statistics
- Physics
- Engineering management
- Engineering economics
Icelandic matriculation examination or a comparable qualification. The faculty strongly recommends that students complete at least 40 credits in mathematics and 50 credits in science of which 10 credits should be in physics. It is an advantage to have finished a course in programming.
Good knowledge of both Icelandic and English is indispensable. Most courses in the undergraduate program are taught in Icelandic.
Applicants for undergraduate studies must demonstrate proficiency in Icelandic that is at least level B2 according to the european language framework.
Proficiency in Icelandic can be demonstrated with an Icelandic matriculation (stúdetnspróf) exam or an assessment in Icelandic conducted by an authorized testing agency.
180 ECTS credits have to be completed for the qualification, organized as a three year programme.
Programme structure
Check below to see how the programme is structured.
This programme does not offer specialisations.
- First year
- Fall
- Introduction to Software Engineering
- Mathematical Analysis I
- Linear Algebra
- Computer Science 1
- Mathematical Structure
- Spring 1
- Computers, operating systems and digital literacy basics
- Graphical User Interface Programming
- Software Design and Construction
- Mathematical Analysis II
- Computer Science 2
Introduction to Software Engineering (HBV101G)
This course explains what software engineering is, why it is important, and which skills and competencies it entails.
Through guest talks from professional software engineers and work on practical projects, the course introduces key concepts of software engineering – specifically, the forces that shape software products, and the roles and responsibilities of the people who drive them.
Students work in teams to pick issues in their environment that could be solved or improved through software, and identify challenges that would need to be resolved in designing and building a suitable software solution. This motivates the methods and paradigms that will be introduced in detail in further courses of the software engineering program.
Attention! This course is specifically intended for 1st year students in Software Engineering. New 1st year students in Computer Science or other programs need special permission from the faculty to sign up for the course, but it is not intended for 2nd or 3rd year students.
Mathematical Analysis I (STÆ104G)
This is a foundational course in single variable calculus. The prerequisites are high school courses on algebra, trigonometry. derivatives, and integrals. The course aims to create a foundation for understanding of subjects such as natural and physical sciences, engineering, economics, and computer science. Topics of the course include the following:
- Real numbers.
- Limits and continuous functions.
- Differentiable functions, rules for derivatives, derivatives of higher order, applications of differential calculus (extremal value problems, linear approximation).
- Transcendental functions.
- Mean value theorem, theorems of l'Hôpital and Taylor.
- Integration, the definite integral and rules/techniques of integration, primitives, improper integrals.
- Fundamental theorem of calculus.
- Applications of integral calculus: Arc length, area, volume, centroids.
- Ordinary differential equations: First-order separable and homogeneous differential equations, first-order linear equations, second-order linear equations with constant coefficients.
- Sequences and series, convergence tests.
- Power series, Taylor series.
Linear Algebra (STÆ107G)
Basics of linear algebra over the reals.
Subject matter: Systems of linear equations, matrices, Gauss-Jordan reduction. Vector spaces and their subspaces. Linearly independent sets, bases and dimension. Linear maps, range space and nullk space. The dot product, length and angle measures. Volumes in higher dimension and the cross product in threedimensional space. Flats, parametric descriptions and descriptions by equations. Orthogonal projections and orthonormal bases. Gram-Schmidt orthogonalization. Determinants and inverses of matrices. Eigenvalues, eigenvectors and diagonalization.
Computer Science 1 (TÖL101G)
The Java programming language will be used to introduce basic practices in computer programming. Practice in programming is scheduled throughout the semester. An emphasis is placed on logical methods for writing program and good documentation. Main ideas related to computers and programming. Classes, objects and methods. Control statements. Strings and arrays, operations and built-in functons. Input and output. Inheritance. Ideas relatied to system design and good practices for program writing. Iteration and recursion. Searching and Sorting.
Mathematical Structure (TÖL104G)
Propositions, predicates, inference rules. Set operations and Boolean algebra. Induction and recursion. Basic methods of analysis of algorithms and counting. Simple algorithms in number theory. Relations, their properties and representations. Trees and graphs and related algorithms. Strings, examples of languages, finite automata and grammars.
Computers, operating systems and digital literacy basics (TÖL205G)
In this course, we study several concepts related to digital literacy. The goal of the course is to introduce the students to a broad range of topics without necessarily diving deep into each one.
The Unix operating system is introduced. The file system organization, often used command-line programs, the window system, command-line environment, and shell scripting. We cover editors and data wrangling in the shell. We present version control systems (git), debugging methods, and methods to build software. Common concepts in the field of cryptography are introduced as well as concepts related to virtualization and containers.
Graphical User Interface Programming (HBV201G)
In this course, students will get training in programming graphical user interfaces in Java and learn about the main steps in software development projects, from ideation to testing. Emphasis is placed on students acquiring more excellent proficiency in programming larger projects than in introductory programming courses (such as TÖL101G), being able to design interactive user interfaces, program them, and test them. This includes students becoming familiar with large software libraries (here, JavaFX) and using them. Additionally, students should be able to read, understand, and implement instructions on functionality, including interactivity. Students will be introduced to the design process, which consists of five stages: understanding the task, brainstorming ideas and interactivity, selecting and defining, programming a prototype, and testing and iterating. Insight is provided into user-centered development, interactive design, prototypes, and user testing.
The course will prepare students for courses such as Software Development and Software Projects 1 and other classes where students need to program. It is also a good foundation for courses like TÖL502M Human-Computer Interaction.
Software Design and Construction (HBV202G)
Note: This course is based on teamwork and uses flipped classroom teaching: therefore, it is necessary to attend the classes to work there in groups. Do not take this course if you have timetable collisions and cannot attend the classes.
This course covers basic foundations of software design and software construction.
Software design is covered in terms of object-oriented modeling using the Unified Modeling Language (UML), object-oriented design principles (e.g. interfaces and packages, the Liskov Substitution Principle), and basic design patterns.
Software construction is covered mainly in terms of tools, in particular the more advanced features (such as code completion, using a debugger and improving code using refactoring) of an Integrated Development Environment (IDE), build automation and dependency management (e.g., the Maven or Gradle tool and modular Java), compilers (e.g., dealing with compiler warnings) and runtime systems (e.g., classpaths), and basics of unit testing.
Mathematical Analysis II (STÆ205G)
Open and closed sets. Mappings, limits and continuity. Differentiable mappings, partial derivatives and the chain rule. Jacobi matrices. Gradients and directional derivatives. Mixed partial derivatives. Curves. Vector fields and flow. Cylindrical and spherical coordinates. Taylor polynomials. Extreme values and the classification of stationary points. Extreme value problems with constraints. Implicit functions and local inverses. Line integrals, primitive functions and exact differential equations. Double integrals. Improper integrals. Green's theorem. Simply connected domains. Change of variables in double integrals. Multiple integrals. Change of variables in multiple integrals. Surface integrals. Integration of vector fields. The theorems of Stokes and Gauss.
Computer Science 2 (TÖL203G)
The course will cover various data structures, algorithms and abstract data types. Among the data structures covered are lists, stacks, queues, priority queues, trees, binary trees, binary search trees and heaps along with related algorithms. Various search and sort algorithms will be covered. Algorithms will be analysed for their space and time complexity. There will be small programming assignments in Java using the given data structures and algorithms.
- Second year
- Fall
- Requirements Engineering
- Mathematical Analysis III
- Data Base Theory and Practice
- Programming Languages
- Computer organization and programming
- Spring 1
- Software Development
- Not taught this semesterIndustrial Software Engineering
- Probability and Statistics
Requirements Engineering (HBV301G)
Software requirements express the needs and constraints placed on a software product so that it can solve an issue in an application domain. This course covers techniques for the elicitation, analysis, specification, validation and management of software requirements.
The course introduces types and properties of software requirements, relevant stakeholders, techniques for requirements elicitation, analysis, specification and validation, as well as practical considerations such as change management and conflict resolution. Students practice these techniques in teams by applying them to projects of their choice.
New mandatory course - first taught in 2023-2024
Mathematical Analysis III (STÆ302G)
Functions of a complex variable. Analytic functions. The exponential function, logarithms and roots. Cauchy's Integral Theorem and Cauchy's Integral Formula. Uniform convergence. Power series. Laurent series. Residue integration method. Application of complex function theory to fluid flows. Ordinary differential equations and systems of ordinary differential equations. Linear differential equations with constant coefficients. Systems of linear differential equations. The matrix exponential function. Various methods for obtaining a particular solution. Green's functions for initial value problems. Flows and the phase plane. Nonlinear systems of ordinary differential equations in the plane, equilibrium points, stability and linear approximations. Series solutions and the method of Frobenius. Use of Laplace transforms in solving differential equations.
Data Base Theory and Practice (TÖL303G)
Databases and database management systems. Physical data organization. Data modelling using the Entity-Relationship model and the Relational model. Relational algebra and calculus. The SQL query language. Design theory for relational data bases, functional dependencies, decomposition of relational schemes, normal forms. Query optimization. Concurrency control techniques and crash recovery. Database security and authorization. Data warehousing.
Programming Languages (TÖL304G)
An introduction to the most common types of programming languages. Block structured languages, list processing languages, object oriented programming. Describing programming languages, compilers and interpreters. The internal structure of block structured programming languages.Modular programming . Functions and subroutines, parameter passing. Memory management, garbage collection. The programming languages Scheme, CAML, Java, Morpho, C++ and Haskell will be considered. Object oriented programming languages. Objects and inheritance. Grammars, the structure of compilers. Modular programming will be emphasised (especially generic modules), as well as list processing, functional programming and block structure.
Computer organization and programming (TÖL309G)
The course covers the internal structure of computers and how programmers should construct their programs to take advantage of that. The programming language C will be introduced, especially its use of pointers and memory usage. Data representation for integers and floating point numbers. Programming in x86-64 assembly language. In particular how constructs in C are implemented in x86-64 assembly language. Memory hierarchy and its effects on program performance. Exceptional control flow in programs. Virtual memory. Concurrent programming.
Software Development (HBV401G)
In this course, software engineers and computer scientists take the step from programming-in-the-small (i.e. individual developers creating compact modules that solve clearly defined problems) to programming-in-the-large (i.e. teams of developers building complex systems that satisfy vague customer requirements). To deal with the complexities of such projects, this course introduces key software engineering concepts such as agile and plan-driven software process models, requirements engineering, effort estimation, object-oriented analysis and design, software architecture and test-driven development. These concepts are immediately applied in practice as students team up to develop and integrate component-based systems using the Java programming language.
Industrial Software Engineering (HBV404G)
This course covers legal and economic aspects of software engineering and software project management.
Through lectures, guest talks, work on practical projects and seminar elements, the course will consider business models for the development and/or operation of software, introduce strategies for software estimation, risk management and pricing, explain models for software licensing, and discuss aspects of ethics, privacy and security in software.
New mandatory course - first taught in 2023-2024.
Probability and Statistics (STÆ203G)
Basic concepts in probability and statistics based on univariate calculus.
Topics:
Sample space, events, probability, equal probability, independent events, conditional probability, Bayes rule, random variables, distribution, density, joint distribution, independent random variables, condistional distribution, mean, variance, covariance, correlation, law of large numbers, Bernoulli, binomial, Poisson, uniform, exponential and normal random variables. Central limit theorem. Poisson process. Random sample, statistics, the distribution of the sample mean and the sample variance. Point estimate, maximum likelihood estimator, mean square error, bias. Interval estimates and hypotheses testing form normal, binomial and exponential samples. Simple linear regression. Goodness of fit tests, test of independence.
- Third year
- Fall
- Cloud Computing and Big Data
- Machine Learning
- Formal Languages and Computability
- Computer Graphics
- Not taught this semesterComputer Networks and Security
- Software Project 1
- Engineering Economics
- Project Management
- Physics 1 V
- Secure Software Engineering
- Spring 1
- Not taught this semesterCompilers
- Reasoned Programming
- Operating Systems
- Analysis of Algorithms
- Digital Circuit Design and Analysis
- Software Project 2
- Not taught this semesterFundaments of the Internet
- Physics 2 V
- Fundamentals of Ethical Hacking
Cloud Computing and Big Data (REI504M)
Overview of high performance computing (HPC) and “Big Data”, HPC environments with computing, network and storage resources, overview of parallel programming. Storage infrastructures and services for Big Data, Big Data analytics, the map-reduce paradigm, structured and unstructured data. Practical exercises: (A) Students will use the Amazon Web Services (AWS) cloud or equivalent to set up a multi-computer web service and an associated multi-computer testing application. (B) Students will get hands on experience of processing large data sets using map-reduce techniques with AWS.
Machine Learning (REI505M)
An overview of some of the main concepts, techniques and algorithms in machine learning. Supervised learning and unsupervised learning. Data preprocessing and data visualization. Model evaluation and model selection. Linear regression, nearest neighbors, support vector machines, decision trees and ensemble methods. Deep learning. Cluster analysis and the k-means algorithm. The students implement simple algorithms in Python and learn how to use specialized software packages. At the end of the course the students work on a practical machine learning project.
Formal Languages and Computability (TÖL301G)
Finite state machines, regular languages and grammars, push-down automata, context-free languages and grammars, Turing machines, general languages and grammars, and their basic properties. Recursive and recursively enumerable languages, reduction between languages, connection to decision problems and proving unsolvability of such problems. The complexity classes P and NP, and NP-completeness. Examples of various models of computation.
Computer Graphics (TÖL105M)
The main emphasis is on fundamental concepts and mathematics for 3D computer graphics. Two and three-dimensional transformations. Viewing projections. Light and the shading of objects. Texture mapping, blending, bump maps. Programmable shaders. Curves and surfaces. Programming assignments in WebGL.
Computer Networks and Security (TÖL305G)
The foundations of computer networks with emphasis on the TCP/IP protocol. Analysis and design of computer networks. Hardware and software used in computer networks. Implementation and maintenance of computer networks. Security systems for computer networks.
Software Project 1 (HBV501G)
The aim of this course is for students to be able to develop software systems, to participate in software development projects, and to reflect upon software development. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics relevant in earlier phases of software development: development processes, estimation, design and programming, and configuration management. The project is started in this course and continued in HBV601G Software Project 2.
Engineering Economics (IÐN502G)
The objective of the course is that students get the skills to:
1. Understand the main concepts in accounting, cost theory and investment theory.
2. Be able to use methods of measuring the economic feasibility of technical projects.
3. Be able to develop computer models to assess the profitability of investments, the value of companies and pricing of bonds
Among topics included are accounting, cost theory, cash flow analysis, investment theory, measures of profitability including net present value and internal rate of return, and the building of profitability models. The course ends with a group assignment where the students exercise the development of computer models for feasibility assessment of projects.
Project Management (IÐN503G)
The course is an introductory course in project management. It introduces key concepts of project management and covers context and selection of projects, project planning, project monitoring, management of project teams, and project closure. Students create and execute project plans in groups. Special emphasis is on using of project management for managing technological innovation in organizations.
Physics 1 V (EÐL102G)
Concepts, units, scales and dimensions. Vectors. Kinematics of particles. Particle dynamics, inertia, forces and Newton's laws. Friction. Work and energy, conservation of energy. Momentum, collisions. Systems of particles, center of mass. Rotation of a rigid body. Angular momentum and moment of inertia. Statics. Gravity. Solids and fluids, Bernoulli's equation. Oscillations: Simple, damped and forced. Waves. Sound. Temperature. Ideal gas. Heat and the first law of thermodynamics. Kinetic theory of gases. Entropy and the second law of thermodynamics. Home problems: Once a week the students have to solve homeproblems on the website MasteringPhysics.
Laboratory work: Three exercises, mainly centered on mechanics, where students are trained in handling physical instruments, collecting and inspecting data. Students hand in their lab notebooks for a grade.
Note that the textbook is accessible to students via Canvas free of charge.
Secure Software Engineering (HBV506M)
Secure software engineering involves identifying and mitigating vulnerabilities to reduce threats to an application. In this module, students will gain an understanding of secure engineering practices and the means to apply them throughout the complete software development life cycle.
Working in teams, students will design, develop, and maintain a web application for a customer following secure software engineering principles. Students will illustrate their understanding and practical competency of white box and black box security assessment through testing their own and other team’s applications for vulnerabilities against the OWASP top 10 most critical security risks to web applications.
It is therefore assumed the students have knowledge in web application development using JavaScript.
Compilers (TÖL202M)
The design of programming languages. The structure and design of compilers. Lexical analysis. Top down and bottom up parsing. Code generation. Each student writes his or her own compiler.
Reasoned Programming (TÖL212M)
Fundamental concepts in program verification and reasoned programming are covered. Emphasis is placed on using reasoned programming to develop solid and proved versions of well-known algorithms, especially in the areas of searching, sorting, and binary search trees. Among algorithms covered are various versions of insertion sort, selection sort, quicksort, binary search, and searching in binary search trees. Emphasis will be placed on deepening the understanding of the algorithms as well as getting a good grip on program verification. Some exercises will use verification tools such as Dafny or OpenJML.
Operating Systems (TÖL401G)
This course covers concepts of operating systems. Besides foundations on computer hardware structures and general operating system architectures, this includes concepts of processes and threads and their management, principles of scheduling and scheduling algorithms, communication and synchronisation between processes and deadlock issues, principles of memory management including virtual memory and page replacement algorithms, file systems and their implementation as well as mass-storage management. If time allows, principles for achieving protection and security, and aspects of distribution (e.g. concepts of distributed systems and distributed file systems) are covered as well. This course does not deal with details of implementing operating systems, but introduces generic concepts that are used when implementing operating systems and that an application developer needs to know, when creating an application program. Where appropriate, current operating systems such as Microsoft Windows and POSIX-compliant UNIX-like systems (e.g. Linux) are used as case study for implementation and offered system calls. The usage of operating system services from within high-level programming languages (e.g. C, C++ or Java) is demonstrated based on Application Programming Interfaces (APIs) offered by prevailing system libraries.
Analysis of Algorithms (TÖL403G)
Methodology for the design of algorithms and the analysis of their time conplexity. Analysis of algorithms for sorting, searching, graph theory and matrix computations. Intractable problems, heuristics, and randomized algorithms.
Digital Circuit Design and Analysis (TÖV201G)
Students will learn digital design principles and practice. Design is based on standard MSI and LSI devices or equivalent building blocks such as counters, shift registers, adders, and ROM. The design and analysis of combinatorial circuits for basic arithmetic is emphasized as well as the design an analysis of synchronous and asynchronous sequential circuits. Students will design circuits using basic building blocks such as flip flops and latches. Design and analysis of clocked sequential circuits based on Moore and Mealy FSM is emphasized. Introduction to Verilog HDL and FPGA in the design of as it applies to the previously described basic digital circuits. Students are required to complete 7 lab projects using FPGA. Students will also finish selected set of lab exercises using breadboards to contrast the state of the art design principles with classical principles. Students will work in teams to design and simulate digital circuits using a state-of-the-art CAD package. Both schematic and VHDL-based designs are emphasized.
Course Objective: Students will understand classical digital design principles and gain experience in using state of the art design tools.
Classes: Lectures 2 x 75 minutes, lab 1 x 120 minutes per week.
Co-requisites: Digital Circuits and Analysis lab
Software Project 2 (HBV601G)
The aim of this course is for students to be able to develop software systems and to participate in and reflect on software development projects. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics that are relevant in later phases of software development: quality assurance, installation, maintenance and evolution as weel as covers topics from HBV501G Software Project 1 in more detail. The project was started in HBV501G Software Project 1 and continued in this course.
Fundaments of the Internet (RAF617M)
Modern day telecommunications are characterised by the fact that communicated data is carried on fixed telecommunications infrastructure on a majority of the path between tranmitter and receiver. Wireless infrastructure often conveys the signals at the end of the path. This yields both high speed and the comfort of wireless communications. It is of utmost importance for engineers working in telecoms to have a fundamental knowledge of fixed networks and the range of technologies deployed.
In this course, the structure of fixed backbone and access networks will be described. Optical fibre and related technologies will be introduced, e.g. DWDM, SDH, Ethernet, ATM and MPLS-TP. Access network technologies on copper, coax and optical fibres will be treated, e.g. ADSL. VDSL, G.fast and DOCSIS. Different FTTH (Fibre to the Home) technologies will be treated such as PON (Passive Optical Network), Active Ethernet and point-to-point Ethernet.
IP (Internet Protocol) has become a fundamental technology for modern fixed networks. IP native technologies will be described from the physical to the application layer. On the link layer, Ethernet will be in the focus as well as MPLS. Circuit and packet switching will be treated as well as circuit and packet orientation of networks. Sevices such as PSTN, VoIP, OTT and P2P will be treated. Backhauling of wireless networks such as mobile networks and Wi-Fi will also be treated.
In introduction to network virtualisation and network function virtualisation (NFV) will be given as well as software defined networking (SDN). Legal and regulatory aspects will be introduced and aspects like network neutrality discfussed. Important players and stakeholders will be discussed, e.g. Google, Apple, Microsoft, Netflix and telecommunications service providers.
Finally, local area networks will be discussed, home networking, smart homes, set-top-boxes, NAS, PLC, plastic optical fibres, MOCA and Wi-Fi introduced.
The teaching form will be lectures and projects on IP communications will be worked. Students will write four papers on selected subjects and give presentations.
Physics 2 V (EÐL201G)
Teaching takes 12 weeks. Charge and electric field. Gauss' law. Electric potential. Capacitors and dielectrics. Electric currents and resistance. Circuits. Magnetic fields. The laws of Ampère and Faraday. Induction. Electric oscillation and alternating currents. Maxwell's equations. Electromagnetic waves. Reflection and refraction. Lenses and mirrors. Wave optics. Four laboratory exercises in optics and electromagnetism.
Fundamentals of Ethical Hacking (TÖL605M)
Ethical hacking is the discipline of attacker perspective security analysis. Using tools and techniques used by malicious hackers, ethical hackers gain unique and unique and valuable insights used for improving system security.
This course will introduce students to the fundamentals of ethical hacking tools and techniques. Students will begin by configuring a secure lab using virtualisation tools. Then every two weeks a new stage of the ethical hacking methodology and some related tools will be introduced. The students will submit weekly lab reports evidencing their theoretical and practical understanding of the methodology and tools.
For the best experience, students should own a PC able to run virtualisation software with an x86 image. Mac users with Apple CPU or those with PCs whose CPUs lack virtualisation support or who have limited RAM might have issues running a stable lab on their machine. Students who lack suitable hardware can use VMs on the department's cybersecurity server infrastructure.
- Year unspecified
- Whole year courses
- Mentor in Sprettur
- Fall
- Usable Privacy and Security
- Not taught this semesterInternship
- Not taught this semesterSoftware Maintenance
- Not taught this semesterFinal project
- Not taught this semesterHackathon Project
- Software Quality Management
- Analysis of Processes and Systems
- Logistics & Environmental Engineering
- Performance analysis of computer systems
- Cloud Computing and Big Data
- Machine Learning
- Not taught this semesterMachine Learning for Earth Observation powered by Supercomputers
- Not taught this semesterCryptocurrency
- Introduction to Information Security
- Programming Projects on Internet of Things
- Not taught this semesterSecurity Engineering for Critical Information Infrastructures
- Web Programming 1
- Not taught this semesterCyber Conflicts, Cyber Security Threats and Engineering, National Information Infrastructures (NII)
- Not taught this semesterComputer Networks and Security
- Not taught this semesterComputer Game Programming
- Not taught this semesterFrom an Idea to Reality
- Human Computer Interaction
- Distributed Systems
- Introduction to deep neural networks
- Spring 1
- Algorithms in the real world
- Internship
- Software Testing
- Not taught this semesterFinal project
- Web Programming 2
- Internship in computer science and software engineering - undergraduate
- Operations in Organizations
- Not taught this semesterIntroduction to Systems Biology
- Introduction to data science
- High Performance Computing
- The AI lifecycle
- Not taught this semesterSeminar on Machine Learning
- Operating Systems
- Not taught this semesterComputer Science Seminar for Undergraduates
- Not taught this semesterFrom an idea to reality II
- Competitive programming
- Year unspecified
- Applied Cryptography
Mentor in Sprettur (GKY001M)
In the course, the student's task consists in being a mentor for participants that are upper secondary school students and university students in the project "Sprettur". Mentors' main role is to support and encourage participants in their studies and social life. As well as creating a constructive relationship with the participants, being a positive role model, and participating in events organized in Sprettur. The mentor role centers around building relationships and spending meaningful time together with the commitment to support participants.
Sprettur is a project that supports students with an immigrant or refugee background who come from families with little or no university education. The students in this course are mentors of the participants and are paired together based on a common field of interest. Each mentor is responsible for supporting two participants. Mentors plan activities with participants and spend three hours a month (from August to May) with Sprettur’s participants, three hours a month in a study group and attend five seminars that are spread over the school year. Students submit journal entries on Canvas in November and March. Diary entries are based on reading material and students' reflections on the mentorship. Compulsory attendance in events, study groups, and seminars. The course is taught in Icelandic and English.
Students must apply for a seat in the course. Applicants go through an interview process and 15-30 students are selected to participate.
See the digital application form.
More information about Sprettur can be found here: www.hi.is/sprettur
Usable Privacy and Security (HBV507M)
Survey of the field of usable security and privacy with an emphasis on emerging technologies. Topics include authentication, location privacy, social network privacy, behavioral advertising, - health privacy, anonymity, cryptocurrency, technical writing and ethical conduct of usable privacy and security research.
Internship (HBV004G)
The aim of the internship is to train students to work under the guidance of specialists at companies and institutions. The projects must be related to one of the subjects taught in the Computer Science department and they must put to test the knowledge and skills that the student has acquired during studies.
At the start of the internship, the student shall send an email to the supervisor listed here in UGLA in order to establish a contact.
At the end of the internship, the student must return to the supervisor:
- A report (ca. 3 pages) on the student's main project/main tasks and the connection to the studies in computer science / software engineering. The report shall also state what study goals the student set at the beginning of the internship and how they achieved them in the projects.
- Diary kept by the student during working hours. The diary shall include a weekly overview stating what the tasks of the week were and how much time was spent on individual tasks.
The internship is not considered completed until the supervisor of the company / institution has submitted confirmation of the student's involvement and work in the project and the supervisor from the Computer Science department has confirmed the submission.
The grade is pass/fail.
NOTE: Students can not register themselves for this course, but they are registered for the course when they have secured an internship position at a company or institution.
All internships will be advertised separately on www.tengslatorg.hi.is at the beginning of each semester and students will apply specifically for internships. An application together with a curriculum vitae and an introductory letter, in which students state why they are interested in getting an internship at the company in question, must be sent to von-starfsthjalfun@hi.is .
Note that this course is mutually exclusive with the HBV502G and HBV603G internships and the HBV261L final project.
Software Maintenance (HBV103M)
Usually taught every second year (typically in fall of odd years, but this is subject to change in 2024).
The first part of the course is based on flipped-classroom style weekly reading, videos and assignments on:
- Evolution of Software and Lehman’s laws,
- Maintenance processes,
- Metrics useful for maintenance,
- Software analysis,
- Re-engineering,
- Reverse engineering,
- Code Smells & Refactoring,
- Basics of (Regression-)Testing,
- Design principles to support change & Design Patterns,
- Tools for software maintenance (including advanced features of an IDE).
In the second part of this course, these techniques will be applied in order to maintain a real legacy software written in Java.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies and you need solid Java programming experience: we will maintain a complex software and being able to understand how such a grown software works and to fix bugs is even more difficult to write such a software from scratch. Hence, you should have passed HBV501G Software Project 1, preferably even HBV601G Software Project 2. (It is impossible to maintain a software if you would not even be able to develop it.) Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.
Final project (HBV261L)
An independent project under the direction of a member of the department of Computer Science.
Note that this course is mutually exclusive with the HBV004G, HBV502G and HBV603G internships.
Hackathon Project (HBV502G)
This course aims to give students an opportunity for independent teamwork on a project of their own design under their own direction, developing it from inception to the demonstration of a prototype.
The projects will proceed as part of the HealthTech Hackathon or FinTech Hackathon (Lausnarmót) in the context of Innovation Week 2021.
Students interested in participating must first pitch their idea to the hackathon organizers in early August. A committee will review all submitted ideas and select those considered most innovative, realistic, and having the potential to solve future challenges.
Selected teams will be announced in August. Only student teams with up to five members selected by the committee can sign up for this course and will have 4 weeks in September to work on their projects. Students are expected to work on their projects conscientiously over the 4-week period, expecting to dedicate 25-30 hours to the project each week. All teams will have access to regular mentoring sessions.
Final presentations will take place in early October. All teams that participated consistently and gave a successful final presentation will receive a passing grade, independently of the hackathon jury’s ranking.
Note that this course is mutually exclusive with the HBV004G and HBV603G internships and the HBV261L final project.
Software Quality Management (HBV505M)
The course is based on flipped-classroom style weekly reading, videos and assignments on software quality management-related aspects of the Software Development Life Cycle (SDLC) and by covering some parts of DevOps also Application Lifecycle Management (ALM). In parallel to theoretical concepts, the application of source code-centric tools relevant for quality management is trained by applying them to a codebase throughout the course using the ALM tool GitLab. The concepts and tools are independent from a particular software development process and cover:
- Software Quality Foundations, Software Quality Models.
- Configuration management (CM) and traceability:
- Version management (e.g. Git),
- Change management (e.g. issue tracker),
- Build management (e.g. Maven),
- Release management
- Continuous integration (CI) (e.g. using GitLab pipelines).
- Integrating testing into a CI pipeline (e.g. using JUnit and GitLab).
- Reviews (e.g. tool-based code review)
- Static analysis (e.g. SonarCloud)
- Metrics for quality management (product and process metrics).
- Quality standards:
- Software Life Cycle Processes,
- Software Process Improvement and maturity assessment (e.g. CMMI).
- Using a Wiki to create a quality plan and other documentation.
Students chose their own codebase (e.g. from the Software Project 1 or 2 course) to which they apply the concepts and tools tought in this course. While the teaching material and tools assumes Java as programming language, students are welcome to use a codebase in another programming language.
Software quality in agile development processes is covered by student presentations at the end of the course.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies and you need Java programming experience. Hence, you should have passed HBV501G Software Project 1, preferably even HBV601G Software Project 2.
Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.
Analysis of Processes and Systems (IÐN301G)
The aim of the course is to prepare students in analysing processes and systems. Description of processes are explained so that process analysis can be performed. Process discovery and their mapping is explained. Three ways of doing process discovery are explained: fact-based, interview-based and workshop-based. When processes are mapped they can be analyzed. The course will go through the qualitative methods of: value-stream-analysis, root-cause-analysis and risk analysis. The quantitative methods of: performance management, flow analysis, queuing theory and simulation will be explained. The later part of the course will be on systems and system analysis. System thinking will be explained and how systems can be used to describe the world. The system analysis methods of causal-loop-diagrams and stocks-and-flows will be explained. The course will conclude by simulating both processes and systems.
Logistics & Environmental Engineering (IÐN510M)
The course focuses on the principles of logistics and supply management and gives a broad introduction to the field. The course is divided into three topics primarily. It covers purchase operations of services and inventory management. This part is followed by looking into transportation and distribution management. Finally, the environmental impacts of logistics is studies and all the three parts put together into a view of sustainability. The course consists of lectures, exercises, game (the Beer Game) and a management simulation game to give hands on experience on logistics management,
Performance analysis of computer systems (REI503M)
Usually taught every second year.
This course provides students with an introduction to modeling and performance evaluation of computer and communication systems. Large-scale distributed computer systems process arriving requests, e.g., web page queries, in parallel in order to optimize performance metrics, such as response time and user satisfaction. Other important performance metrics include throughput and service-level agreement in general. This course covers basic mathematical tools needed to evaluate such dynamic systems and to understand the strengths and weaknesses, for example in different designs, scheduling disciplines, and operating policies. The approach is based on operations research methods, in particular, queueing theory and Markov processes (previous knowledge of these methods is not required).
Attendance is strongly recommended.
Cloud Computing and Big Data (REI504M)
Overview of high performance computing (HPC) and “Big Data”, HPC environments with computing, network and storage resources, overview of parallel programming. Storage infrastructures and services for Big Data, Big Data analytics, the map-reduce paradigm, structured and unstructured data. Practical exercises: (A) Students will use the Amazon Web Services (AWS) cloud or equivalent to set up a multi-computer web service and an associated multi-computer testing application. (B) Students will get hands on experience of processing large data sets using map-reduce techniques with AWS.
Machine Learning (REI505M)
An overview of some of the main concepts, techniques and algorithms in machine learning. Supervised learning and unsupervised learning. Data preprocessing and data visualization. Model evaluation and model selection. Linear regression, nearest neighbors, support vector machines, decision trees and ensemble methods. Deep learning. Cluster analysis and the k-means algorithm. The students implement simple algorithms in Python and learn how to use specialized software packages. At the end of the course the students work on a practical machine learning project.
Machine Learning for Earth Observation powered by Supercomputers (REI506M)
This course exposes the students to the physical principles underlying satellite observations of Earth by passive sensors, as well as parallel Deep Learning (DL) algorithms that scale on High Performance Computing (HPC) systems.
For the different theoretical concepts (represented by 4 modules), the course provides hands-on exercises. These exercises are part of a project in the context of Remote Sensing (RS) image classification that the students are asked to develop during the whole duration of the course.
Cryptocurrency (STÆ532M)
The course will start by introducing the basic concepts of electronic currencies, such as wallets, addresses and transactions. The students will get to know encoding, transactions, blocks and blockchains. The cryptocurrency Smileycoin will be used as an example throughout the course.
Students will compile their own wallets from source and dive deeply enough into the underlying algorithms to be able to put together their own transactions from the Linux command line and read typical wallet code written in C++.
Students will learn how to call the wallet from other software, e.g. to analyse the flow of funds.
Students will learn how to implement several additions to the traditional use of electronic currency such as encoded messages, running software to react to payments etc.
Students will set up their own examples of addition and study how to set up atomic swaps between different currencies, using the Smileycoin for announcements.
Homework will be individualised, selected from different formats (a) solutions based on the wallet on the command line, (2) documents to form handouts or other material in the tutor-web, (3) short programs (APIs) which respond to transactions being send to particular addresses or to a
particular wallet, (4) programs which talk to exchanged and/or (5) new user interfaces which improve or add to the functionality of a wallet.
All the material and assignments will be in English. Returned assignments will become a part of the open tutor-web educational system.
The course may be taught as a reading course or self-study, but the exact implementation depends on participation.
Introduction to Information Security (TÖL029M)
Þetta námskeið byggir grunn að skilningi á lykilatriðum sem tengjast verndun upplýsinga, ákvörðun á verndarstigi og viðbrögð við öryggisatvikum, og hönnun á samræmdu raunhæfu upplýsingaöryggiskerfi, með viðeigandi innbrotsskynjun og tilkynningum. Tilgangur námskeiðsins er að veita nemandanum yfirsýn yfir svið upplýsingaöryggis og upplýsingatrygginga. Nemendur munu sjá ýmsar gerðir öryggisaðgerða, aðferðafræða og verklags. Umfjöllunin mun taka fyrir skoðun og vernd upplýsingaeigna, uppgötvun og viðbrögð við ógnum við upplýsingaeignir, verklagsreglur fyrir og eftir öryggisatvik, tæknileg og stjórnunarleg viðbrögð og yfirlit yfir skipulagningu upplýsingaöryggis og starfsmannahald. Meðal efnis eru áhættumat, auðkenning, veföryggi, öryggi forrita, persónuvernd og gagnavernd, kynning á dulmálskóðun, öryggisarkitektúr, eldveggir og önnur tæki og netskipulag.
Programming Projects on Internet of Things (TÖL103M)
This course offers a hands-on introduction to programming small devices (microcontrollers, single-board computers) used in the context of Internet of Things, sensor networking, and home automation.
Such devices are often equipped with a large number of I/O pins, some RAM and flash memory, and wireless communication capabilities (e.g. WiFi and/or Bluetooth), making them attractive for tasks involving data acquisition,
processing, and wireless communication.
The course consists of bi-weekly programming tasks dealing with serial communication, data acquisition and analysis, programming of real-time O/S (RTOS), wireless communication and TCP/IP client-servers paradigm.
The biweekly assignments lead to a final project.
Security Engineering for Critical Information Infrastructures (TÖL106M)
The overarching objective of this experimental course is to provide a practical technical and policy introduction for the foundations of the building and operating of dependable, complex distributed national information infrastructures.
The course teaches university students how to model, design, implement, operate, and defend these national information infrastructures (NII) to withstand errors and attacks.
We will introduce complementary engineering methodologies intended to assist NII policymakers, stewards, operators, and engineering professionals to implement protective initiatives to design and improve the survivability of NII systems, critical functions, and processes.
The course will include cyber threat intelligence tradecraft and the experimental use of both open-source intelligence and an artificial intelligence tool i.e. ChatGPT
Web Programming 1 (TÖL107G)
Basis in building web projects, focusing on the frontend: HTML, CSS and JavaScript. Standards, practices and what it takes to create a good site. Design, layout and working with design documents. Programming in the interpreted programming language JavaScript, working with the browser and tools related to that. HTTP standard introduced. Projects focus on creating web sites that use what has been taught.
Cyber Conflicts, Cyber Security Threats and Engineering, National Information Infrastructures (NII) (TÖL107M)
This interdisciplinary course examines underlying and emerging information technologies, cyber security engineering and policies associated with surveillance, cyber warfare, and cyber threats.
The technological concepts reviewed in this course include but are not limited to National Information Infrastructures, the Internet, Dark Web, networks and sensors, and trends associated with our emerging Internet of Things.
The course will review some salient cyber conflict history, international and national policies concerning cyber conflict and security engineering - secure by design, military/civilian doctrine, and some lessons learned from the use of cyber operations in past, present and future conflicts.
Computer Networks and Security (TÖL305G)
The foundations of computer networks with emphasis on the TCP/IP protocol. Analysis and design of computer networks. Hardware and software used in computer networks. Implementation and maintenance of computer networks. Security systems for computer networks.
Computer Game Programming (TÖL308G)
An introduction to the core techniques and concerns related to programming computer games. Questions of frame-rate control, object-management, determinism, memory-management and runtime performance will be addressed. The focus will be on “engine-level” facilities. The principles behind multiplayer networked games will be explored. Examples will be drawn from simple 2D games such as “Asteroids” and “Pac-Man”, but the emphasis will be on general principles which also apply to sophisticated, cutting-edge, modern games software.
From an Idea to Reality (TÖL501G)
The course has been in development for over a decade under the name "Computer Systems and Marketing".
The course is based on teacher lectures and individual and group projects that help students to think outside the box. Teacher will tell of his experiences of making ideas become real and have a special focus on the mistakes that have been made along with the successful stories.
The final project of the course is a business plan that will be presented in an oral final exam. The business plan focuses on the idea of each student and how the student plans to realize his project.
Human Computer Interaction (TÖL502M)
Usually taught every second year.
The objective of the course is to allow students to examine more closely than is done in the introductory course Graphical User Interface Programming HBV201G specific factors of HCI. The factors covered are user interface design using prototyping, programming of smart devices and users‘ acceptability of the software. There will be emphasis on different techniques and tools to develop prototypes. Also, on the design of user interfaces and native programming for smart phones or pads. The development process will be aimed at ensuring accessibility and acceptability of users. Students work on small projects individually, or on larger projects in groups.
Distributed Systems (TÖL503M)
Usually taught every second year.
This course covers concepts of distributed systems and their application. Besides foundations on characteristics and models of distributed systems, networking and security, this includes network-based low-level interprocess communication, high-level remote procedure calls, the distributed object model and remote method invocation, services relevant in distributed systems (such as name services or distributed file systems), selected topics of distributed algorithms and their implementation (such as coordination, agreement, time, replication). Furthermore, special types of distributed systems may be covered (such as peer-to-peer systems, Cloud and Grid computing). Current technologies (such as Java RMI, Web Services, gRPC) are used as case study and as platform for developing distributed applications using high-level programming languages (such as Java).
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies. (E.g. we will implement middleware in Java, so you should have programming experience well beyond "TÖL101G Computer Science 1". As a middleware adds functionality on top of an Operating System, you should have also passed TÖL401G Operating Systems.)
Introduction to deep neural networks (TÖL506M)
In this course we cover deep neural networks and methods related to them. We study networks and methods for image, sound and text analysis. The focus will be on applications and students will present either a project or a recent paper in this field.
Algorithms in the real world (TÖL608M)
The course will cover the design and analysis of algorithms, with emphasis on algorithms for large datasets and real world applications.
The algorithms covered will be drawn from various subfields, e.g. data and text compression, error correcting codes, large scale text search and search engines, parallel programming, GPU programming, streaming algorithms, probabilistic algorithms, nearest neighbor search in high dimensional datasets.
Internship (HBV004G)
The aim of the internship is to train students to work under the guidance of specialists at companies and institutions. The projects must be related to one of the subjects taught in the Computer Science department and they must put to test the knowledge and skills that the student has acquired during studies.
At the start of the internship, the student shall send an email to the supervisor listed here in UGLA in order to establish a contact.
At the end of the internship, the student must return to the supervisor:
- A report (ca. 3 pages) on the student's main project/main tasks and the connection to the studies in computer science / software engineering. The report shall also state what study goals the student set at the beginning of the internship and how they achieved them in the projects.
- Diary kept by the student during working hours. The diary shall include a weekly overview stating what the tasks of the week were and how much time was spent on individual tasks.
The internship is not considered completed until the supervisor of the company / institution has submitted confirmation of the student's involvement and work in the project and the supervisor from the Computer Science department has confirmed the submission.
The grade is pass/fail.
NOTE: Students can not register themselves for this course, but they are registered for the course when they have secured an internship position at a company or institution.
All internships will be advertised separately on www.tengslatorg.hi.is at the beginning of each semester and students will apply specifically for internships. An application together with a curriculum vitae and an introductory letter, in which students state why they are interested in getting an internship at the company in question, must be sent to von-starfsthjalfun@hi.is .
Note that this course is mutually exclusive with the HBV502G and HBV603G internships and the HBV261L final project.
Software Testing (HBV205M)
Usually taught every second year (typically in spring of odd years, but this is subject to change in 2024).
This course covers testing of software. Besides basic foundations, this includes both dynamic testing where the software under test is executed and static approaches where software and other artefacts produced during software development are investigated without executing them. The focus of this course is, however, on dynamic testing. The different levels of testing (component test, integration test, system and acceptance test) and types of testing (functional, non-functional, structural and change-related) are covered as well as different test design techniques (black box test and white box test). Furthermore, test management and principles of test tools are discussed. In addition, selected advanced topics may be covered (for example, test languages, testing of object-oriented software, test process improvement, agile testing). The covered topics are a superset of the International Software Testing Qualifications Board's (ISTQB) certified tester foundation level syllabus.
The first part of the course is based on flipped-classroom style weekly reading, videos and assignments. In the second part, students work independently on some project related to software testing.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be very advanced in their BSc. studies, i.e. have experience in programming languages, software development and applying it in some software project, but should also be familiar with theoretical concepts from automata theory.
Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.
Final project (HBV261L)
An independent project under the direction of a member of the department of Computer Science.
Note that this course is mutually exclusive with the HBV004G, HBV502G and HBV603G internships.
Web Programming 2 (HBV403G)
Continuation of web programming I, backend programming in node.js, writing and connecting to web services and connections to databases. Frontend libraries/frameworks used to setup a frontend project (React, Ember, Vue). Security issues that need to be considered when writing for the web. Projects focus on creating web sites that use what has been taught.
Internship in computer science and software engineering - undergraduate (HBV603G)
The objective is to ensure vocational training under the professional guidance of experienced managers at companies or public institutions related to computer science or software engineering.
Role of student
• Work on one major task
• A student is in a 6-month internship.
A student may not take a final assignment (TÖL261L or HBV261L)
Student's tasks
These include questionnaire analysis, application design, programming, software testing, installation and operation of computer systems. The project must be in computer science or software engineering and try the knowledge and skills acquired by the student in the course. The final product of vocational training must be defined in the project description, ie. what final report should contain. Supervisory teacher of vocational education must approve a proposal for a project.
Role of an organization
• A company provides a student with a workplace and appoints a supervisor within an organization that monitors his work.
• A student is an employee of an enterprise and pays a student's remuneration company according to a further agreement therein.
• Job training is three to six months in full-time employment.
• At the beginning of vocational training lies the assignment of the student. Project description must be accompanied by a contract.
• The supervisor and student meet regularly and evaluate the progress of projects.
Completion of vocational training
• At the end of the working hours, return to the supervising teacher:
1. Student's final report (as defined in the project description). In the case of a 24 ECTS course, the student shall submit a mid-term report on the internship.
2. A student's book kept during vocational training. The diary shall include a weekly summary indicating each project of the week and the amount of time spent on individual projects.
3. Confirmation by the supervisor of the student's attendance and project work at the end of the practical training.
• The course is not considered complete until both the supervisory teacher of the vocational education and the supervisor of the practical training believe that satisfactory results have been achieved and the final and final reports have been submitted.
Note that this course is mutually exclusive with the HBV004G and HBV502G internships and the HBV261L final project.
Operations in Organizations (IÐN201G)
The goal with this course is to prepare students to approach organisations as sequence of operations. Organisations will be described as a group of operations that produce value adding work. Companies will be visited and students will describe their workings as operations sequences. Methods to describe operations, to analyse operations and to present operation sequences will be introduced and trained. Students will be introduced to methods of describing, analysing and presenting operations overview. At course end students should be able to use these methods for both descriptions and analysis and then interpret their results to present both orally and in writing.
Introduction to Systems Biology (LVF601M)
Systems biology is an interdisciplinary field that studies the biological phenomena that emerge from multiple interacting biological elements. Understanding how biological systems change across time is a particular focus of systems biology. In this course, we will prioritize aspects of systems biology relevant to human health and disease.
This course provides an introduction to 1) basic principles in modelling molecular networks, both gene regulatory and metabolic networks; 2) cellular phenomena that support homeostasis like tissue morphogenesis and microbiome resilience, and 3) analysis of molecular patterns found in genomics data at population scale relevant to human disease such as patient classification and biomarker discovery. In this manner, the course covers the three major scales in systems biology: molecules, cells and organisms.
The course activities include reading and interpreting scientific papers, implementation of computational algorithms, working on a research project and presentation of scientific results.
Lectures will comprise of both (1) presentations on foundational concepts and (2) hands-on sessions using Python as the programming language. The course will be taught in English.
Introduction to data science (REI202G)
The course provides an introduction to the methods at the heart of data science and introduces widely used software tools such as numpy, pandas, matplotlib and scikit-learn.
The course consists of 6 modules:
- Introduction to the Python programming language.
- Data wrangling and data preprocessing.
- Exploratory data analysis and visualization.
- Optimization.
- Clustering and dimensionality reduction.
- Regression and classification.
Each module concludes with a student project.
Note that there is an academic overlap with REI201G Mathematics and Scientific Computing and both courses cannot be valid for the same degree.
High Performance Computing (REI204M)
Design of parallel computers and parallel programming models. Shared memory architecture. Message passing and distributed memory architecture. Parallel programming of computer clusters using MPI and multicore programming using OpenMP. Parallel algorithms for sorting, searching, linear algebra, and various graph problems.
Course topics will be very similar like HPC in Fall 2019:
http://www.morrisriedel.de/hpc-course-fall-2019
Positioning in the Field of High-Performance Computing (HPC)
- Consists of techniques for programming & using large-scale HPC Systems
- Approach: Get a broad understanding of what HPC is and what can be done
- Goal: Train general HPC techniques and systems and selected details of domain-specific applications
Course Motivation
Parallel processing and distributed computing
- Matured over the past three decades
- Both emerged as a well-developed field in computer science
- Still a lot of innovation, e.g. from hardware/software
‘Scientific computing‘ with Maple, Matlab, etc.
- Performed on small (‘serial‘) computing machines like Desktop PCs or Laptops
- An increasing number of cores enables ‘better scientific computing‘ today
- Good for small & fewer complex applications, quickly reach memory limits
‘Advanced scientific computing‘
- Used with computational simulations and large-scale machine & deep learning
- Performed on large parallel computers; often scientific domain-specific approaches
- Use orders of magnitude multi-core chips & large memory & specific many-core chips
- Enables ‘simulations of reality‘ - often based on known physical laws and numerical methods
The AI lifecycle (REI603M)
In this course, we study the AI lifecycle, i.e. the productionisation of AI methods.
We explore the following parts of the lifecycle:
- Data collection and preparation
- Feature engineering
- Model training
- Model evaluation
- Model deployment
- Model serving
- Model monitoring
- Model maintenance
Three large projects will be handed out during the semester where students compete to solve AI problems.
Seminar on Machine Learning (TÖL028M)
In this course, students familiarize themselves with a particular topic in artificial intelligence (e.g. computer vision, natural language processing, data processing, generative modeling or other topics) by studying relevant academic literature and preparing a talk on this topic for their classmates.
Students can choose from a selection of topics provided by the teacher, or propose a topic that they are interested in on their own.
Besides learning about the subject matter of the talks, the goal of the course is to practice presentation skills.
The course starts on June 8th and will finish on August 17th.
Operating Systems (TÖL401G)
This course covers concepts of operating systems. Besides foundations on computer hardware structures and general operating system architectures, this includes concepts of processes and threads and their management, principles of scheduling and scheduling algorithms, communication and synchronisation between processes and deadlock issues, principles of memory management including virtual memory and page replacement algorithms, file systems and their implementation as well as mass-storage management. If time allows, principles for achieving protection and security, and aspects of distribution (e.g. concepts of distributed systems and distributed file systems) are covered as well. This course does not deal with details of implementing operating systems, but introduces generic concepts that are used when implementing operating systems and that an application developer needs to know, when creating an application program. Where appropriate, current operating systems such as Microsoft Windows and POSIX-compliant UNIX-like systems (e.g. Linux) are used as case study for implementation and offered system calls. The usage of operating system services from within high-level programming languages (e.g. C, C++ or Java) is demonstrated based on Application Programming Interfaces (APIs) offered by prevailing system libraries.
Computer Science Seminar for Undergraduates (TÖL602G)
In this course, students familiarize themselves with a particular topic in computer science (e.g. an engineering technique, a computational problem, a programming language etc.) by studying relevant academic literature and preparing a talk on this topic for their classmates. Students can chose from a selection of topics provided by the teacher, or propose a topic that they are interested in on their own. Besides learning about the subject matter of the talks, a goal of the course is to practice presentation skills.
From an idea to reality II (TÖL602M)
The course is a continuation of the course "From an idea to reality". Students are expected to continue to develop their idea that they had in the "From an Idea to Reality" course. If the students are not satisfied with their previous idea and think they have come up with a better idea, that's fine, and if the teacher is satisfied with the new idea the student can continue with the new idea.
Students must apply for grants in the competition fund. Practice pitching your idea to potential investors and your fellow students.
The teacher will cover accounting and planning based on probability.
The teacher will cover company formation and tax matters.
Competitive programming (TÖL607G)
This course will provide students with the skills needed to solve computational problems that frequently appear in programming competitions. Such skills are highly useful in various programming tasks, in other courses and in job interviews. An overview of the main algorithms and techniques will be given. This includes algorithms for graphs, strings, computational geometry and counting techniques. The students will spend most of their time programming solutions to contest problems.
Applied Cryptography (TÖL213M)
In this course, students will take a practical approach to understanding the building and breaking of cryptographic implementations. The first half of this module will involve programming tasks while the second half will involve two mini projects.
Starting from simplistic approaches used historically, such as the Caeser cipher, to modern day protocols used to secure telecommunications ubiquitously, such as AES and TLS. Students will also consider the role of cryptography in society more broadly by researching how contentious technologies such as end-to-end encryption and Tor impact justice and privacy, and distributed ledgers can enable the decentralisation of key societal systems. Finally, the course will conclude with a mini project demonstrating a practical attack against a cryptographic implementation using ethical hacking approaches e.g. WiFi cracking, password bruteforcing or man-in-the-middle attack of an encrypted connection to sniff traffic.
The course will encompass the following stages:
1) Building cryptographic primitives in a programming language of choice.
2) Application engineering best practices.
3) A research project in cryptography and society.
4) A practical project in ethical hacking approaches to demonstrating weaknesses in cryptography implementations.
- Fall
- HBV101GIntroduction to Software EngineeringMandatory (required) course4A mandatory (required) course for the programme4 ECTS, creditsCourse Description
This course explains what software engineering is, why it is important, and which skills and competencies it entails.
Through guest talks from professional software engineers and work on practical projects, the course introduces key concepts of software engineering – specifically, the forces that shape software products, and the roles and responsibilities of the people who drive them.
Students work in teams to pick issues in their environment that could be solved or improved through software, and identify challenges that would need to be resolved in designing and building a suitable software solution. This motivates the methods and paradigms that will be introduced in detail in further courses of the software engineering program.
Attention! This course is specifically intended for 1st year students in Software Engineering. New 1st year students in Computer Science or other programs need special permission from the faculty to sign up for the course, but it is not intended for 2nd or 3rd year students.
Face-to-face learningPrerequisitesSTÆ104GMathematical Analysis IMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThis is a foundational course in single variable calculus. The prerequisites are high school courses on algebra, trigonometry. derivatives, and integrals. The course aims to create a foundation for understanding of subjects such as natural and physical sciences, engineering, economics, and computer science. Topics of the course include the following:
- Real numbers.
- Limits and continuous functions.
- Differentiable functions, rules for derivatives, derivatives of higher order, applications of differential calculus (extremal value problems, linear approximation).
- Transcendental functions.
- Mean value theorem, theorems of l'Hôpital and Taylor.
- Integration, the definite integral and rules/techniques of integration, primitives, improper integrals.
- Fundamental theorem of calculus.
- Applications of integral calculus: Arc length, area, volume, centroids.
- Ordinary differential equations: First-order separable and homogeneous differential equations, first-order linear equations, second-order linear equations with constant coefficients.
- Sequences and series, convergence tests.
- Power series, Taylor series.
Face-to-face learningPrerequisitesSTÆ107GLinear AlgebraMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionBasics of linear algebra over the reals.
Subject matter: Systems of linear equations, matrices, Gauss-Jordan reduction. Vector spaces and their subspaces. Linearly independent sets, bases and dimension. Linear maps, range space and nullk space. The dot product, length and angle measures. Volumes in higher dimension and the cross product in threedimensional space. Flats, parametric descriptions and descriptions by equations. Orthogonal projections and orthonormal bases. Gram-Schmidt orthogonalization. Determinants and inverses of matrices. Eigenvalues, eigenvectors and diagonalization.Face-to-face learningPrerequisitesTÖL101GComputer Science 1Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe Java programming language will be used to introduce basic practices in computer programming. Practice in programming is scheduled throughout the semester. An emphasis is placed on logical methods for writing program and good documentation. Main ideas related to computers and programming. Classes, objects and methods. Control statements. Strings and arrays, operations and built-in functons. Input and output. Inheritance. Ideas relatied to system design and good practices for program writing. Iteration and recursion. Searching and Sorting.
Face-to-face learningPrerequisitesTÖL104GMathematical StructureMandatory (required) course8A mandatory (required) course for the programme8 ECTS, creditsCourse DescriptionPropositions, predicates, inference rules. Set operations and Boolean algebra. Induction and recursion. Basic methods of analysis of algorithms and counting. Simple algorithms in number theory. Relations, their properties and representations. Trees and graphs and related algorithms. Strings, examples of languages, finite automata and grammars.
Face-to-face learningPrerequisites- Spring 2
TÖL205GComputers, operating systems and digital literacy basicsMandatory (required) course4A mandatory (required) course for the programme4 ECTS, creditsCourse DescriptionIn this course, we study several concepts related to digital literacy. The goal of the course is to introduce the students to a broad range of topics without necessarily diving deep into each one.
The Unix operating system is introduced. The file system organization, often used command-line programs, the window system, command-line environment, and shell scripting. We cover editors and data wrangling in the shell. We present version control systems (git), debugging methods, and methods to build software. Common concepts in the field of cryptography are introduced as well as concepts related to virtualization and containers.
Online learningSelf-studyPrerequisitesHBV201GGraphical User Interface ProgrammingMandatory (required) course8A mandatory (required) course for the programme8 ECTS, creditsCourse DescriptionIn this course, students will get training in programming graphical user interfaces in Java and learn about the main steps in software development projects, from ideation to testing. Emphasis is placed on students acquiring more excellent proficiency in programming larger projects than in introductory programming courses (such as TÖL101G), being able to design interactive user interfaces, program them, and test them. This includes students becoming familiar with large software libraries (here, JavaFX) and using them. Additionally, students should be able to read, understand, and implement instructions on functionality, including interactivity. Students will be introduced to the design process, which consists of five stages: understanding the task, brainstorming ideas and interactivity, selecting and defining, programming a prototype, and testing and iterating. Insight is provided into user-centered development, interactive design, prototypes, and user testing.
The course will prepare students for courses such as Software Development and Software Projects 1 and other classes where students need to program. It is also a good foundation for courses like TÖL502M Human-Computer Interaction.Face-to-face learningPrerequisitesAttendance required in classHBV202GSoftware Design and ConstructionMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionNote: This course is based on teamwork and uses flipped classroom teaching: therefore, it is necessary to attend the classes to work there in groups. Do not take this course if you have timetable collisions and cannot attend the classes.
This course covers basic foundations of software design and software construction.
Software design is covered in terms of object-oriented modeling using the Unified Modeling Language (UML), object-oriented design principles (e.g. interfaces and packages, the Liskov Substitution Principle), and basic design patterns.
Software construction is covered mainly in terms of tools, in particular the more advanced features (such as code completion, using a debugger and improving code using refactoring) of an Integrated Development Environment (IDE), build automation and dependency management (e.g., the Maven or Gradle tool and modular Java), compilers (e.g., dealing with compiler warnings) and runtime systems (e.g., classpaths), and basics of unit testing.
Face-to-face learningPrerequisitesSTÆ205GMathematical Analysis IIMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionOpen and closed sets. Mappings, limits and continuity. Differentiable mappings, partial derivatives and the chain rule. Jacobi matrices. Gradients and directional derivatives. Mixed partial derivatives. Curves. Vector fields and flow. Cylindrical and spherical coordinates. Taylor polynomials. Extreme values and the classification of stationary points. Extreme value problems with constraints. Implicit functions and local inverses. Line integrals, primitive functions and exact differential equations. Double integrals. Improper integrals. Green's theorem. Simply connected domains. Change of variables in double integrals. Multiple integrals. Change of variables in multiple integrals. Surface integrals. Integration of vector fields. The theorems of Stokes and Gauss.
Face-to-face learningPrerequisitesTÖL203GComputer Science 2Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course will cover various data structures, algorithms and abstract data types. Among the data structures covered are lists, stacks, queues, priority queues, trees, binary trees, binary search trees and heaps along with related algorithms. Various search and sort algorithms will be covered. Algorithms will be analysed for their space and time complexity. There will be small programming assignments in Java using the given data structures and algorithms.
Face-to-face learningPrerequisites- Fall
- HBV301GRequirements EngineeringMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse Description
Software requirements express the needs and constraints placed on a software product so that it can solve an issue in an application domain. This course covers techniques for the elicitation, analysis, specification, validation and management of software requirements.
The course introduces types and properties of software requirements, relevant stakeholders, techniques for requirements elicitation, analysis, specification and validation, as well as practical considerations such as change management and conflict resolution. Students practice these techniques in teams by applying them to projects of their choice.
New mandatory course - first taught in 2023-2024
Face-to-face learningPrerequisitesSTÆ302GMathematical Analysis IIIMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionFunctions of a complex variable. Analytic functions. The exponential function, logarithms and roots. Cauchy's Integral Theorem and Cauchy's Integral Formula. Uniform convergence. Power series. Laurent series. Residue integration method. Application of complex function theory to fluid flows. Ordinary differential equations and systems of ordinary differential equations. Linear differential equations with constant coefficients. Systems of linear differential equations. The matrix exponential function. Various methods for obtaining a particular solution. Green's functions for initial value problems. Flows and the phase plane. Nonlinear systems of ordinary differential equations in the plane, equilibrium points, stability and linear approximations. Series solutions and the method of Frobenius. Use of Laplace transforms in solving differential equations.
Face-to-face learningPrerequisitesTÖL303GData Base Theory and PracticeMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionDatabases and database management systems. Physical data organization. Data modelling using the Entity-Relationship model and the Relational model. Relational algebra and calculus. The SQL query language. Design theory for relational data bases, functional dependencies, decomposition of relational schemes, normal forms. Query optimization. Concurrency control techniques and crash recovery. Database security and authorization. Data warehousing.
Face-to-face learningPrerequisitesTÖL304GProgramming LanguagesMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionAn introduction to the most common types of programming languages. Block structured languages, list processing languages, object oriented programming. Describing programming languages, compilers and interpreters. The internal structure of block structured programming languages.Modular programming . Functions and subroutines, parameter passing. Memory management, garbage collection. The programming languages Scheme, CAML, Java, Morpho, C++ and Haskell will be considered. Object oriented programming languages. Objects and inheritance. Grammars, the structure of compilers. Modular programming will be emphasised (especially generic modules), as well as list processing, functional programming and block structure.
Face-to-face learningPrerequisitesTÖL309GComputer organization and programmingMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course covers the internal structure of computers and how programmers should construct their programs to take advantage of that. The programming language C will be introduced, especially its use of pointers and memory usage. Data representation for integers and floating point numbers. Programming in x86-64 assembly language. In particular how constructs in C are implemented in x86-64 assembly language. Memory hierarchy and its effects on program performance. Exceptional control flow in programs. Virtual memory. Concurrent programming.
Face-to-face learningPrerequisites- Spring 2
HBV401GSoftware DevelopmentMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionIn this course, software engineers and computer scientists take the step from programming-in-the-small (i.e. individual developers creating compact modules that solve clearly defined problems) to programming-in-the-large (i.e. teams of developers building complex systems that satisfy vague customer requirements). To deal with the complexities of such projects, this course introduces key software engineering concepts such as agile and plan-driven software process models, requirements engineering, effort estimation, object-oriented analysis and design, software architecture and test-driven development. These concepts are immediately applied in practice as students team up to develop and integrate component-based systems using the Java programming language.
Face-to-face learningPrerequisitesNot taught this semesterHBV404GIndustrial Software EngineeringMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThis course covers legal and economic aspects of software engineering and software project management.
Through lectures, guest talks, work on practical projects and seminar elements, the course will consider business models for the development and/or operation of software, introduce strategies for software estimation, risk management and pricing, explain models for software licensing, and discuss aspects of ethics, privacy and security in software.
New mandatory course - first taught in 2023-2024.
Face-to-face learningPrerequisitesSTÆ203GProbability and StatisticsMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionBasic concepts in probability and statistics based on univariate calculus.
Topics:
Sample space, events, probability, equal probability, independent events, conditional probability, Bayes rule, random variables, distribution, density, joint distribution, independent random variables, condistional distribution, mean, variance, covariance, correlation, law of large numbers, Bernoulli, binomial, Poisson, uniform, exponential and normal random variables. Central limit theorem. Poisson process. Random sample, statistics, the distribution of the sample mean and the sample variance. Point estimate, maximum likelihood estimator, mean square error, bias. Interval estimates and hypotheses testing form normal, binomial and exponential samples. Simple linear regression. Goodness of fit tests, test of independence.Face-to-face learningPrerequisites- Fall
- REI504MCloud Computing and Big DataRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse Description
Overview of high performance computing (HPC) and “Big Data”, HPC environments with computing, network and storage resources, overview of parallel programming. Storage infrastructures and services for Big Data, Big Data analytics, the map-reduce paradigm, structured and unstructured data. Practical exercises: (A) Students will use the Amazon Web Services (AWS) cloud or equivalent to set up a multi-computer web service and an associated multi-computer testing application. (B) Students will get hands on experience of processing large data sets using map-reduce techniques with AWS.
Face-to-face learningPrerequisitesREI505MMachine LearningRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionAn overview of some of the main concepts, techniques and algorithms in machine learning. Supervised learning and unsupervised learning. Data preprocessing and data visualization. Model evaluation and model selection. Linear regression, nearest neighbors, support vector machines, decision trees and ensemble methods. Deep learning. Cluster analysis and the k-means algorithm. The students implement simple algorithms in Python and learn how to use specialized software packages. At the end of the course the students work on a practical machine learning project.
Face-to-face learningPrerequisitesTÖL301GFormal Languages and ComputabilityRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionFinite state machines, regular languages and grammars, push-down automata, context-free languages and grammars, Turing machines, general languages and grammars, and their basic properties. Recursive and recursively enumerable languages, reduction between languages, connection to decision problems and proving unsolvability of such problems. The complexity classes P and NP, and NP-completeness. Examples of various models of computation.
Face-to-face learningPrerequisitesTÖL105MComputer GraphicsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe main emphasis is on fundamental concepts and mathematics for 3D computer graphics. Two and three-dimensional transformations. Viewing projections. Light and the shading of objects. Texture mapping, blending, bump maps. Programmable shaders. Curves and surfaces. Programming assignments in WebGL.
Face-to-face learningPrerequisitesNot taught this semesterTÖL305GComputer Networks and SecurityRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe foundations of computer networks with emphasis on the TCP/IP protocol. Analysis and design of computer networks. Hardware and software used in computer networks. Implementation and maintenance of computer networks. Security systems for computer networks.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesHBV501GSoftware Project 1Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe aim of this course is for students to be able to develop software systems, to participate in software development projects, and to reflect upon software development. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics relevant in earlier phases of software development: development processes, estimation, design and programming, and configuration management. The project is started in this course and continued in HBV601G Software Project 2.
Face-to-face learningPrerequisitesIÐN502GEngineering EconomicsMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe objective of the course is that students get the skills to:
1. Understand the main concepts in accounting, cost theory and investment theory.
2. Be able to use methods of measuring the economic feasibility of technical projects.
3. Be able to develop computer models to assess the profitability of investments, the value of companies and pricing of bonds
Among topics included are accounting, cost theory, cash flow analysis, investment theory, measures of profitability including net present value and internal rate of return, and the building of profitability models. The course ends with a group assignment where the students exercise the development of computer models for feasibility assessment of projects.
Face-to-face learningPrerequisitesIÐN503GProject ManagementMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course is an introductory course in project management. It introduces key concepts of project management and covers context and selection of projects, project planning, project monitoring, management of project teams, and project closure. Students create and execute project plans in groups. Special emphasis is on using of project management for managing technological innovation in organizations.
Face-to-face learningPrerequisitesCourse DescriptionConcepts, units, scales and dimensions. Vectors. Kinematics of particles. Particle dynamics, inertia, forces and Newton's laws. Friction. Work and energy, conservation of energy. Momentum, collisions. Systems of particles, center of mass. Rotation of a rigid body. Angular momentum and moment of inertia. Statics. Gravity. Solids and fluids, Bernoulli's equation. Oscillations: Simple, damped and forced. Waves. Sound. Temperature. Ideal gas. Heat and the first law of thermodynamics. Kinetic theory of gases. Entropy and the second law of thermodynamics. Home problems: Once a week the students have to solve homeproblems on the website MasteringPhysics.
Laboratory work: Three exercises, mainly centered on mechanics, where students are trained in handling physical instruments, collecting and inspecting data. Students hand in their lab notebooks for a grade.
Note that the textbook is accessible to students via Canvas free of charge.
Face-to-face learningPrerequisitesHBV506MSecure Software EngineeringElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionSecure software engineering involves identifying and mitigating vulnerabilities to reduce threats to an application. In this module, students will gain an understanding of secure engineering practices and the means to apply them throughout the complete software development life cycle.
Working in teams, students will design, develop, and maintain a web application for a customer following secure software engineering principles. Students will illustrate their understanding and practical competency of white box and black box security assessment through testing their own and other team’s applications for vulnerabilities against the OWASP top 10 most critical security risks to web applications.
It is therefore assumed the students have knowledge in web application development using JavaScript.
Face-to-face learningPrerequisites- Spring 2
Not taught this semesterTÖL202MCompilersRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe design of programming languages. The structure and design of compilers. Lexical analysis. Top down and bottom up parsing. Code generation. Each student writes his or her own compiler.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesTÖL212MReasoned ProgrammingRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionFundamental concepts in program verification and reasoned programming are covered. Emphasis is placed on using reasoned programming to develop solid and proved versions of well-known algorithms, especially in the areas of searching, sorting, and binary search trees. Among algorithms covered are various versions of insertion sort, selection sort, quicksort, binary search, and searching in binary search trees. Emphasis will be placed on deepening the understanding of the algorithms as well as getting a good grip on program verification. Some exercises will use verification tools such as Dafny or OpenJML.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesTÖL401GOperating SystemsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThis course covers concepts of operating systems. Besides foundations on computer hardware structures and general operating system architectures, this includes concepts of processes and threads and their management, principles of scheduling and scheduling algorithms, communication and synchronisation between processes and deadlock issues, principles of memory management including virtual memory and page replacement algorithms, file systems and their implementation as well as mass-storage management. If time allows, principles for achieving protection and security, and aspects of distribution (e.g. concepts of distributed systems and distributed file systems) are covered as well. This course does not deal with details of implementing operating systems, but introduces generic concepts that are used when implementing operating systems and that an application developer needs to know, when creating an application program. Where appropriate, current operating systems such as Microsoft Windows and POSIX-compliant UNIX-like systems (e.g. Linux) are used as case study for implementation and offered system calls. The usage of operating system services from within high-level programming languages (e.g. C, C++ or Java) is demonstrated based on Application Programming Interfaces (APIs) offered by prevailing system libraries.
Face-to-face learningPrerequisitesTÖL403GAnalysis of AlgorithmsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionMethodology for the design of algorithms and the analysis of their time conplexity. Analysis of algorithms for sorting, searching, graph theory and matrix computations. Intractable problems, heuristics, and randomized algorithms.
Face-to-face learningPrerequisitesTÖV201GDigital Circuit Design and AnalysisRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionStudents will learn digital design principles and practice. Design is based on standard MSI and LSI devices or equivalent building blocks such as counters, shift registers, adders, and ROM. The design and analysis of combinatorial circuits for basic arithmetic is emphasized as well as the design an analysis of synchronous and asynchronous sequential circuits. Students will design circuits using basic building blocks such as flip flops and latches. Design and analysis of clocked sequential circuits based on Moore and Mealy FSM is emphasized. Introduction to Verilog HDL and FPGA in the design of as it applies to the previously described basic digital circuits. Students are required to complete 7 lab projects using FPGA. Students will also finish selected set of lab exercises using breadboards to contrast the state of the art design principles with classical principles. Students will work in teams to design and simulate digital circuits using a state-of-the-art CAD package. Both schematic and VHDL-based designs are emphasized.
Course Objective: Students will understand classical digital design principles and gain experience in using state of the art design tools.Classes: Lectures 2 x 75 minutes, lab 1 x 120 minutes per week.
Co-requisites: Digital Circuits and Analysis lab
Face-to-face learningPrerequisitesHBV601GSoftware Project 2Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe aim of this course is for students to be able to develop software systems and to participate in and reflect on software development projects. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics that are relevant in later phases of software development: quality assurance, installation, maintenance and evolution as weel as covers topics from HBV501G Software Project 1 in more detail. The project was started in HBV501G Software Project 1 and continued in this course.
Face-to-face learningPrerequisitesNot taught this semesterRAF617MFundaments of the InternetElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionModern day telecommunications are characterised by the fact that communicated data is carried on fixed telecommunications infrastructure on a majority of the path between tranmitter and receiver. Wireless infrastructure often conveys the signals at the end of the path. This yields both high speed and the comfort of wireless communications. It is of utmost importance for engineers working in telecoms to have a fundamental knowledge of fixed networks and the range of technologies deployed.
In this course, the structure of fixed backbone and access networks will be described. Optical fibre and related technologies will be introduced, e.g. DWDM, SDH, Ethernet, ATM and MPLS-TP. Access network technologies on copper, coax and optical fibres will be treated, e.g. ADSL. VDSL, G.fast and DOCSIS. Different FTTH (Fibre to the Home) technologies will be treated such as PON (Passive Optical Network), Active Ethernet and point-to-point Ethernet.
IP (Internet Protocol) has become a fundamental technology for modern fixed networks. IP native technologies will be described from the physical to the application layer. On the link layer, Ethernet will be in the focus as well as MPLS. Circuit and packet switching will be treated as well as circuit and packet orientation of networks. Sevices such as PSTN, VoIP, OTT and P2P will be treated. Backhauling of wireless networks such as mobile networks and Wi-Fi will also be treated.
In introduction to network virtualisation and network function virtualisation (NFV) will be given as well as software defined networking (SDN). Legal and regulatory aspects will be introduced and aspects like network neutrality discfussed. Important players and stakeholders will be discussed, e.g. Google, Apple, Microsoft, Netflix and telecommunications service providers.
Finally, local area networks will be discussed, home networking, smart homes, set-top-boxes, NAS, PLC, plastic optical fibres, MOCA and Wi-Fi introduced.The teaching form will be lectures and projects on IP communications will be worked. Students will write four papers on selected subjects and give presentations.
Face-to-face learningPrerequisitesCourse DescriptionTeaching takes 12 weeks. Charge and electric field. Gauss' law. Electric potential. Capacitors and dielectrics. Electric currents and resistance. Circuits. Magnetic fields. The laws of Ampère and Faraday. Induction. Electric oscillation and alternating currents. Maxwell's equations. Electromagnetic waves. Reflection and refraction. Lenses and mirrors. Wave optics. Four laboratory exercises in optics and electromagnetism.
Face-to-face learningPrerequisitesTÖL605MFundamentals of Ethical HackingElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionEthical hacking is the discipline of attacker perspective security analysis. Using tools and techniques used by malicious hackers, ethical hackers gain unique and unique and valuable insights used for improving system security.
This course will introduce students to the fundamentals of ethical hacking tools and techniques. Students will begin by configuring a secure lab using virtualisation tools. Then every two weeks a new stage of the ethical hacking methodology and some related tools will be introduced. The students will submit weekly lab reports evidencing their theoretical and practical understanding of the methodology and tools.
For the best experience, students should own a PC able to run virtualisation software with an x86 image. Mac users with Apple CPU or those with PCs whose CPUs lack virtualisation support or who have limited RAM might have issues running a stable lab on their machine. Students who lack suitable hardware can use VMs on the department's cybersecurity server infrastructure.
Face-to-face learningPrerequisites- Whole year courses
- Course Description
In the course, the student's task consists in being a mentor for participants that are upper secondary school students and university students in the project "Sprettur". Mentors' main role is to support and encourage participants in their studies and social life. As well as creating a constructive relationship with the participants, being a positive role model, and participating in events organized in Sprettur. The mentor role centers around building relationships and spending meaningful time together with the commitment to support participants.
Sprettur is a project that supports students with an immigrant or refugee background who come from families with little or no university education. The students in this course are mentors of the participants and are paired together based on a common field of interest. Each mentor is responsible for supporting two participants. Mentors plan activities with participants and spend three hours a month (from August to May) with Sprettur’s participants, three hours a month in a study group and attend five seminars that are spread over the school year. Students submit journal entries on Canvas in November and March. Diary entries are based on reading material and students' reflections on the mentorship. Compulsory attendance in events, study groups, and seminars. The course is taught in Icelandic and English.
Students must apply for a seat in the course. Applicants go through an interview process and 15-30 students are selected to participate.
See the digital application form.
More information about Sprettur can be found here: www.hi.is/sprettur
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesAttendance required in class- Fall
HBV507MUsable Privacy and SecurityElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionSurvey of the field of usable security and privacy with an emphasis on emerging technologies. Topics include authentication, location privacy, social network privacy, behavioral advertising, - health privacy, anonymity, cryptocurrency, technical writing and ethical conduct of usable privacy and security research.
Face-to-face learningPrerequisitesNot taught this semesterHBV004GInternshipElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe aim of the internship is to train students to work under the guidance of specialists at companies and institutions. The projects must be related to one of the subjects taught in the Computer Science department and they must put to test the knowledge and skills that the student has acquired during studies.
At the start of the internship, the student shall send an email to the supervisor listed here in UGLA in order to establish a contact.
At the end of the internship, the student must return to the supervisor:
- A report (ca. 3 pages) on the student's main project/main tasks and the connection to the studies in computer science / software engineering. The report shall also state what study goals the student set at the beginning of the internship and how they achieved them in the projects.
- Diary kept by the student during working hours. The diary shall include a weekly overview stating what the tasks of the week were and how much time was spent on individual tasks.
The internship is not considered completed until the supervisor of the company / institution has submitted confirmation of the student's involvement and work in the project and the supervisor from the Computer Science department has confirmed the submission.
The grade is pass/fail.
NOTE: Students can not register themselves for this course, but they are registered for the course when they have secured an internship position at a company or institution.
All internships will be advertised separately on www.tengslatorg.hi.is at the beginning of each semester and students will apply specifically for internships. An application together with a curriculum vitae and an introductory letter, in which students state why they are interested in getting an internship at the company in question, must be sent to von-starfsthjalfun@hi.is .
Note that this course is mutually exclusive with the HBV502G and HBV603G internships and the HBV261L final project.
Face-to-face learningPrerequisitesNot taught this semesterHBV103MSoftware MaintenanceElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionUsually taught every second year (typically in fall of odd years, but this is subject to change in 2024).
The first part of the course is based on flipped-classroom style weekly reading, videos and assignments on:
- Evolution of Software and Lehman’s laws,
- Maintenance processes,
- Metrics useful for maintenance,
- Software analysis,
- Re-engineering,
- Reverse engineering,
- Code Smells & Refactoring,
- Basics of (Regression-)Testing,
- Design principles to support change & Design Patterns,
- Tools for software maintenance (including advanced features of an IDE).
In the second part of this course, these techniques will be applied in order to maintain a real legacy software written in Java.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies and you need solid Java programming experience: we will maintain a complex software and being able to understand how such a grown software works and to fix bugs is even more difficult to write such a software from scratch. Hence, you should have passed HBV501G Software Project 1, preferably even HBV601G Software Project 2. (It is impossible to maintain a software if you would not even be able to develop it.) Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesNot taught this semesterHBV261LFinal projectElective course0Free elective course within the programme0 ECTS, creditsCourse DescriptionAn independent project under the direction of a member of the department of Computer Science.
Note that this course is mutually exclusive with the HBV004G, HBV502G and HBV603G internships.
Self-studyPrerequisitesPart of the total project/thesis creditsNot taught this semesterHBV502GHackathon ProjectElective course4Free elective course within the programme4 ECTS, creditsCourse DescriptionThis course aims to give students an opportunity for independent teamwork on a project of their own design under their own direction, developing it from inception to the demonstration of a prototype.
The projects will proceed as part of the HealthTech Hackathon or FinTech Hackathon (Lausnarmót) in the context of Innovation Week 2021.
Students interested in participating must first pitch their idea to the hackathon organizers in early August. A committee will review all submitted ideas and select those considered most innovative, realistic, and having the potential to solve future challenges.
Selected teams will be announced in August. Only student teams with up to five members selected by the committee can sign up for this course and will have 4 weeks in September to work on their projects. Students are expected to work on their projects conscientiously over the 4-week period, expecting to dedicate 25-30 hours to the project each week. All teams will have access to regular mentoring sessions.
Final presentations will take place in early October. All teams that participated consistently and gave a successful final presentation will receive a passing grade, independently of the hackathon jury’s ranking.
Note that this course is mutually exclusive with the HBV004G and HBV603G internships and the HBV261L final project.
Self-studyPrerequisitesPart of the total project/thesis creditsHBV505MSoftware Quality ManagementElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course is based on flipped-classroom style weekly reading, videos and assignments on software quality management-related aspects of the Software Development Life Cycle (SDLC) and by covering some parts of DevOps also Application Lifecycle Management (ALM). In parallel to theoretical concepts, the application of source code-centric tools relevant for quality management is trained by applying them to a codebase throughout the course using the ALM tool GitLab. The concepts and tools are independent from a particular software development process and cover:
- Software Quality Foundations, Software Quality Models.
- Configuration management (CM) and traceability:
- Version management (e.g. Git),
- Change management (e.g. issue tracker),
- Build management (e.g. Maven),
- Release management
- Continuous integration (CI) (e.g. using GitLab pipelines).
- Integrating testing into a CI pipeline (e.g. using JUnit and GitLab).
- Reviews (e.g. tool-based code review)
- Static analysis (e.g. SonarCloud)
- Metrics for quality management (product and process metrics).
- Quality standards:
- Software Life Cycle Processes,
- Software Process Improvement and maturity assessment (e.g. CMMI).
- Using a Wiki to create a quality plan and other documentation.
Students chose their own codebase (e.g. from the Software Project 1 or 2 course) to which they apply the concepts and tools tought in this course. While the teaching material and tools assumes Java as programming language, students are welcome to use a codebase in another programming language.
Software quality in agile development processes is covered by student presentations at the end of the course.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies and you need Java programming experience. Hence, you should have passed HBV501G Software Project 1, preferably even HBV601G Software Project 2.
Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesIÐN301GAnalysis of Processes and SystemsElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe aim of the course is to prepare students in analysing processes and systems. Description of processes are explained so that process analysis can be performed. Process discovery and their mapping is explained. Three ways of doing process discovery are explained: fact-based, interview-based and workshop-based. When processes are mapped they can be analyzed. The course will go through the qualitative methods of: value-stream-analysis, root-cause-analysis and risk analysis. The quantitative methods of: performance management, flow analysis, queuing theory and simulation will be explained. The later part of the course will be on systems and system analysis. System thinking will be explained and how systems can be used to describe the world. The system analysis methods of causal-loop-diagrams and stocks-and-flows will be explained. The course will conclude by simulating both processes and systems.
Face-to-face learningPrerequisitesIÐN510MLogistics & Environmental EngineeringElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course focuses on the principles of logistics and supply management and gives a broad introduction to the field. The course is divided into three topics primarily. It covers purchase operations of services and inventory management. This part is followed by looking into transportation and distribution management. Finally, the environmental impacts of logistics is studies and all the three parts put together into a view of sustainability. The course consists of lectures, exercises, game (the Beer Game) and a management simulation game to give hands on experience on logistics management,
Face-to-face learningPrerequisitesREI503MPerformance analysis of computer systemsElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionUsually taught every second year.
This course provides students with an introduction to modeling and performance evaluation of computer and communication systems. Large-scale distributed computer systems process arriving requests, e.g., web page queries, in parallel in order to optimize performance metrics, such as response time and user satisfaction. Other important performance metrics include throughput and service-level agreement in general. This course covers basic mathematical tools needed to evaluate such dynamic systems and to understand the strengths and weaknesses, for example in different designs, scheduling disciplines, and operating policies. The approach is based on operations research methods, in particular, queueing theory and Markov processes (previous knowledge of these methods is not required).
Attendance is strongly recommended.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesREI504MCloud Computing and Big DataElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionOverview of high performance computing (HPC) and “Big Data”, HPC environments with computing, network and storage resources, overview of parallel programming. Storage infrastructures and services for Big Data, Big Data analytics, the map-reduce paradigm, structured and unstructured data. Practical exercises: (A) Students will use the Amazon Web Services (AWS) cloud or equivalent to set up a multi-computer web service and an associated multi-computer testing application. (B) Students will get hands on experience of processing large data sets using map-reduce techniques with AWS.
Face-to-face learningPrerequisitesCourse DescriptionAn overview of some of the main concepts, techniques and algorithms in machine learning. Supervised learning and unsupervised learning. Data preprocessing and data visualization. Model evaluation and model selection. Linear regression, nearest neighbors, support vector machines, decision trees and ensemble methods. Deep learning. Cluster analysis and the k-means algorithm. The students implement simple algorithms in Python and learn how to use specialized software packages. At the end of the course the students work on a practical machine learning project.
Face-to-face learningPrerequisitesNot taught this semesterREI506MMachine Learning for Earth Observation powered by SupercomputersElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThis course exposes the students to the physical principles underlying satellite observations of Earth by passive sensors, as well as parallel Deep Learning (DL) algorithms that scale on High Performance Computing (HPC) systems.
For the different theoretical concepts (represented by 4 modules), the course provides hands-on exercises. These exercises are part of a project in the context of Remote Sensing (RS) image classification that the students are asked to develop during the whole duration of the course.
Face-to-face learningPrerequisitesNot taught this semesterSTÆ532MCryptocurrencyElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course will start by introducing the basic concepts of electronic currencies, such as wallets, addresses and transactions. The students will get to know encoding, transactions, blocks and blockchains. The cryptocurrency Smileycoin will be used as an example throughout the course.
Students will compile their own wallets from source and dive deeply enough into the underlying algorithms to be able to put together their own transactions from the Linux command line and read typical wallet code written in C++.
Students will learn how to call the wallet from other software, e.g. to analyse the flow of funds.
Students will learn how to implement several additions to the traditional use of electronic currency such as encoded messages, running software to react to payments etc.
Students will set up their own examples of addition and study how to set up atomic swaps between different currencies, using the Smileycoin for announcements.
Homework will be individualised, selected from different formats (a) solutions based on the wallet on the command line, (2) documents to form handouts or other material in the tutor-web, (3) short programs (APIs) which respond to transactions being send to particular addresses or to a
particular wallet, (4) programs which talk to exchanged and/or (5) new user interfaces which improve or add to the functionality of a wallet.
All the material and assignments will be in English. Returned assignments will become a part of the open tutor-web educational system.
The course may be taught as a reading course or self-study, but the exact implementation depends on participation.Face-to-face learningPrerequisitesTÖL029MIntroduction to Information SecurityElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionÞetta námskeið byggir grunn að skilningi á lykilatriðum sem tengjast verndun upplýsinga, ákvörðun á verndarstigi og viðbrögð við öryggisatvikum, og hönnun á samræmdu raunhæfu upplýsingaöryggiskerfi, með viðeigandi innbrotsskynjun og tilkynningum. Tilgangur námskeiðsins er að veita nemandanum yfirsýn yfir svið upplýsingaöryggis og upplýsingatrygginga. Nemendur munu sjá ýmsar gerðir öryggisaðgerða, aðferðafræða og verklags. Umfjöllunin mun taka fyrir skoðun og vernd upplýsingaeigna, uppgötvun og viðbrögð við ógnum við upplýsingaeignir, verklagsreglur fyrir og eftir öryggisatvik, tæknileg og stjórnunarleg viðbrögð og yfirlit yfir skipulagningu upplýsingaöryggis og starfsmannahald. Meðal efnis eru áhættumat, auðkenning, veföryggi, öryggi forrita, persónuvernd og gagnavernd, kynning á dulmálskóðun, öryggisarkitektúr, eldveggir og önnur tæki og netskipulag.
Face-to-face learningPrerequisitesTÖL103MProgramming Projects on Internet of ThingsElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThis course offers a hands-on introduction to programming small devices (microcontrollers, single-board computers) used in the context of Internet of Things, sensor networking, and home automation.
Such devices are often equipped with a large number of I/O pins, some RAM and flash memory, and wireless communication capabilities (e.g. WiFi and/or Bluetooth), making them attractive for tasks involving data acquisition,
processing, and wireless communication.The course consists of bi-weekly programming tasks dealing with serial communication, data acquisition and analysis, programming of real-time O/S (RTOS), wireless communication and TCP/IP client-servers paradigm.
The biweekly assignments lead to a final project.
Face-to-face learningPrerequisitesNot taught this semesterTÖL106MSecurity Engineering for Critical Information InfrastructuresElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe overarching objective of this experimental course is to provide a practical technical and policy introduction for the foundations of the building and operating of dependable, complex distributed national information infrastructures.
The course teaches university students how to model, design, implement, operate, and defend these national information infrastructures (NII) to withstand errors and attacks.
We will introduce complementary engineering methodologies intended to assist NII policymakers, stewards, operators, and engineering professionals to implement protective initiatives to design and improve the survivability of NII systems, critical functions, and processes.
The course will include cyber threat intelligence tradecraft and the experimental use of both open-source intelligence and an artificial intelligence tool i.e. ChatGPT
Face-to-face learningPrerequisitesCourse DescriptionBasis in building web projects, focusing on the frontend: HTML, CSS and JavaScript. Standards, practices and what it takes to create a good site. Design, layout and working with design documents. Programming in the interpreted programming language JavaScript, working with the browser and tools related to that. HTTP standard introduced. Projects focus on creating web sites that use what has been taught.
Face-to-face learningPrerequisitesNot taught this semesterTÖL107MCyber Conflicts, Cyber Security Threats and Engineering, National Information Infrastructures (NII)Elective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThis interdisciplinary course examines underlying and emerging information technologies, cyber security engineering and policies associated with surveillance, cyber warfare, and cyber threats.
The technological concepts reviewed in this course include but are not limited to National Information Infrastructures, the Internet, Dark Web, networks and sensors, and trends associated with our emerging Internet of Things.
The course will review some salient cyber conflict history, international and national policies concerning cyber conflict and security engineering - secure by design, military/civilian doctrine, and some lessons learned from the use of cyber operations in past, present and future conflicts.
Face-to-face learningPrerequisitesNot taught this semesterTÖL305GComputer Networks and SecurityElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe foundations of computer networks with emphasis on the TCP/IP protocol. Analysis and design of computer networks. Hardware and software used in computer networks. Implementation and maintenance of computer networks. Security systems for computer networks.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesNot taught this semesterTÖL308GComputer Game ProgrammingElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionAn introduction to the core techniques and concerns related to programming computer games. Questions of frame-rate control, object-management, determinism, memory-management and runtime performance will be addressed. The focus will be on “engine-level” facilities. The principles behind multiplayer networked games will be explored. Examples will be drawn from simple 2D games such as “Asteroids” and “Pac-Man”, but the emphasis will be on general principles which also apply to sophisticated, cutting-edge, modern games software.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesNot taught this semesterTÖL501GFrom an Idea to RealityElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course has been in development for over a decade under the name "Computer Systems and Marketing".
The course is based on teacher lectures and individual and group projects that help students to think outside the box. Teacher will tell of his experiences of making ideas become real and have a special focus on the mistakes that have been made along with the successful stories.
The final project of the course is a business plan that will be presented in an oral final exam. The business plan focuses on the idea of each student and how the student plans to realize his project.Face-to-face learningPrerequisitesTÖL502MHuman Computer InteractionElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionUsually taught every second year.
The objective of the course is to allow students to examine more closely than is done in the introductory course Graphical User Interface Programming HBV201G specific factors of HCI. The factors covered are user interface design using prototyping, programming of smart devices and users‘ acceptability of the software. There will be emphasis on different techniques and tools to develop prototypes. Also, on the design of user interfaces and native programming for smart phones or pads. The development process will be aimed at ensuring accessibility and acceptability of users. Students work on small projects individually, or on larger projects in groups.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesCourse DescriptionUsually taught every second year.
This course covers concepts of distributed systems and their application. Besides foundations on characteristics and models of distributed systems, networking and security, this includes network-based low-level interprocess communication, high-level remote procedure calls, the distributed object model and remote method invocation, services relevant in distributed systems (such as name services or distributed file systems), selected topics of distributed algorithms and their implementation (such as coordination, agreement, time, replication). Furthermore, special types of distributed systems may be covered (such as peer-to-peer systems, Cloud and Grid computing). Current technologies (such as Java RMI, Web Services, gRPC) are used as case study and as platform for developing distributed applications using high-level programming languages (such as Java).
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be advanced in their BSc. studies. (E.g. we will implement middleware in Java, so you should have programming experience well beyond "TÖL101G Computer Science 1". As a middleware adds functionality on top of an Operating System, you should have also passed TÖL401G Operating Systems.)
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesTÖL506MIntroduction to deep neural networksElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionIn this course we cover deep neural networks and methods related to them. We study networks and methods for image, sound and text analysis. The focus will be on applications and students will present either a project or a recent paper in this field.
Face-to-face learningPrerequisites- Spring 2
TÖL608MAlgorithms in the real worldElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course will cover the design and analysis of algorithms, with emphasis on algorithms for large datasets and real world applications.
The algorithms covered will be drawn from various subfields, e.g. data and text compression, error correcting codes, large scale text search and search engines, parallel programming, GPU programming, streaming algorithms, probabilistic algorithms, nearest neighbor search in high dimensional datasets.
Face-to-face learningPrerequisitesCourse DescriptionThe aim of the internship is to train students to work under the guidance of specialists at companies and institutions. The projects must be related to one of the subjects taught in the Computer Science department and they must put to test the knowledge and skills that the student has acquired during studies.
At the start of the internship, the student shall send an email to the supervisor listed here in UGLA in order to establish a contact.
At the end of the internship, the student must return to the supervisor:
- A report (ca. 3 pages) on the student's main project/main tasks and the connection to the studies in computer science / software engineering. The report shall also state what study goals the student set at the beginning of the internship and how they achieved them in the projects.
- Diary kept by the student during working hours. The diary shall include a weekly overview stating what the tasks of the week were and how much time was spent on individual tasks.
The internship is not considered completed until the supervisor of the company / institution has submitted confirmation of the student's involvement and work in the project and the supervisor from the Computer Science department has confirmed the submission.
The grade is pass/fail.
NOTE: Students can not register themselves for this course, but they are registered for the course when they have secured an internship position at a company or institution.
All internships will be advertised separately on www.tengslatorg.hi.is at the beginning of each semester and students will apply specifically for internships. An application together with a curriculum vitae and an introductory letter, in which students state why they are interested in getting an internship at the company in question, must be sent to von-starfsthjalfun@hi.is .
Note that this course is mutually exclusive with the HBV502G and HBV603G internships and the HBV261L final project.
PrerequisitesAttendance required in classCourse DescriptionUsually taught every second year (typically in spring of odd years, but this is subject to change in 2024).
This course covers testing of software. Besides basic foundations, this includes both dynamic testing where the software under test is executed and static approaches where software and other artefacts produced during software development are investigated without executing them. The focus of this course is, however, on dynamic testing. The different levels of testing (component test, integration test, system and acceptance test) and types of testing (functional, non-functional, structural and change-related) are covered as well as different test design techniques (black box test and white box test). Furthermore, test management and principles of test tools are discussed. In addition, selected advanced topics may be covered (for example, test languages, testing of object-oriented software, test process improvement, agile testing). The covered topics are a superset of the International Software Testing Qualifications Board's (ISTQB) certified tester foundation level syllabus.
The first part of the course is based on flipped-classroom style weekly reading, videos and assignments. In the second part, students work independently on some project related to software testing.
Note: while this is an "M" course, it is rather on MSc. level. BSc. students who take this course need to be very advanced in their BSc. studies, i.e. have experience in programming languages, software development and applying it in some software project, but should also be familiar with theoretical concepts from automata theory.
Also, BSc. students should not take this course, if they know that they are going to continue with MSc. studies, because they might then experience a lack of suitable courses in their MSc. studies.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesNot taught this semesterHBV261LFinal projectElective course0Free elective course within the programme0 ECTS, creditsCourse DescriptionAn independent project under the direction of a member of the department of Computer Science.
Note that this course is mutually exclusive with the HBV004G, HBV502G and HBV603G internships.
Self-studyPrerequisitesPart of the total project/thesis creditsCourse DescriptionContinuation of web programming I, backend programming in node.js, writing and connecting to web services and connections to databases. Frontend libraries/frameworks used to setup a frontend project (React, Ember, Vue). Security issues that need to be considered when writing for the web. Projects focus on creating web sites that use what has been taught.
Face-to-face learningPrerequisitesHBV603GInternship in computer science and software engineering - undergraduateElective course24Free elective course within the programme24 ECTS, creditsCourse DescriptionThe objective is to ensure vocational training under the professional guidance of experienced managers at companies or public institutions related to computer science or software engineering.
Role of student
• Work on one major task
• A student is in a 6-month internship.
A student may not take a final assignment (TÖL261L or HBV261L)Student's tasks
These include questionnaire analysis, application design, programming, software testing, installation and operation of computer systems. The project must be in computer science or software engineering and try the knowledge and skills acquired by the student in the course. The final product of vocational training must be defined in the project description, ie. what final report should contain. Supervisory teacher of vocational education must approve a proposal for a project.
Role of an organization
• A company provides a student with a workplace and appoints a supervisor within an organization that monitors his work.
• A student is an employee of an enterprise and pays a student's remuneration company according to a further agreement therein.
• Job training is three to six months in full-time employment.
• At the beginning of vocational training lies the assignment of the student. Project description must be accompanied by a contract.
• The supervisor and student meet regularly and evaluate the progress of projects.
Completion of vocational training
• At the end of the working hours, return to the supervising teacher:
1. Student's final report (as defined in the project description). In the case of a 24 ECTS course, the student shall submit a mid-term report on the internship.
2. A student's book kept during vocational training. The diary shall include a weekly summary indicating each project of the week and the amount of time spent on individual projects.
3. Confirmation by the supervisor of the student's attendance and project work at the end of the practical training.
• The course is not considered complete until both the supervisory teacher of the vocational education and the supervisor of the practical training believe that satisfactory results have been achieved and the final and final reports have been submitted.Note that this course is mutually exclusive with the HBV004G and HBV502G internships and the HBV261L final project.
PrerequisitesAttendance required in classIÐN201GOperations in OrganizationsElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe goal with this course is to prepare students to approach organisations as sequence of operations. Organisations will be described as a group of operations that produce value adding work. Companies will be visited and students will describe their workings as operations sequences. Methods to describe operations, to analyse operations and to present operation sequences will be introduced and trained. Students will be introduced to methods of describing, analysing and presenting operations overview. At course end students should be able to use these methods for both descriptions and analysis and then interpret their results to present both orally and in writing.
Face-to-face learningPrerequisitesNot taught this semesterLVF601MIntroduction to Systems BiologyElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionSystems biology is an interdisciplinary field that studies the biological phenomena that emerge from multiple interacting biological elements. Understanding how biological systems change across time is a particular focus of systems biology. In this course, we will prioritize aspects of systems biology relevant to human health and disease.
This course provides an introduction to 1) basic principles in modelling molecular networks, both gene regulatory and metabolic networks; 2) cellular phenomena that support homeostasis like tissue morphogenesis and microbiome resilience, and 3) analysis of molecular patterns found in genomics data at population scale relevant to human disease such as patient classification and biomarker discovery. In this manner, the course covers the three major scales in systems biology: molecules, cells and organisms.
The course activities include reading and interpreting scientific papers, implementation of computational algorithms, working on a research project and presentation of scientific results.
Lectures will comprise of both (1) presentations on foundational concepts and (2) hands-on sessions using Python as the programming language. The course will be taught in English.
Face-to-face learningPrerequisitesREI202GIntroduction to data scienceElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course provides an introduction to the methods at the heart of data science and introduces widely used software tools such as numpy, pandas, matplotlib and scikit-learn.
The course consists of 6 modules:
- Introduction to the Python programming language.
- Data wrangling and data preprocessing.
- Exploratory data analysis and visualization.
- Optimization.
- Clustering and dimensionality reduction.
- Regression and classification.
Each module concludes with a student project.
Note that there is an academic overlap with REI201G Mathematics and Scientific Computing and both courses cannot be valid for the same degree.
Face-to-face learningPrerequisitesREI204MHigh Performance ComputingElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionDesign of parallel computers and parallel programming models. Shared memory architecture. Message passing and distributed memory architecture. Parallel programming of computer clusters using MPI and multicore programming using OpenMP. Parallel algorithms for sorting, searching, linear algebra, and various graph problems.
Course topics will be very similar like HPC in Fall 2019:
http://www.morrisriedel.de/hpc-course-fall-2019
Positioning in the Field of High-Performance Computing (HPC)
- Consists of techniques for programming & using large-scale HPC Systems
- Approach: Get a broad understanding of what HPC is and what can be done
- Goal: Train general HPC techniques and systems and selected details of domain-specific applications
Course Motivation
Parallel processing and distributed computing
- Matured over the past three decades
- Both emerged as a well-developed field in computer science
- Still a lot of innovation, e.g. from hardware/software
‘Scientific computing‘ with Maple, Matlab, etc.
- Performed on small (‘serial‘) computing machines like Desktop PCs or Laptops
- An increasing number of cores enables ‘better scientific computing‘ today
- Good for small & fewer complex applications, quickly reach memory limits
‘Advanced scientific computing‘
- Used with computational simulations and large-scale machine & deep learning
- Performed on large parallel computers; often scientific domain-specific approaches
- Use orders of magnitude multi-core chips & large memory & specific many-core chips
- Enables ‘simulations of reality‘ - often based on known physical laws and numerical methods
Face-to-face learningPrerequisitesCourse DescriptionIn this course, we study the AI lifecycle, i.e. the productionisation of AI methods.
We explore the following parts of the lifecycle:
- Data collection and preparation
- Feature engineering
- Model training
- Model evaluation
- Model deployment
- Model serving
- Model monitoring
- Model maintenance
Three large projects will be handed out during the semester where students compete to solve AI problems.Face-to-face learningPrerequisitesNot taught this semesterTÖL028MSeminar on Machine LearningElective course2Free elective course within the programme2 ECTS, creditsCourse DescriptionIn this course, students familiarize themselves with a particular topic in artificial intelligence (e.g. computer vision, natural language processing, data processing, generative modeling or other topics) by studying relevant academic literature and preparing a talk on this topic for their classmates.
Students can choose from a selection of topics provided by the teacher, or propose a topic that they are interested in on their own.
Besides learning about the subject matter of the talks, the goal of the course is to practice presentation skills.
The course starts on June 8th and will finish on August 17th.
Face-to-face learningPrerequisitesCourse DescriptionThis course covers concepts of operating systems. Besides foundations on computer hardware structures and general operating system architectures, this includes concepts of processes and threads and their management, principles of scheduling and scheduling algorithms, communication and synchronisation between processes and deadlock issues, principles of memory management including virtual memory and page replacement algorithms, file systems and their implementation as well as mass-storage management. If time allows, principles for achieving protection and security, and aspects of distribution (e.g. concepts of distributed systems and distributed file systems) are covered as well. This course does not deal with details of implementing operating systems, but introduces generic concepts that are used when implementing operating systems and that an application developer needs to know, when creating an application program. Where appropriate, current operating systems such as Microsoft Windows and POSIX-compliant UNIX-like systems (e.g. Linux) are used as case study for implementation and offered system calls. The usage of operating system services from within high-level programming languages (e.g. C, C++ or Java) is demonstrated based on Application Programming Interfaces (APIs) offered by prevailing system libraries.
Face-to-face learningPrerequisitesNot taught this semesterTÖL602GComputer Science Seminar for UndergraduatesElective course2Free elective course within the programme2 ECTS, creditsCourse DescriptionIn this course, students familiarize themselves with a particular topic in computer science (e.g. an engineering technique, a computational problem, a programming language etc.) by studying relevant academic literature and preparing a talk on this topic for their classmates. Students can chose from a selection of topics provided by the teacher, or propose a topic that they are interested in on their own. Besides learning about the subject matter of the talks, a goal of the course is to practice presentation skills.
Face-to-face learningPrerequisitesNot taught this semesterTÖL602MFrom an idea to reality IIElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThe course is a continuation of the course "From an idea to reality". Students are expected to continue to develop their idea that they had in the "From an Idea to Reality" course. If the students are not satisfied with their previous idea and think they have come up with a better idea, that's fine, and if the teacher is satisfied with the new idea the student can continue with the new idea.
Students must apply for grants in the competition fund. Practice pitching your idea to potential investors and your fellow students.
The teacher will cover accounting and planning based on probability.
The teacher will cover company formation and tax matters.
Face-to-face learningPrerequisitesAttendance required in classTÖL607GCompetitive programmingElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionThis course will provide students with the skills needed to solve computational problems that frequently appear in programming competitions. Such skills are highly useful in various programming tasks, in other courses and in job interviews. An overview of the main algorithms and techniques will be given. This includes algorithms for graphs, strings, computational geometry and counting techniques. The students will spend most of their time programming solutions to contest problems.
Face-to-face learningPrerequisites- Year unspecified
Course DescriptionIn this course, students will take a practical approach to understanding the building and breaking of cryptographic implementations. The first half of this module will involve programming tasks while the second half will involve two mini projects.
Starting from simplistic approaches used historically, such as the Caeser cipher, to modern day protocols used to secure telecommunications ubiquitously, such as AES and TLS. Students will also consider the role of cryptography in society more broadly by researching how contentious technologies such as end-to-end encryption and Tor impact justice and privacy, and distributed ledgers can enable the decentralisation of key societal systems. Finally, the course will conclude with a mini project demonstrating a practical attack against a cryptographic implementation using ethical hacking approaches e.g. WiFi cracking, password bruteforcing or man-in-the-middle attack of an encrypted connection to sniff traffic.
The course will encompass the following stages:
1) Building cryptographic primitives in a programming language of choice.
2) Application engineering best practices.
3) A research project in cryptography and society.
4) A practical project in ethical hacking approaches to demonstrating weaknesses in cryptography implementations.
Face-to-face learningPrerequisitesSecond year- Fall
- HBV101GIntroduction to Software EngineeringMandatory (required) course4A mandatory (required) course for the programme4 ECTS, creditsCourse Description
This course explains what software engineering is, why it is important, and which skills and competencies it entails.
Through guest talks from professional software engineers and work on practical projects, the course introduces key concepts of software engineering – specifically, the forces that shape software products, and the roles and responsibilities of the people who drive them.
Students work in teams to pick issues in their environment that could be solved or improved through software, and identify challenges that would need to be resolved in designing and building a suitable software solution. This motivates the methods and paradigms that will be introduced in detail in further courses of the software engineering program.
Attention! This course is specifically intended for 1st year students in Software Engineering. New 1st year students in Computer Science or other programs need special permission from the faculty to sign up for the course, but it is not intended for 2nd or 3rd year students.
Face-to-face learningPrerequisitesSTÆ104GMathematical Analysis IMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThis is a foundational course in single variable calculus. The prerequisites are high school courses on algebra, trigonometry. derivatives, and integrals. The course aims to create a foundation for understanding of subjects such as natural and physical sciences, engineering, economics, and computer science. Topics of the course include the following:
- Real numbers.
- Limits and continuous functions.
- Differentiable functions, rules for derivatives, derivatives of higher order, applications of differential calculus (extremal value problems, linear approximation).
- Transcendental functions.
- Mean value theorem, theorems of l'Hôpital and Taylor.
- Integration, the definite integral and rules/techniques of integration, primitives, improper integrals.
- Fundamental theorem of calculus.
- Applications of integral calculus: Arc length, area, volume, centroids.
- Ordinary differential equations: First-order separable and homogeneous differential equations, first-order linear equations, second-order linear equations with constant coefficients.
- Sequences and series, convergence tests.
- Power series, Taylor series.
Face-to-face learningPrerequisitesSTÆ107GLinear AlgebraMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionBasics of linear algebra over the reals.
Subject matter: Systems of linear equations, matrices, Gauss-Jordan reduction. Vector spaces and their subspaces. Linearly independent sets, bases and dimension. Linear maps, range space and nullk space. The dot product, length and angle measures. Volumes in higher dimension and the cross product in threedimensional space. Flats, parametric descriptions and descriptions by equations. Orthogonal projections and orthonormal bases. Gram-Schmidt orthogonalization. Determinants and inverses of matrices. Eigenvalues, eigenvectors and diagonalization.Face-to-face learningPrerequisitesTÖL101GComputer Science 1Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe Java programming language will be used to introduce basic practices in computer programming. Practice in programming is scheduled throughout the semester. An emphasis is placed on logical methods for writing program and good documentation. Main ideas related to computers and programming. Classes, objects and methods. Control statements. Strings and arrays, operations and built-in functons. Input and output. Inheritance. Ideas relatied to system design and good practices for program writing. Iteration and recursion. Searching and Sorting.
Face-to-face learningPrerequisitesTÖL104GMathematical StructureMandatory (required) course8A mandatory (required) course for the programme8 ECTS, creditsCourse DescriptionPropositions, predicates, inference rules. Set operations and Boolean algebra. Induction and recursion. Basic methods of analysis of algorithms and counting. Simple algorithms in number theory. Relations, their properties and representations. Trees and graphs and related algorithms. Strings, examples of languages, finite automata and grammars.
Face-to-face learningPrerequisites- Spring 2
TÖL205GComputers, operating systems and digital literacy basicsMandatory (required) course4A mandatory (required) course for the programme4 ECTS, creditsCourse DescriptionIn this course, we study several concepts related to digital literacy. The goal of the course is to introduce the students to a broad range of topics without necessarily diving deep into each one.
The Unix operating system is introduced. The file system organization, often used command-line programs, the window system, command-line environment, and shell scripting. We cover editors and data wrangling in the shell. We present version control systems (git), debugging methods, and methods to build software. Common concepts in the field of cryptography are introduced as well as concepts related to virtualization and containers.
Online learningSelf-studyPrerequisitesHBV201GGraphical User Interface ProgrammingMandatory (required) course8A mandatory (required) course for the programme8 ECTS, creditsCourse DescriptionIn this course, students will get training in programming graphical user interfaces in Java and learn about the main steps in software development projects, from ideation to testing. Emphasis is placed on students acquiring more excellent proficiency in programming larger projects than in introductory programming courses (such as TÖL101G), being able to design interactive user interfaces, program them, and test them. This includes students becoming familiar with large software libraries (here, JavaFX) and using them. Additionally, students should be able to read, understand, and implement instructions on functionality, including interactivity. Students will be introduced to the design process, which consists of five stages: understanding the task, brainstorming ideas and interactivity, selecting and defining, programming a prototype, and testing and iterating. Insight is provided into user-centered development, interactive design, prototypes, and user testing.
The course will prepare students for courses such as Software Development and Software Projects 1 and other classes where students need to program. It is also a good foundation for courses like TÖL502M Human-Computer Interaction.Face-to-face learningPrerequisitesAttendance required in classHBV202GSoftware Design and ConstructionMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionNote: This course is based on teamwork and uses flipped classroom teaching: therefore, it is necessary to attend the classes to work there in groups. Do not take this course if you have timetable collisions and cannot attend the classes.
This course covers basic foundations of software design and software construction.
Software design is covered in terms of object-oriented modeling using the Unified Modeling Language (UML), object-oriented design principles (e.g. interfaces and packages, the Liskov Substitution Principle), and basic design patterns.
Software construction is covered mainly in terms of tools, in particular the more advanced features (such as code completion, using a debugger and improving code using refactoring) of an Integrated Development Environment (IDE), build automation and dependency management (e.g., the Maven or Gradle tool and modular Java), compilers (e.g., dealing with compiler warnings) and runtime systems (e.g., classpaths), and basics of unit testing.
Face-to-face learningPrerequisitesSTÆ205GMathematical Analysis IIMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionOpen and closed sets. Mappings, limits and continuity. Differentiable mappings, partial derivatives and the chain rule. Jacobi matrices. Gradients and directional derivatives. Mixed partial derivatives. Curves. Vector fields and flow. Cylindrical and spherical coordinates. Taylor polynomials. Extreme values and the classification of stationary points. Extreme value problems with constraints. Implicit functions and local inverses. Line integrals, primitive functions and exact differential equations. Double integrals. Improper integrals. Green's theorem. Simply connected domains. Change of variables in double integrals. Multiple integrals. Change of variables in multiple integrals. Surface integrals. Integration of vector fields. The theorems of Stokes and Gauss.
Face-to-face learningPrerequisitesTÖL203GComputer Science 2Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course will cover various data structures, algorithms and abstract data types. Among the data structures covered are lists, stacks, queues, priority queues, trees, binary trees, binary search trees and heaps along with related algorithms. Various search and sort algorithms will be covered. Algorithms will be analysed for their space and time complexity. There will be small programming assignments in Java using the given data structures and algorithms.
Face-to-face learningPrerequisites- Fall
- HBV301GRequirements EngineeringMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse Description
Software requirements express the needs and constraints placed on a software product so that it can solve an issue in an application domain. This course covers techniques for the elicitation, analysis, specification, validation and management of software requirements.
The course introduces types and properties of software requirements, relevant stakeholders, techniques for requirements elicitation, analysis, specification and validation, as well as practical considerations such as change management and conflict resolution. Students practice these techniques in teams by applying them to projects of their choice.
New mandatory course - first taught in 2023-2024
Face-to-face learningPrerequisitesSTÆ302GMathematical Analysis IIIMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionFunctions of a complex variable. Analytic functions. The exponential function, logarithms and roots. Cauchy's Integral Theorem and Cauchy's Integral Formula. Uniform convergence. Power series. Laurent series. Residue integration method. Application of complex function theory to fluid flows. Ordinary differential equations and systems of ordinary differential equations. Linear differential equations with constant coefficients. Systems of linear differential equations. The matrix exponential function. Various methods for obtaining a particular solution. Green's functions for initial value problems. Flows and the phase plane. Nonlinear systems of ordinary differential equations in the plane, equilibrium points, stability and linear approximations. Series solutions and the method of Frobenius. Use of Laplace transforms in solving differential equations.
Face-to-face learningPrerequisitesTÖL303GData Base Theory and PracticeMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionDatabases and database management systems. Physical data organization. Data modelling using the Entity-Relationship model and the Relational model. Relational algebra and calculus. The SQL query language. Design theory for relational data bases, functional dependencies, decomposition of relational schemes, normal forms. Query optimization. Concurrency control techniques and crash recovery. Database security and authorization. Data warehousing.
Face-to-face learningPrerequisitesTÖL304GProgramming LanguagesMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionAn introduction to the most common types of programming languages. Block structured languages, list processing languages, object oriented programming. Describing programming languages, compilers and interpreters. The internal structure of block structured programming languages.Modular programming . Functions and subroutines, parameter passing. Memory management, garbage collection. The programming languages Scheme, CAML, Java, Morpho, C++ and Haskell will be considered. Object oriented programming languages. Objects and inheritance. Grammars, the structure of compilers. Modular programming will be emphasised (especially generic modules), as well as list processing, functional programming and block structure.
Face-to-face learningPrerequisitesTÖL309GComputer organization and programmingMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course covers the internal structure of computers and how programmers should construct their programs to take advantage of that. The programming language C will be introduced, especially its use of pointers and memory usage. Data representation for integers and floating point numbers. Programming in x86-64 assembly language. In particular how constructs in C are implemented in x86-64 assembly language. Memory hierarchy and its effects on program performance. Exceptional control flow in programs. Virtual memory. Concurrent programming.
Face-to-face learningPrerequisites- Spring 2
HBV401GSoftware DevelopmentMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionIn this course, software engineers and computer scientists take the step from programming-in-the-small (i.e. individual developers creating compact modules that solve clearly defined problems) to programming-in-the-large (i.e. teams of developers building complex systems that satisfy vague customer requirements). To deal with the complexities of such projects, this course introduces key software engineering concepts such as agile and plan-driven software process models, requirements engineering, effort estimation, object-oriented analysis and design, software architecture and test-driven development. These concepts are immediately applied in practice as students team up to develop and integrate component-based systems using the Java programming language.
Face-to-face learningPrerequisitesNot taught this semesterHBV404GIndustrial Software EngineeringMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThis course covers legal and economic aspects of software engineering and software project management.
Through lectures, guest talks, work on practical projects and seminar elements, the course will consider business models for the development and/or operation of software, introduce strategies for software estimation, risk management and pricing, explain models for software licensing, and discuss aspects of ethics, privacy and security in software.
New mandatory course - first taught in 2023-2024.
Face-to-face learningPrerequisitesSTÆ203GProbability and StatisticsMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionBasic concepts in probability and statistics based on univariate calculus.
Topics:
Sample space, events, probability, equal probability, independent events, conditional probability, Bayes rule, random variables, distribution, density, joint distribution, independent random variables, condistional distribution, mean, variance, covariance, correlation, law of large numbers, Bernoulli, binomial, Poisson, uniform, exponential and normal random variables. Central limit theorem. Poisson process. Random sample, statistics, the distribution of the sample mean and the sample variance. Point estimate, maximum likelihood estimator, mean square error, bias. Interval estimates and hypotheses testing form normal, binomial and exponential samples. Simple linear regression. Goodness of fit tests, test of independence.Face-to-face learningPrerequisites- Fall
- REI504MCloud Computing and Big DataRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse Description
Overview of high performance computing (HPC) and “Big Data”, HPC environments with computing, network and storage resources, overview of parallel programming. Storage infrastructures and services for Big Data, Big Data analytics, the map-reduce paradigm, structured and unstructured data. Practical exercises: (A) Students will use the Amazon Web Services (AWS) cloud or equivalent to set up a multi-computer web service and an associated multi-computer testing application. (B) Students will get hands on experience of processing large data sets using map-reduce techniques with AWS.
Face-to-face learningPrerequisitesREI505MMachine LearningRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionAn overview of some of the main concepts, techniques and algorithms in machine learning. Supervised learning and unsupervised learning. Data preprocessing and data visualization. Model evaluation and model selection. Linear regression, nearest neighbors, support vector machines, decision trees and ensemble methods. Deep learning. Cluster analysis and the k-means algorithm. The students implement simple algorithms in Python and learn how to use specialized software packages. At the end of the course the students work on a practical machine learning project.
Face-to-face learningPrerequisitesTÖL301GFormal Languages and ComputabilityRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionFinite state machines, regular languages and grammars, push-down automata, context-free languages and grammars, Turing machines, general languages and grammars, and their basic properties. Recursive and recursively enumerable languages, reduction between languages, connection to decision problems and proving unsolvability of such problems. The complexity classes P and NP, and NP-completeness. Examples of various models of computation.
Face-to-face learningPrerequisitesTÖL105MComputer GraphicsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe main emphasis is on fundamental concepts and mathematics for 3D computer graphics. Two and three-dimensional transformations. Viewing projections. Light and the shading of objects. Texture mapping, blending, bump maps. Programmable shaders. Curves and surfaces. Programming assignments in WebGL.
Face-to-face learningPrerequisitesNot taught this semesterTÖL305GComputer Networks and SecurityRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe foundations of computer networks with emphasis on the TCP/IP protocol. Analysis and design of computer networks. Hardware and software used in computer networks. Implementation and maintenance of computer networks. Security systems for computer networks.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesHBV501GSoftware Project 1Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe aim of this course is for students to be able to develop software systems, to participate in software development projects, and to reflect upon software development. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics relevant in earlier phases of software development: development processes, estimation, design and programming, and configuration management. The project is started in this course and continued in HBV601G Software Project 2.
Face-to-face learningPrerequisitesIÐN502GEngineering EconomicsMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe objective of the course is that students get the skills to:
1. Understand the main concepts in accounting, cost theory and investment theory.
2. Be able to use methods of measuring the economic feasibility of technical projects.
3. Be able to develop computer models to assess the profitability of investments, the value of companies and pricing of bonds
Among topics included are accounting, cost theory, cash flow analysis, investment theory, measures of profitability including net present value and internal rate of return, and the building of profitability models. The course ends with a group assignment where the students exercise the development of computer models for feasibility assessment of projects.
Face-to-face learningPrerequisitesIÐN503GProject ManagementMandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe course is an introductory course in project management. It introduces key concepts of project management and covers context and selection of projects, project planning, project monitoring, management of project teams, and project closure. Students create and execute project plans in groups. Special emphasis is on using of project management for managing technological innovation in organizations.
Face-to-face learningPrerequisitesCourse DescriptionConcepts, units, scales and dimensions. Vectors. Kinematics of particles. Particle dynamics, inertia, forces and Newton's laws. Friction. Work and energy, conservation of energy. Momentum, collisions. Systems of particles, center of mass. Rotation of a rigid body. Angular momentum and moment of inertia. Statics. Gravity. Solids and fluids, Bernoulli's equation. Oscillations: Simple, damped and forced. Waves. Sound. Temperature. Ideal gas. Heat and the first law of thermodynamics. Kinetic theory of gases. Entropy and the second law of thermodynamics. Home problems: Once a week the students have to solve homeproblems on the website MasteringPhysics.
Laboratory work: Three exercises, mainly centered on mechanics, where students are trained in handling physical instruments, collecting and inspecting data. Students hand in their lab notebooks for a grade.
Note that the textbook is accessible to students via Canvas free of charge.
Face-to-face learningPrerequisitesHBV506MSecure Software EngineeringElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionSecure software engineering involves identifying and mitigating vulnerabilities to reduce threats to an application. In this module, students will gain an understanding of secure engineering practices and the means to apply them throughout the complete software development life cycle.
Working in teams, students will design, develop, and maintain a web application for a customer following secure software engineering principles. Students will illustrate their understanding and practical competency of white box and black box security assessment through testing their own and other team’s applications for vulnerabilities against the OWASP top 10 most critical security risks to web applications.
It is therefore assumed the students have knowledge in web application development using JavaScript.
Face-to-face learningPrerequisites- Spring 2
Not taught this semesterTÖL202MCompilersRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThe design of programming languages. The structure and design of compilers. Lexical analysis. Top down and bottom up parsing. Code generation. Each student writes his or her own compiler.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesTÖL212MReasoned ProgrammingRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionFundamental concepts in program verification and reasoned programming are covered. Emphasis is placed on using reasoned programming to develop solid and proved versions of well-known algorithms, especially in the areas of searching, sorting, and binary search trees. Among algorithms covered are various versions of insertion sort, selection sort, quicksort, binary search, and searching in binary search trees. Emphasis will be placed on deepening the understanding of the algorithms as well as getting a good grip on program verification. Some exercises will use verification tools such as Dafny or OpenJML.
Face-to-face learningThe course is taught if the specified conditions are metPrerequisitesTÖL401GOperating SystemsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionThis course covers concepts of operating systems. Besides foundations on computer hardware structures and general operating system architectures, this includes concepts of processes and threads and their management, principles of scheduling and scheduling algorithms, communication and synchronisation between processes and deadlock issues, principles of memory management including virtual memory and page replacement algorithms, file systems and their implementation as well as mass-storage management. If time allows, principles for achieving protection and security, and aspects of distribution (e.g. concepts of distributed systems and distributed file systems) are covered as well. This course does not deal with details of implementing operating systems, but introduces generic concepts that are used when implementing operating systems and that an application developer needs to know, when creating an application program. Where appropriate, current operating systems such as Microsoft Windows and POSIX-compliant UNIX-like systems (e.g. Linux) are used as case study for implementation and offered system calls. The usage of operating system services from within high-level programming languages (e.g. C, C++ or Java) is demonstrated based on Application Programming Interfaces (APIs) offered by prevailing system libraries.
Face-to-face learningPrerequisitesTÖL403GAnalysis of AlgorithmsRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionMethodology for the design of algorithms and the analysis of their time conplexity. Analysis of algorithms for sorting, searching, graph theory and matrix computations. Intractable problems, heuristics, and randomized algorithms.
Face-to-face learningPrerequisitesTÖV201GDigital Circuit Design and AnalysisRestricted elective course6Restricted elective course, conditions apply6 ECTS, creditsCourse DescriptionStudents will learn digital design principles and practice. Design is based on standard MSI and LSI devices or equivalent building blocks such as counters, shift registers, adders, and ROM. The design and analysis of combinatorial circuits for basic arithmetic is emphasized as well as the design an analysis of synchronous and asynchronous sequential circuits. Students will design circuits using basic building blocks such as flip flops and latches. Design and analysis of clocked sequential circuits based on Moore and Mealy FSM is emphasized. Introduction to Verilog HDL and FPGA in the design of as it applies to the previously described basic digital circuits. Students are required to complete 7 lab projects using FPGA. Students will also finish selected set of lab exercises using breadboards to contrast the state of the art design principles with classical principles. Students will work in teams to design and simulate digital circuits using a state-of-the-art CAD package. Both schematic and VHDL-based designs are emphasized.
Course Objective: Students will understand classical digital design principles and gain experience in using state of the art design tools.Classes: Lectures 2 x 75 minutes, lab 1 x 120 minutes per week.
Co-requisites: Digital Circuits and Analysis lab
Face-to-face learningPrerequisitesHBV601GSoftware Project 2Mandatory (required) course6A mandatory (required) course for the programme6 ECTS, creditsCourse DescriptionThe aim of this course is for students to be able to develop software systems and to participate in and reflect on software development projects. Thus, the course contains a development project that is performed in groups as its main component. Teaching is project-driven, and focuses on topics that are relevant in later phases of software development: quality assurance, installation, maintenance and evolution as weel as covers topics from HBV501G Software Project 1 in more detail. The project was started in HBV501G Software Project 1 and continued in this course.
Face-to-face learningPrerequisitesNot taught this semesterRAF617MFundaments of the InternetElective course6Free elective course within the programme6 ECTS, creditsCourse DescriptionModern day telecommunications are characterised by the fact that communicated data is carried on fixed telecommunications infrastructure on a majority of the path between tranmitter and receiver. Wireless infrastructure often conveys the signals at the end of the path. This yields both high speed and the comfort of wireless communications. It is of utmost importance for engineers working in telecoms to have a fundamental knowledge of fixed networks and the range of technologies deployed.
In this course, the structure of fixed backbone and access networks will be described. Optical fibre and related technologies will be introduced, e.g. DWDM, SDH, Ethernet, ATM and MPLS-TP. Access network technologies on copper, coax and optical fibres will be treated, e.g. ADSL. VDSL, G.fast and DOCSIS. Different FTTH (Fibre to the Home) technologies will be treated such as PON (Passive Optical Network), Active Ethernet and point-to-point Ethernet.
IP (Internet Protocol) has become a fundamental technology for modern fixed networks. IP native technologies will be described from the physical to the application layer. On the link layer, Ethernet will be in the focus as well as MPLS. Circuit and packet switching will be treated as well as circuit and packet orientation of networks. Sevices such as PSTN, VoIP, OTT and P2P will be treated. Backhauling of wireless networks such as mobile networks and Wi-Fi will also be treated.
In introduction to network virtualisation and network function virtualisation (NFV) will be given as well as software defined networking (SDN). Legal and regulatory aspects will be introduced and aspects like network neutrality discfussed. Important players and stakeholders will be discussed, e.g. Google, Apple, Microsoft, Netflix and telecommunications service providers.
Finally, local area networks will be discussed, home networking, smart homes, set-top-boxes, NAS, PLC, plastic optical fibres, MOCA and Wi-Fi introduced.The teaching form will be lectures and projects on IP communications will be worked. Students will write four papers on selected subjects and give presentations.
Face-to-face learningPrerequisites