After reading Mike Hadlow’s post on his blog titled “Code Rant: Visual Programming - Why it’s a Bad Idea” I feel I need to respond. Mike references block based coding such as the education tool “Scratch” from MIT. He points out three reasons why he thinks block based coding is bad. "1. Textual programming languages obfuscate what is essentially a simple process. 2. Abstraction and decoupling play a small and peripheral part in programming. 3. The tools that have been developed to support programming are unimportant."
What he doesn’t take into account is how we learn to code and think computationally. There is a process of learning how to identify a problem, pull a problem a part, break it down into abstract representational ideas, and build a step by step procedure to solve the problem. These parts can be looked at using a design thinking flow where we continually reconsider what we are doing and if out solution works. As we teach young students how to think computationally it’s helpful to have a system which can give immediate results. Block-based/visual coding is intended for the novice programmer. It’s there to give quick results without concern for syntax. The blocks don’t allow for syntax errors.
I'm guilty of spending hours staring at code and going through debugging steps only to learn I spelled something wrong. When you start with code this sort of bug is enough to made you never want to code again. Perseverance does not happen over night. It's built incrementally. Block-based code allows for quick success of code without the headache.
Coding is very different from math but has similarities in how we grasp the concepts. Teaching coding requires giving the code concept to start. Allowing the student to modify the given code to see what happens. Then tasking the student to create something using the code and any other code or creative tools they can bring in. This iterative education process works best with visual code when there is no concern about syntax errors. The only errors are in how the code is put together.
Do specifically address Mike's points:
2. Abstraction and decoupling play a small and peripheral part in programming.
I firmly disagree with this. When building a realistic game you need to provide gravity. Well, how do you give an accurate representation of gravity? How do you designate where the floor is? How high can your character jump? These are abstract concepts which can be represented by an algorithm. Students can't figure it out unless they explore the abstraction of gravity. Yes things get complex but part of coding is creating efficient code which interacts seamlessly and simply with other code. Gravity can become a function with quick inputs making it fairly universal for each character. Complexity can increase by adding more features but well built functions help to Make sense of it.
3. The tools that have been developed to support programming are unimportant.
The tools that have been developed to support programing are what make it accessible to others. I've programmed in a raw text editor for years. I torture myself so I memorize code functionality. For a novice the tools to support programming are what make the difference. I spend a lot of time playing with Google Apps Script. The intelligent suggesting of options support my exploration and make me more efficient. Google provides suggestions to code; intelligent suggestions. I know my variable is not initialized because of the color signifier. It's a pleasure to program with Google and it's the coding environment which keeps me coding there. I promote Google Apps Script because it's easy to code in.
I will say block based coding can be improved by providing tools to transition from the visual code to a syntactical base. Allow me to pull in the code in visual format. But give me the ability to pull back the visual curtain. Block based code makes it accessible to those that may have previously been intimidated. And let's face it, we can type faster than we can drag in code. once we start getting the hang of it we lean to typing the code.
Non-technical people need to have access to coding. It's up there with learning math, language, science, history and arts. our lives are split between our digital life and our physical life. I can cook and make a basic meal in my physical life. Coding is relative. People need to know how to craft some basic code to help them solve a problem in their digital life.
And just for fun here's a Scratch project I did in 10 minutes to teach about conditionals.