It took me 8 years of combined experience coding and teaching how to code to internalize these 16 lessons on how to be an effective programmer (and generally effective human).

I'll teach it to you in 5 minutes.

1) Interest always trumps extrinsic motivators.

Honestly ask yourself: do you actually like to code?

The issue with being told that "anyone can learn to code" is that it can be interpreted as "I should learn to code because XYZ".

The only really good reason to pursue a career in coding is if you actually find enjoyment in coding.

Don't learn to code for the wrong reasons like:

  • money
  • status

You won't be happy. These are external motivators, and they do more harm than good. More on this later.

Here's a quick litmus check: Do you lose track of time when you're stuck on a coding problem?

If so, chances are good that you're headed towards a career you'll enjoy. You'll be doing a lot of this kind of problem solving.

2) Coding is more about learning to read code, not writing it.

Can you distinguish good code from bad?

  • Designers must learn to see good design.
  • Musicians need to learn to hear good music.
  • Architects need to learn to feel a well designed physical space.

Programmers are no different. Learn to see good code, and you'll innately be more adept at improving your own code than peers that can't distinguish good code from bad.

Good taste equates to higher potential.

3) Pick any language and learn it deeply.

There are fundamental constructs that are shared between most languages.

If you can decipher the construct at play behind the language of your choice, picking up a new languages becomes much easier.

4) Discomfort is learning.

Learning literally feels like failing.

Be okay with this. Learning requires that you go from a place of not-understanding to understanding. You're going to feel inadequate when you don't know something.

Fight the urge to back down when this feeling of inadequacy strikes. This is a constant internal battle that's worth fighting.

You'll improve much faster than your peers if you embody this.

5) Invest in your tools.

  • Get a good keyboard and mouse.
  • Clean them regularly.

Pay your tools the respect they deserve.

You're going to be in front of a computer a lot. Make it enjoyable and show your appreciation for your tools.

It'll ground you and give you more joy.

6) Think like your manager's manager

Understand how your work fits into the bigger picture.

Never underestimate or undermine your own decision making ability. Take ownership of decisions and follow through. Don't just be told what to do.

Contribute to the direction of the product that you're building.

7) Think like a craftsman

As an engineer, you're responsible for, among other things:

  • Teaching others about technical constraints
  • Identifying non-negotiables for code health and system longevity
  • Having the foresight to see how changes to your your system will affect other systems

Your opinions matter because you know the internal workings of software systems.

Don't take this responsibility lightly.

8) Work like a craftsman

Stop obsessing over external motivators like

  • money
  • status
  • perks

External motivators ERODES internal motivation

Code for the sake of coding. Treat it as the end, not a means to an end.

It's the only way you'll enjoy coding over the long haul of your career.

9) You do your best work in long blocks of focused time

at certain times of the day, to be more specific.

Audit how you work and capitalize on this knowledge and work your schedule around it.

I like two 90-min blocks in the AM and two 90-min blocks later in the afternoon.

10) You can only code so much in a day before your brain gets foggy

Save technical doc writing and non-coding tasks for your least productive hours.

For me, this is lunch and post-lunch / early afternoon. I usually take a small nap during this time to get back on track.

11) Staying up late will ruin your ability to focus the next day

Sleep is the most underrated performance enhancing drug (if we can call it that.)

This is true in sports as it is in cognitive tasks.

Prioritize sleep. There's no substitute for it.

12) Exercise smart

A sedentary lifestyle will wreck your body slowly over time. You won't see it coming.

Start exercising by:

  • Focus on 10 minutes a day
  • never miss a day
  • keep track of progress

Worry about "getting fit" later.

13) Money is not everything

I recently took a pay cut to work at a start up because

  • I liked the people
  • Increased responsibility and more ownership
  • Preferred tooling

It's okay to make emotional decisions based on personal preference, especially if it's going to make you enjoy work more.

After a certain amount of money, your general attitude and mood affects you way more than having more money in the bank.

14) If being wealthy is your goal, pursue entrepreneurship.

Not coding.

Coding will get you a cushy middle class lifestyle, not make you filthy rich.

There’s an upper bound to your hourly wage as a worker in a company versus owning the company.

15) Don't lose touch with your human side.

Whatever part of the stack you build for, always remember that the final effect is to improve a human life.

Computers don’t care what kind of optimizations we make.

People care.

Do things for other people. This will keep you sane.

16) Don’t underestimate the power of going above and beyond for someone else,

whether that’s a customer or another engineering team member or your manager.

Over delivering makes working more meaningful and enjoyable.


That's a wrap! Hope you found it insightful.

16 Lessons Learned From 8 Years of Programming Experience