Why can’t you learn object-oriented programming?

As you lay there, you try to remember how you got into this mess. It seemed like it was going to be so easy. You’d heard that object-oriented programming was worth learning. That’s what some dude (or wizard!) told you anyhow.

Next thing you knew, everyone else was convinced. There was no time! You had to get ready for battle. You had to study your enemy: object-oriented programming.

You were lucky though. Your enemy was well known. You had articles, tutorial series, videos that were a quick Google search away. If that wasn’t enough, you could take classes, workshops or even bootcamps.

You thought, “There is a way to slay the beast!”. Your energy and your motivation had never been higher. You yelled to the heavens, “I shall slay you OOP beast. Your time has come! Charge!!!”.

Except your enemy was never there

It’d deceived you. Like a modern day Don Quixote, your enemy was nothing more than an illusion. An illusion that set you up for failure.

The illusion was making your quest about “learning object-oriented programming”. It’s a moving target with no finish line. How can you ever know when you’re done?

You can’t. You knew the answer the moment you read the question. It’s also why you struggle with it as an objective.

Learning isn’t an objective

Here’s a scary truth for you: I’m still learning object-oriented programming.

Of course, I wouldn’t say that I don’t know object-oriented programming. That’d be silly! I’m just saying that my job is never done. There’s always something for me to learn about it.

That’s the nature of the programming world. It’s what makes it hard for you when you’re starting off. You’re trying to get a solid footing with the topic. At the same time, you might want to:

  • Use it with new PHP language features (like Traits or closures).
  • Employ it using a new language (like JavaScript).
  • Apply it in a new context (like WordPress).
  • Keep up with ever-evolving best practices.

It’s impossible for you to stay on top of it all. The fact is: You’ll never be able to say that you’re done learning about it. That’s what makes learning a terrible objective.

A good objective isn’t vague. It’s measurable, concrete and attainable. You can say with confidence that you either succeeded or failed at doing it.

Learning doesn’t work that way. There’s no test in the world that can measure how much object-oriented programming you’ve learned. There’s no goal post that you can reach. You can’t flick a switch and go from “Not knowing it” to “Knowing it”.

It’s a gradual and continuous process.

Learning is the result of good objectives

Learning is what happens when you work towards worthwhile objectives. It’s all about the positive result that you get from them. As long as you keep doing the work, you’ll get value out of them. And that’s even when you fail them.

You got into object-oriented programming with one of those objectives. You wanted to build something you cared about with it. It just all went sideways.

Like our story, you got deceived.

The objective became to learn object-oriented programming. Maybe someone told you that’s what you needed to do. Or it was something else. The reason doesn’t matter as much as you believed it. It made sense after all… you can’t use what you don’t know about.

That’s when you got stuck. Like you’ve seen, you’re never done learning. And that fact became a roadblock to your success. It all became about that illusion, that unobtainable goal.

You forgot about that you wanted to build something with it.

How can you get back on track?

You shouldn’t worry about the fact that you got sidetracked. Instead, you should bring the focus back to writing code, to building something. That’s how you’ll learn object-oriented programming.

You have to sit down and do the work. You shouldn’t worry about doing it wrong. Or that you’ve got no idea what you’re doing. It doesn’t matter in the long run.

It’s about making sure that you complete your objective. You can then take a step back. You review what went well and what caused you problems. You set a new objective keeping that in mind.

What makes a good objective?

Each of us learns in our own unique way. A good objective for you doesn’t mean it’s good for someone else. It makes “one size fits all” objective recommendations kind of useless.

Finding a good objective is a personal exercise. Instead, let’s discuss what makes a good objective. That way you can go through the exercise yourself and find an objective that works for you.

Work on your own problem

You ever notice how much more you get done when you work on your own problems? Time seems to fly by. Motivation is easy to come by as well.

That’s something to keep in mind when creating an objective. You should try to align it with one of your problems. It could be a problem that you’re working on or one that care about.

It’s a lot easier than working on someone else’s problem or some tutorial. You’re invested into it. It’s personal. It’s your problem after all, not theirs.

Keep the focus on doing the work

Speaking of tutorials. What about reading tutorials or watching videos? You haven’t seen them mentioned at all. That’s intentional.

You have to be careful with these resources. You’re trying to learn object-oriented programming and not how to use Google. You can’t forget that.

Otherwise, you’re just learning to imitate someone else. Doing that doesn’t put you closer to understanding what you’re doing. You might think, “Well it’ll make sense later when I sit down to build something.”.

It’s another deception.

Odds are that it’ll all evaporate the moment you open your text editor. Face to face with that blank page, you’ll go back to the only thing you know how to do… which is how to use Google.

That’s why you have to do the work. You need to create objectives that get your hands dirty. That way you make sure that you come out with some real knowledge.

Set some boundaries

This is something that we alluded to earlier. Boundaries prevent you from getting stuck. You don’t want to create an objective that makes you spinning your wheels forever.

Often, just putting a time limit is enough to force you to take action. It can be that simple. You don’t have to make it a S.M.A.R.T. objective.

You just make sure that you get feedback quick enough. You want to see progress in the work that you’re doing. It also helps you to keep your goal in sight and stay motivated.

You can slay the beast

There’s nothing revolutionary here. You might have even heard this advice before. It isn’t even limited to object-oriented programming. It’s just that we forget about it.

We also tend to forget how long it takes us to learn things. We spent years in school, but, as adults, we expect to learn things right away (We’re adults after all!). It’s kind of absurd if you think about it.

It makes us predisposed to taking shortcuts. We want to get immediate results. Our mind is wired for it. And it’s how we let these illusions get the better of us.

You don’t have to let it be that way. You just need to be a bit more mindful in your effort to learn object-oriented programming. Practice creating some good objectives for it. And you’ll start progressing on your quest to defeat it once and for all.