Software Engineering in WordPress and Musings on the Deep Life

Humbling Experiences as a Developer

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.

6 Comments

  1. Alain Schlesser

    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.

    Ah, I think that is one of the most magnificent experiences a developer can enjoy. Or, in Aladdin’s words:

    A whole new world

    A new fantastic point of view

    No one to tell us no or where to go

    Or say we’re only dreaming

    I am constantly trying to learn new stuff, and probably I’m just unconsciously on the hunt for that next big revelation. Where’s my next Level-Up?

    I can also completely relate to the tension you’re referring to. Once you’re past the point of learning the basics, each new revelation will result in a new style of architecture, not just a rewritten line of code. You can’t easily change an existing architecture (at least not without much time and effort). The worst part is hitting problem after problem once the code went live, while fully aware that these could have easily been avoided with a different architecture.

    Also, some concepts are indeed hard to put into practice because they only make sense for a certain kind of project. Some just require a big enough scope to be worthwhile, while others are just very “niche”.

    That’s why I believe in investing in yourself in a way that leads you to understand the kind of principles that transcend any particular language, technology or architecture. Compare this to how your moral compass works. You understand a set of principles to the point where you can make meaningful decisions when faced with a completely new and unknown situation. Knowing these generalized principles in software development allows you to not totally screw up your first try at tackling a new problem… :) The more principles and general understanding you’ve assimilated, the better your first draft gets.

    Talking with other developers, asking as well as answering questions, and exchanging ideas and theories is the best way of “growing” this kind of understanding in my eyes. And, often times, I learn the most when I’m actually answering a question that someone else has asked. I don’t know if that’s just me, but I often have only very vague and fuzzy versions of some concepts in my head. Thinking through them to be able to clearly write them down actually solidifies them for myself first.

    And, as a bonus, enjoying the company of other gifted, open-minded developers is one of the most inspiring things I could possibly think of in my daily grind. If you’re working remotely, and in isolation, I can not express how important I think it is to find a community to interact with, it is life-changing.

    Enough ramlbing, back to work! ;)

    • Tom

      Ah, I think that is one of the most magnificent experiences a developer can enjoy.

      I agree — I think that it’s something we learn to enjoy, though. At first, I think there’s a level of intimidation. And sometimes, other developers don’t do much to help that.

      But then there’s a whole other group of the rest of us who want to help bring people up to a certain level, you know?

      And, for what it’s worth, I love the quote from Aladdin. What’s funny is my girls are totally into that movie right now (they call it Jasmine though :).

      I am constantly trying to learn new stuff, and probably I’m just unconsciously on the hunt for that next big revelation. Where’s my next Level-Up?

      Right? The thing for me is once I find it, trying to find a good way to begin incorporating it into the day-to-day. Sometimes, I just have to take a small piece and do it other than trying to conquer the whole.

      Once you’re past the point of learning the basics, each new revelation will result in a new style of architecture, not just a rewritten line of code. You can’t easily change an existing architecture (at least not without much time and effort).

      Exactly. You can’t go and rewrite a current project unless it’s your own, you know? When you’re contracted, that’s when you have to find some of the best places to start pulling in something new.

      Also, some concepts are indeed hard to put into practice because they only make sense for a certain kind of project. Some just require a big enough scope to be worthwhile, while others are just very “niche”.

      This is a really good point. I don’t think it’s communicated very well nor frequently enough. Oftentimes, things are presented as the hot new way to do something versus “the hot new way to do something for this particular problem space.”

      The more principles and general understanding you’ve assimilated, the better your first draft gets.

      Yes — exactly. And the same principle can even be applied to writing (but I digress on that :).

      Thinking through them to be able to clearly write them down actually solidifies them for myself first.

      I think there’s a name for this. I don’t remember what it’s called, but I’ve experienced it and I know that others have talked about it, too.

      It’s basically getting clarification and a more concrete mental picture of these abstract ideas. And talking about it helps form that concrete definition better than not taking action on it.

      And, as a bonus, enjoying the company of other gifted, open-minded developers is one of the most inspiring things I could possibly think of in my daily grind.

      +1

      I’m not as good at multitasking with chat, but I try to read lots of stuff — blogs, chat backlogs, etc. — and participate as time allows.

      If you’re working remotely, and in isolation, I can not express how important I think it is to find a community to interact with, it is life-changing.

      This! I was just talking with my wife about this last time. Funny timing on this :).

  2. Michael

    Not using things just for the sake of using them, because you just learned it, is temperance that comes with the wisdom of experience. It’s so tempting to try all the new things when just starting out, because it’s all new and exciting and cool. And sometimes even if you know better, it can be difficult to determine what to ignore and what’s optimal to use.

    I was bad about this when I was starting out and I’d try to sell the client my clever new ideas, because I had learned how to do something I wanted to show off. I learned pretty quickly that that was an activity that I needed to stop(the return on that time invested isn’t worth it), plus incorporating new “tricks” on a client’s site is asking for trouble, unless you’re really comfortable with it. There’s a right way to learn on the job and a wrong way, and I’d categorize that as a wrong way, just from my personal experience.

    Dev tools and toys are the same way, which I know you also caution people about getting carried away with. It’s tough with so much awesome stuff out there.

    • Tom

      Not using things just for the sake of using them, because you just learned it, is temperance that comes with the wisdom of experience.

      That’s what I like to think. Sometimes I second guess myself, but that’s generally where I am right now.

      It’s one thing to use thing in a personal project just for fun or to see what it’s like, but I don’t do that in professional grade projects / contracted projects.

      I was bad about this when I was starting out and I’d try to sell the client my clever new ideas, because I had learned how to do something I wanted to show off.

      Welcome to the club, my friend.

      It’s when you realize there are business tradeoffs that are just more important that the hot-new-thing. The cost of using said thing is rarely worth the cost to the business when what’s always worked can be just fine (not to say being stuck in a rut, etc.

      There’s a right way to learn on the job and a wrong way, and I’d categorize that as a wrong way, just from my personal experience.

      +1. Your own time is the time to get comfortable. Once there, applying it in a client project is when it’s time to use it.

      Dev tools and toys are the same way, which I know you also caution people about getting carried away with. It’s tough with so much awesome stuff out there.

      Right?? The thing is that even the most awesome stuff out there is so fleeting this days.

      This is why, once I’ve developed or set my toolbox, it takes a significant shift to get me to change.

  3. Peter

    Hi Tom,

    Love reading your posts and can relate to them a lot.

    I’ve been in web development for about 2 years, and have definitely learned a lot.

    However, one of the bigger struggles i’ve found is getting into a community of developers. Unfortunately I don’t know many developers in my area, and finding online communities or slack teams has been difficult.

    Some factors that may play a part in this…

    We as developers are a picky bunch of people, which sometimes makes community a bit more rough, since everyone has their own idea of how to do something or the “right way” as I’m sure you see first hand in comments on your posts!

    I’m completely self taught from tutorials, blog posts (like yours) and trial and error and haven’t ever had a boss or go to programmer that I could bring questions to. While that has served me immensely to have to struggle through many different aspects of programming, it also has made it a little hard to gain confidence in a community setting since there is constantly that seed of doubt that wonders if I am doing things correctly, since I’ve never really had any one to point me in a new direction or confirm the direction I’ve gone.

    Definitely possible I’m just afraid of my pride being hurt, since I too am a picky developer and like the way i do things! ;)

    In my opinion, there is no such thing as a stupid question, but there are such things as lazy people. A lot of the time on places like stack-overflow, you see someone ask a question, and the first response is: “Did you even google it?”. Whether they did or didn’t is besides the point, but I’d like to be a part of a community where I can at least build enough respect with people, that they know I’ve done my due diligence and beyond of looking into the issue i’m having before asking for their time.

    I am currently a lead developer where I am at, so whether or not my code is good, at the very least it makes money ;). That being said, it’s hard to find communities of people that are beyond that initial getting into coding phase, and already understand APIs, hooks, filters, and what writing your own code should look like. And I get it, a lot of people are looking to get over that initial hump, so the demand for tutorials and posts to those people is high.

    Where did you start to find these communities? And how did you discover people that you could look up to as programmers and get into their community?

    Thanks a ton for your insights!

    • Tom

      However, one of the bigger struggles i’ve found is getting into a community of developers. Unfortunately I don’t know many developers in my area, and finding online communities or slack teams has been difficult.

      Yeah, it can be difficult and it can take time (and a lot of it).

      Twitter was probably the first place that I really began to find communities or pockets of people I liked. It also came from blogs. Sometimes I’d stumble across someone’s blog, read it, maybe I’d comment on it, and then I’d follow and begin interacting with them on Twitter.

      Sometimes it went somewhere, sometimes it didn’t.

      Other times, I might have found someone thing someone retweeted so I began to follow that person and found what they were sharing interesting.

      Perhaps the biggest thing for me, though, has been going to WordCamps (or whatever conference would best align with what you do). That’s where you really meet a lot of people and make some really good relationships. I’ve had some good friendships come out of it to the point where I had two families + their kids hanging out at our place the weekend of WordCamp Atlanta this year.

      As far as Slack is concerned, this is an area where I have to be careful because I can easily get carried away with chat of any sort so I have to really limit my channels and the time I spend in those types of online communities.

      We as developers are a picky bunch of people, which sometimes makes community a bit more rough, since everyone has their own idea of how to do something or the “right way” as I’m sure you see first hand in comments on your posts!

      Indeed.

      This is why I think talking with people face-to-face is best. You get a much better read on someone than when you’re reading direct statements online. Those online can often come off as offensive even if they mean to be.

      And that’s one of the things I think we just have to learn when spending so much of our day online and interacting with others that way.

      Other times, they are meant to be offensive. And in those cases, a thick skin eventually grows and you’re able to just move past ‘em.

      I’m completely self taught from tutorials, blog posts (like yours) and trial and error and haven’t ever had a boss or go to programmer that I could bring questions to.

      Even if you have some type of education behind you, the desire to have people further ahead or mentors available is something that doesn’t necessarily go away :).

      …it also has made it a little hard to gain confidence in a community setting since there is constantly that seed of doubt that wonders if I am doing things correctly, since I’ve never really had any one to point me in a new direction or confirm the direction I’ve gone.

      This is where I think blogging and sharing your code and thought process can come in handy.

      It’s not always easy to take criticism when you’re placing something out there for others to offer their critique and feedback on, but that’s part of what comes with the position. And it’s yet another way I’ve found others are likely to offer input.

      Even if I dislike the way the message is delivered, there can still be truth in what they say and so I try to pay attention to that over the delivery.

      A lot of the time on places like stack-overflow,…

      The community around that site used to be much nicer. I don’t care much for it anymore, to be honest. Sure, there are some great answers but I don’t participate much other than being a lurker.

      Where did you start to find these communities? And how did you discover people that you could look up to as programmers and get into their community?

      I hope I answered some of these earlier in the comment. If not, don’t hesitate to ask me again :).

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

© 2023 Tom McFarlin

Theme by Anders NorenUp ↑