This article delves into much of the theory of problem solving introduced in the DIC2A course and then expanded on in much greater detail in the OAC. At Banting we use Richard Kitto's book on "Computers and Problem Solving". The readings which I assign 2.2 (Cultural Literacy) deals with the concepts of expert/novice learners and the role of schemata when solving problems, as well as chapter 6+7, which deals with the top-down vs bottom-up/analytic vs synthetic dichotomies. For those of you who have not taught the OAC it may be a good time to read those article. Although I am not one to over analyze something as seemingly simply as problem solving, the article "The Tasks of Programming" makes some interesting observations, and reaffirmed my demand of my students for pre-planning and debugging.
1. Introduction: The process by which a software program results from an initial idea is a complex one. We have all taught our programming students the basic problem solving steps:
Programming problems require the designer to map out a description of what the program is supposed to accomplish and then convert into a list of instructions of how to accomplish these goals in the "programming language domain". The inter-relationship between these phases can be very complex with no clear demarcation. One reason is that programmers rarely complete one tasks before moving on to the next.
2. Understanding the Problem Programming problems require knowledge in another domain, for example an accounting or math problem. In a problem solving environment, programmers are often faced with a critical lack of "domain knowledge", leaving programmers unaware of the complex requirements to enable them to detect incompleteness. Expert programmers can create a mental image with depth, based on past experience, whereas novice programmers will develop a surface model and catagorize simplistically with little or no depth.
3. Program Design Planning is particularly important when large/complex problems are undertaken. Design and knowledge are interconnected occurring at both the general level with an overall structure, and at the detailed level where algorithms are written for specific modules. Planning is usually viewed as being top-down or step-wise refinement and is used when problems are familiar. Opportunistic planning is multidirectional with many levels and programmers skip between levels of detail. It is suggested that this form of planning is used for complex and novel problems which by nature are unbalanced. It is suggested that "good programmers leap intuitively ahead, from stepping stone to stepping stone, following a vision of a final program; and then they solidify, check and construct a proper path" Just as expert programmers may understand the problem by drawing on past experience, they also plan based on known or previously planned problems. This is called "planned knowledge", and novice programmers have very little therefore must start from scratch each time.
4. Coding The coding is intimately interrelated to the planning stage where a planned subtask generates coding with more planning ongoing. Coding is then intertwined with the process of evaluation, where changes are made for accuracy and efficiency as well as style. Expertise and knowledge will come into effect with coding as well. Expert as well as novice programmers will use and modify existing coding models using programming knowledge.
5. Program Maintenance Subtasks Program maintenance can be divided into i) program comprehension and ii)debugging and program modification. A programmer must understand what each statement does as well as the purpose of each group of statements. Both top-down and bottom-up processes are involved by making inferences about the goals of the program (bottom-up), leading to predictions about the program contents (top-down). Programmers must systematically test and modify their program. Debugging can be broken down into the following activities a) understanding the program; b) generating and evaluating hypotheses; c) repairing the problem; and d) testing the system once repaired. Basically the debug process "involves understanding what a program IS doing and compare that to what it is SUPPOSED to do. The diagnosis of the problem requires the programmers to generate a hypothesis about the observed bug and make the appropriate repairs. Programmers who use a systematic rather than 'as-needed' strategy were more successful.
6. Interrelations between programming subtasks As already noted, the tasks of programming are interrelated; design causes understanding; coding uncovers errors in design. . In most cases, programming problems are divided up into groups and the shared knowledge must be passed on with the product in order for the next phase to develop properly. The environment in which these tasks are performed can stimulate or impede communication and understanding as any external documentation is often incomplete. "Software development and the tasks of programming must be viewed above all within this context of high uncertainty and incomplete knowledge."
1. Some have felt that grade 10 are just not ready to problem solve, that is their mental maturity is not at the point to enable them to think abstractly enough to use pen and paper to formulate their ideas. What is your opinion?
2. Do you still make grade 10 and 11 programming students plan? What format do you use?
3. Does Object oriented programming (VB, authority) require the same type of planning?
4. For those of you who have taught or observed an OAC class, how close to the "real world" type problems/environment are we able to achieve in a classroom?
5. Again with the OAC students, do the students work through the stages of problem solving and debugging as in the article or do they still simply "leap intuitively ahead, from stepping stone to stepping stone following a vision of a final program"?
Expert and novice problem solvers approach problem differently based on past knowledge. We have all taught our programming students the basic problem solving steps:
When dealing with problem definition, novice programmers are often faced with a critical lack of "domain knowledge" whereas experts can create a mental image based on past experience. Design and Planning are interconnected at both the general level and at the detailed level where algorithms are written for specific modules. Expert programmers understand the problem by drawing on past experience, but novice programmers have very little therefore must start from scratch each time. Expertise and knowledge will come into effect with coding as well, with both using and modify existing coding models using programming knowledge.
Programmers must systematically test and modify their program. Basically the
debug process "involves understanding what a program IS doing and compare that
to what it is SUPPOSED to do. Design and coding are interrelated. Programming
subtasks design causes understanding; coding uncovers errors in design.
"Software development and the tasks of programming must be viewed above all
within
this context of high uncertainty and incomplete knowledge."
There seemed to be a general consensus that not only is problem solving important in introducing programming but indeed many teachers emphasize this. Expert programmers spend 1 hour of planning for 4 days of programmming, meaning that planning is going on simultaneously to the actual programming.
Most felt that grade 10 were ready to problem solve but with specific guidelines. Some suggestions are that it is important for us to help students begin developing their problem solving skills by having concrete examples to study, digest and them simulate. Deane felt that we need to try to develop the skill at this level to give our students a better idea what is involved in the programming process.
Planning is still seen as an important skill an a variety of methods are
being used. Deane has her students first create a diagram that conceptually
breaks their problem into input, process and output components and then write
psuedocode. Beverley sent in a detailed outline of the format used.
-
BUSINESS PROJECT PROPOSAL (general purpose of program/system)
- PRODUCTION
SCHEDULE (all dates and activities from beginning of project to end)
- FLOW
CHART
- DATA FLOW DIAGRAMS
- PSEUDOCODE
Novice programmers need to plan more because of their lack of "schemata of problem solving methods" or programming domain knowledge. To instill in novice programmers the necessary skills to solve a variety of problems, Mary-Helen felt that the only way to get them to develop the skills is by presenting them with a large number of problems, or perhaps building on the skills as they develop them by presenting an original problem with extra challenges.
Beverley sent in the following:
TO HELP MY GRADE 10 STUDENTS LEARN THE
VALUE OF PLANNING AND THE NECESSARY STEPS IN PROBLEM-SOLVING, I HAVE THEM
PARTICIPATE IN 2 TYPES OF PROJECTS:
1) TYPE ONE - THE STUDENTS ARE TAUGHT
VARIOUS DETAILED PLANNING METHODS AND PROBLEM SOLVING TECHNIQUES. THEY ARE
EXPECTED TO COMPLETE ALL STAGES AND HAND IN ALL OF THEIR WORK FOR
EVALUATION.
2) TYPE TWO - THE STUDENTS ARE EXPECTED TO USE ALL OF THE
METHODOLOGY THEY WERE TAUGHT PREVIOUSLY, HOWEVER THEY ARE NOT EXPECTED TO HAND
IT IN FOR EVALUATION.
THE STUDENTS WORK INDIVIDUALLY, IN PARTNERS AND LARGER TEAMS, ON TYPE ONE AND TWO PROJECTS THROUGHOUT THE YEAR.
Two problem solving related sites:
The first has some interesting problem
questions: http://stork.ukc.ac.uk/computer_science/Html/Courses/PSinGeneral.html
The second is geared to a math/science domain but the ideas fit in well with
computer problems: http://www2.hawaii.edu/suremath/publications.html