Abstract
Over the past four decades, software engineering has emerged as a discipline in its own right, though it has roots both in computer science and in classical engineering. Its philosophical foundations and premises are not yet well understood. In recent times, members of the software engineering community have started to search for such foundations. In particular, the philosophies of Kuhn and Popper have been used by philosophically-minded software engineers in search of a deeper understanding of their discipline. It seems, however, that professional philosophers of science are not yet aware of this new discourse within the field of software engineering. Therefore, this article aims to reflect critically upon recent software engineers’ attempts towards a philosophy of software engineering and to introduce our own philosophical thoughts in this context. Finally, we invite the professional philosophers of science to participate in this interesting new discourse.
Notes
We call our article ‘essay’, in appreciation of Brooks’ famous ‘Essays on Software Engineering’ (Brooks 1995). As far as ethics of software engineering is concerned, we have not yet studied how it would differ specifically from the general ethics of engineering (or technics, or technology) which were already discussed by many contemporary philosophers.
Recently it was reported in the news that Iranian programmers have (allegedly) programmed an Islamist computer game, which mimics the corresponding Western games but with reversed roles: the player of that game will find himself in a scenario in which he has to fight an anti-Western campaign in the role of an ardent religious Jihadist. The game seems to have become quite popular amongst the disgruntled Oriental youths.
For a general introduction to the philosophy of technics (technology, engineering), we refer to well-known modern and contemporary philosophers such as H. Beck, N. Berdjajew, F. Dessauer, J. Ellul, A. Gehlen, A. Huning, E. Kapp, H. Lenk, R. Mackey, C. Mitcham (Mitcham and Mackey 1973), F. Rapp, G. Ropohl, H. Sachsse, K. Schilling, H. Stork, K. Tuchel, A. Wenzl, S. Wollgast, W. Zimmerli, B. Zschimmer, and many others. For the difference between ‘technics’ and ‘technology’ see Sachsse (1994a, b). A bibliography newer than (Mitcham and Mackey 1973), comprising more than 100 titles on this topic, can be found on the internet at http://www.stefan-gruner.de/Bibl-Phil-Eth-Techn.zip.
We have used a general dictionary here, instead of a specific historic-philosophical one, because specialist dictionaries, in all their ‘scholastic’ subtlety often obfuscate (rather than clarify) the term in question.
Thus, operating systems, too, are a manifestation of a general principle of abstraction, which is one of the most important methodological guidelines in computer science and SE.
The fact that the conference was organised under the umbrella of the NATO in the middle of the ‘Cold War’ also indicates the importance of software systems from a military perspective—like every novel technology in its own historical time.
See, for example, ICSE Conference 2008, on the internet at http://icse08.upb.de/program/40years.html.
That seminar was attended, inter alia, by Naur and Randall of the 1968 NATO Garmisch event, as well as by ‘celebrities’ such as Parnas, Boehm (2002), Shapiro, etc.
It provoked, for example, Knuth’s response about structured programming with GOTO commands (Knuth 1974).
The website http://www.sereferences.com/software-failure-list.php lists a number of spectacular software failures which are all due to the intrinsic complexity of modern software systems and the limited ability of the human mind to cope with such high levels of structural and behavioural complexity; see also Brooks (1995) for comparison.
The ‘Waterfall’ development process, adopted by SE from classical engineering disciplines, is nicely summarised and discussed also by Arageorgis and Baltas (1989, pp. 225–226); however they make the mistake of confusing the terms ‘efficient’ and ‘effective’: where they say ‘effective’ they should have said ‘efficient’. (‘Effective’ merely means that a desired result is achieved within a finite—however long—period of time.)
German-speaking readers should keep in mind that the English word ‘methodology’ is conceptually closer to the German words ‘Methode’ or ‘Methodik’ rather than to the German ‘Methodologie’; it means a framework of related methods rather than a fully elaborated science or theory of methods: see Geldsetzer (1980) for comparison.
There are, of course, ad-hoc ‘micro-plans’ for “responding to change”. The process is not supposed to be chaotic.
For this reason a philosophical analysis of SE might even be interesting for philosophers in the tradition of Structuralism.
Margolis acknowledges his indebtedness to Peirce for the type-token-distinction, although he also notes that he departs from Peirce’s usage who perceived types and tokens exclusively as signs.
This is related to questions of organisational knowledge, upon which we shall touch only briefly in Sect. 6.
For a brief overview of Feyerabendianism in SE see Gruner (2007). For a more profound critique of Feyerabendianism in SE see Snelting (1997, 1998). Another example of Feyerabendianism in computer science can be found on the internet at http://www.dreamsongs.com/Feyerabend/ETAPS03/.
Our colleague, Morkel Theunissen, hinted in a private communication at the powerful role of the American DARPA doctrine in the widespread adoption of the strictly hierarchy-procedural development process both in classical-mechanical and in SE.
This ‘rapid’ engineering method was ignored the methodological discussion of Arageorgis and Baltas (1989), presumably because this detail was not central to their general ‘science versus engineering’ theme.
This entire synopsis is intentionally limited to literature that explicitly applies the theories of professional philosophers and excludes any literature that uses the word ‘philosophy’ loosely in the senses of ‘guiding principle’ or ‘general outlook on life’.
‘Ontology’ in SE does not have the same meaning as in philosophy. An ‘ontology’ in SE is, basically, a ‘name space’.
In our opinion, OOP should be better characterized as ‘Aristotelian’ rather than ‘Platonic’, but this discussion would lead us too far away from the central topic of our paper; see Rayside and Campbell (2000) for comparison.
We cite several authors whose writings have been published in the Cutter Consortium’s own book series. All of them can be found in the Cutter Consortium’s own bookstore (Cutter 2007).
K. Beck: Personal e-mail communication with M. Northover, December 2006.
Model checking is a method of testing the possible behaviour of a finite-state machine against a formal specification in a temporal logic, to generate counterexamples or refutations if the specification is violated.
This includes ourselves, the authors of this essay; none of us is a professional philosopher.
Here we refer particularly to some notoriously anti-technological paragraphs in Marcuse (1964).
Note that similar thoughts are evident in the later works by M. Heidegger—technics as ‘Gestell’ (Heidegger 1949)—in spite of the School of Frankfurt regarding itself as notoriously anti-Heideggerian.
D. Knuth’s seminal book ‘The Art of Computer Programming’ (Knuth 1968) was followed by D. Gries’ book ‘The Science of Programming’ (Gries 1981): this shows how slowly the computer science community is trying to come to terms with an appropriate philosophical understanding of their own practices and activities; see Bishop (1991) and Arageorgis and Baltas (1989) for comparison.
Whilst some authors have claimed that Kuhn would use his term ‘paradigm’ in a large variety of different notions throughout his writings (see for example Masterman 1970), Kuhn himself, in his ‘Postscript’ (Kuhn 1970), has rejected such allegations and insisted—including a reference to Masterman—that he would use the term ‘paradigm’ in two notions only (Kuhn 1970, pp. 181–182). These are the ones which we have mentioned above.
The theories, however, are like dry autumn leaves which are falling off, after having enabled the tree of science to breathe for another while. Our translation, from Mach (1871, p. 46).
Note that Popper did not dispute the possibility of a positive mathematical or logical proof within the realm of mathematics; in fact Popper needs the validity of logics itself in order to be able to claim that one counter-example is sufficient to disprove an all-quantified expression of a disputed hypothesis.
Mathematically verified software tends to reveal less defects in the testing phase than software which had been created without formal verification. With respect to the density of flaws in program code, the SE practitioner’s classical ‘rule of thumb’ states: ‘one flaw per thousand lines of software code’, which would sum up to approximately thousand flaws in a larger software system consisting of about one million lines of code.
Entire conferences are dedicated to this specific sub-field of SE; see for example the IEEE-ICST Conference on Software Testing, Verification and Validation, on the internet at http://www.cs.colostate.edu/icst2008/.
One might feel slightly reminded of Hegel’s well-known 3-step dialectics: as far as the analogy holds, a Popperian double step (TS → EE) would resemble some ‘operational refinement’ of an Hegelian ‘anti-thesis’—the well-known fundamental differences between Hegel’s and Popper’s general philosophies of history not being taken into account at this specific point.
Dessauer’s fourth ‘Reich’ (realm), as the “Inbegriff aller eindeutig prästabilierten Lösungsgestalten” (Dessauer 1933, p. 50), comprises the ‘ideas’ of all technically feasible solutions which are ‘awaiting’ their ‘discovery’—similar to the realm of algorithms and mathematical solutions in the quasi-platonic ontology of Penrose (1989). Even more (namely five) ‘worlds’ (of ‘discovery’, ‘invention’, ‘development’, ‘being’, and ‘becoming’), have been distinguished by Jürgen Mittelstraß in several of his works; see for example Mittelstraß (2001).
European Association of Software Science and Technology; on the internet at http://www.easst.org/.
This philosophical limbo is reflected by the organisations of different universities, in which we can find computer science and SE sometimes attached to the faculties of engineering, sometimes to the faculties of mathematics and natural sciences. Moreover, within the discipline itself, there is also growing dissent about whether SE still is (or should be) a sub-discipline of computer science, or whether it is (or should be) already a discipline in its own right, emancipated from computer science (in analogy to the similar debate about the relationship between computer science and artificial intelligence some time ago).
References
Adorno, T., Albert, H., & Dahrendorf, R. (1993). Der Positivismusstreit in der deutschen Soziologie. München: DTV.
Aichernig, B. K. (2001). Systematic Black-Box Testing of Computer-Based Systems through Formal Abstraction Techniques. Dissertation, Technische Universität Graz, Austria.
Albert, H. (1994). Kritischer Rationalismus. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 177–182). München: DTV Wissenschaft.
Alexander, C. (1999). The origins of pattern theory. IEEE Software, September/October, 71–82.
Arageorgis, A., & Baltas, A. (1989). Demarcating technology from science—Problems and problem solving in technology. Zeitschrift für allgemeine Wissenschaftstheorie, 20(2), 212–229.
Bach, J. (2000). Skill over process. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Basden, A. (2008). Philosophical frameworks for understanding information systems. USA: IGI Publishing. ISBN-10: 1599040360.
Beck, K. (2002). XP and culture change. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Beck, K., & Andres, C. (2005). Extreme programming explained: Embrace change (2nd ed.). London: Addison-Wesley.
Beck, K., & Fowler, A. (2001). Manifesto for agile software development. Retrieved November 2007 from http://www.agilemanifesto/org/.
Becker, W. (1994). Ideologie. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 144–150). München: DTV Wissenschaft.
Bishop, J. M. (1991). Computer programming: Is it computer science? (Inaugural Lecture). South-African Journal of Science (Suid-Afrikaanse Tydskrif vir Wetenskap), 87, 22–33.
Boehm, B. (2002). Get ready for agile methods, with care. IEEE Software, 35(1), 64–69.
Brennecke, A., & Keil-Slawik, R. (Eds.). (1996). Position Papers for Dagstuhl-Seminar 9635 on the History of Software Engineering. Schloß Dagstuhl, Germany, August 1996. Retrieved November 2007 from http://www.dagstuhl.de/en/program/calendar/semhp/?semnr=199635.
Brooks, F. P. (1987). No silver bullet: Essence and accidents of software engineering. Computer, 20(4), 10–19.
Brooks, F. P. (1995). The mythical man-month and other essays on software engineering (2nd ed.). London: Addison Wesley.
Buchler, J. (Ed.). (1955). Philosophical writings of peirce. New York: Dover.
Bullock, A., & Trombley, S. (Eds.). (1999). The new fontana dictionary of modern thought (3rd ed.). Glasgow: Harper Collins.
Cockburn, A. (1999). A methodology per project. Retrieved November 2007 from http://alistair.cockburn.us/index.php/Methodology_per_project.
Cockburn, A. (2002). Agile software development (2nd ed.). London: Addison-Wesley.
Coutts, D. (2007). The test case as a scientific experiment. Retrieved November 2007 from http://www.stickyminds.com/sitewide.asp?Function=edetail&ObjectType=ART&ObjectId=8965.
Cutter (2007). Cutter consortium, Online Bookstore. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Davies, R. (2006). Agile paradigm shift. Keynote lecture to the Agile North Conference, 2006. Retrieved November 2007 from http://www.agilenorth.net/DownloadFiles/2006Conference/.
Dessauer, F. (1933). Philosophie der Technik: Das Problem der Realisierung (3rd edn.). Bonn: Verlag von Friedrich Cohen (1st ed., 1927).
Dijkstra, E. W. (1968). Go-to statement considered harmful (Letter to the Editor). Communications of the ACM, 11(3), 147–148.
Erdmann, J. E. (1896). Grundriss der Geschichte der Philosophie (Reprint 1993: Petra Wald).
Firestone, J. M., & McElroy, W. (2003). The open enterprise: building business architectures for openness and sustainable innovation. Hartland Four Corners, VT: KMCI On-line Press. Retrieved November 2007 from http://www.dkms.com/papers/openenterpriseexcerptnumb1final.pdf.
Fuller, S. (2003). Kuhn versus Popper: The struggle for the soul of science. Cambridge: Icon Books.
Geldsetzer, L. (1980). Methodologie. In J. Ritter & K. Gründer (Eds.), Historisches Wörterbuch der Philosophie (Vol. V, pp. 1379–1386). Basel: Schwabe-Verlag.
Giguette, R. (2006). Building objects out of plato: Applying philosophy, symbolism and analogy to software design. Communications of the ACM, 49(10), 66–71.
Gregg, D. G., Kulkarni, U. R., & Vinze, A. S. (2001). Understanding the philosophical underpinnings of software engineering research in information systems. Information Systems Frontiers, 3(2), 169–183.
Gries, D. (1981). The science of programming (1st ed.). Heidelberg/New York: Springer-Verlag.
Gruner, S. (2007). The path to innovation. Innovate, 2, 96. Pretoria: ISSN 1814-443X.
Hall, W. P. (2003). Managing maintenance knowledge in the context of large engineering projects: Theory and case study. Journal of Information and Knowledge Management, 2(3), 1–17.
Hamlet, D. (2002). Science, computer science, mathematics and software development. Keynote Lecture to the SR Quality Week Conference. Retrieved November 2007 from http://web.cecs.pdx.edu/~hamlet/QW.pdf.
Hanks, P. (Ed.). (1991). Collins English dictionary (3rd ed.). Glasgow: Harper Collins.
Heidegger, M. (1927). Sein und Zeit (19th ed. 2006). Tübingen: Niemeyer-Verlag.
Heidegger, M. (1949). Die Frage nach der Technik (Reprinted 1954 in Heidegger, M., Vorträge und Aufsätze. (Pfullingen: Neske-Verlag)).
Hoare, C. A. R. (1985). Communicating sequential processes. London/New York: Prentice-Hall.
Hoare, C. A. R. (2003a). Towards the verifying compiler. Lecture notes in computer science (Vol. 2757, pp. 151–160). Heidelberg: Springer-Verlag.
Hoare, C. A. R. (2003b). Assertions: A personal perspective. IEEE Annals of the History of Computing, 25(2), 14–25.
Hoare, C. A. R. (2006). Why ever CSP? Electronic Notes in Theoretical Computer Science, 162, 209–215. Retrieved November 2007 from http://dx.doi.org/10.1016/j.entcs.2006.01.031.
Knuth, D. (1968). The art of computer programming (1st ed.). London: Addison-Wesley.
Knuth, D. (1974). Structured programming with go-to statements. ACM Computing Surveys, 6(4), 261–301.
Kroeze, J. H. (2007). Linguistic information—A humanistic endeavour. Innovate, 2, 38–39. Pretoria: ISSN 1814-443X.
Kuhn, T. (1962). The structure of scientific revolutions. Chicago: University of Chicago Press.
Kuhn, T. (1970). The structure of scientific revolutions—Postscript (2nd ed.). Chicago: University of Chicago Press.
Lobkowicz, N. (1994). Interesse. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 158–160). München: DTV Wissenschaft.
Lux Group. (2007). Project lifecycles—Waterfall, rapid application development, and all that. Retrieved November 2007 from http://luxworldwide.com/whitepapers/project_lifecycles_waterfall_rapid_application_development.asp.
Lyytinen, K. J., & Klein, H. K. (1985). The critical theory of Jürgen Habermas as a basis for a theory of information systems. In E. Mumford et al. (Eds.), Research methods in information systems (pp. 219–236). Amsterdam: North-Holland/Elsevier.
Mach, E. (1871). Die Geschichte und die Wurzel des Satzes von der Erhaltung der Arbeit. Lecture to the Royal Bohemian Society of Sciences, 15th November 1871. (1st ed., Prague: 1871; 2nd ed., Leipzig: 1909).
Marcuse, H. (1964). One-dimensional man—Studies in the ideology of advanced industrial society. Boston: Beacon Press.
Margolis, J. (1980). Art and philosophy. Sussex: Harvester Press.
Marick, B. (2004). Methodology work is ontology work. ACM SIGPLAN Notices, 39(12), 64–71.
Marzolf, T., & Guttman, M. (2002). Systems minus systems thinking equals big trouble. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Masterman, M. (1970). The nature of a paradigm. In I. Lakatos & A. Musgrave (Eds.), Criticism and the growth of knowledge (pp. 59–89). Cambridge: Cambridge University Press.
McElroy, W. (2002). Deep knowledge management. Retrieved November 2007 from http://www.macroinnovation.com/images/DeepKMbyM.W.McElroy.pdf.
Methner, H., Oberhoff, W. D., Schmidt, P., Swiridow, A. P., Unger, H., & Vollmar, R. (Eds.). (1997). Computer und Kybernetik—Anmerkungen zu ihrer Geschichte und zu Perspektiven in der Zeit von 1940 bis 1965. III Russisch-Deutsches Symposium, Heidelberg, Germany, November 1997 (Bonn: Gesellschaft für Informatik, and Moscow: Russian International Informatization Academy).
Meyer, S. (2007). Pragmatic versus structured computer programming. Retrieved November 2007 from http://www.pragmatic-c.com/docs/structprog.pdf.
Mitcham, C. (1994). Thinking through technology: The path between engineering and philosophy. Chicago: University of Chicago Press.
Mitcham, C. & Mackey, R. (1973). Bibliography of the philosophy of technology. Technology and Culture, 14/2, Part II.
Mittelstraß, J. (2001). Konstruktion und Deutung: Über Wissenschaft in einer Leonardo – und Leibniz-Welt. Festvortrag anläßlich der Verleihung der Ehrendoktorwürde, January 2001. Technical Report, Series Öffentliche Vorlesungen, 110, Faculty of Philosophy, Humboldt-University to Berlin. (Berlin: ISSN 1618-4866, ISBN 3-86004-144-4).
Moss, M. (2003). Why management theory needs Popper: The relevance of falsification. Retrieved November 2007 from http://www.markwmoss.com/falsificationism.htm.
Naur, P., & Randell, B. (Eds.). (1968). Software engineering—Report on a conference sponsored by the NATO Science Committee. Garmisch, Germany, October 1968, published January 1969. Retrieved November 2007 from http://homepages.cs.ncl.ac.uk/brian.randell/NATO/.
Nonaka, I., & Takeuchi, H. (1995). The knowledge-creating company. Oxford: Oxford University Press.
Northover, M., Boake, A., & Kourie, D. G. (2006). Karl Popper’s critical rationalism in agile software development. Lecture notes in artificial intelligence (Vol. 4068). Heidelberg: Springer-Verlag.
Northover, M., Northover, A., Gruner, S., Kourie, D. G., & Boake, A. (2007). Agile software development: A contemporary philosophical perspective. ACM International Conference Proceeding Series (Vol. 226, pp. 106–115). doi:http://doi.acm.org/10.1145/1292491.1292504.
Penrose, R. (1989). The emperor’s new mind. Oxford: Oxford University Press.
Polanyi, M. (1967). The tacit dimension. New York: Doubleday.
Popper, K. R. (1963). Conjectures and refutations: The growth of scientific knowledge. London: Routledge.
Popper, K. R. (1999). All life is problem solving. London: Routledge.
Rayside, D., & Campbell, G. T. (2000). An Aristotelian understanding of object-oriented programming. 15th ACM SIGPLAN Conference on OOP Systems, Languages and Applications (pp. 337–353). doi:http://doi.acm.org/10.1145/353171.353194.
Roscoe, A. W. (1997). Theory and practice of concurrency. London/New York: Prentice-Hall.
Roscoe, B. (=A.W.) (Ed.). (2005). Communicating sequential processes—The first 25 years. Lecture notes in computer science (Vol. 3525). Heidelberg: Springer-Verlag.
Sachsse, H. (1994a). Technik. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 358–361). München: DTV Wissenschaft.
Sachsse, H. (1994b). Technologie. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 361–365). München: DTV Wissenschaft.
Schnädelbach, H. (1994). Positivismus. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 267–269). München: DTV Wissenschaft.
Schwaber, K. (2001). The agile alliance revolution. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Seiffert, H. (1994). Die Theorie Thomas S Kuhns. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 411–412). München: DTV Wissenschaft.
Shaw, M. (1996). Three patterns that help [to] explain the development of software engineering. In A. Brennecke & R. Keil-Slawik (Eds.), Position Papers for Dagstuhl-Seminar 9635 on the History of Software Engineering. Schloß Dagstuhl, Germany, August 1996 (pp. 52–56). Retrieved November 2007 from http://www.dagstuhl.de/en/program/calendar/semhp/?semnr=199635.
Simon-Schaefer, R. (1994). Kritische Theorie. In H. Seiffert & G. Radnitzky (Eds.), Handlexikon zur Wissenschaftstheorie (2nd ed., pp. 172–177). München: DTV Wissenschaft.
Smith, R. P. (1997). The historical roots of concurrent engineering fundamentals. IEEE Transactions on Engineering Management, 44(1), 67–78.
Snelting, G. (1997). Paul Feyerabend und die Softwaretechnologie. Softwaretechnik-Trends, 17(3) (Bonn: Gesellschaft für Informatik). Reprinted in Informatik Spektrum, 21(5), 273–276, 1998. Retrieved November 2007 from http://pi.informatik.uni-siegen.de/stt/17_3/17_3_LB_snelting.ps.
Snelting, G. (1998). Paul feyerabend and software technology (English Translation of Snelting 1997). Software Tools for Technology Transfer, 2(1), 1–5. doi:10.1007/s100090050013.
Sommerville, I. (2007). Software engineering (8th ed.). London: Addison-Wesley Publ.
Tichy, W. (2007). Empirical methods in software engineering research. Invited Lecture to the 4th IFIP WG 2.4 Summer School on Software Technology and Engineering, March 2007, Gordon’s Bay, South-Africa.
Vangheluwe, H. (2008). Foundations of modelling and simulation of complex systems. Invited Lecture to the 7th GT-VMT International Workshop on Graph Transformation and Visual Modeling Techniques at ETAPS’08, March 2008, Budapest, Hungary.
Wernick, P., & Hall, T. (2004). Can Thomas Kuhn’s paradigms help us [to] understand software engineering? European Journal of Information Systems, 13, 235–243.
Yourdon, E. (2001a). Paradigm shifts. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Yourdon, E. (2001b). The XP paradigm shift. Cutter Consortium. Retrieved November 2007 from https://cutter.com/cgi-bin/catalog/store.cgi.
Acknowledgments
Thanks to our colleagues Morkel Theunissen and Markus Roggenbach for inspiring discussions about ‘Software Engineering versus Software Science’. Thanks to our colleague Tim Grant for directing our attention to Smith (1997). Elaine Byrne is acknowledged for providing a copy of Lyytinen and Klein (1985), and Judith Bishop for a copy of Bishop (1991). Many thanks also to Gert König, Helmut Pulte and Lutz Geldsetzer, editors, as well as the anonymous reviewers of this journal for their helpful remarks and comments on various draft versions of the manuscript; their hints have been taken into account for this published version of our essay. Moreover we would like to thank the editors for sending us a copy of Arageorgis and Baltas (1989). Last but not least thanks to Marlene Fischer at the editorial office for friendly communications and efficient handling of the manuscripts.
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Northover, M., Kourie, D.G., Boake, A. et al. Towards a Philosophy of Software Development: 40 Years after the Birth of Software Engineering. J Gen Philos Sci 39, 85–113 (2008). https://doi.org/10.1007/s10838-008-9068-7
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10838-008-9068-7