I sometimes jokingly say to friends, 'always be on the attack', or 'be like a tiger'. It is in jest, but the root of it is about proactivity. Focus on what you can control
I reflected recently about the moments where I felt the happiest. The moments where I saw the largest gain, or experienced person growth. During these moments, the one constant was that I was thinking about something greater than myself -- family, team, friends.
Then I thought of the moments where I was the closest to causing irreparable damage. In these moments the constant was that I was internally focused, worried about myself, anxious.
Bertrand Russell once wrote a piece that I am about to bastardize, but it has been hugely impactful for me since I read it. He said, when working on complex problems, think as hard you can about it, then stop, and go about your day. Be okay with not being able to produce an answer, or do something right away. Let your mind think it over, the answer will come
We're taught that keeping our options open is always good. But, the more I mature, the less good I see in that path. It introduces anxiety, and reduces how deep you are willing to go, how much you're willing to put on the line, how much pride you take in what you do.
In most programs, it's best to have a single app state, that trickles down, and are handled by pure functions.
Erlang takes quite a different approach. There are Supervisors, and Actors, which encapsulate internal state, and talk to eachother via messages.
This seems more complex, but actually, it is simpler when looked at by the lens of distributed software. It's complex to keep a single state in sync when you're across datacenters.
What Erlang does is, to essentially embrace the distributed nature of the problem, and goes by the assumption that if each Supervisor takes care of what it's responsible for well, then the system will work.
This was a pretty breakthrough parallel for me, in my task management. Instead of trying to build a top down system, it's all about making sure the small parts work well.
Getting Things Done, by David Allen, is the Erlang of task management x)
Stupid decisions get made when one thinks that something has to happen, now.
The reasoning is usually that if it doesn't happen now, it will never happen, ever.
This is true for only 1% of problems. For the rest, patience will get you there. Know, with full confidence, that you will get what you want, with effort ant patience.
Recently I saw a disagreement two people I loved, and I just yelled at both of them.
That only makes it worse, embarrasses both of them, and entrenches them in their choices even more.
Instead, I should have practice empathetic cool. Not getting angry, but lovingly showing them the reason each person was acting the way there were.
Every experience is a tool for learning. See opportunity in that. Get thrilled about it, double down!
As we navigate through our lives, we start to see bribes, disguised as wants.
Analyze your actions, and ask, why I am doing what I'm doing?
Is it because of these new bribes? Focus back in on the core.
In software engineering, the current atmosphere is relaxed -- you go at your leisure, there are no real deadlines, you don't have to take care of yourself, you barely need to grow.
Compare how people approach software engineering, or any profession, to that of an athlete. The athlete, is constantly pushing further, getting 1 on 1 instruction, being meticulous about form, extreme about discipline.
Let's raise our standards.