The Recovering Programmer (2010)
prog21.dadgum.com
prog21.dadgum.com
But the world is not objective. As much as we try to claim objective knowledge, the world is too complex to be proven. We inevitably call upon models, we inevitable omit data, we inevitably read bias into our evidence. Instead by claiming our objectivity, we're sanctifying our subjective ideas. If I claim that Keynesian economics is objectively correct, I'm not giving an objective proof, I'm simply trying to sanctify Keynesian economics as an infallible truth.
And by making that claim, I'm neglecting the empathy to comprehend that other people very well have their experiences and their data that indicates Keynesian economics is false.
“Art should comfort the disturbed and disturb the comforted.” How can I work on comforting and disturbing the person in front of me in a way that elevates the both of us?
If one is engaged in appreciating, They probably aren’t judging? Sounds nice - maybe
That is such a good phrase, is it a quote from somewhere?
"Science may wrangle over the supposed movements of molecules and atoms, and the correlation of forces; may dissect the bird to find its song; but love alone shall set the boundaries of knowledge."
We still need to face reality, so the sceptic can’t take over the asylum, but we shouldn’t act as if the patients monopolise faulty logic. Just the act of listening and trying to really understand what is being communicated, informationally but also emotionally, is also a view we get of ourselves from outside our local system.
Empathy is a lot like that. Understanding that others have had different circumstances, which led them to different thought processes, which we should try to understand and validate. There’s richness to be found in those differences as well. Deep understanding of another allows directness, vulnerability, and passion to shine phosphorescent.
I should say that none of this means there's no such thing as objective reality. There (probably) is some kind of objective reality underlying all of this. But we don't have access to that. All we have access to are the incomplete, quirky, partially-wrong realities that live in each of our heads.
As we can see, you won't impress most people with it, they prefer someone who exudes confidence. If he is right or wrong does not matter much it seems.
When Google writes about how they saved a few bytes by designing their own serialization format and serialization, it makes me, as an engineer who never really cared about those things, feel insecure in my technical decision making. When AWS writes about how they invested tons of effort into improving the performance of EC2 by a couple of percent, it makes me feel insecure that I'm not even measuring my software enough to know if performance has improved by 5%. When Uber mentions the software system they designed to catch a certain rare edge case, I feel insecure because I know I'm not considering all the possible edge cases.
And slowly building 'high-quality' software starts to feel like a Herculean task - there's so much that needs to be thought about! And as my list of tedious-shit-I-need-to-consider grows, I start to lose the joy of programming.
But over time I've realized that not caring about those things isn't a reflection of the quality of your engineering - it's a reflection of the scale you're working at. In a field where there is no limit to how complex we can make things and where there is never enough time to do everything we can dream of, building high-quality software is about knowing what problems aren't worth solving and which ones are. If you have 10 customers, it is poor engineering to spend time enumerating all the 1-in-100,000 edge cases. Write code that fails in the best way possible, that notifies you if this starts to become a common problem, and move on.
Places like HN don't help. There is always a world-class expert ready to give their opinion on how you should be doing things better. But it is important to remember that these people are experts in that area of software - not experts in whether that edge case really matters to your product or experts in how you should be allocating your time.
I used to feel like an imposter before I worked at a FAANG and I realized that they aren't better engineers, they just have more reason and time to focus on the small details.
I recently rebuilt a website I built in high school circa 2001 in a modern framework to make it more maintainable. It was PHP 3 / MySQL 4 when I built it. It only ran as it was with a number of polyfills for long gone language features.
The original site was wacky, completely different layouts for different pages, some with characters that tracked your mouse. A ton of creativity. I redesigned in 2008 into a reasonably standard blog format. Looking back during this latest rebuild I feel like so much was lost in that redesign.
The point of having a website when I was in high school was not to write code, it was a place to pour my ideas. Somehow somewhere in the last 20 years the means to an end became the end, and I am not sure how I feel about it.
I’m certainly not the well of creativity I once was, but at the same time the things I do produce are of much higher quality. Is that just the innate balance of life? I really can’t say. Getting older is strange.
"And I realized that the inherent bitterness and negativity of programming arguments and technical defensiveness on the web were making me bitter and negative. "
And indeed this :
"I've consciously tried to rewind, to go back to when programming was a tool for implementing my visions."
At over 50, implementing from a user perspective rather than from boorish technical perspective gives me a fantastic advantage over just technical programmers.
I've disovered the same as this guy.
https://news.ycombinator.com/item?id=23528483
[1] I'm legacy enough to claim one should first design state, then decide on stack: "Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious."
[2] Bonus clip: https://www.youtube.com/watch?v=o__2ks4XWho
But in practice I'm stuck on the one side in analysis paralysis, and on the other I feel like what is pushed as best practices is slowing me down and adding a lot of boring, fragile boilerplate (use case: adding a field means changing structs and conversion functions in 3-4 packages).
I'm seriously thinking of just flattening everything again and work from my database representation, because right now I'm not moving very fast and adding / changing fields feels daunting. And it shouldn't, because that should be the easiest part, and it's something I've done for so long already.