The Philosophy of Computer Science (175616) (5cu)

Winter-Spring 2007

Matti Tedre, University of Joensuu, Department of Computer Science and Statistics


This is a graduate course (M.Sc and PhD students are eligible to participate). No prior familiarity with philosophy required.

This course is especially suitable for (1) M.Sc students who wish to have a deeper understanding of how computer science works and what computer science is, and (2) PhD students who wish to have an insight into the intellectual foundations of their own research, including the location of their studies in the wider intellectual and disciplinary landscape.

Now, given all these new Bologna process things, everyone seems to be puzzled over who is a M.Sc student. I don't want to be too strict about it, but you should have finished your B.Sc studies (you ought to have CL-grade in your transcript) and you should have begun your M.Sc studies. Usually that means at least 65 ECTS credits in computer science plus about the same in minor subjects. Otherwise you probably don't have enough experience on different aspects of computer science in order to relate the course material with your previous knowledge. You should be already working on your thesis, or at least have a topic selected, because many exercises require reflection on your own thesis.

Course Description

This course is not a course in the philosophy of science in general, but in the philosophy of computer science, which is a specific subtopic of the philosophy of science. In this course we pose concrete, commonsensical, specific, and well-defined questions, such as "What kinds of methods do computer scientists use to investigate computing?" and "What is the subject matter of computer science?".

We are not going to speak much about science in general, but we are going to focus on computer science in particular. Our approach is a modern "naturalistic" approach to the philosophy of science in the sense that we are not going to speak much about how computer science should ideally be done, but we are going to focus on how computer science is actually done. We will analyze computer science in terms of philosophy of science and sociology of scientific knowledge. We are also going to talk about the subject matter of computer science - that is, what kinds of things do computer scientists study, how certain can we be about our results in computer science, and are our findings like "discoveries", "laws", or "products".

More specifically, the questions in this course include epistemological questions such as "What is knowledge in computer science and (how) is it different from beliefs and assumptions?", "How can one differentiate between knowledge and beliefs in computer science?", "Can computer scientists know some things with certainty?", "Are there things in computer science that cannot be proven (with certainty)?", "What is progress in computer science?", "Are new algorithms or programs progress?", "How does new knowledge about computing become a part of commonly held knowledge about computing?", and "Are there laws in computer science?". We also discuss methodological questions such as "How do computer scientists work and how should computer scientists work?" and "Do (should) computers scientists prove formulas like mathematicians do, build things like engineers do, or test hypotheses like natural scientists do?". And we also talk about ontological questions such as "What kinds of things (if any) in computer science are universal, or objective, or timeless?".

Note that we do not discuss the ethics of computing (we have another course for that), the philosophy of mind, or the philosophy of science in general. Most notably, we do not give undue emphasis on the philosophy of artificial intelligence.

For graduate (M.Sc) students this course offers an overview of the variety of things computer scientists work with, helps to understand different kinds of research in computer science, and offers insight into the debates about what computer science is and what computer scientists do. For postgraduate (PhD) students this course offers perspectives into one's own research topic/field, helps to locate one's work within the larger enterprise of computer science, lays a philosophical foundation of one's work, and sheds light on one's own research paradigm (why do we work as we do, how do our results relate to the broader intellectual landscape, what do our results mean, what is the product of our work and research?).


I expect that by the end of this course all the course participants will

PhD students are also expected to be able to relate their own research with the paradigms of computer science; describe the intellectual foundations of their research; and explain the applicability, limitations, and boundaries of their research results.

This is a web-based course with no contact teaching (no lectures or demos). This means that the students will be given weekly online tasks (some obligatory, some optional). The course environment is Moodle ( There is one introductory lecture where Moodle is introduced (15.1.2007 16:00-18:00, room B247).

This course cannot be done in general exams.


Enrollment for the course is open now, and it closes Jan.12th 2007, 18:00.

Students from the University of Joensuu sign up using WebOodi (you can find the course by, e.g., searching for study units using the code 175616).

Lecture Notes

Draft versions of the lecture notes will be available on this page as soon as they are introduced in the course. You're free to download, share, distribute, and display the lecture notes under the Creative Commons By-Nc-Nd2.5 lisence. Educators are free to use parts or all of the lecture notes in their own courses, as long as they adhere to the creative commons license. If you have any questions or feedback concerning the lecture notes, feel free to contact me (

You can send me anonymous feedback about the lecture notes using the form at (delete the NOSPAM text from the link).


15.01.2007 -11.05.2007

I introduce Moodle for those who are not familiar with it Monday 15.1 16:00 onwards at B247 (Science Park).

Week Theme Readings
1 Introduction to the course lecture_notes1.pdf
Computer science: The development of the discipline
2 Part I: Struggling for status lecture_notes2.pdf
3 Part II: Emerging interdisciplinarity lecture_notes3.pdf
4 Part III: Recent discourses lecture_notes4.pdf
Three traditions of computer science
5 Part I: The logico-mathematical view lecture_notes5.pdf
6 Part II: The design/engineering view lecture_notes6.pdf
7 Part III: The empirical/scientific view lecture_notes7.pdf
8 Part IV: The fundamental question in computing lecture_notes8.pdf
Scientific reasoning
9 Part I: Knowledge and Beliefs, Very Shortly lecture_notes9.pdf
10 Part II: Justification of Scientific Knowledge and Methods lecture_notes10.pdf
11 Part III: Science Wars and the Sokal Affair Lecture_notes11.pdf
12 Part IV: How Does Computer Science Actually Work? Lecture_notes12.pdf
References (incomplete) lecture_notes_references.pdf


The course is graded 0,1,2,3,4,5. Fractions are not used.

Course literature

Primary readings

If you want a short crash course to the philosophy of science, read Okasha's book. It takes a couple of hours to read, and it offers a good overview of the philosophy of science.

Supplementary readings