PROG2006 - Advanced Programming


Examination arrangement

Examination arrangement: Aggregate score
Grade: Letter grades

Evaluation Weighting Duration Grade deviation Examination aids
School exam 40/100 3 hours B
Portfolio 60/100

Course content

The course will introduce students to a wide spectrum of programming languages and programming paradigms, focusing on multi-paradigm aspects and modern features of programming languages. The course will cover the fundamentals of lambda calculus and functional programming style, lazy computations, memory management, event-driven and reactive programming, as well as multi-threaded and concurrent programming patterns. Languages used might cover, but not be limited to, modern C++, Rust, Haskell, Golang, Java/Kotlin and Dart.

Learning outcome

At the end of the course students shall possess specialized knowledge and skills:

Knowledge - Understand fundamentals of multi-paradigm programming - Understand the fundamentals of lambda calculus and functional programming style - Understand the main features of a lazy functional language - Understand the computation and memory management issues affecting the sequential implementation of lazy functional languages - Understand event-driven programming, reactive programming, functional programming - Understand multi-thread/concurrent programming

Skills - Be able to discuss various programming paradigms: OO, functional, reactive, event-driven, defensive - Be able to write programs in a functional style, reactive style, and others - Reason formally about functional programs - Use polymorphism in OO and Functional programming paradigms - Be able to use higher-order functions - Reason about the time and space complexity of programs - Be able to use modern approaches to multi-threaded and concurrent programming tasks

General competence - Have improved programming abilities - Be able to discuss various solutions to different programming problems - Be able to contribute to a wide spectrum of programming environments

Learning methods and activities

  • Lectures
  • Tutorials and exercises
  • Web-based learning (online resources, online lectures, tutorials)
  • Internal assignments
  • Project work

Further on evaluation

The final assessment is based on the portfolio (60%) and the electronic written exam (40%). Both are done through Inspera. The exam has a letter grade and the portfolio has a letter grade. The portfolio consists of several tasks, typically between 4-6 tasks. There are some required tasks, and the completion of required tasks is necessary for the submission of the final portfolio. The non-required tasks are for ambitious students looking for better grades. The portfolio submission consists of an individual project repository, assignment repository URLs, reflection documents, and a recorded video presentation of the individual project.

Resit for the written exam in august, can be either written or changed to oral.

No resit for the portefolio.

Retake can be carried out for some partial assessments without all partial assessments having to be taken up again.

Specific conditions

Admission to a programme of study is required:
Computer Science - Engineering (BIDATA)
Programming (BPROG)

Required previous knowledge

PROG1003 Object Oriented programming

Course materials

The exact course material is subject to variations from year to year, based on the developments in programming languages, and new versions and updates to standards. Example course material might contain, but not be limited, to the following:

  • Haskell programming patterns
  • Meta-programming, multi-threading patterns
  • Advanced programming techniques
  • Functional programming patterns: functors, monads, pure functions, higher order functions
  • Abstract data types (Haskell/Rust)
  • Domain modelling using OO and Functional paradigms
  • Languages used for examples: Haskell, Rust, C++, Python, Golang, Kotlin, Dart
  • Reactive programming
  • Advanced security techniques: defensive programming

More on the course



Version: 1
Credits:  7.5 SP
Study level: Intermediate course, level II


Term no.: 1
Teaching semester:  SPRING 2024

Language of instruction: English

Location: Gjøvik

Subject area(s)
  • Computer Science
Contact information
Course coordinator: Lecturer(s):

Department with academic responsibility
Department of Computer Science


Examination arrangement: Aggregate score

Term Status code Evaluation Weighting Examination aids Date Time Examination system Room *
Spring ORD School exam 40/100 B 2024-05-30 09:00 INSPERA
Room Building Number of candidates
M433-Eksamensrom 4.etg Mustad, Inngang A 68
Spring ORD Portfolio 60/100





Room Building Number of candidates
Summer UTS School exam 40/100 B INSPERA
Room Building Number of candidates
  • * The location (room) for a written examination is published 3 days before examination date. If more than one room is listed, you will find your room at Studentweb.

For more information regarding registration for examination and examination procedures, see "Innsida - Exams"

More on examinations at NTNU