We have spent decades trying to teach people to program. We have tried many things from the different approaches to teaching the syntax of languages, to different, “easier” languages. It’s nonsensical to think any of it has actually worked well. The literature on teaching programming is vast and deep, and yet we are still in this quagmire. But why is this the case? it could be partially because we are too quick to jump into languages and their syntax. Are we not spending enough time teaching people about problem solving, or exploring data? Probably not. Problem solving is the crux of most algorithms. If a problem can’t be properly expressed as an algorithm it can never be implemented in any way.
Simple examples include data many people are familiar with – digital photos, taken with a mobile device. Photos are easy to take, and the data is simple enough to explore and manipulate. The exploration of data is easily achieved at the higher level by using some simple apps such as Snapseed to modify the photographs. The discussion can then morph into looking at how Snapseed modifies the “LOOKS” of an image. How do filters work? This can be used to motivate a discussion on how an algorithm can be built.
We spend far too little time teaching the things that really matter. Languages are by themselves mere tools, and only exist for the sake of coding algorithms. People can become good coders, but not true programmers because they never have a hand in developing the algorithms involved. It is akin to a HTML coder. Sure, they can code HTML, and CSS to build a website, but they may have little knowledge is the aspects of design required to build a usable, aesthetically pleasing website. The best way to teach programming is to solve problems, construct algorithms, and introduce language constructs along the way.