Abstract
The subject of this chapter is behavioral complexity in software development. Complexity is difficulty of human comprehension, whether in analysis or synthesis. Complexity can be regarded as the combination of potentially conflicting simplicities. Reliable development therefore depends on an adequate understanding of both decomposition and combination. The discussion proceeds from complexity in small programs to selected aspects of complexity in realistic computer-based systems. In both settings criteria of simplicity and modes of combination are identified. At the end some general propositions about the understanding and treatment of complexity in software development are recapitulated, followed by a brief final remark on the relationship between understanding and formalism.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
References
Conway, M.E.: Design of a separable transition-diagram compiler. Commun. ACM 6(7), 396–408 (1963)
Dahl, O.-J., Hoare, C.A.R.: Chapter III: Hierarchical program structures. In: Dahl, O.J., Dijkstra, E.W., Hoare, C.A.R. (eds.) Structured Programming, pp. 175–220. Academic Press, San Diego (1972)
Descartes, R.: Discourse on the Method of Rightly Conducting the Reason, and Seeking Truth in the Sciences (1637)
Dijkstra, E.W.: A case against the GO TO statement; EWD215, published as a letter (Go To statement considered harmful) to the editor. Commun. ACM 11(3), 147–148 (1968)
Jackson, M.: Problem Frames: Analysing and Structuring Software Development Problems. Addison-Wesley, Reading (2001)
Jackson, M.A.: Constructive methods of program design. In: Goos, G., Hartmanis, J. (eds.) 1st Conference of the European Cooperation in Informatics, pp. 236–262. Springer, Berlin (1976)
Jones, C.B.: The early search for tractable ways of reasoning about programs. IEEE Ann. Hist. Comput. 25(2), 26–49 (2003)
Leibniz, G.W.: Philosophical Writings (Die Philosophischen Schriften) vol. VI (1857–1890). Edited by C.I. Gerhardt
Morris, F.L., Jones, C.B.: An early program proof by Alan Turing. IEEE Ann. Hist. Comput. 6(2), 139–143 (1984)
Palmer, P.F.: Structured programming techniques in interrupt-driven routines. ICL Tech. J. 1(3), 247–264 (1979)
Plato: Phaedrus. Oxford University Press, Oxford (2002). Translated by Robin Waterfield
Polanyi, M.: Personal Knowledge: Towards a Post-critical Philosophy. Routledge and Kegan Paul, London (1958), and University of Chicago Press, 1974
Polanyi, M.: The Tacit Dimension. University of Chicago Press, Chicago (1966); republished with foreword by Amartya Sen, 2009
Reiff-Marganiec, S., Ryan, M. (eds.): Feature Interactions in Telecommunications and Software Systems, ICFI’05, 28–30 June 2005, Leicester, UK, vol. VIII. IOS Press, Amsterdam (2005)
Swartout, W., Balzer, R.: On the inevitable intertwining of specification and implementation. Commun. ACM 25(7), 438–440 (1982)
Turing, A.M.: Checking a large routine. Report of a Conference on High Speed Automatic Calculating Machines, 67–69 (1949). Also discussed in Refs. [7, 9]
Winograd, T.: Beyond programming languages. Commun. ACM 22(7), 391–401 (1979)
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2012 Springer-Verlag London Limited
About this chapter
Cite this chapter
Jackson, M. (2012). Simplicity and Complexity in Programs and Systems. In: Hinchey, M., Coyle, L. (eds) Conquering Complexity. Springer, London. https://doi.org/10.1007/978-1-4471-2297-5_2
Download citation
DOI: https://doi.org/10.1007/978-1-4471-2297-5_2
Publisher Name: Springer, London
Print ISBN: 978-1-4471-2296-8
Online ISBN: 978-1-4471-2297-5
eBook Packages: Computer ScienceComputer Science (R0)