I love to code. Through a combination of classes and self-instruction, I got to the point where I could be a teacher assistant in my AP Computer Science Principles class to help implement a new curriculum. I have also worked to encourage participation in computer education by starting a coding club. During those activities and interactions with my peers, I observed common patterns preventing students who are curious about programming from exploring it further and developing it into a love for programming.
Learning to code has a very jagged learning curve. We are introduced to code through projects that are designed to be simple and fun. However, creating anything more complicated requires students to make multiple leaps into larger concepts. Those leaps would be problematic if they existed in isolation; however, the curriculum fills the gaps. You don’t start math students on calculus, you start them on the fundamentals of math. The fundamentals are not representative of the complexity of higher math and there will be struggles along the way. Those struggles are not representative of a lack of some innate skill—they represent growth. It is the same with code. However, the perception of coding as some “hacker-man breaking into the mainframe” presents code as unreachable black magic and anything less than immediate understanding can easily be spun as a permanent failure caused by a fundamental inability.
In an attempt to break that perception, many programs start with overly simplistic examples, such as having high schoolers moving a character around the screen using block code. Teaching with block coding has its place, it is an effective way to teach basic logic to young students; however, a class that focuses on it on a high school level seems unnecessarily dismissive of student ability.
That is not to say all abstraction for education is bad; in fact, it is quite the contrary. A promising balance can be found in beginner-centric editors that offer both the abstraction and the text such as BlueJ for Java. Those types of editors can take the edge off of learning the fundamentals of languages that require utilizing more complex paradigms (such as object-oriented programming) from the very start through providing interactive visualizations. For an in-depth analysis of this approach at an introductory college level, see Dr. Jeremiah Blanchard’s thesis Dual-Modality Instruction and Learning: A Case Study in CS1.
Newer languages can also provide similar benefits. Languages such a Swift allow for the student to start with essentially a scripting environment. Swift playgrounds allow for students to write and run their code without worrying about a main function or object. There’s no need for abstracting away boilerplate code if there’s no boilerplate. It also visualizes the effects of their code in the sidebar on each run by showing the value of each variable, giving quicker feedback when covering language fundamentals. This allows the learner to understand fundamental concepts such as control flow before needing to face larger scale concepts such as object-oriented programming—which would be necessary for even a hello world program in Java.
When the relatively simple syntax of modern languages is combined with a helpful integrated development environment, the frustrations of starting a new text-based language are greatly reduced. While staring at a blank file may be intimidating when unguided, the entire course and tooling are there to lead the student along their way.
Even though these create a considerably more beginner-friendly starting point and aid in learning, they do little to help the learner make their first step. The prevalent attitude of code as an unreachable skill remains unchanged. That indifference signals that the repelling force is likely caused by a lack of familiarity.
To break down this fear of code, address the lack of familiarity instead of watering down coding curriculums. Give the students small non-committal experiences with concepts covered at the start of the curriculum. I found this approach particularly useful in the high school coding club.
For the coding club, there is no sign up or repeat commitment. People of all skill levels can show up and do activities at their skill level. One of the most popular aspects was the Swift and Python lessons because they were made so people with no prior experience could participate.
“Coding Club made me feel more capable and confident even though it was just the basic stuff. It made me less scared to take AP Computer Science Principles.” - Ella Thrasher, 12th Grade
While anecdotal, this attitude is generally prevalent in my high school’s coding club. I believe fostering that attitude is one of the reasons we see continued growth. I’m hopeful that educational tooling and introductory experiences could be used at more high schools to help coding classes feel more approachable all around.
Published on Sep 06, 2020