Good Programmers Know More About Feelings Than Computers

I was reading this blog about learning to program by Peter Norvig.
He refers to the many books claiming that you can teach yourself programming in 24 hours, but he says really this takes more like 10 years. I agree you can’t do it in 24 hours. I’ve been learning for quite a while: I started learning BASIC when I was 15. I’m 34 now and working as a paid developer. 19 years and I still don’t feel like I’m there yet. I’m glad to be doing something where I can keep learning all my life and never have learned it all.

What I don’t agree with is his advice. Well, it’s okay. It’s just incomplete. It misses out all the human parts about being a developer. I mean sure, learning syntax and other languages is good. Reading code, super useful. Understanding how computers work and how long they take to do things…yeah yeah sure.

I think it all rests on the assumption that the better you get at writing code and dealing with complexity, the more valuable you are as a developer. That the goal is to become as much like a machine as possible. When really it’s about becoming a more aware human.

Here’s what I’d add to the list:

  • Be curious. Whether it’s about a code problem or a team dynamic.
  • Learn to recognise what you are feeling in your body.
  • Exercise
  • Practice mindfulness
  • Learn how to learn: read about growth vs fixed mindset. Observe what a learning curve feels like. (Normally part of it feels shit. And it can be worse for people who have a hangover from a shitty education system.)
  • Learn how to teach. Teaching hones your communication skills. Excellent devs are often excellent communicators. There is a reason why. Teaching forces you to understand something deeply.
  • Learn how to spot your ego in your work. And how to let it go.
  • Learn what you do when you’re ashamed or challenged. Do you attack others / attack yourself / avoid / withdraw?
  • Learn how to give and receive feedback. Practice it.
  • Become an observer of group dynamics. Become aware of the different ways of serving a group.
  • Have fun with code. Play. Make toy projects. Make art.
  • Give up on “perfect”. Prefer iterating, and being happy with good enough.
  • Learn about privilege. Follow a diverse range of tech people on Twitter. Listen to them.

I think all these things kinda fall under a couple of general themes:

  • Be someone other people enjoy working with. You’ll like it. They’ll like it. And you will all get more done.
  • Hack your internal experience to make yourself better at problem solving, learning, and working with others.
  • Practice compassion towards yourself and others. It’s the grease in the gears of all these other skills.

About me: I first got paid to code writing C for micro-controllers at a company where I worked as an Electronics Designer. I was not very self aware and had been living with some pretty crippling anxiety.

Later on I attended Enspiral Dev Academy, then stayed on as a teacher there. This is where I learned most of these skills and got to practice them. Much of what I learned came from being a student of joshuavial. It was a period of intense personal development and probably the most important thing I’ve ever done in my life.

As a teacher at Dev Academy I was lucky to work 100+ people from a diverse range of backgrounds as they learned to code and discovered more about themselves.

I now run a co-operative with mix irving called protozoa. We do contract web development, embedded dev, open source, and pioneering work on parts of scuttlebutt.