Skip to main content

Simplicity and Complexity in Programs and Systems

  • Chapter
Conquering Complexity
  • 827 Accesses

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 129.00
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 169.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 169.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

References

  1. Conway, M.E.: Design of a separable transition-diagram compiler. Commun. ACM 6(7), 396–408 (1963)

    Article  MATH  Google Scholar 

  2. 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)

    Google Scholar 

  3. Descartes, R.: Discourse on the Method of Rightly Conducting the Reason, and Seeking Truth in the Sciences (1637)

    Google Scholar 

  4. 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)

    Article  MathSciNet  Google Scholar 

  5. Jackson, M.: Problem Frames: Analysing and Structuring Software Development Problems. Addison-Wesley, Reading (2001)

    Google Scholar 

  6. 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)

    Google Scholar 

  7. Jones, C.B.: The early search for tractable ways of reasoning about programs. IEEE Ann. Hist. Comput. 25(2), 26–49 (2003)

    Article  MathSciNet  Google Scholar 

  8. Leibniz, G.W.: Philosophical Writings (Die Philosophischen Schriften) vol. VI (1857–1890). Edited by C.I. Gerhardt

    Google Scholar 

  9. Morris, F.L., Jones, C.B.: An early program proof by Alan Turing. IEEE Ann. Hist. Comput. 6(2), 139–143 (1984)

    Article  MATH  MathSciNet  Google Scholar 

  10. Palmer, P.F.: Structured programming techniques in interrupt-driven routines. ICL Tech. J. 1(3), 247–264 (1979)

    Google Scholar 

  11. Plato: Phaedrus. Oxford University Press, Oxford (2002). Translated by Robin Waterfield

    Google Scholar 

  12. Polanyi, M.: Personal Knowledge: Towards a Post-critical Philosophy. Routledge and Kegan Paul, London (1958), and University of Chicago Press, 1974

    Google Scholar 

  13. Polanyi, M.: The Tacit Dimension. University of Chicago Press, Chicago (1966); republished with foreword by Amartya Sen, 2009

    Google Scholar 

  14. 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)

    MATH  Google Scholar 

  15. Swartout, W., Balzer, R.: On the inevitable intertwining of specification and implementation. Commun. ACM 25(7), 438–440 (1982)

    Article  Google Scholar 

  16. 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]

    Google Scholar 

  17. Winograd, T.: Beyond programming languages. Commun. ACM 22(7), 391–401 (1979)

    Article  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Michael Jackson .

Editor information

Editors and Affiliations

Rights and permissions

Reprints 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)

Publish with us

Policies and ethics