Purpose-First Programming
computinged.wordpress.com
computinged.wordpress.com
This URL's author says the paper's author "invented purpose-first programming," but I think it's proper to clarify that the paper's author has demonstrated positive results from a different ("new"?) learning approach, and then named it "purpose-first programming."
I would argue that "we" already value purpose-first programming - we're concerned with what the software does moreso than the syntax required to make it happen. But academia, anecdotally, doesn't usually value purpose-first programming.
This book is almost 20 years old. It derives from earlier works such as SICP. The concept of writing a purpose statement before you write any code is not a new idea at all. But it seems to be a very good idea. If you can’t write one sentence describing what problem your function solves then you’re probably not ready to start writing it.
For example, I'm an adult-ADHD developer in my 30's and really good at my work. I started programming, by just doing fun things and it's only been after few years as a developer, that I've become interested learning more about CS-theory. It's hard to be interested in such topics unless you have insight on why such things matter.
I have my own reservations about her method, but that does not mean her work is trivial.
"Purpose-first programming" makes as much sense as "literate programming".
This sounds really similar to constructionist learning ideas that Seymour Papert espoused. Remember Logo? That's Seymour Papert. His paper "What's the big idea? Toward a pedagogy of idea power" is a good place to start that straddles the line between concrete and conceptual. Paper link: http://worrydream.com/refs/Papert%20-%20Whats%20the%20Big%20...
Look forward to seeing what Katie comes up with!
But this is not a new invention. There are efforts to make it an engineering approach, see e.g. https://en.wikipedia.org/wiki/Intentional_programming
Joke aside, building something for a purpose is a great way to learn, ie. just look to gamer/mod culture and self-taught techies.
OTOH, building stuff/knowledge without purpose leads too often to a blind alley, or a hopeful pivot.
I often start programming by "drawing" sequence diagrams, by typing up PlantUML descriptions (https://plantuml.com/sequence-diagram). This is especially useful, if the purpose of the program is to communicate with many other programs.
A sequence diagram allows to establish a language around the purpose of the program. Having it described textually allows extremely cheap (within minutes) iteration on names, algorithms and the architecture.
Showing all these aspects concisely at once makes it possible to develop a consistent, yet concise naming scheme, which can greatly reduce misunderstandings.
You can discover disconnects of interactions, the data flow or ordering errors by simply following the arrows with your finger/pointer and reading it out loud.
The other tool I found extremely useful is the C4 Lightweight Software Architecture Description Method (which can also be "drawn" pretty well with PlantUML: https://crashedmind.github.io/PlantUMLHitchhikersGuide/C4/C4... )