Abstract
One way to look at software problems is with a model that divides the problems into two different layers:
-
“Wicked” problems fall in the upper layer. These are problems that typically come from domains outside of computer science (e.g. biology, business, meteorology, sociology, political science, etc.). These types of problems tend to be open-ended, ill-defined, and large in the sense that they require much work. For example, pretty much any kind of a web commerce application is a wicked problem. Horst W. J. Rittel and Melvin M. Webber, in a 1973 paper on social policy,1 gave a definition for and a set of characteristics used to recognize a wicked problem that we’ll look at later in this chapter.
-
“Tame” problems fall in the lower layer. These problems tend to cut across other problem domains; they tend to be more well defined and small. Sorting and searching are great examples of tame problems. Small and well-defined don’t mean “easy” however. Tame problems can be very complicated and difficult to solve. It’s just that they are clearly defined and you know when you have a solution. These are the kinds of problems that provide computer scientists with foundations in terms of data structures and algorithms for the wicked problems we solve from other problem domains.
There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. — C. A. R. Hoare
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
Conklin, J. Dialogue Mapping: Building Shared Understanding of Wicked Problems. (New York, NY: John Wiley & Sons, 2005.)
Conklin, J. Wicked Problems and Social Complexity. Retrieved from http://cognexus.org/wpf/wickedproblems.pdf on 8 September 2009. Paper last updated October, 2008.
Curtis, B., R. Guindon, et al. Empirical Studies of the Design Process: Papers for the Second Workshop on Empirical Studies of Programmers. Austin, TX, MCC. (1987)
Davis, A. M. 201 Principles of Software Development. (New York, NY: McGraw-Hill, 1995).
DeGrace, P. and L. H. Stahl Wicked Problems, Righteous Solutions: A Catalogue of Modern Software Engineering Paradigms. (Englewood Cliffs, NJ: Yourdon Press, 1990.)
Dijkstra, E. “The Humble Programmer.” CACM 15(10): 859–866. (1972)
Fairley, R. E. Software Engineering Concepts. (New York, NY: McGraw-Hill, 1985.)
Glass, R. L. Software Creativity 2.0. Atlanta, GA, developer.*. (2006)
Lammers, S. Programmers At Work. (Redmond, WA: Microsoft Press, 1986.)
McConnell, S. Code Complete 2. (Redmond, WA: Microsoft Press, 2004.)
Parnas, D. “On the Criteria to be Used in Decomposing Systems into Modules.” CACM 15(12): 1053–1058. (1972)
Plauger, P. J. Programming on Purpose: Essays on Software Design. Englewood Cliffs, NJ: PTR Prentice Hall, (1993.)
Rittel, H. W. J. and M. M. Webber. “Dilemmas in a General Theory of Planning.” Policy Sciences 4(2): 155–169. (1973)
Rights and permissions
Copyright information
© 2011 John Dooley
About this chapter
Cite this chapter
Dooley, J. (2011). Design Principles. In: Software Development and Professional Practice. Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4302-3802-7_6
Download citation
DOI: https://doi.org/10.1007/978-1-4302-3802-7_6
Publisher Name: Apress, Berkeley, CA
Print ISBN: 978-1-4302-3801-0
Online ISBN: 978-1-4302-3802-7
eBook Packages: Professional and Applied ComputingApress Access BooksProfessional and Applied Computing (R0)