The Yin and Yang of Programming
There’s two types of programming, and one is far more important.
Yang
In Chinese Philosophy, Yang roughly refers to direct action. Examples:
To implement a feature, write code
To debug, read the code and think really hard
To recruit, message people and take calls.
Higher level yang is more yang.
More features? Write more code.
More recruiting? Message more people.
Yang is very easy to do and it’s easy to add more yang. If one person can message 10 people a day and you want 50 messages/day, hire 5 people. This analogy works really well with machines, but also kind of with people.
Yin
In Chinese Philosophy, Yin roughly refers to indirect action. Examples:
To implement a feature, find a way to re-use existing featues to get the desired behavior.
To debug, get the computer to log state so you don’t have to think so hard
To recruit, get a celebrity endorsement (ex. raise a series A with some top VC)
Higher level yin is smarter yin.
Here’s some examples:
Want more features? Design a better framework that can solve more problems. Here beter creativity and design sense leads to better yin.
Better More recruiting? Get a better vc who will attract more people. Here better connections or salesmanship or whatever you do to get a better vc is what matters.
Which one do you need?
Both. Getting stuff done requires both doing something with technique. But in programming, yin is what separates the wheat from the chaff. Programming’s got 2 things going for it.
You’re not solving the end problem directly, you’re telling the computer how to solve the end problem directly. And in practice, giving a computer more instructions (yang work) is not usually what it takes to do the job better.
You can write programs that write programs. This means if you are in a position to do more work, you can get your computer to do it. And computers can type one million times faster than you.
How to get better at Yin
Yang’s easy. Just do it. America (due to protestant values) are extremely high yang, so there’s tons of advice out there on how to “just do it.” Sales culture also encourages high yang due to sales being more yang, less yin.
Yin’s hard. You can’t just do it. You can’t get better at “working smart” by spending a lot of time “working smart”, then you’re doing yang. This is how a lot of “hard working people” stay bad programmers. Instead, you have to learn from feedback. You need to read to learn techniques and get ideas. You need to talk to people about how they’ve solved similar problems. You need to think about what you did and how to do better. You need to identify high yang situations, and think really hard on how to avoid working hard while getting the same results. Try really hard to apply yin before you buckle down and apply yang.
An example
When I learned the virtue of well laid out code in 2013, I fixed code by hand. Lots of yang. Lots of time. A total waste. But, eslint wasn’t popular yet and I couldn’t code my own, so high yang, by hand it was. In 2022, we have eslint. Use it, that’s high yin. Same (if not better) result, much less effort.