Unrelated image from pexels.com to make this post look nicer in social media shares.

Not long ago I read this blog post Why Learning to Code is So Damn Hard, which makes a really interesting point about the “desert of despair” between beginning to learn to code and having the skills to build a complete project on your own. The desert of despair, according to the post (which I agree with) is a combination of lack of resources for learners who are between beginner and expert, and having learned enough to know how much you still have to learn. Many aspiring coders get lost in the desert of despair and never find their way out.

I also read Amy Hoy’s post 5 Things I Wish Somebody Told Me Before I Founded My SaaS. One of the points I found the most interesting was that there’s always another inflection point. By inflection point, she means “those knife-edges you tip toe along, when things could go either way, when you are, say… trying to grow your team but lack the time/revenue to do it, but growing your team would help increase the time/revenue to the point where you could grow your team. Ouch. To me, that’s the prototypical inflection point.”

Where this ties back to the other post is where Amy says “Over the last 8 years running this biz, I have said so many times: “We just have to get through this $INFLECTIONPOINT and then things will get easier.”” Doesn’t that remind you of programming?

If I can just learn enough to get my code to compile then things will be easier.
If I can just learn enough to add a feature to an existing project then things will be easier.
If I can just learn enough to start a project on my own, then things will be easier.
If I can just learn enough to break my code down into good methods, then things will be easier.
If I can just learn enough to break my code down into good classes, then things will be easier.
If I can just learn enough to break my code down into good layers, then things will be easier.
If I can just learn enough design patterns, then things will be easier.
If I can just learn this new framework, then things will be easier.
If I can just learn this new style of programming, then things will be easier.
If I can just build enough different projects, then things will be easier.
If I can just learn enough…

There’s always going to be something else to learn, it’s never going to become easy and stay that way. Things do get easier once you find your way out of the desert of despair, but initially learning to code just leads to worrying about whether your code is good leads to worrying about design and architecture and scalability and reliability and security and those are seriously hard problems.

Despite how it may sound, I’m actually not trying to say that coding will suck forever and you should just give up. I’m saying that it’s normal to feel like you still suck at this even after years of working as a programmer. You don’t actually suck, it’s just normal to feel that way. What’s really happening is you’ve levelled up. When you do that you see the problems that used to give you trouble as too simple to count and focus on the stuff you aren’t good at yet, which can easily make you think you suck.

The thing I struggle with is design. I’ve been at this for ten years now and I’m still never sure if I’ll regret the design I’ve come up with the next time we add a feature to the system. Plenty of times I’ve come up with something that seemed like a good idea at the time, only to find out that it had serious flaws when I came back and changed it later.

It’s tough sometimes but on the upside, you will never ever run out of things to learn as a programmer :)

Like any free resource, some MOOCs are great and some are… not. On the upside, the fact that they’re generally free (although some sites charge for a certificate of completion) means you aren’t out any money if you didn’t learn anything or were too bored to finish. The only problem is you’ll waste a lot of time if you’re too stubborn to give up on a course that’s not interesting. Do as I say, not as I do and all that :) I’m currently stubbornly hoping that I’m actually going to learn something in a very vague and high level software architecture online course I’m taking. Maybe it’ll get good in week 3?

The Learning How to Learn course, aside from being interesting on its own, is also a good example of what other courses should probably be doing. It teaches you specific concepts that you can actually go out and apply to whatever you want to learn right away. Some of the most useful things I learned in that course were the pomodoro technique and the fact that part of procrastination is that the brain reacts to a task you don’t want to do the same way it reacts to physical pain (at least, that’s how I remember it) but that if you can hang on through the initial pain, it goes away pretty quickly.

As a software developer I have to learn new stuff all the time, and because I’m totally irrational sometimes I worry that the thing I need to learn this time might finally be the thing that proves I’m just not smart enough. The Learning How to Learn course makes learning sound much less scary. Instead of learning being this mysterious thing that some people can do and some people just suck at, the course breaks down the process of how the brain makes sense of and stores new information. Learning is actually a simple process of repetition, chunking, using different modes of attention, and managing your time, it’s something anyone can do if they put in the time and effort and have learning materials that make sense to them.

It also has some tips for taking exams that I wish I’d had when I was still in college. If you have any important tests in your future, the course is worth taking just for the exam tips. I’m guessing here because I don’t have test anxiety, but I think it would be really helpful to have a simple plan to follow when your mind goes blank.

Learning about different modes of attention is also really useful for when you’re working on a really difficult bug. It’s hard to step away when you’re convinced you’ll get it if you keep trying (especially when the total refusal to give up is a pretty central programming skill), but taking your mind off the immediate problem really does help your brain to make the connection you need to solve it. When you’re too focused on a problem, your brain sort of sticks to the information you already have. When you take your mind off of it and think of nothing in particular, your brain can start making connections between things that didn’t seem to be connected at all and that’s where those sudden eureka moments come from.

The course is based on a book by one of the professors, A Mind for Numbers: How to Excel at Math and Science (Even if You Flunked Algebra). As much as I love books, I’d actually recommend taking the course first, because being tested on the material helps you learn it (a concept you’ll learn about in more depth if you take the course or read the book :) The due dates in the course also helped persuade me to make time to sit down and do it. The course also has transcripts for all the videos, so if you prefer reading to watching you’re covered.

If you want to learn things faster with less effort or you’re just interested in how your brain works, take the Learning How to Learn course.