Why Some Students Don’t Learn to Code

Common Roadblocks, and How to Overcome Them

Aaron Brager
News on the Bloc
6 min readSep 25, 2014

--

At Bloc, we teach web and mobile app development and design. We teach using a 1-on-1 apprenticeship model, so we get to know students really well. Unfortunately, not all students complete the course, and we’ve learned a lot about why and how students struggle learning to code. This essay explains the primary reasons people have trouble learning, and outlines some possible remedies.

Just skimming? See the summary at the end.

Learning is Blocked by Frustration

Consider this simple loop, written in Ruby, which prints the numbers 1 through 10:

i = 1
limit = 10

while i <= num do
puts("Number #{i} of #{limit}")
i += 1
end

This code is extremely simple to even a junior computer programmer, but can be frustrating to a beginner.

If you know Ruby, you know there’s a simpler implementation:

limit = 10

1.upto(limit).each do |num|
puts "Number #{num} of #{limit}"
end

But even this can be pretty confusing.

So, why is it frustrating to someone who hasn’t coded?

  • It’s cryptic.
  • The symbols used to express specific concepts are unintuitive.
  • The difference between (limit) and #{limit}, or between |num| and #{num} may be unclear.

The student may attempt to reread training materials or documentation to understand the code better. But consider the documentation on puts:

puts(obj, …) → nil

Writes the given objects to ios as with IO#print. Writes a record separator (typically a newline) after any that do not already end with a newline sequence. If called with an array argument, writes each element on a new line. If called without arguments, outputs a single record separator.

What the heck is nil? Or a newline? How is that different from a newline sequence? What’s ios, array argument, or IO#print? Even these basic questions require prior knowledge. A new programmer may Google something like “word in my rails app not showing up right”. That’s not going to yield useful results, because programmers represent words using strings.

Attempts to research these questions open the door to more and more questions, and the learner shuts down, drowned in a deluge of information, none of which is needed to understand this basic code.

“Am I smart enough for this?” learners ask. “Will I ever be able to learn this? Is it too late for me?”

As perfection is the enemy of the good, so is self-doubt the enemy of learning. Wikipedia’s article on learning nails it:

Learning is not compulsory; it is contextual. It does not happen all at once, but builds upon and is shaped by what we already know. To that end, learning may be viewed as a process, rather than a collection of factual and procedural knowledge.

If you’re learning to code, remember that you don’t need to fully understand everything you’re doing to make progress. Learning to code doesn’t mean achieving mastery. Do you know more about puts than you did yesterday? If so, you’re learning.

The devil is in the detail, they claim. But remember that if you only pay attention to the details, you won’t get the big idea right. Give yourself the freedom to move on to the next task, even if you only understand two thirds of what you’re doing.

Of course, some students students struggle later on because they rush through things without understanding them. There’s an important balance to strike here, and it’s helpful to revisit old material once you’re more comfortable with the concept.

Remedies

  • Learn to Google. This may seem obvious, but students have asked us easy-to-Google questions thousands of times. Blog and forum posts are typically higher-level than technical documentation, so start with those.
  • Work with a Mentor. It’s challenging to know what’s important and what’s not. Get a friend or hire a mentor to help you filter out the jibber-jabber, and put you back on the right path if you venture into a black hole.
  • Learn to Write Down Your Question. Read Stack Overflow’s How do I ask a good question?. Take a stab at writing a Minimal, Complete, and Verifiable example, even if it’s imperfect, and even if you never send your question to anyone. Explain what you’re expecting, what actually happened, how they differ, and why you think that is. There are two benefits to writing down a question. First, this process frequently helps students figure out the answer on their own. Second, if students don’t figure it out, they have a well-written question to post on Stack Overflow or send to a mentor.

By following this advice, you should be able to avoid the frustrating experience of feeling like you’re not learning. Don’t doubt yourself. If you can do basic math, read, and write, you can learn to code.

There’s Not Enough Time

Most students who don’t complete the course aren’t putting in enough time. Learning a new skill is challenging, and you should be prepared to spend some time on learning every day. Learning comes in a variety of forms, and repetition is important. For Bloc students, this can include:

  • Reading training material
  • Reading sample code
  • Writing code to complete assignments
  • Meeting with their mentor

This is a rigorous process. If you’re only dedicating 2 or 3 days a week to it, you’re less likely to complete the course than a student who works a little bit every day. Work on learning at least a little bit every day.

There are two more suggestions, nether of which are programming-specific. First, remember to get enough sleep. There are significant data that show:

  • Sleep loss has a cumulative effect
  • Inadequate sleep makes it very difficult to learn new skills

In addition to the scientific data, our own anecdotal experience supports this as well: students often report understanding difficult concepts with stunning lucidity, which they previously struggled with, after a good night’s sleep.

Finally, budget some flex time for schedule variations. It’s important to spend time every day learning. If a family member has health issues or a college friend is in town for one day, make sure you still have some time to spend on learning to code.

Remedies

  • Spend enough time. You should spend at least 3 hours a day when developing new skills. Ideally, you’d dedicate more.
  • Get 8 hours of sleep every night. People who slept 6 hours a night for 10 days had similar results to those who were completely sleep deprived for 1 day.
  • Plan for the unplanned. Make sure you’ll be able to handle last-minute changes in your schedule.

By following this advice, you’ll be able to dedicate a sufficient amount of time to learning while maintaining a work/life balance.

Incorrect Expectations

Some students join our program with incorrect expectations. For example:

  • Students underestimate how much work learning to code is
  • Students sometimes miss skills that are required to learn. You should have an understanding of basic algebra (if 70 = 2x + 10, can you figure out what x is?). You should also have good reading and writing skills.

Before you learn to code, it’s worth your time to connect with a mentor or experienced developer and discuss what you hope to learn along with your current abilities.

Summary

Don’t get frustrated by learning. Both code and documentation are difficult to read and absorb, especially as a beginner. Use summaries like blog and forum posts alongside documentation to help you boil down complex concepts to their essence. Work with a mentor. Learn to read critically. Learn to write clear, concise questions when you’re struggling with a concept, even if you never show your writing to anyone.

Manage your time. Make a rigorous schedule. Work on coding every day. Sleep for 8 hours every night. Build some flexibility into your schedule.

Understand what’s required. Talk to a mentor or experienced developer about your current skill set and decide if there’s something new you should pick up. Make sure you have a reasonable understanding of the complexity of the material, and what skills you hope to build.

If you’re interested in learning to code or design web apps, iOS apps, or Android apps 1-on-1 with a mentor and a rigorous curriculum, check out Bloc.

Tweet me if you have any ideas for expanding this article.

--

--

Aaron Brager
News on the Bloc

I have a secret plan to fight inflation. Also, I code iOS apps, try to understand ideas I disagree with, and sometimes play chess.