
One other thing that I didn’t include in the last post, which was about distinguishing smart people from crazy people. It’s kinda relevant but kinda tangential.
In online engineering spaces, you’ll run into a lot of takes that aren’t heterodox at all, but people certainly think they are. They happen to be really defensible.
Design patterns are pretty trash.
Regexes are never the right answer.
Data-Oriented Design is better than Object-Oriented Programming.
C++ is overcomplicated.
The imaginary person who disagrees is someone in the workplace or someone who works for a college. I’ll admit that sure, some of the opposed takes (“C++ is great,” “design patterns rock”) have a little cachet there.
There are also online spaces with a pretty hardcore, “get good” attitude which seem to try to peer pressure people into using technologies that will make them miserable, and some of the opposed takes are popular there. A lot of people with Linus-y attitudes will try to judo you into doing all your game dev in C++ — ignoring that Linus Torvalds hates C++.
(Generally, malicious people who have a lot of C++ experience seem to like getting newbies using C++ so they can flaunt their status and berate the newbies for not knowing what they’re doing.)
But we’re not in those spaces, mostly. We’re in mostly supportive and extremely Full Stack Web Developer-y spaces, like Twitter and Hacker News. In those spaces, most people are not defending design patterns or C++, and they will speak out in a mealymouthed way against overuse of regex and OOP. (Likely they’ll give a little bit of lip service to functional programming without ever having used a functional programming language.)
Your best shot at figuring out if someone holds the anti-strawman, faux-contrarian takes I originally listed is to find out how much they know about the hard part of the relevant problem:
- ask about obscure design patterns like Flyweight. (Or anything other than Factory)
- ask about DFAs, or broadly, the performance of regex alternatives
- ask them about ECS, then ask what representation of Component they like
- ask them for an original, short, syntactically-correct example of a C++ problem (or ask them to explain C++ casts)
You can also ask:
- have you used C++ in production?
- do you use regexes?
(The answers to these two questions will be highly incriminating for opposite reasons. They are, respectively: “obviously, no” and “obviously, yes.”)
The underlying idea here: saying “X is shit” is pretty easy for people to get away with because they’re not really making an assertion you have to demonstrate.
If you want to figure out who the sharp ones are, you want to bait them into making and then proving specific claims. The crazy ones and the ones who are just trying to make a name for themselves will fail and recuse themselves, respectively — although there’s some overlap between the groups.
After you’ve done that, you have another good shot, which is to say: “Why are you talking about that? No one was talking about that before you came in here.” Chances are, if you feel like someone changed the topic just to beef about something they feel knowledgeable about, you are correct.
Whether they’re doing it to mislead you is a completely separate topic, but you can gather a little evidence by looking at how they react to a meek request for clarification.
As for whether it’s bad for people to do this — well, I think it’s a strong sign that people are young, and they’ll grow out of it. But I think fake expertise is pretty much always bad, and I think a subset of the people who believe this stuff will sink into it pretty hard later.
That subset? Well, I think people who are not that good at something usually reach a phase where they think having right opinions about the thing means they’re competent, which is wrong — you have to look at results for that.
If all you care about is being right, though — well, these are issues where it’s really easy to be right without knowing anything! And that’s easy. So you’re likely to keep pursuing that, and you’re likely to spend energy you could have spent developing real knowledge, like a hummingbird that’s addicted to saccharine and just gets leaner.
It’s not like it’s my place to shake those people loose, but I do try to avoid them.
One other note: you’ll often see people refuse to state a stance on these issues. Not stating an opinion on an issue you know nothing about is a soft tell for competence, but if someone’s a neutral bystander on every issue, including issues they have a strong reason to have an opinion about, consider that they might be doing it as a social strategy.
For instance, a friend of mine is the author of a C++ compiler and rarely unsolicitedly opines on C++ — except when he’s alone, because when he’s alone he’s extremely critical of it. In rooms where other people start it, he’s willing to be the C++ apologist or the C++ critic depending which way the wind is blowing. I think that’s a little cynical but I kind of respect it.
By the way — I believe these tendencies exist in other professions, but it takes deeper field-specific knowledge to sniff out this kind of person so I can only provide test statements for programmers.