Introduction
What is “Problem Driven Learning”?
In my experience often the best way to continue learning a field after one already gained a basic understanding is to dive into a specific problem in the field. By problem I don’t mean textbook style exercises. The exercise problems tend to be narrowly tailored to explain a point or simply provide the student with more chances to get familiar with a technique. These are good and necessary but one could easily lose sight amongst the vast range of directions one could take.
I am looking for problems that go into depth, that cut through thick layers of concepts and guide me to a deeper understanding of a subject. These may be real world problems that I actually have to solve or they may be mathematical problems of some depth or important theorems that are not easily understood. For example setting up this site posed a good problem. I used a software package called Hakyll written in the Haskell programming language. I am an expert of neither. So when I tried to set up the tags I had to modify the software in a way that there is no ready recipe off the Internet to copy from. I had to read documents and source code and experiment to understand how the software is structured and how it can be modified. If I had no understanding of Haskell and its tool chain or concepts like HTML templating I would not likely be able to get off the ground at all. But if I wait until I am an expert (if ever!) to begin I may never get anything done. The actual modifications were minor but by focusing on a solvable problem and solving it I learned things that I could never learn from canned tutorials. I believe this is a common experience among skilled programmers and the same approach can be used to gain real knowledge in other domains.
Textbooks tend to be written in a breadth first fashion, both for instructing novices and for ease of reference later. Software documents and source code are similar. Wikipedia has good coverage of mathematics, but its articles are written for easy reference rather than insights. It is not that one can’t go deep, it is more that there are overwhelming choices on which way to go. Guided by an interesting problem of suitable depth, on the other hand, one can focus and zoom in, ignore the parts that are not relevant to gain both speed and insights, insights that let one see the coherent structures behind these intellectual pursuits.
A problem driven approach is by necessity ad hoc in its choice of problems, even if there may be coherence in one’s overall interests. It is personal so even if it works great it can not be widely adopted or easily shared. What is fascinating to me and drives my learning of a subject may very well be boring to someone else.
This is not a blog!
Not being a blog means that the content here will not be concerned with most fleeting issues. Much will be on timeless subjects such as mathematics or physics. But I won’t say all since if I write about programming that involves certain specific software the topic will not likely be eternally relevant (at least I hope not!). Still even on these less celestial issues I will still strive to only focus on things that will be meaningful for some while.
Not being a blog also means that I may often come back and update a particular item with newer and hopefully better understandings in addition to fixing those inevitable errors. The whole site is version controlled in Git and hosted on Github so if there is any remote chance that an older version is needed it will always be there for anyone so inclined.
The software I used to build this site is a blog engine and sorts entries by dates. I have hijacked the date system to put articles in the order I like. The dates are of internal interests only and are not displayed. Instead I expect that it is much more fruitful to navigate by tags.
Written with StackEdit.