your story has definitely caught my interest.
You know, relatively recently I took a programming course for absolute beginners to see how anyone can learn to program and how they are taught, since I had no idea. The teacher was well-prepared, funny, clever, with great style and I loved his lessons.
The course supported my experience of what I’ve seen many times before. Here’s the algorithm to learn algorithm:
- learn it the bad way
- do it the bad way
- be introduced in a good way
- identify the good way as bad because you were taught opposite
- do it the bad way
Why should the “standard” way of teaching be bad or incorrect in any way? The answer is simple, it’s non-intuitive.
The truth is, the algorithm I wrote relates to imperative vs. functional programming, but it’s so closely related problem that it’s easy to generalize.
There’s a key part that’s missing, and it is absolutely essential and so strongly incorporated into our lives that we don’t realize it’s there and that we desperately need it.
We spend a ton of time in school being taught in a certain way. We learn throughout our lives in a certain way. And suddenly, algorithmization/programming lectures break the rules.
That’s non-intuitive because it is out of our experience and we have to build a new one from scratch.
Your algorithm essentials are correct, but incomplete. I’ll show you mine.
- world/domain definition
- steps to change the world
The first point is the crucial part I’ve been talking about the whole time. We desperately need the definition of the world to be able to survive. Since childhood our world is well-defined by our environment, parents and teachers.
Imagine you wake up one day in a foreign country in year 3017. You don’t understand the language, you don’t understand technology, you don’t survive.
On the other hand, Biology class, or Literature class, or Math class have strictly set borders you are expected to think within. Not saying it’s the good part, it’s just the way you got used to.
What happens to your essentials if you provide a strong domain definition?
- Representation is part of the definition
- Granularity is predetermined by the definition
- Accuracy can be stated only within definition
- Efficiency shouldn’t be here; you need a measure, stability, and in a matter of fact, it’s meta-algorithm, very difficult to assess even after decades of experience
- Interpretation can be ambiguous only if allowed by definition
See where I’m heading? If you provide me a definition of world, we suddenly have a common consensus. What’s the algorithm then?
- initial state of the world or its subdomain (input)
- steps to change the world within the definition (algorithm)
- final state of the world or its subdomain (output)
This description seems like a mathematical function, doesn’t it? It also looks like any task in daily life. And this time it may be introduced gently since we are used to it.
Don’t take me wrong, the boundaries have to be crossed and broken. It’s the best what can happen. But algorithm should be a tool that helps doing it, not a buster.
There were many struggling people I’ve seen. First, they learn Java (representation) and are lost in a foreign country in 3017. Then they seek for a “command” that “repairs the plane” (granularity). And do not understand why it “doesn’t work” and computer only complains (accuracy, interpretation). They spend a huge amount of time on learning and re-learning.
After years of this heroic effort, they are put in front of problem that could be solved easily and they fail. Child would solve it, they don’t. There’s a better way but they no longer believe.
The real quest is, can you take what you know and apply the knowledge within the reality and experience of your students? Can you learn to understand the world the way they do (and you did once) and help them to leverage their own understanding?
How about to begin with, “algorithmization is pretty easy, it’s what you do every day, the only part we need is to help you to realize what you do and don’t know you do it?”