Steps to Becoming a World Class Programmer (In a Lifetime)

One tensions that I’m not sure every goes away for programmers is that of “Am I learning enough?” If it does, I’d like to know when so I can prepare myself :).

Here’s the thing: Technology, and programming specifically, move really fast and there’s a lot not only to keep up with, but to be aware of on a week-to-week basis. Notice that I did not say that there’s a lot of to learn on a week-to-week basis.

https://www.youtube.com/watch?v=52UxIgsC_0g

Very, very early in my career I used to feel as if I needed to keep up with every single new programming language and/or related technology in the software world as it releases.

Talk about a fools errand.

Even as I began working with what is now known as Pressware, I was focusing both on Ruby on Rails and WordPress at the same time. Then something changed: I dropped Ruby on Rails (not because I dislike it – critiques aside, I actually am a big fan of Ruby and what the Rails framework offers), but because I began to think:

“If I dedicated my time to one area rather than splitting it into two areas, could I be a better asset to those whom I’m tying to serve?”

But this question can be generalized even further because our culture releases tons of new stuff every single day, and there’s an implied level of “you should learn this” that comes along with it.

And if there’s not, then either I’m misunderstanding the plethora of comments, blog posts, and other pressures induced by the Internet.

Becoming a Word Class Programmer

A couple of months ago, I shared a video (that received some mixed responses) about a perspective on working that really resonated with me.

The quote was:

Be great at one thing. The world will reward your knowledge of a very narrow field … Be world-class at that one thing. Forget your weaknesses because someone is going to eat your lunch at the stuff you’re not good at.

To be clear, I am not advocating only learning one thing and sticking with those tools until your job security is as is such because you’re the only person in a 100 mile radius who can write that type of code, but I am advocating going deep rather than wide as it relates to learning to write software.

If we don't keep up, this is us.
If we don’t keep up, this is us.

At some point, most programmers realize this: Programming isn’t about the language that you use. It’s about how to efficiently and effectively solve problems using programs.

Languages are easy to pick up, and the more language that you learn, the easier it becomes, but knowing n-number of languages is only going to get you so far. Knowing how to use a language or a set of languages to creatively solve a problem for someone else is something completely different – and that’s what I believe programmers should be after.

Point, Counter-Point (And Counter Counter-Point)

Here are a few of challenges as I see them (not just in WordPress, but in software in general):

  • Our culture promotes constant learning, but constant learning is defined as always learning something in addition to the toolset that you already have.
  • Our culture promotes learning every new thing, but learning every knew thing will make you a jack of trades, master of none.
  • Our culture promotes a deep knowledge of a number of technologies, but how do we develop a deep knowledge when we’re thrashing about technology that are being released?

Obviously, for each of the points above, there’s a counter-pointer. I know, I know: there are likely counters to the counter-points, but the point that I’m trying to make is that, as programmers, we all feel a tension and it’s not one that we can easily deal with because it’s something that we’re faced with on a day-to-day basis.

For me, the questions always comes back to this:

“What do you want to be world class at doing?”

And at this point in my career, I have no shame in admitting that I want to be world class at solving problems using WordPress as a foundation for problem solving. Everything article I read, every technology that I explore, every book that I read all comes back to seeing what I can bring back to the table with WordPress.

Anyway, all of this gets even more complicated when you look at the tools that we have available to help us simply get our work done. Some examples of this include:

  • Should I use CodeKit, or Grunt and Bower?
  • Do I need to know server-side JavaScript?
  • Is the best language to learn PHP, Ruby, C#, …, or what?
  • … and so on, forever.

And the answer of all of these questions is dependent upon where you are, where you want to go, and if you’re able to successfully and effectively solve problems for those for whom you work.

For example, right now, Grunt and Bower are extremely popular among those who are constantly needing to “watch” their project, minify their scripts and styles, lint their work and so on. And don’t get me wrong, they are fantastic tools.

CodeKit offers the same functionality though I’d say it’s probably a bit less flexible. For most of my work, this is what I’ve opted to use. I’ve been happy with it (and I still use Grunt and Bower when other projects require it).

Does this make one set of tools better than the rest? It all depends on the environment in which you’re working. If you need a wide array of packages, more complicated-than-not dependency management, and need to work more with a large team on a large code base, then perhaps Grunt is a better option.

But I’m getting off topic: This isn’t a comparison/contrast post. This is a “are you doing what needs to be done to become a better programmer” post.

Striking a Balance

The thing is, we should be using tools that not only help us achieve our end goal, but that can also help us pick up a few new tricks a long the way.

And that’s how I think you strike a balance: You work on the things that you love with the toolsets that help you be most productive, but you work new tools, methodologies, and approaches into your workflow such that you’re still getting work done while also learning something new.

The thing about programming is that there are tips, tools, and tricks that can be generalized to what we’re doing – like patterns – and then there are platform-specific tools. I’m not saying never branch out of the things that you primarily work with – after all, learning how another platform does something helps you bring something back to your day-to-day – but I am saying that keep things in perspective.

Work hard to become world-class at your primary vocation, fight the tension that induces fear that you’re not good enough, not smart enough, or not capable enough to be a good programmer, and work on mastering those things with which you’re currently working.

I have a very, very long way to go but at least my work is cut out for me.

By now, I think I’m probably talking to myself more and than anyone else at this point, but maybe this will resonate with some of you.

It’s hard to keep up with everything that’s out there, but if I let that make me feel guilty, then I’ll lose focus of what I set out to achieve not only years ago, but just this morning.

I’d rather have a deep knowledge of a handful of things, than a surface level knowledge of a few things, and that’s what I remind myself whenever I feel that tension start to creep.

29 Replies to “Steps to Becoming a World Class Programmer (In a Lifetime)”

  1. “If I dedicated my time to one area rather than splitting it into two areas, could I be a better asset to those whom I’m tying to serve?”

    Focusing on a single thing was THE MOST valuable advise I’ve got from my ex-girlfriend. I also used to write Java, Python, several PHP frameworks and WordPress altogether and focusing solely on WordPress was the way to go for me, as the thing that I enjoyed the most (and happily spent years improving my skills and building my portfolio around it).

    1. I also think that this is a never-ending battle of sorts.

      That is, there are always new tools/languages/frameworks/libraries/etc. that will be released, and I think it’s important for us to stay on top (read: aware) of what comes out, but not everything is something we have to learn right now.

      There are certainly going to be things where we say “okay, yeah, I should probably look into this,” but being aware of the tools that exist help in that we’re able to refer to them when we need them or when they may come in handy.

  2. I think the depth vs breadth problem plagues many programmers — web developers in particular. We generally need to be deeply familiar with at least four language technologies: HTML, CSS, JavaScript, and some back-end language such as PHP. And in many cases, you need to also know how to tweak web server configurations (Apache and/or Nginx), manage a database, do at least a little bit of Unix command-line work, and use a smattering of other tools, such as the ones you mentioned above (Grunt and friends).

    Oh, and on top of that, let’s throw some other layers onto the application framework stack — jQuery, Backbone, and AngularJS on top of JavaScript; WordPress, Zend Framework, CodeIgniter, Phalcon, or Laravel on top of PHP; Less, Sass, or Stylus on top of CSS; Bootstrap on top of HTML/CSS… You know, just for fun.

    I’ve often called myself a “Jack of all trades, master of few”. I’ve been a data analyst turning reams of data into useful charts and graphs (in TurboPascal and Lotus Symphony!), database programmer writing inventory systems, a network manager over Novell and Windows networks, a system administrator over unix servers, WAN routers, and dialup systems, and a web developer using PHP (starting with pre-3.0, when it still stood for “Personal Home Pages”), Perl, ASP, and nodejs. I’ve used WordPress (of course), Drupal, Zend Framework, and CodeIgniter. Before I learned jQuery, I used a dynamic HTML JavaScript library called dx0, created by the infamous _why. I was primarily a back-end web developer for roughly 15 years. And in the last few years, I’ve focussed more on the front-end, improving my JavaScript chops.

    And there are so many other things I wanted to learn along the way. But there’s just not enough time to learn it all. So I mainly focussed on a few core technologies, primarily PHP/WordPress and JavaScript/CSS. Having some knowledge in other areas is definitely a good thing, and you want to at least keep yourself passing familiar with what new technologies are coming out. But you do have to focus your skills on something if you want to be good enough for a client to pay you, instead of someone else.

    1. We generally need to be deeply familiar with at least four language technologies: HTML, CSS, JavaScript, and some back-end language such as PHP.

      Agreed – sure, I think that there are niche areas of development where this is an exception, but generally speaking I’m with you.

      And in many cases, you need to also know how to tweak web server configurations (Apache and/or Nginx), manage a database, do at least a little bit of Unix command-line work, and use a smattering of other tools, such as the ones you mentioned above (Grunt and friends).

      Yep – this is the part that I think, after a point, it’s worth knowing how to maintain it on your local box, but worth paying a managed host to take care of the issues for you. I know not everyone agrees on that point, but I’ve found that the last thing I want to do with my host is to deal with configuration issues more than I’ve already done on my own machine.

      It’s good for learning, and it’s great for knowing how the software is configured – to be sure – but I also think that managed hosts are really nice in terms of allowing us to focus on building things rather than just build and configuring things.

      I know this isn’t exactly what you were saying, though. I’m just sharing my eight cents ;).

      Oh, and on top of that, let’s throw some other layers onto the application framework stack — jQuery, Backbone, and AngularJS on top of JavaScript; WordPress, Zend Framework, CodeIgniter, Phalcon, or Laravel on top of PHP; Less, Sass, or Stylus on top of CSS; Bootstrap on top of HTML/CSS… You know, just for fun.

      Now you’re bringing the tension :).

      …created by the infamous _why.

      Pour some out for him (well, at least his online personality).

      So I mainly focussed on a few core technologies, primarily PHP/WordPress and JavaScript/CSS. Having some knowledge in other areas is definitely a good thing, and you want to at least keep yourself passing familiar with what new technologies are coming out. But you do have to focus your skills on something if you want to be good enough for a client to pay you, instead of someone else.

      With you 100% – especially as it relates to running a business or being a freelancer. The more specialized and focus you get, the more of an expert you will ultimately become which, in turn, can increase your price and the size of projects you’re able to take on.

  3. I think something that makes someone a good programmer is being able to evaluate software, tools, and languages efficiently, to be able to recognize whether it’s a dead-end or something that may actually be a great “whatever” to adopt in your workflow. Acquiring the ability to differentiate and recognize opportunities it/they present or be able to throw it in the trash, or just set it aside for a later day. And that just takes time and experience. Like you advocate, having and knowing exactly what you need when you need it, whether it be Codekit or to switch to Grunt and Bower, like you use as an example, takes a lot of screen-time to be able to decide.

    Your best message I’d say is that eventually you’ll get there, but it takes time. And trial and error and a lot of exploration.

    Totally agree with the going deep route as well. That means you have to be really decisive and committed, though, which not everyone is. That’s why that route generally yields larger rewards. :-)

    1. Like you advocate, having and knowing exactly what you need when you need it, whether it be Codekit or to switch to Grunt and Bower, like you use as an example, takes a lot of screen-time to be able to decide.

      Though I [obviously] agree, I think that there are people who get really dogmatic about this kind of stuff. We end up having people argue – at a religious level – over the things they use. Normally, I’d chalk it up to lack of experience or maturity (and usually this is the case), but as with anything, there are exceptions.

      Regardless, I agree with you :).

      Totally agree with the going deep route as well. That means you have to be really decisive and committed, though, which not everyone is. That’s why that route generally yields larger rewards. :-)

      I’ve been doing the self-employment thing for years now and this is something that’s starting to show the significance the going deep-rather-than-wide. It takes some time (read: years), but you’re right – it will pay off.

  4. Really interesting article. I’m just getting to a point where I feel comfortable with programming some more basic functions. When I first started I was writing PHP, C# and Python. It was too much. But when 20 some percent of the web is wordpress and I really enjoy using it, it’s made sense to shift. Sure I can make my clients a quick hard coded site but the reality is they want to manipulate their own content after development. The only way most can handle that is with a CMS. Tom saying he has a long way to go makes me nervous about my road;) but I’ll just keep learning.

  5. The Lazy Ross in me says YES! The Smart Ross says… YES!!

    Modern economic civilisation is founded upon the idea of division of labour: specialisation. I make this, you make that, together we make something more complex, and the constituent parts are better for it.

    “It’s hard to keep up with everything that’s out there, but if I let that make me feel guilty, then I’ll lose focus of what I set out to achieve not only years ago, but just this morning.”

    I’d replace “guilty” with “inadequate”, and it often feels that way. But you have to repair to those things that get the job done and done well. Focus is critical and spreading yourself too thin makes any job hard and slow.

    Three decisions I’ve made in the last year have been to do with VPS provider, framework and web server software. I went with Digital Ocean, Laravel and NGINX. But, oh, the choices! They don’t have to be exclusive choices but I had to focus. You try to keep your hand in with other stuff. WordPress can pay the bills but I do like Processwire, so I’ll follow that and learn as I can. But all machines have defaults and humans need them, too. Stick with what works, focus and don’t let it make you crazy.

    1. Focus is critical and spreading yourself too thin makes any job hard and slow.

      The challenge in our industry is that it can be hard to focus when so much cool stuff is coming out weekly (sometimes daily) that compete for our attention.

      But all machines have defaults and humans need them, too. Stick with what works, focus and don’t let it make you crazy.

      Well said :).

  6. Nice one Tom!
    Same thing happened with me. I started my studies as an Electrical Eng. and learnt about 20 programming languages and 12 design/video tools to play around with. Spent a decade over this stuff which finally made me think who am I?

    Finally I started what I call a workflow. I will write about it on my blog soon. It is what keeps me alive. My workflow led me to optimize and multitask.

    I listed down all my fears & scary shit. I planned a way to deal with all of them. I had more than three schedules daily, e.g. If I woke up for Fajar (Prayer before the time of sunrise) I had a different schedule if I woke up at 10pm I had a different one, and if I didn’t intend to work someday my workflow told me how to start working again.

    Let me tell you what was I afraid of at that time

    I am going to screw my GPA at Electrical Engineering in UET Lahore. Solution I need to maintain at least 3.5 CGPA out of 4. Which means at least 3 to 5 hours study daily
    I am not good at programming, I need to learn more, which led me to one of an ugliest decisions of learning about 20 languages out of which only 6 are helpful now
    If I can design well I can earn more, I can get a job which pays me more, but how to design? Videos were doing no good. Started freelancing and everything was screwing up, and I don’t know when and how I became a good at design but it just happened. May be because I loved to be a designer and that love kept me working and I learnt Golden ratio rules of aesthetic designing which led me to the concept of breathing space and metaphoric elemental analysis, which in turn made me learn videography at tools like Adobe Premier & Adobe After Effects. I never got a chance to learn 3Ds Max due to less powerful PC (but I learnt the basics when I bought my first laptop)
    So after resolving these three issues. All I had to decide was what I am?

    Electrical Engineer (Got 3.5CGPA & two job offers, one from a company which semi funded my FYP and the other one from a startup which I was a part for about three years and we had won 2nd position at PITB’s Incubator when Groopic was first)
    Programmer (I knew about 20 programming languages, I was good at Web Development, WordPress was love, though I developed in Drupal, Joomla, Magento and others. I had 200 simple Android apps by then in the market place, I could start a career as a web dev or Android developer at any firm)
    Designer (I knew how to design user interface through Adobe Photoshop & Adobe Illustrator. I had command over After Effects & Premier, I was a novice mag designer in Adobe InDesign and I played with Adobe Auditions when I used to sing and strum guitar, with 500+ logo clients at Fiverr and clients through some freelancing sites)
    Blogger & Internet Marketer (When I graduated I had more than 50 blogs out of which about 30 got a great acquisition offer including Freakify.com and I sold them with 50% equity where as when I calculated the earnings through last 8 years I found out being an Internet Marketer paid me a lot).
    Entrepreneurship or Job?

    This was a hard decision. The day I graduated, one of my clients of SEO/SMM called me and invited me to have lunch with him, which turned into an interview and I landed a job at multi-national agency. I left that job after three months when another firm paid me 3 times the money and other opportunities to grow. Here within three months I broke a project of 30 Million PKR ($0.3 Million) and got promoted to Chief Marketing & Sales Executive. I left this job after about 8 months.

    Finally an entrepreneur who joined his own company as the 16th employee. Now I have EE’s Degree, I can get a job in it whenever I want to by struggling for it. I am running 4 agencies. Design/Dev agency with its existence in more than one country alhamdulillah and I am going more global with a recent partnership which is yet to be disclosed, 3 agencies running different WordPress Products, FinkTanks a training & copywriting agency, WordPress Pakistan a startup which is getting built as we speak. And yet I only am using my SEO/SMM skills for my own startups and products.

    So far in love with WordPress and with every passing day I am getting more and more involved with WordPress. Not to stop anyone from doing anything else, but to tell that I love WordPress, I decided to be with it and do it in the most standard and perfect way possible.

  7. I know the feeling of guilt and fear, to feel obliged to follow every single news and trend.
    But one day, a shift of focus, dawned on me.
    From worry about earning my salary, to worry about always being on the cutting edge with the latest technique.
    To get my focus back on track, I decided to go with WordPress alone, and only work with the stack inside WP.
    Inside, the main focus was on Theming, and to feed my curiosity, WP security.
    But it didn’t stop there, I unsubscribed 80% of my Newsletter subscribtions. Only WP related mails for a while.
    A couple of weeks later I felt back on track, and has been since.
    Later on I’ve found, that I needed time to play and experiment with new tools and techniques. I do that on Week Ends and in the evening.

    1. I think your pattern is great – that is, find the set of things you’re going to focus on and then explore and tinker with the newest/latest/greatest during your free time.

      By doing that, you may end up finding that you have something to bring back to your core focus (or you have something to leave behind ;).

  8. Instead of focusing on a single technology, I’m focusing on the type of similar problems I want to solve for clients. Then I learn how to solve those problems in the best way, and how to use the tools I need to create solutions.

    1. Sounds good to me, especially because the more problems you solve, the more you’re going to begin to notice similar patterns for your solutions which will make it a bit easier to continue doing what you’re doing for your clients (both new and existing).

  9. I was programming for 6 month i know html and css master it actually and cureently learnig javascript

    But i not want be font end developer

    i want to be applicaition developer(that includes creating games right?)

    I want know if application developing needs javascript in it plz help me

    1. i want to be applicaition developer(that includes creating games right?)

      A game developer is usually called just that (rather than an application developer). In order to do that, most programmers use languages such as C++ and graphics libraries in order to build their games.

      I want know if application developing needs javascript in it plz help me

      You can build applications with JavaScript, but it includes getting familiar with other technologies like Node.js and those tools that allow JavaScript to run on the server-side.

  10. I am just a beginner in PHP programming , I want to learn more, your POST will help me to persuade my mind that its okay just learn things what is required at the moment , and lead a peaceful life …..

    OMG! my mind says pleeeease…. learn at least two more languages other than PHP .. .. :D

    Thanks TOM . I respect your honest opinion…

  11. Hi tom,

    This article is an eye opener for me as regard focusing and mastering HTML CSS js, php and ultimately WordPress.

    WordPress has made me more than 80% of my freelancing earning so why won’t I devote more effects in learning and improving on it.

    This article is awesome.

Leave a Reply

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