Surprise Inherent Diversity

Can't force yourself to keep your back straight? It's a symptom, address the other part of your body first.

Making peace > searching for truth.

The lost art of X: a recurring theme among many, or probably all of the craftsmanship. Someone on reddit says:

old.reddit.com/r/programming/comments/bq1dt6/jonathan_blow_preventing_the_collapse_of/eo2b3da
There are components of the moon shot that we don't know how to make anymore. A specific example: at one point either NASA or Boeing (I forget which) had to go cut a sample out of a heat shield at the air and space museum and reverse engineer the materials and construction because they had lost the records of how it was manufactured in the first place.

Whether it is in fact true or not, it's not hard to imagine that it is. Something like that probably happened to you, digging in your own old work.

Jonathan Blow had a talk about this:

youtube.com/watch?v=pW-SOdj4Kkk:
Jonathan Blow - Preventing the Collapse of Civilization

And recently had another take on Twitter about the state of the art that are computers:

threadreaderapp.com/thread/1154442285494329344.html

Only a tiny minority of professional programmers have a clear picture in their minds of how fast modern computers are. 99.9% have next to no idea. How does this affect software that is even conceived? (Ignoring, for a moment, what is actually built, which we know is very slow).

How big of a problem is it that we have this crucial craft, on which we are knowingly staking the future, and almost none of its practitioners understand the fundamental tool they are using?

(For the record, I don’t place myself in the top tier re understanding of speed or anything else. I am somewhere in the middle of that gradient between the 99.9% and the People Who Really Know.)

We see all this bad rhetoric claiming “system X is only 2x slower than native code therefore it’s fast”... but one must ignore rationalizations and look at the actual output, which is several orders of magnitude inefficient. Few people are willing to put 2 and 2 together here.

The most common objection to these points is "we write slow software because it lets us make things faster and more easily". I agree this is the common belief, but it's wrong. If development is so much easier, why is productivity approaching 0 over time?

Replies seem to be rat-holing on the old well-understood concept that software is slow. Yeah, we know, I have said that many times (and said to ignore that this time). What I am highlighting here is a deeper issue: programmers don't really know what computers are any more.

Speed is one dimension of understanding that's lacking; the picture of speed in programmers' heads is 2-4 orders of magnitude too slow. It's easy to see and understand this, which is why I brought it up. But it's not the only dimension of missing understanding.

To make the speed point again, for an attempt at clarity: Programmers have a picture of their computer, in their minds, that they use to figure out what to do. For 99.9%+, that picture is inaccurate: the imagined computer is 100x-1000x slower than the real computer.

This will result in software that's too slow, obviously. But it also affects what one thinks is possible, what one dares to imagine to do. That is the more important part. Humans are very example-based, and if our examples are wrong, where they lead us will be wrong too.

To which someone else on reddit replies:

old.reddit.com/r/programming/comments/chw76u/jonathan_blow_only_a_tiny_minority_of
The most common objection to these points is "we write slow software because it lets us make things faster and more easily". I agree this is the common belief, but it's wrong. If development is so much easier, why is productivity approaching 0 over time?

This is like saying that since cars don't instantly get me to my destination I should travel everywhere on foot. Sure cars aren't perfect, but they are still much faster than the alternative.

This is really shitty logic.

This will result in software that's too slow, obviously. But it also affects what one thinks is possible, what one dares to imagine to do. That is the more important part. Humans are very example-based, and if our examples are wrong, where they lead us will be wrong too.

Why is it that program speed creates possibilities when development speed doesn't? He of all people should know that you don't have infinite time to develop something, and even if a program is good, if it takes too long to develop then it's not going to get built. He said as much when talking about Rust when he said he couldn't use it for game development since it introduced too much friction.

I agree with him. Computers aren't being used to their full potential, but if you want to fix that, the problems go much deeper than "gitting gud".

This isn't a new view, there are similar ones in the Twitter thread, and countless ones before in various related discussions.

Both sides don't touch on nuances (there are whole books written about it); neither are wrong, though. Simply admitting this would make a lot of arguing on the internet just vanish. Unfortunately, often this isn't what participants of the discussion are after.

But this piece will go somewhere else. Let's git gud!

Surprise

You don't get to the Moon by downloading another dependency for your flight control software. This isn't surprising to anyone.

You have to think and write it by yourself. Obvious and in no way surprising, still.

Is it really obvious, though? Because it can go surprisingly wrong:

twitter.com/james_hilliard/status/1084222874515210240
On the other hand updating packages like OpenSSL without updating the application using it can also be dangerous, for example https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-January/007097.html could have caused a major consensus failure in Bitcoin. Bitcoin Core statically links OpenSSL for that reason.

Something akin to that also might've happened to you. You've fixed and forgot all about it, not taking a note how it may repeat again, thinking only how computers suck.

Do you pay enough attention to things? Are you actually thinking as much as you think you do, before feeling tired, annoyed, or what have you?

This is the Surprise part, albeit the simplest of the three.

All you really have is yourself, and only yourself. There is no app for this. You can never really depend on anyone, or anything else. Your own mind is your biggest strength, not the computers that we are striving to make do things for us.

You still have to think about what to ask the computer to do. Then you you have to program it to do it.

Did you want it to get you the result from the first try, without crashing, and fast? Why not to think about how to get there, instead of wasting time and money on figuring out why it didn't, post-mortem afterwards? How much faster did you really put out your product on the market? How much did you save from maintaining the resulting mess?

No matter what anyone says is right, no matter what is the latest hot take at something, think for yourself, first. You are already doing it, and always did. The surprise is in realizing you've had it all all along. Take it to the next level, for we are capable of much more. As it is our...

Inherent

It's inherent to us. So much in fact, that overthinking, or paying too much attention to something that doesn't deserve it, leads to depression, malaise, procrastination. In the end feeling completely lost, not knowing what to do. You may want to start thinking again, but it just isn't happening. Or maybe your brain is so excited about everything, that it's indistinguishable from perceiving this as suffering.

But take this as a proof that this is who we are and turn it around: you are not someone who is just following behind the thinkers, you are one.

And as you can imagine, aforementioned thinkers didn't get to the place they are at by overthinking — you've got to work on how to think.

How about this:

youtube.com/watch?v=LIb3L4vKZ7U:
CppCon 2015: Andrei Alexandrescu “std::allocator...”

Sometimes you actually don't need to get all smart. Or rather, this is the state that you want to be in all the time. Just start pulling the thread and pay attention.

This is how I've arrived at the title (one word-subject by one), first, and then the contents of this writing. It was right before me and I let it flow. It started from seeing that the pursuit of making the computer do things for me leads to the opposite direction, as We Are Not There Yet; and how it doesn't bring any peace and satisfaction of solving yet another problem on the path of reaching an infinite flexibility for everything — turns out, that path is also without end. So what do you do? At some point you'll stumble upon question without a (real) answer (youtube.com/watch?v=MO0r930Sn_8: Richard Feynman - why it can be hard to answer “why magnets repel each other?”), where you have to recognize it as such. For now, there needs to be a line. And when things get simpler, all of the sudden it actually starts to do stuff I've wanted from it.

Overthinking is a huge problem in our business. It leads to complication, which results in a myriad of problems. Wanting to use anything and everything under the Sun is what newbie programmers do; or how you play a video game, but this isn't how you make one, as it will be completely unplayable.

Stop thinking and start paying attention.

Diversity

Where would we be without you and the ones before you? Before we started to think, this was — and still is — what is inherent to the nature: diversity. And we are the product of the nature. We are the nature.

The thinkers and creators you admire did not went on copying their own subjects of admiration. Neither your own path can't be copied from them. It's not a guide to follow 1:1, nor it's a ruleset set in stone.

To push anything anywhere, we have to break through the bounds. If you're not doing it, it's a yet another missed opportunity for both yourself, and everyone now and in the future.

To break through the bounds, you can't stay content with a groupthink. Whether it's an ideology of sorts, or even thinking "It's just too hard, I can't possibly know and keep in mind all of that". You can. Because this isn't you, not the one that can't, but the one that thinks so. Or caught up in a theme running among your peers.

...

This isn't to say that we don't need to make it easier, exactly the opposite. Though we won't get there if we don't start to think harder, and to think what we are thinking about, when not to think, and when think differently.


August 2019, asd.im