Why am I thinking of my economics degree… “let us assume”?!?! the truth of any problem solving is we need to assume or abstract or simplify away as much complexity as possible. Then testing lets us know if we got rid of something that can’t be cut from the problem/solution considerations.
Personally, I find it a lot easier to start from a very simplified version (of reality) then add back versus starting with the complex then cutting. One of the greatest shortcomings I see is the tendency for people to get needlessly lost in complexity.
trivial typo: "we didn't care for the width of the roads" care about.
It could be criticized that you already knew Dijkstra's algorithm so you bent your example to fit it, but I don't see how you can avoid that situation when teaching. Indeed a lot of programming is about having a personal toolbox of solutions and finding one that fits, but that's shoe-horning not abstraction.
The paragraph about travel time perhaps should mention one-way streets?
And perhaps it needs to be followed by a section introducing connectivity/network before you jump to algorithm.
The algorithm para is very short and sudden and anticlimactic. You seemed to be building to something then you just stop and say "we're done".
Thanks! Those are very good recommendations. I didn't intend to make this a technical article so I didn't want to go into how Dijkstra works or anything too technical. It was merely an illustrative example of how to turn a real-life problem into something manageable. Although I do agree perhaps a bit more could be said on the how, to really hammer the point that abstraction makes problems tractable. I'll definitely revisit this topic in the future.
Reading a text is abstractive thinking as well. If we see a written text as a problem to be solved, the process you describe works almost like the example problem of finding the best way to get from home to work where “best” depends on the goal. If a deep, durable understanding is the goal, the drive from text to mental model of meaning needs some rest stops and coffee shops where readers meet and talk. We de”code” the text so we can re”code” it. Great post, Alejandro.
Abstraction and the use of symbols are just so fundamental to human progress, it's really hard even to overstate. I've thought a lot about how the first symbols might have arisen, ultimately leading to math and language, and it's just the most fascinating place for my mind to roam.
I wrote code in the 80’s. In the 80’s we had a saying we used regularly: reduce it to a known problem.
Exactly. Or to a set of known sub-problems :)
Why am I thinking of my economics degree… “let us assume”?!?! the truth of any problem solving is we need to assume or abstract or simplify away as much complexity as possible. Then testing lets us know if we got rid of something that can’t be cut from the problem/solution considerations.
Personally, I find it a lot easier to start from a very simplified version (of reality) then add back versus starting with the complex then cutting. One of the greatest shortcomings I see is the tendency for people to get needlessly lost in complexity.
I hadn't really thought about this but Systems Thinking is fundamentally Abstraction which explains why it's hard for people to get. Great post!
feedback:
trivial typo: "we didn't care for the width of the roads" care about.
It could be criticized that you already knew Dijkstra's algorithm so you bent your example to fit it, but I don't see how you can avoid that situation when teaching. Indeed a lot of programming is about having a personal toolbox of solutions and finding one that fits, but that's shoe-horning not abstraction.
The paragraph about travel time perhaps should mention one-way streets?
And perhaps it needs to be followed by a section introducing connectivity/network before you jump to algorithm.
The algorithm para is very short and sudden and anticlimactic. You seemed to be building to something then you just stop and say "we're done".
Thanks! Those are very good recommendations. I didn't intend to make this a technical article so I didn't want to go into how Dijkstra works or anything too technical. It was merely an illustrative example of how to turn a real-life problem into something manageable. Although I do agree perhaps a bit more could be said on the how, to really hammer the point that abstraction makes problems tractable. I'll definitely revisit this topic in the future.
Reading a text is abstractive thinking as well. If we see a written text as a problem to be solved, the process you describe works almost like the example problem of finding the best way to get from home to work where “best” depends on the goal. If a deep, durable understanding is the goal, the drive from text to mental model of meaning needs some rest stops and coffee shops where readers meet and talk. We de”code” the text so we can re”code” it. Great post, Alejandro.
Abstraction and the use of symbols are just so fundamental to human progress, it's really hard even to overstate. I've thought a lot about how the first symbols might have arisen, ultimately leading to math and language, and it's just the most fascinating place for my mind to roam.