Introduction

< Back

 > Next

 

     Much of the research for this document has encompassed the use of tradition print based media (books), material obtained thru cyberspace (World Wide Web), and the authors own twenty five years of software development experience.  Some of the tools I have used to gather and disseminate this information are listed in the Appendix along with a brief description.

 

     This research used print based media and the World Wide Web (Internet) to obtain information pertinent to this report.  A number of sources were used to gain information applicable to problem solving, Extreme Programming, patterns, refactoring, object-oriented programming, structure programming, RAD, and traditional structured development.

   The premier site for extreme programming would be the Extreme Programming organization site.  Wells has done an excellent job of creating an informative, easy to navigate, site at www.extemeprogramming.org.  It contains not only a brief overview of extreme programming but also provides added details of each stage or phase in XP along with real-world examples of its application.  For the more detailed oriented, you should be satisfied with the many links to other XP sites for more complete coverage of individual XP topics.  A closely related source to the main XP organization site is http://c2.com/cgi/wiki.  This source contains a very wide variety of XP definitions, examples, descriptions etc.  The site itself has been built by what you might call FAQ "posters".  It has the unique attribute that its content has been generated by dozens, if not thousands of users, allows users to respond to and edit posting, and contains a wealth of informational particular to XP and its application to software development.  I have also used this site to obtain information on design patterns and refactoring.

 

    A key player and author in the UML, design patterns, and refactoring worlds is Martin Fowler.  Some consider Martin to be a Guru in the field of design patterns, refactoring, and UML, ( responsible for a number of publications).  In particular I make use of his article, The New Methodology, which talks about the trends towards agile development and the various “new” methodologies supporting it, the people oriented approach and the collaborative development focus.

 

     For a different perspective on problem solving, I have made use of material from Arden Bercovitz.  Arden is an  an Einstein look-alike and spends much of his time speaking on creative problem solving.  Specifically, I rather like his article on Problem Solve Like Einstein which gives us an Einstein like perspective on problem solving. Another useful site has been the Rio Salado College, information focused on problem based learning, but containing a good outline of a problem solving process.

 

To provide a solid base in UML, design patterns, software engineering I include some key sources,   such as Martin Fowlers’ well known, UML Distilled.  This is an excellent, easy to read introductory book to the Unified Modeling Language syntax.  A Rob Pooley and Perdita Stevens book on software engineering with a focus on object and component technology.  This book provides an excellent introduction to traditional development problems and how to apply object-oriented concepts in conjunction with the Unified Modeling Language.  Another good introductory book to UML and design patterns in Carig Larman’s book Applying UML and Patterns, An Introduction to Object-Oriented Analysis and DesignLastly, one of my more recent acquisitions, Alur, Crupi and Malks Core J2EE Patterns, Best Practices and Design.  This is a very well written practical guide to using and applying enterprise level patterns in the J2EE environment.  Its’ concepts and application go well beyond the J2EE environment to enterprise systems in general, rules and templates for creating patterns, and code refactoring.

 

Background

 

     Problem solving has been a subject of study for decades.  To set common ground we require a definition of problem solving.  A typical definition we might find in the software field would be

 

"Problem solving is the process of breaking problems down into smaller and more manageable parts. As the large problem is broken down into smaller parts, each part becomes more specific. These individual solutions to smaller problems are then combined to solve the bigger problem. Problem solving is also referred to as analyzing the problem to be solved." (11).

 

     This definition highlights that problem solving is a process.  This is further supported by Fed Nickols, an active consultant to small business “… They believe it doesn’t make much difference which problem solving approach people are trained to use as long as it is systematic.” (10).  Most problem solving activities involve following some form of systematic process. A typical problem solving process would consist of a number of steps (13):

 

Step 1: Identify the problem
Step 2: Select a strategy to solve the problem
Step 3: Apply the selected strategy
Step 4: Evaluate the result
Step 5: Present the final solution

 

     Most experts will also agree that problems are best solved with visualization (draw a picture), use the appropriate tools, “Tools form the bridge between work and working; they link the performer to the task“ (4), and avoid re-inventing the wheel.  In most cases, we look to analyzing the genius for clues on how to solve problems.  Albert Einstein was one such individual with a very different view on solving problems.  He believed that "Problems cannot be solved at the same level of consciousness that created them."  His approach to solving problems was to broaden his way of thinking in such a manner as to view a problem from a completely different perspective with an open mind.  Redefine the original ideas and continually consider alternates.  Based on Einstein’s approach, here are a number of problem solving guidelines developed by Arden Bercovitz Ph.D., a well known consultant specializing in promoting and teaching innovative and creative thinking  (2):

 

· Nurture your ability to see and consider alternatives, even contradictory or impossible ideas

· Develop an awareness about being too attached to your own ideas

· Suspect “the ONE right Answer”

· Base your decision on the best choice between several right answers.

· Consciously look for alternatives.

 

    In summarizing our problem solving attributes we can identify the following key components and guidelines:

 

     These form the criteria we will look for in the various development methodologies under scrutiny.

 

 

home

< Back

 > Next


Last updated December 6, 2002 by R. Dyer

(c) Copyright  2002,2003 R. Dyer, All Rights Reserved