Course - Advanced Programming - PROG2006
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)
Recommended previous knowledge
IDATG2102 Algorithmic Methods
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
No
Version: 1
Credits:
7.5 SP
Study level: Intermediate course, level II
Term no.: 1
Teaching semester: SPRING 2025
Language of instruction: English
Location: Gjøvik
- Computer Science
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.
For more information regarding registration for examination and examination procedures, see "Innsida - Exams"