Irritating Programming Trends

There are a few trends among programmers that are both irritating and extremely counterproductive. In fact, I would consider all of these trends to be antipatterns. They do more harm than good, and actively create problems out of situations that are not inherently problems.

Disclaimer: This is a rant, not a thesis. Inflammatory language is used, so much straw man arguments are used I directly quote him, really, and there are few solutions offered beyond the implied stop doing X stupid thing.

Conflating style with anything

Style is an effective tool for a developer to wield. It makes source code consistent, which is profoundly beneficial for maintenance, code review, remembering what & why about a piece of code, and every other situation where a human instead of a parser needs to read code.

Style has absolutely nothing to do just about anything else.

CamelBacking versus ALL_CAPS_UNDERSCORE is not the same league of issue as using an int versus a float when you need accurate temperatures.

int patientTemperature; // This is a bug.
float THIS_isNot_a_Bug; // ..but you really need a style guide, STAT

And with a half dozen clear and common naming styles, why would anyone force variables and constants to require the exact same indistinguishable one? If you are so anal retentive that you cannot distinguish between a bug and poor style, you probably also don’t know why you are still single and have no friends. If you can point out the objective versus subjective parts of the previous sentence then you can distinguish between style issues and bugs. To be clear, style is not a problem, rather it is wonderful, but stop confusing it with syntax, just stop.

I fully get the reasoning for the importance of style, but conflating style with compilability is retarded. In fact, having a style, any style, is far more important than having a particular style. Lint errors are not bugs. Some languages (Python, Go) try to enforce style as a language requirement and only accomplish conformity, which is terrible for a creative endeavor such as programming.

Computer science has a terminology problem

Refusing to acknowledge similarity of like concepts is like being unable to count over refusal to acknowledge a pair and a couple are both instances of the number 2. It is a handicap, which holds back insights and progress.

A handle, a reference, and a pointer all indirectly address a variable. They are the same thing. Their differences are trivial in concept and minimal in usage. They should be addressed as a group. They should be understood as group. They should be taught as a group. But most importantly, they should be named as a group. After all, they are all just pointers plus or minus some metadata and bounds checking. If someone uses one of these terms to refer to all of them, and you obsess over nitpicking the distinction and force someone to always name them all separately, you are a troll. You should be handled like a troll, you should be referred to as a troll, and you should be pointed out as a troll. If that last line sounded the least bit redundant, then you should free up the discussion by collecting the distinctions and discarding them because they are a leak in any meaningful conversation and change your profile to “#irony”.

#irony @brogrammerbob

Concurrency is parallelism. They belong to the exact same group as multithreading and multiprocessing because they require the same abstract thinking to deal with race conditions and deadlock and parallel algorithms et al.

You have a cool new way to handle multithreading? Awesome! An idiot would use a generic term for all concurrency and decide it should be the technical term for his latest trivial distinction. You know what would be a better term? “Virtual MultiThreading”, you even get a free acronym, which can be exuberantly pronounced like a Harry Potter villain, VMT. You know how virtual memory lets you virtually use more memory than you physically have by only putting the portion you need into the physical one at a given moment? Well, take a wild guess at what Go’s “concurrency” actually is and just try to mansplain how I’m wrong with a straight face.

See? You can’t

A method is a function, even if a special type of function. This is so simple people should smack themselves over it, hard. A subgroup is still part of the group. A function is a block of code that does a discrete task. Just because a method acts on a class does not mean it’s not a function. Seriously, if you want to get technical then it’s the idea of distinguishing them which is factually wrong because a method gets compiled to a function with one extra parameter. So claiming a method is not a function is like claiming a three parameter function is not a function because it has three instead of two parameters. Your compiler is silently laughing at you every day.

Language is a tool. Technical language is that tool used with finer precision. “But, but, but… disruption is divine!”-Mr. Straw Man. Well, if you disrupt language, you are not like the god who gave humans fire, you are like the god who threw a temper tantrum and destroyed a tower.

If you thought I meant a different tower, go look up “context clues

Luddite shaming anything not using your favorite new toy is shameful

New is relative. Technology changes. Well written legacy code is not outdated if it still does its job well, regardless of its disuse of newer technology. To put down a program, and thus a programmer, for not using any particular library or language or anything else is not the least bit meaningful a critique as to anything other than how little you comprehend the code you are putting down. If you do this, you probably do not have a single piece of working software that did not require recent human intervention to compensate for your shoddy work.

Luddite shaming is advocating for perpetually broken software.

Open Source arguments tend to be circular

I use open source. I contribute to open source. But just imagine how the straw man is responding in this discussion: Why should I use some open source library instead of my own? What if no one else is maintaining it? If I should maintain it myself how is that different than having my own library? Why should I expose my security flaws for a hacker to peruse? What if no one else is finding and pointing out the security flaws because I’m the only one using and maintain it? The wheels on the bus go round and round…

Config scripts for config scripts

This concept is so absurd I don’t think there is even a name for these, besides idiocy, so let’s call them meta configuration scripts. The premise is to take a configuration script which is too difficult to use on its own, and build a Rube Goldberg Machine around it to help make it even more difficult. Think using autoconf to generate an automake script to generate a makefile to run your compiler, because some people can write a half million line C++ project with a thousand classes and not bother to realize make is not that hard. There are basically two arguments for slapping tools on top of tools like this. Either something is too complex so you fix this by adding more layers and growing the complexity exponentially, or a feature was missing so instead of fixing the open source tool, you instead create a separate tool missing all the features of the first one.

You know when managers always seem to give you the busy work because they think you are an idiot? This is not like that. You are the one giving yourself the busy work because you think you are an idiot. Learn to use the tools of your trade already.

If any of this was offensive, then I was probably talking about you so you should take it personally and repent because your colleagues deserve better. Seriously, without (as much) ranting, just consider the side effects of your choices and stop being a jerk to the people whose lives you make difficult for no good reason whatsoever. See the whole forest.

Like what you read? Give PuppyKhan a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.