DEV Community

Cover image for Wittgenstein’s Beetle: Here's What Pain And Software Have In Common
Fagner Brack
Fagner Brack

Posted on • Updated on • Originally published at

Wittgenstein’s Beetle: Here's What Pain And Software Have In Common

Try to clarify concepts when communicating an abstract idea, be sure that all parties understand the attributes of what is being referenced

Ludwig Wittgenstein was a philosopher from the 20th century that came up with an argument called the private language argument. One part of this argument is called The Beetle and The Box.
It goes like this:

[…] Suppose everyone had a box with something in it: we call it a ‘beetle’. No one can look into anyone else’s box, and everyone says he knows what a beetle is only by looking at his beetle. — Here it would be quite possible for everyone to have something different in his box. One might even imagine such a thing constantly changing. — But suppose the word ‘beetle’ had a use in these people’s language? — If so it would not be used as the name of a thing. The thing in the box has no place in the language-game at all; not even as a something: for the box might even be empty. — No, one can ‘divide through’ by the thing in the box; it cancels out, whatever it is. (1958, §293)
Wittgenstein, L., (1953), Philosophical investigations, translated [from the German] by G. E. M. Anscombe, Oxford: Blackwell, 1968.

Due to how we express thoughts, it is possible that in a real conversation two individuals believe they are talking about the same "thing", but in reality, they are talking about things that are totally different. It all depends on the subjective interpretation of each one and the assumption that the other knows what is being talked about.

A good example of this is a discussion, where each one wants to express the feelings about the beetle inside the box as if both were aware of what that is:

Person A: The beetle is cute.
Person B: The beetle is definitely not cute.
Person A: I can ensure you it is because I know it!
Person B: And I know it too, that is why I am saying it is not cute!

They could try to describe the beetle in more details:

Person A: The beetle has 6 legs.
Person B: Yes, and 2 eyes too!
Person B: Yes, and 2 eyes too!

Although, even with objective descriptions, there is no guarantee they are the same.

Two different beetles, both with two eyes and six legs

Wittgenstein's beetle represents the individual perception and experiences that form a point of view.

Now, what about software engineering?

Let's say that you are talking with a person and you want to suggest how to improve a piece of code.

You can start making suggestions to create maintainable code using standard development principles. The other developer will understand that create maintainable code is a good thing and that using standard development principles is useful; you both agree.

But then when the work is done you realize the code is totally different from what you expected. The other developer is not using standard development principles or creating maintainable code. But wait, what exactly are "standard development principles" and the act of creating more "maintainable code"?

Of course, you know what they are, right?

… or not?

What if you really don't know what you are talking about?

You might have been a victim of the famous Dunning-Kruger Effect. The developer might have implemented principles that are unknown to you and you just don't see the benefits because you lack context.

What if the other developer don't know what they are talking about?

The other developer might have less experience than you. Or have different opinions over "good" principles.

What if neither of you has any idea of what good principles are

Remember, the feeling you have when you are wrong is the same feeling as when you are right. You just feel bad when you discover you were wrong, not when you actually are. Both of you can discuss naturally, and still, both of you can be wrong.

When talking about software design we are still tied to the subjective nature of the human being. You can try to be as objective as possible, but when it comes to subjects such as design patterns, principles or abstractions, we are still bound to subjectivity. Even for more objective matters, we are still bound to the level of knowledge and experience that you or the other person have, for that there is no such thing as the proper solution.

Sometimes it is impossible to be completely objective, each individual will always have one box, and you will only know the content of yours.

Next time you talk with someone using technical jargon, try to avoid making assumptions as much as possible. Try to go as deep as you can to make sure both understand, in detail, what is being discussed.

There will always be a level of subjectivity, even in basic language. But what you can do to facilitate a conversation is try to reduce the amount of subjectivity into the smallest possible range, just enough for the task you have in hand.

This way there will be a point where the subjectivity becomes irrelevant in practice.

But it will never be null.

Edit Jul 26, 2016:

I have recently stumbled upon a post called Naming Is The Hardest Problem In Computer Science. It shows very good examples of Wittgenstein's Beetle happening in Software when different languages use the same terminology (like "object") to represent things that are completely different.

Thanks for reading. If you have some feedback, reach out to me on Twitter, Facebook or Github.

Top comments (0)