Problem solving is an integral part of the computer science experience, without it, the craft of computing boils down to simple programming. There is no need for programming if the quintessential underpinnings of a the solution to a problem do not exist. There are of course many problems in computer science that are still open problems – why? Because nobody has solved the problems underpinning them. Some problems seem simple but are in reality quite challenging, and image processing is a good example. Take the simple task of cleaning up a picture from an old manuscript that has been digitized. Figure 1 shows an example of a piece of a typewritten note, where the paper shows the marks of age.

How does one go about producing a clean, crisp version of the image where the text can be easily extracted? What steps are involved? Will the solution be one focused on the specifics of the particular image, or a more generic solution? There are many differing scenarios, and approaches which could be considered. Some students will read the literature, and take the tried and true approach to cleaning up image. Others will throw their lot in with some AI-based scheme (i.e. black magic). Many students forget that to understand how to solve the problem first requires an understanding of the actual data involved – an aged piece of paper with typewritten text, where the paper has been damaged by a liquid of some sort, making the paper discoloured in spots.
There was a time when computer science focused more on problem solving skills, even if in an implicit manner. Students were given a problem and derived a solution. The internet arrived and vast vestiges of information became available, and problem solving skills began to disappear. It is easier to try and find a solution on the internet than actually look at the problem and attempt to solve it. I do sympathize with this approach, as the internet is full of readily available information – whether it is information or disinformation is debatable. When I was a student, and there was no Web (there was an internet, but information was hard to find) you were forced to derive a solution to a problem, of seek solace in the computing section of the library.
It is however not the student’s fault. We have failed in teaching any form of real-world problem solving skills. We assume that they learn these things in secondary school, but this is hardly the case. We provide few if any courses dedicated to real-world problem solving. All students in all programs at university should take a real-world problem solving course, even if it is under the guise of a more fanciful “critical thinking“.
The sort of course I am thinking of would involve elements of individual and group-based problem solving, using real-world problems that are both tactile, and theoretical in nature. Math problems are all good-and-well, but their solutions are often pretty well defined, whereas problems from other realms can be messier – and messy is good. There are many hands-on activities that can be used to engender problem solving skills. These problems help students to:
- Discover and explore problems and solutions
- Learn new concepts in thinking
- Become more creative / innovative
- Become more open-minded and learn how to avoid mental blocks
- Use intuition and common sense in problem solving
- Exercise the “more than one solution” approach
Skills that were once developed because a problem could be approached using very little information now incorporate a vast amount of both information and disinformation. Information can be overwhelming and actually hinder the thought process. For some tasks it is of course challenging to think of new ways to solve a problem. If a task involved “develop a new algorithm for sorting a series of integers. You may not use any existing algorithms. It must be completely new.” This would be challenging because the algorithms that exist have not really been augmented by new algorithms.
As for cleaning up the deteriorated image? The solution is quite simple, but it requires some experimentation. Firstly, the colour image is problematic because of, well the complexities of colour. So one approach is to convert the image to grayscale, reducing the problem space (Fig.2A). Next the background can be modelled using something like a polynomial, to create an image which represents everything but the text (Fig.2B). Finally this background is subtracted from the grayscale image (Fig.2C). The image can then be binarized (separated into text and background) using a thresholding algorithm (Fig.2D).




There are of course other approaches to the problem, some of which might be even better. The goal here is to explore a problem, and come up with solutions – good or bad. The future lies in solving problems, and we need to create an educational environment where we promote the idea, rather than allow it to be overrun by a cacophony of nonsense.