7 Deadly Sins of Coding
The 7 deadly sins were a grouping and classification of vices within Christian teachings. Behaviors and habits were classified in here if they directly gave birth to other immoralities. The 7 deadly sins were considered to be the polar opposites of the 7 virtues and were thought to be abuses or excessive versions of one’s natural tendencies. For instance, gluttony is an excess of the desire to eat. In addition to the 7 deadly sins of modern times, there are two other historical deadly sins (Acedia and vainglory) that have analogs in software development that are interesting enough to cover.
“These came about in a time where the average person couldn’t read.”
This classification system originated with the desert fathers, especially Evagrius Ponticus. They were brought to Europe by John Cassian (who wrote The Institutes), where it became fundamental to Catholic confession practices. The same ideas were later featured in literature like The Parson’s Tale from Chaucer’s Canterbury Tales, and artworks like Dante’s Purgatory. There is a lot of interesting historical stuff if you really want to get into it. The real point of this is that the classification system has been well-known in Western civilization for some time and thus is useful for the purposes of analogy, whether you like the religious bits or not. In addition to the deadly sins, a virtue is defined that is the opposite of the problem behavior. These are things to strive for instead of the deadly sin. The same is true of the programming deadly sins that we’ll be discussing. Don’t get hung up on the modern meaning of the words. It’s instructive at times, but modern culture has bent some of them.
While you may or may not be religious or of a sect that actually gets into this stuff, the 7 deadly sins are useful metaphors for dysfunctional software development behavior patterns that you probably see around you every day. These tendencies are not only instructive in noticing bad behavior from others, but more importantly, in noticing it in yourself. We all have these behavior patterns to one degree or another, and it is important to detect and stop them when they get out of hand. The goal of this discussion is to get you to notice them in yourself – noticing them in others is decidedly NOT the point.
Seven Deadly Sins
Defined as intense longing, usually thought of as unbridled desire. It doesn’t have to be physical, but can also be a lust for power, money, or even attention. This is more than just intense longing. It’s intense longing done in a way that damages other things. Like the others we discuss, it’s easy to get hung up on what the words mean, rather than what they point to.
The opposite of this is chastity. While this has a modern definition, what we’re really going here is the lack of intense, destructive longing. This doesn’t mean apathy. Rather it means keeping things in their appropriate context (which is what the other term means as well).
Manifestations of this in the developer community. Having an intense desire to do things a certain way, even when it is damaging. This can be anything from Resume-Driven-Development, to making a design pattern soup, just because you want to do things a certain way. This can also mean chasing the new technology, even before it’s stable, because it’s “cool”. Notice that the problem isn’t the desire to do things a certain way, but rather that one lets the desire become so overbearing that you cause damage with the inappropriate end result of that desire. Note also that in its proper context (aka, this project is a good one for whatever practices you are pushing), that it is not damaging. Rather it is in its appropriate context.
The lesson: Don’t try to make things the way they aren’t simply because of how you feel about them. The context has to be right.
Defined as overindulgence and overconsumption to the point of waste. Again, this is more than just overconsuming. It’s overconsuming to the point where you create problems. While it’s easy to point this at the average developer body composition, we’re not going to do that here.
“It’s greed with a beer gut, essentially.”
The opposite of this is temperance. Temperance is voluntary self-restraint. This doesn’t mean starvation and an austere life. Rather it means not necessarily having to have peak experiences all the time. Sometimes things need to be mundane. This also means not being flashy with what you do have.
Manifestations of this in the developer community. Developers having to hog all the credit of a successful project, or having to hog the “best” or “most interesting” work out of a task list. This sort of behavior can be really damaging in a team, especially when being done by a development manager who codes. Note that you still should go for some of the interesting or challenging tasks. And you should take credit for good stuff you did – you won’t grow if you don’t. But don’t seek the attention to a degree that you wreck everything else.
The lesson: Don’t try to take more than you are owed, even if you can get away with it.
Also known as avarice, cupidity, or covetousness. It’s defined as an artificial, rapacious desire and pursuit of material possessions. This is defined as being beyond mere desire for possessions – it expresses a willingness to do anything to get possessions. This may result in ethical violations in order to reach the desired end goal.
The opposite of this is charity. Other words used are will, benevolence, generosity, and sacrifice. This doesn’t mean charity with other people’s resources or money. You have to have skin in the game and be willing to use it to help another.
“People who sabotage the project to get at other people.”
Manifestations of this in the developer community. People deciding they are senior developers and deserving of a six figure salary after three years in the business. People playing political games to knock their rivals out of the way, even being willing to destroy others to get what they want. One can also look into the frequency with which high dollar developers want to “disrupt” other industries, often with little benefit to anyone but themselves. This sort of behavior can cause companies to go under and can absolutely destroy people.
The lesson: Don’t seek or take gains you don’t deserve and haven’t earned, especially at the expense of others.
This is a little bit more than mere laziness, being more like a habitual disinclination to exertion. This isn’t just laziness, but laziness while entropy runs its course. Excuses are the enabler here.
“This is a couch potato.”
The opposite is diligence, or making sure to give proper attention to things. This doesn’t mean being neurotic. Rather it means handling things before they become problems.
Manifestations of this in the developer community. Unwillingness to avoid technical debt. Taking the easy road to fix something. Taking shortcuts with known security risks. Another example might be a developer who refuses to learn the business that actually pays their bills. This sort of mindset produces sloppy code that not only costs a lot to fix, but it actively repels the people capable of fixing it.
The lesson: Fix problems before they become problems.
Uncontrolled feelings of anger, rage, and even hate. This is more than justified anger – it’s anger past the point of reason or stopping. This can also manifest as misanthropy and self-destructive behavior. It can also manifest as jumping to the worst conclusion as a response to any news.
“Even after they apologize and everything is fixed you’re still enraged”
The opposite is patience, forgiveness, mercy. This doesn’t mean being a doormat or letting others push you around and abuse you, rather it means not making others into your doormat. It means stopping nastiness from propagating through you.
Manifestations in the developer community. Some of the darker aspects of fanboyism fit here. Think of the slashdot reaction to anything Microsoft, or the frequent reaction of windows developers to Linux or Mac. This attitude results in things like sneering at other developers for their platform choice, because that platform once caused you a problem. Look at political discourse in the development community if you want an even more pathological example.
The lesson: Anger only enough to make the damage stop. Don’t wallow in negativity. Get it out appropriately and move on.
More than just jealousy, it is a desire to deprive others of what they have earned. This often manifests as a sad or resentful covetousness towards the traits or possessions of someone else. This can also show up as a desire to see others brought low.
The opposite is kindness. Again, this doesn’t mean unjust kindness (kindness to those who are actively trying to harm you is weakness), but rather wanting the other party to get their just earnings.
How it manifests in the development community. Look at how developers often treat sales folks as well. If they thought sales were worthless, they’d ignore them. But if they are exhibiting outgoingness that the dev lacks, the dev attacks.
“Look at the people you don’t like and then try to figure out what it is that they have that you wish you had.”
The lesson: You should want to earn what you get, don’t accept a free lunch, and want the same consideration for others. Learn to make things NOT a zero sum game.
Think of pride not as the state of having too much self-respect, but as being more like a dangerously corrupt selfishness, or the desire to see ones self as the center of the universe. This can manifest as putting your own whims above everyone else’ good. It can also manifest as refusing to recognize one’s own mistakes.
“Just say I screwed up and go on.”
The opposite is humility/modesty. This doesn’t mean self-abnegation, but rather not needing to draw attention to one’s self for accomplishments. This doesn’t mean you can’t market yourself, but rather that you don’t market yourself to people who aren’t buying.
How it manifests in the development community. Thinking that your resume-driven development matters more than the company’s need to produce value. Taking someone else doing their job as a personal affront. You are not the star that that planet orbits, nor will you ever be, and that’s a good thing.
The lesson: Accomplishments speak for themselves. If you have to speak for them, it’s doubtful they amount to much.
These last two were folded in with sloth and pride by Pope Gregory. However, they deserve separate mention.
This is a form of laziness. It’s more than sloth. It’s the failure to take care of something you should be handling. It can also be defined as a lack of joy. This manifests as learned helplessness. It also manifests as making excuses in a crisis, including blaming others.
The opposite is organization. This doesn’t mean that you always have it perfectly together. One of the hardest lessons of your 20s is learning that that is impossible for you to do. The lesson of your 30s is that no one has it all together. It does mean that you act responsibility towards your own interests, with some sort of idea of where you are headed.
How this manifests in the development community. Deciding that you want to be a senior C# developer. We control the tools we use, but not how we use them, thus people feel helpless and decide to form a career based on general use of a tool. This is acedia, because you have the power to pick something that actually matters and specialize in that. It’s learned helplessness to do otherwise.
The lesson: The greatest influence over your own quality of life comes from within. It can as easily mean laughing in ashes as it can mean crying in a mansion.
“This one is tricky for people that get on a podcast and talk to an audience.”
This is a form of pride, but more than that. It’s vain boasting. This tends to manifest as loudly talking about how awesome you and your accomplishments are, while everything falls apart within. Vainglory can result in relentless social climbing, without building personal merit.
The opposite is self-confidence. It’s not just lack of boasting, but understanding when “self marketing” is appropriate. There is a difference between going “I’m a senior developer and smarter than you” and going “I’m a senior developer, let me show you a trick that will help you”. Both things are roughly equivalent, but one of them is crass.
“That’s what happens to help when ego is removed.”
How it manifests in the development community. Sighing and feeling the need to “educate” someone. Hearing something that an article on Buzzfeed disagrees with, and starting in on someone with “well, actually”. Needing to show off your skills is a vile thing, and shows how little you think little of yourself.
The lesson: If you want to be a tiger, let others see you’ve earned your stripes – you needn’t point them out.
ARM-based IoT Kit for Cloud IoT Core
This is basically a starter kit for building devices to use Googele’s Cloud IoT Core with a Raspberry Pi 3. It includes a 2-Axis Joystick, Micro servo, Full-Size Breadboard, several preassembled components from Adafruit, and an assortment of sensors. You can purchase the kit with or without a Raspberry Pi.
Tricks of the Trade
Sonmez’s trick of “that’s great, because…” when stuff goes wrong. He immediately switches to a headspace of turning the pain into a win. Reframing is a powerful tactic for fixing psychological roadblocks and is a worthwhile trick to learn.