The 3 Skills You Need to Build in Your Programming Students

No matter what platform or language you’re teaching, it can seem like a daunting task. I teach iOS to beginners, and it’s a lot to take in. There’s the language, the programming logic, platform conventions, all the libraries. That’s a lot of things to cover, and it can seem overwhelming.

When I plan lessons, I start by outlining the main topics to be covered in a course. But it’s important to then switch away from content to skills.

The students have turned up at my course to learn iOS development. Ostensibly. But the reason they’ve really come here is to become iOS developers. And those are two different things. Knowing the difference means that I need to focus on building their skills as developers.

Skill #1: Knowing Things

This is the most obvious one. If you want to develop in a certain platform, there are things you need to know.

What’s a view controller? What’s a table view? What’s an if statement?

Because this is the most obvious skill, instructors are usually pretty good with this. We know we need to start with simpler concepts and work our way up that ladder. We know we need to test their understanding by asking questions.

Knowing the content is important, but it’s not the only skill!

Skill #2: Problem Decomposition

It’s one thing to know what an “if statement” is. Knowing that it needs to be used is a whole other skill.

When we teach and run through sample problems on the board, students are generally going to understand what we say. We can take the problem, break it down into steps, and explain each line of code.

The same student is often going to be sitting at their desk, stunned, staring at a blank file on their computer.

Understanding the steps on the board doesn’t mean they can look at a problem and identify the sub problems.

People learning a foreign language often hit the same barrier. A person who can read reasonably well can still have enormous difficulty understanding a native speaker speaking. Why? They know the words, don’t they?

Here’s why. If a native speaker says “An apple a day”, what you hear is “An apple a day”. Here’s what a learner hears:

“A na pe le de”

Those are the syllables. And none of those are words. Fluent speakers instantly break that into:

“ A n|a pe l|e | de ”
“ An apple a day”

But it’s hard for learners to see the split. Even if they know all the words, they can’t see the words in the collection of syllables.

Programming students are the same way. They know all the ingredients that make up the solution. But it’s hard for them to see which pieces need to be used in this particular problem. It’s our job to teach them to see those seams.

Skill #3: Muscle Memory

Every programming instructor has seen students look at their screens filled with red, having missed a semicolon or comma somewhere. This is normal, of course. Eventually students will start getting the details right.

The way to speed this up is to build up what I like to think of as their muscle memory. This is distinct from knowing the content, or breaking down a problem. This is about actually implementing the solution. The writing of the code, or the creation of the layout.

It’s not enough for your brain to know how to code; your fingers need to know how to code as well.

This might sound a bit strange. We tell our fingers what to do. Our fingers don’t move independently. But don’t they seem to, sometimes? You automatically close a bracket that you just opened. You automatically fix the indentation on a new line. There are several tasks that are almost instinctive.

It’s like speaking a language. We don’t craft every word in our brain and then instruct our tongues. We think thoughts, and the words find their way out into the world. Of course, we can be more deliberate in our words and enunciation if we need to be. But for 90% of communication, we focus on the thoughts, not the production of sound.

It’s the difference between planning and execution. Both are important, and they are distinct skills.

When planning lessons, keep an eye out for which of these skills you’re training. All three are important.

Because here’s the thing. Once you deliver on skill 1, students are going to be satisfied. They showed up to learn X, and you taught them X. The content has been delivered.

But they’re still not going to be effective developers. And they’re going to blame themselves. When they’re stuck with a problem and you then show them the solution, they’re going to feel stupid.

“Of course I should have known how to do this. He used variables and ifs. I already know this stuff. I must not be cut out for programming.”
“How does he always know which bracket is missing in my code, and I can never see it? I guess I don’t have an eye for this sort of thing.”
It’s your duty as an educator to give students what they need, not just what it says on the title of the course.

If we keep an eye on all three skills, we’ll be doing just that.

Connect Deeper

If you resonated with this article, do subscribe to my personal blog! You will be notified of any future articles I write on tech education.