I feel like it would be useful for programmers, as a field, to acknowledge that humans are bad at programming.
This is because techniques for improving at things you're bad at are different from techniques for improving at things you're good at.
E.g., blunder avoidance is generally high ROI when you're bad and I've gotten a lot of mileage from trying to avoid blunders.
If I look at how other people operate, they often do really sophisticated/complex stuff that's net ineffective because it increases the rate of blunders.
My opinion that humans are bad at programming (relative to how good we are at, say, chess or skiing) seems like one most of my most ridiculable opinions (almost no one I talk to agrees, most people think it's a very stupid opinion) but IMO It's also very obviously correct?
My opinion comes in part from looking at how people train for and improve at things we're good at vs. programming.
E.g., look at skiing. I was just talking to a skier who was on the Canadian national team for three ski sports about their training/coaching regimen.
I asked this person why she didn't do moguls competitively when she learned to do moguls as she learned to walk and the answer was that there weren't moguls coaches in western Canada, so to be good enough at moguls to compete, she would've had to move to eastern Canada by age 7.
There was a similar answer to why she dropped out of downhill when she was in high school.
Westerns for XC and downhill, which were qualifiers for the national team and ∴ for coaching, were on the same weekend and there was no way to keep up after missing a year of coaching.
At the time she dropped out, she was maybe the #3 or #4 downhill skier in Canada for her age group, plausibly better at skiing than I've ever been at anything.
But we're so good at coaching people to become better skiers that someone who isn't a generational talent can't even be in the same league as humans with coaching if they miss one year of coaching.
Compare that to programming, where we basically have no idea how to improve.
Blanket advice to programmers is all over the place and often directly contradictory.
If you look for programmers who are relatively good at programming, they frequently do the opposite of the most common advice, etc.
The fact that I go looking for programmers who are effective to see what works for them seems unusual.
AFAICT, most people who give advice don't look at what's worked in general and what hasn't worked and just tell people some form of "do what I did".
How you should approach improvement is very different in an environment where we know how to make people good, like skiing, where we can observe that advice is often very effective, vs. in programming, where we can observe that most advice is useless or counterproductive.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
I feel like this is true for lots of kinds of conversations and not just tech interviews.
People are correctly pointing out that, if you dig into the logic of basically anything, it falls apart, but that's also generally true of actual humans, even experts.
is ridiculous, but have you tried asking an expert coach on almost any topic why you should do X?
E.g., try listening to one of the top paddling coaches in the world explain *why* (the what is good, the why is nonsense)
Why do you let the boat "run" between strokes? The explanation is because the boat is moving at top speed when you remove the paddle from the water, so putting the paddle back in slows you down.
But of course this is backwards. The boat decelerates when you're not pulling,
What are examples of items/categories where you're really getting your money's worth at the high end, not necessarily in terms of utility, but in terms of the difficulty of producing the item more cheaply?
I find the contrast between these vs. "brand" items fascinating.
An example of a category that doesn't qualify but where some items qualify would be high-end fashion, where you're quite often mostly paying for the brand (e.g., an expensive Theory shirt) but there are plenty of items where you're paying for the item (e.g., a $5k Kiton suit).
An example of a category would be high-performance cars (with the notable exception of a few very niche brands like Ferrari, which are famous for having very high margins).
Even if you look at brands that laypeople consider to be "brand" purchases, like BMW,
Lots of people in my mentions saying things like "Elon is cleaning house! Lazy bums are getting what they deserve!", as if Twitter employees are getting a much deserved comeuppance.
Since people don't seem to understand what the bums at are getting, here's a short primer:
If you look at the people most responsible for Twitter's state, leadership, they had golden parachutes worth tens of millions of dollars
We can debate whether or not they deserve the money, but if you think someone is a lazy bum, cursing them to receive a $10M+ payout seems odd
If we're talking about engineers, Twitter has historically underpaid long-tenured employees relative to BigCo market rate.
The median raise the staff+ people I'm talking to are getting in their new offers is six figures.
One of the things that I think is sad about the decimation of Twitter eng is that Twitter was doing a lot of interesting (and high ROI) engineering work that, at younger companies, is mostly outsourced to "the cloud" or open source projects
The now gutted HWENG group was so good at designing low power servers that, in a meeting with Intel folks, discussing reference designs vs. what Twitter was doing, the Intel folks couldn't believe the power envelope Twitter achieved.
Twitter was operating long before gRPC existed, so they built Finagle. kostyukov.net/posts/finagle-… has some nice explanations and there's been a lot of innovation in Finagle since then.
Twitter still gets a lot of mileage out of owning its RPC layer
Nice thread about the misconception that major tech companies run systems that can run without intervention because they're automated
The example comes from Google, which is more automated compared than most major companies (MS, etc.), but still quite manual in an absolute sense t.co/diqwJ3RHZH
One thing that's been interesting about recent events is seeing how people imagine big companies operate, e.g., people saying that Twitter is uniquely bad for not having a good cold boot procedure.
Multiple $1T companies didn't or don't have a real cold boot procedure.
One of them is one of the most respected eng orgs on the planet and SREs there wonder if it would take weeks to come back up or months.
As someone who thinks a lot about risks, this isn't how I want the world to be, but it is how the world actually is.
An interesting thing about this claim is that not only is the implication wrong, Twitter probably has better evidence of its wrongness than any other company in its size class could have.
There are very few companies that have a better distributed tracing setup w.r.t. getting actionable insights on the backend and the ones that have a better setup are much larger (Google, FB, etc.)
Twitter client tracing also punches above its weight.
Of course, the key people who did that work left or got laid off, but it's clear from the data that, if you're looking at why Twitter is so slow in, e.g., India, Uganda, etc., esp. on slow devices, tail latency comes from the network due to unreasonably large payloads + client.