Anders Andersen

Teaching portfolio

Teaching philosophy

Computer science curriculum

The curriculum for undergraduate programs in computer science at Department of Computer Science, UiT, are strongly influenced by the curriculum guidelines from Association for Computing Machinery (ACM) and IEEE Computer Science (The Joint Task Force on Computing Curricula 2013; Joint Task Group on Computer Engineering Curricula 2016). Two important principles presented in (The Joint Task Force on Computing Curricula 2013) are:

  • Computer science curricula should be designed to provide students with the flexibility to work across many disciplines. Computing is a broad field that connects to and draws from many disciplines, including mathematics, electrical engineering, psychology, statistics, fine arts, linguistics, and physical and life sciences. Computer Science students should develop the flexibility to work across disciplines.

  • Computer science curricula should be designed to prepare graduates to succeed in a rapidly changing field. Computer Science is rapidly changing and will continue to change for the foreseeable future. Curricula must prepare students for lifelong learning and must include professional practice (e.g., communication skills, teamwork, ethics) as components of the undergraduate experience. Computer science students must learn to integrate theory and practice, to recognize the importance of abstraction, and to appreciate the value of good engineering design.

These principles influence the teaching philosophy in computer science. The students should be exposed to cross-disciplinary problems and solutions through their studies, and they should learn to adapt to changes and update their knowledge continuously.

Two important characteristics of computer science graduates presented in (The Joint Task Force on Computing Curricula 2013) are:

  • Problem solving skills

  • Awareness of the broad applicability of computing

These characteristics should also influence the teaching philosophy in computer science. We should learn our students to solve real problems and they should understand the full range of opportunities available in computing. They should be exposed to examples of problems from the real work, and they should learn to analyse and solve such problems both independently and as a joint task in a group. Such a group can include other fellow students, users of the solutions, external industry partners or cross-disciplinary professionals.

Deductive, inductive and abductive learning

In (Laursen 2004), a three-part model for learning and teaching is presented. It is based on the work of Peirce (Fann 1970) who introduce a third way describing how we gain new knowledge (the third step in scientific thinking). The third way is abduction. New knowledge is not only a matter of reprocessing existing knowledge. It can not always be deduced from what we already know or induced from data and observations we have already done.

The three part model of teaching and learning (Laursen 2004) includes induction, deduction and abduction. Inductive teaching and learning is based upon the principle that knowledge can come from your own experiences. Specific experiences are generalised to generate knowledge. Deductive teaching and learning is based upon the principle that knowledge can come from the introduction of rules, principles or a theories. Specific knowledge is drawn from the general rules, principles or theories. Abductive teaching and learning is based upon the principle that knowledge can come from promoting a hypothesis, an interpretation or a model for a possible solution to a problem. All three parts of the model will be used in teaching.

Inductive learning means that the students should gain experience solving problems using the tools available. More experience with such problem solving means that the students can acquire more knowledge by generalisation of experiences. In computer science, this is often achieved through practical exercises solved by algorithms and programming (computer science laboratory). The presented exercises and suggested approaches should contribute to a wide scope of experiences for the students. This will contribute to a wide platform of experiences that can be generalised to generate knowledge.

Deductive learning is based on rules, principles and theories presented for the students. These rules, principles and theories are typically presented to the students in traditional lectures and in the text books. However, it is important that the students are able to use these rules, principles and theories to predict the outcome of a given example or use-case. The practicals (the computer science laboratory) can be used to validate (and experience) predictions based on the learned rules, principles and theories.

In abductive learning the students have to come up with their own hypothesis, interpretations or models of problem solving. This requires more experienced students with some level of confidence. Typically, students can choose two approaches when given this kind of a challenge. The first approach is to avoid anything difficult. Such a reduction strategy means that the student chooses an approach that he or she thinks has less chance of failing, but also is less challenging. The second approach is to seek a more difficult and big-idea approach. Such a risk-taking strategy means that the changes of failing are larger, but the challenges are greater.

As a teacher you might want to push the students with the strongest focus on the reduction strategy to challenge them self more. By doing this you avoid a too simplified approach by the students where the learning outcome will be limited. As a teacher you might want to push the students with a the strongest focus on risk-taking strategy to play it more safe. By doing this you avoid a too complex approach where the students spend to much time on complex details not relevant for the learning goals of the exercise.

In abductive learning, failing is not necessary a bad result. When students choose a risk-taking strategy they will sometimes fail. If they fail but are able to analyse the failure and from that gain new knowledge, the failure can be considered a good result (with good grading).

Inductive, deductive and abductive learning, shouldcould all be included in the learning model used. Typically an abductive exercise will be followed by inductive and deductive learning based on experiences from that exercise. In this quote from Kuhn (Kuhn 1977) (p. 237), inductive and deductive learning represents the traditionalist, and abductive learning represents the innovator:

… I hope to have made meaningful the view that the productive scientist must be a traditionalist who enjoys playing intricate games by pre-established rules in order to be a successful innovator who discovers new rules and new pieces with which to play them.

Kuhn says that it is necessary for a scientist to be both a traditionalist and an innovator. This also applies to learning and teaching in computer science. The combination of inductive, deductive and abductive learning is a good teaching model for computer science.

Introducing programming in computational sciences

Teaching in computational sciences (e.g., math, physics, chemistry) has followed a structure where the theoretical terms are introduced first, then problem solving for simple models is taught, and later this is applied in problem solving relevant for current research. This is a solid model that has contributed to the development of the natural sciences. However, this model is currently under pressure. The distance between the basic knowledge and current research has increased significantly. This is challenging, since we know that relevant problem solving from current research is a motivating factor for learning. Until recently, few practical alternatives for teaching computational sciences have existed.

An important recent development is the increased processing power available to all students. Today, a common laptop computer has a processing power that makes it capable to model relevant scientific research problems in wide range of computational sciences (e.g., in math, physics, chemistry, geology, biology, but also in engineering, process industry and so on). A strategical approach to decrease the distance between knowledge learned in the introduction courses in computational sciences and current research, is to introduce programming as an important tool in teaching and learning in these courses. The positive influence of introducing programming as a major tool in learning these topics are well documented by University of Oslo (UiO) (Mørken et al. 2011), where the Centre for Computing in Science and Education (CCSE) is established. At UiO, computational programming is introduced as one of the important tools for learning computational sciences.

At UiO, the goal is to incorporate computational programming within the standard curriculum in mathematics and the natural sciences (Hjorth-Jensen et al. 2009; Langtangen 2016). Such incorporation also includes organisational challenges, including cooperation between university professors at different fields and departments.

The ability to do computations is an important tool for the research scientists. This has influenced the research fields significantly. New research fields have emerged, and existing research fields have moved focus towards computation and simulation. Science is conducted by solving problems using a combination of analytic, numerical and experimental tools. If the influence of computation in science is not reflected in what we learn students, the students might be left with inexact and unrealistic models. We undermine the students deeper understanding on how scientific research is performed.

The courses should introduce realistic examples with program development approaches (coding) to problem solving, and iterative methods. Coding gives the students an important toolbox for the development of knowledge in their field. Computers are really good at performing simple tasks many times. This means that iterative methods will be an important part of students’ toolbox.

The introduction of programming in teaching computational sciences has to be coordinated with teaching of mathematics and numerical methods. New topics introduced in mathematics and numerical methods can be exemplified and experimented with when teaching programming. This approach to teaching is possible if we are able to achieve cross-disciplinary collaboration in the development and implementation of courses.


Fann, K. T. 1970. Peirce’s Theory of Abduction. Springer Netherlands.

Hjorth-Jensen, Morten, Knut Mørken, Annik Myhre, and Hanne Sølna. 2009. “Computers in Science Education: A New Way to Teach Science?” In Ringer I Vann: Lenge Leve Fleksibel Læring Ved Universitetet I Oslo, edited by Susanne Kjekshus Koch, 29–40. Universitetets senter for informasjonsteknolog, UiO.

Joint Task Group on Computer Engineering Curricula. 2016. “Computer Engineering Curricula 2016: Curriculum Guidelines for Undergraduate Degree Programs in Computer Engineering.” Final Curriculum Report CE2016. Association for Computing Machinery (ACM) / IEEE Computer Society.

Kuhn, Thomas S. 1977. The Essential Tension: Selected Studies in Scientific Tradition and Change. The University of Chicago Press.

Langtangen, Hans Petter. 2016. A Primer on Scientific Programming with Python. 5th ed. Texts in Computational Science and Engineering. Springer-Verlag.

Laursen, Martin Holmgaard. 2004. “Abduktive Læreprocesser.” Unge Pædagoger, no. 5.

Mørken, Knut, Nina Sasaki Aanesen, Lars Oswald Dahl, Hugo Lewi Hammer, Terje Brinck Løyning, Anders Malthe-Sørenssen, Elisabeth Nøst, Ingve Simonsen, Jon Eivind Vatne, and Tone Skramstad. 2011. “Beregningsorientert Utdanning: En Veileder for Universiteter Og Høgskoler I Norge.” Rapport. Det matematisk naturvitenskaplige fakultet, UiO.

The Joint Task Force on Computing Curricula. 2013. “Computer Science Curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science.” Report. Association for Computing Machinery (ACM) / IEEE Computer Society.