The philosophy of computer science is concerned with those ontological, methodological, and ethical issues that arise from within the academic discipline of computer science as well as from the practice of software development. Thus, the philosophy of computer science shares the same philosophical goals as the philosophy of mathematics and the many subfields of the philosophy of science, such as the philosophy of biology or the philosophy of the social sciences. The philosophy of computer science also considers the analysis of computational artifacts, that is, human-made computing systems, and it focuses on methods involved in the design, specification, programming, verification, implementation, and testing of those systems. The abstract nature of computer programs and the resulting complexity of implemented artifacts, coupled with the technological ambitions of computer science, ensures that many of the conceptual questions of the philosophy of computer science have analogues in the philosophy of mathematics, the philosophy of empirical sciences, and the philosophy of technology. Other issues characterize the philosophy of computer science only. We shall concentrate on three tightly related groups of topics that form the spine of the subject. First we discuss topics related to the ontological analysis of computational artifacts, in Sections 1–5 below. Second, we discuss topics involved in the methodology and epistemology of software development, in Sections 6–9 below. Third, we discuss ethical issues arising from computer science practice, in Section 10 below. Applications of computer science are briefly considered in section 11.