Why Programming is difficult to learn

And difficult to teach

Mo Ali
3 min readJan 5, 2021

Background:

I, somewhat recently, started teaching python on YouTube (shameless plug here). It’s more of an exercise to test my own knowledge rather than actually teaching. I also tutor my nephew in law in python programming, and this is where I realized why people either absolutely hate programming or love it.

Learning from University

This is where it gets tricky. You could be in a university with a well known Computer Science curriculum and still not fully grasp or be enthused about programming. Often in programming courses students will be starting from scratch, but this necessarily isn’t the best approach for everyone.

The vast majority learn the basics (data types, loops, and conditions) on their own and then move on to modifying an actual application. I learned python by creating AWS scripts to handle registering/deregistering instances from a load balancer. I then moved onto modifying saltstack modules for application deployments.

Learning from Public Resources

While this seems like a great alternative option, this is not also meant for everyone. The public sources can be endless hours of videos, which can get very mundane quickly. This demotivates a vast majority of individuals who wish to learn programming. As a result, most never actually finish learning.

How should you go about learning programming

Start early: This is not an option for everyone. If you’re young enough and you’re reading this. Start now. You don’t have to learn everything, even the basics (conditions, loops, data types) will get you a head start. If you can get further into objects, inheritance, polymorphism, etc; that’s even better.

If you’re an older fellow like me, going back to university to learn programming from scratch may be a mistake for you, unless you’re a very quick learner and have a good professor. So I would recommend, learning the basics before going to university. Even better would be learning some advanced topics such as objects.

Start small: Whether its a project for a university or a project you have started yourself, start small and give yourself a lot of time. If you cram a lot of code in a small amount of time, you’ll make mistakes, you’ll write inefficient code, and your debug time will be a lot longer.

So start small, write small amount of code, REPL (read, evaluate, print loop) your code, and make fixes to your small amount of code. If you write large chunks, chances are you’re going to be chasing problems for a long time.

Create your timeline: Create a timeline for all of your university assignments (see syllabus) and start them before they’re assigned. Why? Because learning any programming language or programming paradigms isn’t picked up quickly by everyone. Meaning, often times, the one to two weeks you get for assignments isn’t enough. So create a timeline for all of your university and start them ahead of time.

If you’re learning by creating your own personal project. Write out your application tasks and put due dates on them. The due dates aren’t critical but they are important. Due dates can be reevaluated when tasks are being written out and issues come along the way. Stay on top of your due dates and try not to slack off on them. This is very difficult to do especially when working alone.

Work with someone: This one is especially important. Whether its for university or on personal projects, working with someone can greatly improve your learning ability. Especially if both/all of you put in your effort. Even if you aren’t writing the code but you are at least touching the code (by debugging or some other method) your abilities to read/understand the code will improve.

--

--

Mo Ali

Sr. DevOps Engineer, self-taught programmer, financially independent.