Computer programming is one of my most precise endeavors. Contrary to the popular belief, programming is not an art that can be acquired easily by mere mortals like me. I believe firmly that, it will take years of practice from my side to write good programs.
The primary difficulty I have with programming, is not so much as writing code, but coming up with steps to solve a problem. I find that during such problem solving sessions, I concentrate so much on “trying” to solve it, that I completely ignore to reflect upon “what am I trying” to do.
In all the problems that I have attempted to solve and failed, I have found one very common thing. The basic approach I would take to solve the problem in 7 out of ten cases was correct. But upon proceeding further, I loose track of the goal and end up not solving the problem at all. In 2 out of ten cases, the basic approach to solve the problem is so obviously wrong that I could have went back to the correct path by just realizing the fact. In the rest, 1 out ten cases, I was unable to even comprehend the problem.
I’m currently exploring a way to address this issue. I intend to do so, by observing how the authors of good books try to explain a concept. I find that explaining a concept needs a lot of articulation, that can be applied to problem solving. I have observed, that the primary technique they use is a “basis”. Basis is a set of very simple concepts that can be used to explain a complex concept. Then they provide examples for any abstract concept or rule. Then they explore the characteristics of the concept under question in relation to the basis, This set of basis, example, comparison with basis is what I would like to call a “bounded context”.
The creation of bounded context is a difficult but stimulating process. When the author presents something in a book, he/she has develops a bounded context. It is highly probable that the author had a good understanding of the subject under study. This means that the author already knows the set of basics needed to describe the concept. But when you are trying to understand a concept, it is not always clear what are the set of principles needed to describe the concept.
Currently these are the problems that I’m trying to address. But it is my firm belief that creation of bounded context is a very essential skill for problem solving. Bounded context allows us to represent what is unknown in terms of what is known. This greatly reduces the amount of information that need to be processed when trying to reason out with the new concept. This aides understanding which is very essential for problem solving, which in turn is essential for programming. After all, as Stroustrup points out, “Programming is understanding”.
Quote for the day
“Complexity is an essential property of a software system. We can but only master it” – Grady Booch