This seems to be a bold claim. Let me explain… There are two reasons why I think most introductory programming classes fail ant that is a) because they never actually teach prorgramming (i.e. “algorithmic thinking”, not the syntax of one concrete language / “your first language”)) and b) because they bombard students with tons of complicated subjects which are not necessary at the beginning, so nobody remembers or understands them anyway. But they confuse the students and distract them from what they really should learn like how to interact with the machine and basic flow control. Use a visual language (like Scratch for PC or Catrobat for mobile devices) and thank me later.
When we want to learn or teach how to program, we first need to define what programming is. Like in a human language, knowing the words and the grammar is not enough – knowing a language means “knowing how to communicate using that language”. For programming languages, this means what we might call “algorithmic thinking”.
Sadly, in most beginner’s programming classes, this is not taught. And this is also why in many classes on learning how to program, only those students succeed who already kind of knew how to program beforehand. Why is that, you ask? Because those classes that have failed their students have never actually taught programming. The class listed some of the “vocabulary” of an example programming language. It maybe explained about data types, gave you information you didn’t know what to do with and forgot almost instantly.
You were fed all sorts of facts of “knowledge” but never got around “operationalizing” them.
John Sonmez thinks the same way when it comes to learning a new programming language when you already know how to program. Most people ( = learners) and, sadly, also most teachers, don’t get that in order to really teach programming, they would have to teach algorithmic thinking on the example of one programming language. Not “show around” the programming language and wonder why nobody had learned anything.
Why you don’t need to learn about data types just yet and should start with a visual language
This is also why I would recommand a visual language to start out, like I explained in the [cheatsheet post](LINK) of this blog’s “learning effectively” series. Even more than high-level programming languages, visual languages allow you to ignore the low-level stuff for the beginning. (Data types being a high-level “symptom” of what I have just called “low-level stuff”. – Don’t kill me please.)
You can say whatever you want, but at this early stage you just don’t need to know about these concepts. Not when you’re barely starting out and have never programmed before. These concepts scare people away. These concepts make things complicated when they need not (yet) be.
If you want to learn effectively (this is valid for any kind of learning), you need to focus on one thing at a time. When starting out on your programming journey, learn algorithmic thinking first.
Programming essentially is “problem solving using a computer”
So a class on starting programming should not teach “the vocabulary” of a language (not the grammer either). It should focus on giving you strategies for digital problem solving which is more or less the same thing as effectively communicating with the machine (if we want to use the human-language analogy). In learning a human language you would never expect to master the language just by learning some vocabulary and grammar by heart. You know that you have to be able to use it first. That means, you need to find out how to communicate effectively in that language.
Also we shouldn’t fall victim to the fallacy that starting to learn programming is synonymous to learning your first programming language. You could theoretically learn algorithmic thinking in pseudo-code without ever seeing a concrete example (which is not anything I would advise, however).
So when you teach an introductory class to programming (to people who might never have programmed before), maybe think of me and keep this in mind.
I myself have fallen victim to this and endured many boring and ineffective “start programming” classes. If you want to start programming, would like to follow my advice but don’t know how to start, I suggest my [post on how to find a “starting out” project](LINK).
Buy me coffee!
If my content has helped you, donate 3€ to buy me coffee. Thanks a lot, I appreciate it!