Eunoia is a dictionary of more than 500 untranslatable (or obscurely useful) words:
tsundoku: acquiring reading materials but letting them pile up in one’s home without reading them (Japanese) sankocha: the feeling of embarrassment due to receiving an inordinate or extravagant gift, making you feel as though you need to return a favor that you can’t (Kannada) mudita: the pleasure that comes from delighting in other people’s well-being or happiness (Sanskrit) Erbsenzähler: literally “pea counter”: a nitpicker (German) jayus: a joke so unfunny that one has to laugh (Indonesian) házisárkány: “indoor dragon”: a nagging, restless spouse (Hungarian) tretår: a third cup of coffee (Swedish) xiao xiao: the whistling and pattering of rain or wind (Chinese)
I saw this on Facebook and went to check my registration status, sure it was fine because I voted recently, but I put in the info and it said I’m not registered
PLEASE, especially if you’re a Black voter, check your registration status at vote.org
Know your status
Does your last name sound anything like Lopez, Martinez, or Rodriguez? Mine does. When I saw this post I checked my voter registration status online with my state. Despite registering just three months ago, I was no longer registered to vote, and I did not receive my ballot. If you live in a mail-in voting state and you didn’t get your ballot, contact your county election official/county clerk for a replacement.
Make sure you check with your state’s voting site as well. I just had the shit scared out of me because that website said I was registered, but when I checked my state’s site (and made sure I had the right county selected) it said I was registered.
It’s worth checking your state’s site every few months anyway (especially when any election is coming up).
Texas is definitely purging voters. They’re also making it harder to re-register if they purged you. I hate that this is true, but POC will need to check and check frequently to stay registered in Texas.
College students, too. In the 2014 election, I had to vote in San Marcos, and I can’t tell you how many Texas State students were turned away because they didn’t cross all the t’s and dot all the i’s on getting their registration transferred and current.
If you follow my writing, you know I typically write a lot on software quality best practices. In retrospect, this approach was biased towards those who want to improve software quality. I accidentally neglected those who wanted to inject more bugs into a system.
And so, those of you who love defects, let me share with you my number one tip to systematically create a breeding ground for bugs: The God Object.
Warning: This article may be satirical in nature. Please code responsibly.
Find a Sufficiently Complicated Problem
Great! You’ve chosen to infect your codebase with a parasitic growth of complexity that will generate countless hours of important work only you can do (this is pronounced “job security”).
God objects are a great way of generating sufficient complexity that only a developers deeply familiar with them can touch them without daring to invoke the wrath of quality assurance.
The kind of objects I’m talking about become known by names such as Codethulhu, Tormentor of Junior Developers and Quality Assurance Analysts.
But first, they need to solve a problem. I know, we’re in the business of adding complexity and security, not solving business problems. Hear me out, though.
If your code doesn’t solve a unique and critical problem, there’s a risk some future developer may work around it and completely throw it away.
And so, you need to find a type of problem that:
Demands a high degree of skill and critical thinking to solve
Cannot be easily understood without investing time to think it through
Interacts with enough other complex systems and processes to take on some of their complexity
Has enough potential to grow and expand in complexity as new features are required
Does not have an easy off the shelf alternative available
If nothing is popping to mind, you could either wait for a new and complex feature to arrive, or you could take a large file from an existing layer of your codebase and expand it. Some types of objects to consider:
Communications / Web Service Layers
Custom User Interface Controls
The Data Access Layer
Object Serialization / Deserialization Logic
Common Service (Business Logic) Layers
None of these is as unique as a business problem, however, but all of these work in a pinch if your organization seems to be hesitant to give you a feature large enough for you to expand to Codethulhu scale for whatever reason.
Once you identify your opportunity, you are getting to one of the hardest parts of this process. You may need to brace yourself before reading further.
In order for your object to survive and enter the codebase, it has to work. That means, you need to solve or mostly solve whatever problem the business gave you (or you identified) in the first place.
This means you have to buckle in and work. Actually, you likely need to work pretty hard, since large features are harder, and you’re going to be implementing yours by intentionally making a large class that manages the complexity in a single file.
Expanding the Infection
Colossal God Objects don’t just sprout up overnight, however. The kind of terror that we’re talking about takes time and dedication to grow. You don’t have to be intentional about growing them, but it does help.
Remember: as much logic as possible goes into the same class.
If a problem applies to your object, solve it in the object. I’m talking about things like:
Web Service Calls
All of these things can be handled in your god object.
Remember this mantra:
Your problem is special and different than other code because the problem it solves is complex. If other code worked on your object, it wouldn’t be as special, so your code needs special customized logic inside of it.
While you’re developing, I recommend only putting a minimal amount of comments in your code. After all, code should be self-documenting, right?
Be sure to take advantage of external libraries and every new language feature available to you – particularly if your coworkers aren’t familiar with or using those features yet.
Nested ternary expressions and regular expressions are surefire ways of ensuring that only exceptional developers can touch a line of code.
Remember: You have only a limited period of time to grow your nascent God Object before other people notice it and begin to ask questions, so use this time well to achieve a critical degree of size and complexity.
Defending Codethulhu in its Infancy
When challenged on creating a large and complex class, claim that it follows the single responsibility principle (SRP) by solving the business problem in a single file. If other people tell you this isn’t what SRP says, claim to be late for a meeting and run off suddenly.
If people continue to challenge you, it’s time to crank up the attitude.
Act insulted and offended, then demand that they explain the full complexity of the problem you’re solving on the spot. If they fail to describe the problem or its solution adequately, point that out and terminate the conversation. If they actually do get it right, look for technicalities and things they didn’t mention. Things like validation, persistence, threading, obscure edge cases, etc.
On the topic of threading, you can get away with a lot if you claim your complexity is structured in a way that improves performance (bonus points if this is actually true).
When people say that they require doing a full code review on your code, this is a trap. Say that your schedule is too tight to allow for that and that code review is only for bad developers. Your code is good and they should know this because they hired you and you continue to solve critical problems.
If people continue to give you issues about the code, it can be a good tactic to give another developer a chance to work on the class without assistance and fail horribly, only for you to swoop in and save the day.
Finally, if your object still attracts the ire of other developers, you could potentially rename it to something ending in the word Facade, Controller, or Service as people seem to have no issues with classes like this growing larger and larger over time.
Meet Chaos, AKA Job Security
Sooner or later, your God Object will unleash chaos upon quality assurance, your fellow developers, and potentially production.
Don’t worry, this is normal.
Like the jelly of the month club, God Objects are the gift that keeps on giving.
Sure, some of the work coming your way from these objects will be extremely complex and potentially urgent, but the work is coming your way, which is what you wanted.
You’ve established a reputation as the only one capable of handling the complex state management, threading, and order of operations issues present in Codethulhu and so you are tied to its fate.
Hopefully by this point Codethulhu is vital to the business’ continued operation, otherwise you and it may be out on the street by next week.
If Codethulhu has become entrenched, congratulations on your well earned self-made tenure. Sure you won’t be able to be promoted due to the organization’s fear that nobody will be able to maintain the beast aside from you, but that’s a small price to be paid for job security.
Just watch out for any crusading architect or anyone who has read or written anything with the word refactoring in it in the last month.
Beware those Who Can Slay Codethulhu
Every so often, some knight in shining armor will ride along and try to slay your monster. Typically this is fine, as Codethulhu devours the sanity of lesser developers.
However, sometimes the right sort of person comes along with a mix of knowledge of software architecture and patterns, a desire to “improve” the codebase, and the skill and sheer force of will to pull it off.
When this happens, it’s very bad and you should start looking for an escape hatch.
Typically this person will yell and preach to the development organization about refactoring code to common patterns, the Single Responsibility Principle (SRP), extracting helper classes, favoring composition over inheritance, and other such nonsense.
They may have books on their desk or shelves such as:
Watch for them to successfully modify Codethulhu or worse, put tests around it. If these things happen, it’s probably time to look for another organization in need of a new God object.
This was a Joke
So, as it turns out, this article was satirical.
Nonetheless, some of this hit close to home to some mistakes I made early on in my career.
I was working on a complex and non-standard user interface control for a Windows desktop application. I was 6 months into my professional career, but had already been coding for about 15 years or so at that point.
Over the course of a quarter, I made an incredibly complex user interface control class that managed (among other things):
With each new release we’d add things it needed to do and so the class grew larger until it hit nearly 4,000 lines of code in a single file.
The features inevitably started colliding with each other and before we knew it, we had a God Object on our hands that owned our codebase and led to chaotic and unpredictable bugs that were hard to replicate and fix.
Most people aren’t going to get into a God Object scenario intentionally, but if you do, all is not lost.
Here are a few high level ideas to help you get out:
The Single Responsibility Principle is your friend. If you keep this in mind when developing a class or a method, you will avoid this anti-pattern by default.
Extracting logic to helper classes helps simplify code by moving non-core responsibilities off to other objects.
Put as many pinning tests in place as possible before making any modifications to the class. You want to capture current behavior and explicitly know if it is changing.
Don’t be afraid to communicate technical debt to management and discuss your concerns over the current codebase. They’ll likely appreciate the honesty and openness and want updates on mitigation of the risky code.
Good luck, and may Codethulhu never haunt your codebase.
Kamaru Usman is a Nigerian American MMA Fighter. He won his match in the main event of UFC 245, shutting down his MAGA-themed opponent. But what's more impressive is how he carried himself after the fight.
His response to how he felt when the crowd started chanting "USA! USA! (etc)":
It's not necessarily just because you're born here, you feel privileged is what it means to be an American. No. I told you none of these guys work harder than me. That's what it means to be an American. I work my ass off, and I'm going to continue to work my ass off and obviously with good integrity.
I don't have to walk around like a punk and say these certain things that are going to abuse the whole country or abuse the whole world and talk about people and religions — things like that. I don't have to. I'm going to walk with integrity because at the end of the day, I want everyone that's watching me, every eye that's on me, to look at me and say, 'You know what, that's what we want to be, that's the example that we like.' And so, I'm more American than him. So, when they were chanting 'USA,' you damn sure better believe that was because of me.
can’t stop thinking about how the change for alucard’s character design between castlevania iii and castlevania symphony of the night was so dramatic that pretty much everyone forgot how he looked before and pretends this is how he has always been. what can i say except thank you for your service, miss ayami kojima
she took one look at this swagless sleazy car salesman looking half-vampire, went ‘throw the whole thing away’ and replaced all of him with the most iconic bishonen and princely design she could muster, this absolute hero. she elevated alucard from bbc dracula status to legendary regal twink status and she did it for us