When working to improve yourself, one of the most humbling experiences as a developer is when you have a breakthrough on a concept with which you’ve been struggling only to find out just how much more other people know and just how much more you have to learn.

This isn’t something that’s limited to WordPress, of course. This is something that isn’t even limited to programming. It transcends a variety of disciplines, hobbies, and so on (remember, say, when you were first learning to play barre chords on the guitar?)

Acoustic Guitar

But I don’t focus on other disciplines when writing on this blog (the zoomed in picture of the guitar not-withstanding).

Humbling Experiences: Development

For example, let’s say you’ve been working really to understand some of the principles of object-oriented programming – like interfaces and abstract classes – and then it finally clicks.

Our natural tendency is to try to look at some code that we’re working on right now and see how we can fit them into what we’re doing. And that’s good – we should be looking for signs and opportunities to apply new concepts.

Whenever this happens, there are two important things to remember:

  1. Current projects don’t aways lend themselves to new concepts,
  2. Using something simply for the sake of using it is the wrong reason.

Practically speaking, how do we apply this?

You Can’t Always Apply New Concepts

Let’s say this whole new understanding of abstract classes comes one evening when you’re working on a side project. The next day, you sit down to start working on a project for a client.

You’re deep into the project, and a lot of code has been written. As you’re re-reading the work you’ve done, you realize that you could drastically improve some of the class organization if you just had the time to go back and refactor it.

But that’s where the tension is:

Finding time to go back and refactor it.

And just as certain things transcend particular disciplines, as discussed above, as do the rules of business. In this case, you likely don’t have the opportunity to go back and rewrite a significant chunk of the codebase.

Instead, you have to carry on with the architecture and organization that you have doing the best you can given those constraints.

Don’t Use It Just to Use It

Secondly, let’s say that you start a project shortly after you’ve learned something new. We’ll stick with the whole idea of abstract classes for this example, too.

You likely have the propensity to want to use your new found skill in the project. And there may be opportunities to do so, but it’s important not to force those ideas into the project.

That’s using them just for the sake of using them, and that’s no good.

Or, another way of putting it, is that if your reason for using a new skill is simply to show that you know it exists versus using it for its intended purpose.

So what are we supposed to do when we experience this tension?

First, I think it’s important to recognize that learning things like this is a Good Thing™. This shows that you’re growing in your skillset.

Secondly, it means that you’re surrounding yourself with people, with reading additional material, and with projects that are helping you to become a better developer. And if this remains consistent, then this tension is something you’re likely to experience over and over again.

Though this results in us feeling like our projects are never as good as we’d like, it does mean that we have opportunities to continue building better software as we progress throughout our careers.

What I Do, What You Do

This next bit is strictly speaking from personal experience.

Sure, it’s one thing to chat on Twitter and read blogs and listen to podcasts, and those are all good things.

But there’s more we can do, and I think it’s important to find something that works for you.

Humbling Experiences: Chatting with Others

This will vary from person to person, but in my case, I’ve been trying to incorporate the following things:

  • Spend more time talking with other developers who I greatly respect and consider far more advanced than me,
  • I’ve been trying to get back in the habit of reading books (or re-reading books) around the topics,
  • And I’ve been trying to discuss this type of material more with others  (and on this blog).

So the two main points I’m trying to make from this post is this:

  1. Don’t be discouraged when you learn something new and your existing project can’t support this new found knowledge,
  2. Look for others with whom your can surround yourself and don’t be afraid to ask questions (or even volunteer answers).

And if you have anything to add, then please feel free to add these to the comments.