course-details-portlet

PROG2006 - Advanced Programming

About

Examination arrangement

Examination arrangement: Aggregate score
Grade: Letter grades

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

Course content

The course introduces students to a wide spectrum of programming languages and programming paradigms, focusing on multi-paradigm aspects and modern features of programming languages. The course covers 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. The course also uses novel programming techniques such as Smart Contracts. Languages used might cover, but not be limited to, Rust, Haskell, Golang, Java/Kotlin and Dart, Solidity. References to modern C++ and other languages are made.

Learning outcome

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

Knowledge

  • Understand the 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
  • Understand what smart contracts are and what they can be used for

Skills

  • Be able to discuss various programming paradigms: object-oriented and message-passing, 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 object-oriented 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
  • Be able to write simple smart contracts

General competence

  • Have an improved ability to discuss programming tasks
  • Be able to discuss various solutions to different programming problems using various metaphors and programming paradigms
  • Be able to contribute to a wide spectrum of programming environments
  • Be able to consider and discuss ethical, cyber security, and environmental (e.g. performance and energy consumption) constraints when working with programming tasks
  • Be able to contribute knowledge and discuss to decentralized systems through smart contracts programming

Learning methods and activities

  • Lectures
  • Tutorials and exercises
  • Web-based learning (online reading resources, online lectures and video 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. The portfolio also 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.

There is NO resit for the portfolio. Re-take of the portfolio assessment 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 modeling 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

No

Facts

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

Coursework

Term no.: 1
Teaching semester:  SPRING 2025

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

Examination arrangement: Aggregate score

Term Status code Evaluation Weighting Examination aids Date Time Examination system Room *
Spring ORD School exam 40/100 E INSPERA
Room Building Number of candidates
Spring ORD Portfolio 60/100 INSPERA
Room Building Number of candidates
Summer UTS School exam 40/100 E 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.
Examination

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

More on examinations at NTNU