Saturday, April 11, 2020

Your statement is 100% correct but misses the entire point

Let's assume that there is a discussion going on on the Internet about programming languages. One of the design points that come up is a garbage collector. One participant mentions the advantages of garbage collection with something like this:
Garbage collectors are nice and save a lot of work. If your application does not have strict latency requirements, not having to care about memory management is liberating and can improve developer efficiency by a lot.
This is a fairly neutral statement that most people would agree with, even if they work on code that has strict real time requirements. Yet, inevitably, someone will present this counterpoint.
No! If you have dangling references memory is never freed and you have to fix that by doing manual memory management anyway. Garbage collectors do not magically fix all bugs.
If you read through the sentences carefully you'll notice that every asserted statement in it is true. That is what makes it so frustrating to argue against. Most people with engineering backgrounds are quite willing to admit they are wrong when presented with evidence that their statements are not correct. This does not cover everyone, of course, as some people are quite willing to violently disagree with any and all facts that are in conflict with their pre-held beliefs. We'll ignore those people for the purpose of this post.

While true, that single sentence ignores all of the larger context of the issue, which contains points like the following:

  • Dangling reference out of memory errors are rare (maybe 1 in 10 programs?) whereas regular memory bugs like use-after-free, double free, off by one errors etc are very common (100-1000 in every program).
  • Modern GCs have very good profilers, finding dangling references is a lot easier than debugging stack corruptions.
  • Being able create things on a whim and just drop them to the floor makes programmers a lot more productive than forcing them to micromanage the complete life cycle of every single resource.
  • Even if you encounter a dangling reference issue, fixing it probably takes less time than would have gone to fixing memory corruption issues in a GCless version of the same app.
In brief, the actual sentence is true but misses the entire point of the comment they are replying to. This is sadly common on Internet debates. Let's see some examples.

Computer security

A statement like this:
Using HTTPS on all web traffic is good for security and anonymity.
 might be countered with something like this:
That provides no real security, if the NSA want your data they will break into your apartment and get it.
This statement is again absolutely true. On the other hand if you are not the leader of a nation state or do regular business with international drug cartels, you are unlikely to be the target of a directed NSA offensive.

If you think that this is a stupid point that nobody would ever make, I agree with you completely. I have also seen it used in the real world. I wish I hadn't.

Bugs are caused by incompetents

High level programming languages are nice.
Programming languages that guard against buffer overruns is great for security and ease of development.
But not for everyone.
You can achieve the exact same thing in C, you just have to be careful.
This is again true. If every single developer on a code base is being 100% focused and 100% careful 100% of the time, then bug free code is possible.  Reality has shown time and time again that it is not possible, human beings are simply not capable of operating flawlessly for extended periods of time.

Yagni? What Yagni?

There's the simple.
Processing text files with Python is really nice and simple.
And not so simple.
Python is a complete joke, it will fail hard when you need to process ten million files a second on an embedded microcontroller using at most 2 k of RAM.
Yes. Yes it does. In that use case it would be the wrong choice. You are absolutely correct. Thank you for your insight, good sir, here is a shiny solid gold medal to commemorate your important contribution to this discussion.

What could be the cause of this?

The one thing that school trains you for is that being right is what matters. If you get the answers right in your test, then you get a good grade. Get them wrong and you don't. Maybe this frame of mind "sticks on" once you leave school, especially given that most people who post these kinds of comments seem to be from the "smarter" end of the spectrum (personal opinion, not based on any actual research). In the real world being right is not a merit by itself. In any debate being right is important, of course, but the much more important feature is being relevant. That requires understanding the wider context and possibly admitting that something that is the most important thing in the world to you personally, might be completely irrelevant for the issue at hand.

Being right is easy. Being relevant is extremely difficult.


  1. thid kind of behavior (pretty common) should have a name...

    1. maybe "off topic" or "irrelevant"

    2. Ignoratio elenchi, or irrelevant conclusion.

    3. Yes, it is called the Moving the Goalpost fallacy. When someone changes the circumstances and the goal of the argument and then proceeds to say that the argument just made by the opposite side is wrong because of those circumstances when this was not what the opposite side was talking about when they made their argument.

    4. Looks like it's the straw man fallacy.

    5. It's called being a Contrarian

    6. Just "being a dick" will often suffice.

  2. Is this not an kinda « unconscious » straw man?

  3. Obviously - the writer of this article has never created an application that combines COBOL and LISP!
    But of course... that's irelevant :-)

  4. “I still don’t see how anything I said was stupid,” said Nero.

    “First, it was stupid because I have all the authority here, and you have none, so I have the power to make your life miserable, and you have no power to protect yourself. So how much intelligence does it take just to keep your mouth shut and avoid calling attention to yourself? What could be a more obvious decision to make when confronted with such a lopsided distribution of power?”

    “Second, you seemed to be listening to me, not to find out useful information, but to try to catch me in a logical fallacy. This tells us all that you are used to being smarter than your teachers, and that you listen to them in order to catch them making mistakes and prove how smart you are to the other students. This is such a pointless, stupid way of listening to teachers that it is clear you are going to waste months of our time before you finally catch on that the only transaction that matters is a transfer of useful information from adults who possess it to children who do not, and that catching mistakes is a criminal misuse of time.”

    --Ender's Shadow

  5. > Being right is easy. Being relevant is extremely difficult.

    That seems to core problem of almost all major problems (with notable exceptions) that plague society today.

    1. The point I just made with co-workers is that this is a systemic issue way outside of engineering disciplines. I don't know if it crept out or in, but I guess that's hardly the point.

  6. It's like an aggressively elitist style of "well actually"

  7. "as some people are quite willing to violently disagree with any and all facts that are in conflict with their pre-held beliefs."

    I don't think that statement is true. Because, those people understand and secretly agrees with you but they don't want to admit it and so they keep fighting with you and hold their stand, but their brain have already accepted the fact, just their mouths don't.

  8. Smart people can be dumb too. Good post, I experience this a lot in the industry.

  9. I think this kind of behavior deserves a name and an entire field of psychology study. You have done such as good job giving examples of how it applies in computer science. I listen to a lot of Jordan B. Peterson lectures, his podcast just started episodes of his Biblical lecture. I think his lectures on this topic can be summed up as "saying the Bible is not true is 100% technically true, but misses the entire point." I see this happening in politics too. "Politician X does bad thing Y." True but none of politician X's fans care. Your statement might be 100% true, but might also be totally irrelevant. The only thing I can think of that speaks to this difference are the words "de jure" and "de facto" Thanks for bringing this up. It's interesting.

  10. This topic does have a name. In the technical debate world it's called not having "clash". Regardless of the truth of the rebuttal, it does not directly interact with the claims made in the first statement/argument.

    Another term was "topicality". This means that the point someone is making is not relevant to the specific problem statement at hand. You would debate the word definitions and grammar of the problem statement and conclude whether an argument was in the scope of the discussion or not.

    All of these argumentative devices have technical names if you look far enough.

  11. I disagree with: Being able create things on a whim and just drop them to the floor makes programmers a lot more productive than forcing them to micromanage the complete life cycle of every single resource.

    but the rest was ok.

    1. It was a hypothetical discussion. The author can choose whatever context it has. If he said it, then it is right, by definition. So it is not really something to be disagreed on...

  12. These types of discussions happen a lot during design meetings and have a tendency to completely bring features (or even entire products!) to a halt*. They can be so destructive that I started to call them: Babylonian discussions. I mean from a certain perspective everyone is right, but we're missing the point.

    The tower of Babylonia was never finished because they started communicating in different languages. People diverted and moved away.

    * It takes a seriously good (product)manager to dissect such discussions and make good decisions. What it means is that we're not always building a tower of Babel, so measuring extremes is not always needed (or to put it into the article terms: relevant).

  13. Bikeshedding is a related term, where you nitpick instead of addressing the important issues.