Skip to main content

Before choosing course

Software development today depends on a variety of programming models, concepts, languages, pragmatics, and environments. The ability to choose from this variety of aspects critically determines whether a programmer can solve real life programming
tasks successfully and efficiently.
The overall aim of the course is to provide the necessary knowledge in programming models, concepts, languages, and environments used in today's software construction such as in web-based systems, embedded systems, communication systems,
distributed systems, just to name a few.

Course offering missing for current semester as well as for previous and coming semesters
* Retrieved from Course syllabus ID1218 (Autumn 2008–)

Content and learning outcomes

Course contents

  - Programming models and languages: imperative programming,   object-oriented programming, functional programming,   concurrent programming. Introduction to key properties, benefits,   and application areas.  

- Programming in C++: differential approach to Java. Key   differences. Relation to C. Basics: data types, control   structures, objects, classes, inheritance, object-based   polymorphism. Advanced: parameter passing, references, pointers   and explicit memory management, parametric polymorphism with   templates.  

- Concurrent programming: paradigms (shared data structures   versus message passing), techniques and concepts (safety,   liveness, concurrency control, services).  

- Functional and concurrent programming in Erlang: recursion,   list processing, pattern matching, message sending, safety   (mutual exclusion), liveness (concurrency adaptors, message   ordering).  

- Pragmatics: development tools and environments, testing,   debugging, profiling.

Intended learning outcomes

The overall aim of the course is to provide the necessary knowledge in programming models, concepts, languages, and environments used in today's software construction such as in web-based systems, embedded systems, communication systems, distributed systems, just to name a few.

More specifically, after reading the course, students should be able to:

  • know basic characteristics and key concepts of common programming models (object-oriented, imperative, functional, and concurrent programming models) and know about common programming languages that implement these models.
  • analyze programming tasks and identify aspects of these tasks that make them suited for the above mentioned programming models.
  • apply object-oriented programming concepts from Java in C++: classes, inheritance, object-based polymorphism, and exceptions.
  • understand and apply the concepts of C++ as a language following the object-oriented and imperative programming model: parameter passing, pointers and references, explicit memory management, overloading, parametric polymorphism through templates.
  • configure, compile, and interface to software libraries in C++.
  • design, structure, debug, test, and profile medium-sized programs in C++.
  • apply basic functional programming techniques in Erlang: recursion, pattern matching, list processing.
  • understand and identify safety and liveness properties of concurrent programs.
  • apply mutual exclusion, message ordering, and concurrency adaptors as common synchronization patterns in concurrent programs.
  • structure concurrent applications into communicating and cooperating concurrent abstractions.

Course Disposition

No information inserted

Literature and preparations

Specific prerequisites

Completed upper secondary education including documented proficiency in Swedish corresponding to Swedish B and English corresponding to English A. For students who received/will receive their final school grades after 31 December 2009, there is an additional entry requirement for mathematics as follows: documented proficiency in mathematics corresponding to Mathematics A. And the specific requirements of mathematics, physics and chemistry corresponding to Mathematics D, Physics B and Chemistry A.

Recommended prerequisites

 ID1004, ID1005


No information inserted


Mark Allen Weiss, C++ for Java Programmers, Prentice Hall, 2004.

Concurrent Programming in Erlang, Prentice Hall, 2001 (elektronisk version).

Examination and completion

If the course is discontinued, students may request to be examined during the following two academic years.

Grading scale

A, B, C, D, E, FX, F


  • LAB1 - Laboratory Work, 3,0 hp, betygsskala: P, F
  • TEN1 - Examination, 4,5 hp, betygsskala: A, B, C, D, E, FX, F

Based on recommendation from KTH’s coordinator for disabilities, the examiner will decide how to adapt an examination for students with documented disability.

The examiner may apply another examination format when re-examining individual students.

Other requirements for final grade

Examination (TEN1; 4.5 hp)
Laboratory course (LAB1; 3 hp)

Opportunity to complete the requirements via supplementary examination

No information inserted

Opportunity to raise an approved grade via renewed examination

No information inserted


Profile picture Johan Montelius

Ethical approach

  • All members of a group are responsible for the group's work.
  • In any assessment, every student shall honestly disclose any help received and sources used.
  • In an oral assessment, every student shall be able to present and answer questions about the entire assignment and solution.

Further information

Course web

Further information about the course can be found on the Course web at the link below. Information on the Course web will later be moved to this site.

Course web ID1218

Offered by

ICT/Software and Computer system

Main field of study


Education cycle

First cycle

Add-on studies

No information inserted