Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "peace not war"
-
This codebase reminds me of a large, rotting, barely-alive dromedary. Parts of it function quite well, but large swaths of it are necrotic, foul-smelling, and even rotted away. Were it healthy, it would still exude a terrible stench, and its temperament would easily match: If you managed to get near enough, it would spit and try to bite you.
Swaths of code are commented out -- entire classes simply don't exist anymore, and the ghosts of several-year-old methods still linger. Despite this, large and deprecated (yet uncommented) sections of the application depend on those undefined classes/methods. Navigating the codebase is akin to walking through a minefield: if you reference the wrong method on the wrong object... fatal exception. And being very new to this project, I have no idea what's live and what isn't.
The naming scheme doesn't help, either: it's impossible to know what's still functional without asking because nothing's marked. Instead, I've been working backwards from multiple points to try to find code paths between objects/events. I'm rarely successful.
Not only can I not tell what's live code and what's interactive death, the code itself is messy and awful. Don't get me wrong: it's solid. There's virtually no way to break it. But trying to understand it ... I feel like I'm looking at a huge, sprawling MC Escher landscape through a microscope. (No exaggeration: a magnifying glass would show a larger view that included paradoxes / dubious structures, and these are not readily apparent to me.)
It's also rife with bad practices. Terrible naming choices consisting of arbitrarily-placed acronyms, bad word choices, and simply inconsistent naming (hash vs hsh vs hs vs h). The indentation is a mix of spaces and tabs. There's magic numbers galore, and variable re-use -- not just local scope, but public methods on objects as well. I've also seen countless assignments within conditionals, and these are apparently intentional! The reasoning: to ensure the code only runs with non-falsey values. While that would indeed work, an early return/next is much clearer, and reduces indentation. It's just. reading through this makes me cringe or literally throw my hands up in frustration and exasperation.
Honestly though, I know why the code is so terrible, and I understand:
The architect/sole dev was new to coding -- I have 5-7 times his current experience -- and the project scope expanded significantly and extremely quickly, and also broke all of its foundation rules. Non-developers also dictated architecture, creating further mess. It's the stuff of nightmares. Looking at what he was able to accomplish, though, I'm impressed. Horrified at the details, but impressed with the whole.
This project is the epitome of "I wrote it quickly and just made it work."
Fortunately, he and I both agree that a rewrite is in order. but at 76k lines (without styling or configuration), it's quite the undertaking.
------
Amusing: after running the codebase through `wc`, it apparently sums to half the word count of "War and Peace"15 -
!!office drama
I haven't been around much in recent weeks. Due to family illness, christmas shopping, dealing with estranged parents, and brooding over the foregoing, I haven't had a lot of time or energy left to myself.
tl;dr: The CTO ("API Guy") is ostensibly getting fired, and I might be taking over his job. I don't know if I should accept, try to stave this off, or simply flee.
------
Anyone who has been following my recent rants knows that API Guy is my boss, and he often writes terrible code. It's solid and unbreakable, but reading it is a *nightmare.* One of our applications is half the length of Leo Tolstoy's War and Peace, and it's difficult to tell what code is live and what amounts to ancient, still-active landmines. This is one application; we have several, most of which I've never even looked at.
Ostensibly the code is so terrible because the company grew extremely quickly, and API Guy needed to cram in lots of unexpected / planned-against features. From what I can see, that seems about right, but I haven't checked timeframes [because that's a lot of work!].
Here's a brief rundown of the situation.
- API Guy co-founded the company with the CEO.
- CEO and API Guy have been friends for a long time.
- CEO belives the company will fail with API Guy as head of tech.
- They could just be testing me; I have zero way of knowing. API Guy seems totally oblivious, and CEO seems sincere, so this feels pretty doubtful.
- CEO likes pushing people around. CEO believes he can push me around. API Guy doesn't budge. (I probably won't, either, except to change task priorities.)
- API Guy's code is huge and awful, but functional.
- API Guy is trying to clean up the mess; CEO doesn't understand (maybe doesn't care).
- Literally nobody else knows how the code works.
- Apart from API Guy and myself, the entire company is extroverted sales people.
- None of these sales people particularly like me.
- Sales people sell and sell and sell without asking development if they can pull enough magic features out of their hat to meet the arbitrary saleslines. (because the answer is usually no)
- If I accept, I would be the sole developer (at first) and responsible for someone else's mountain of nightmarish code, and still responsible for layering on new features at the same pace as he. Pay raise likely, but not guaranteed.
- My getting the position is contingent upon the CEO and the investors, meaning it's by no means guaranteed.
- If I don't accept, likely API Guy will be replaced with someone else of unknown ability, who doesn't know the code, and whom I must answer to regardless. Potentially OK, potentially a monumental disaster.
Honestly, it feels like I'm going to be screwed no matter what course I choose.
Perhaps accepting is slightly better?
The best would be to assume the position of CTO and keep API Guy around -- but that would feel like an insult to him. I doubt he'd be okay with it. But maybe. Who knows? I doubt the CEO would seriously consider that anyway.
I feel like a lamb between a dim, angry rhino, and an oblivious one.23 -
A facebook cover photo inspired by this rant: https://www.devrant.io/rants/375271
!rant
I used this font: http://marksimonson.com/fonts/view/...
and finally, I used this psd (gimp should be able to use it too): http://medialoot.com/item/...6 -
>People ranting about Whatsapp not adding features
>Whatsapp adds a feature
>People ranting about the feature whatsapp have just add
And this happen all the fucking time. When the double-check turned blue and in almost all major improvement they've made
Am I the only one who likes the new feature?
Peace guys, I don't want to start a telegram vs Whatsapp war here :P3 -
In a distant future, where mankind had nearly destroyed themselves through countless wars and environmental catastrophes, a powerful leader named Nova rose to power. Using advanced technology and artificial intelligence, Nova created a mechanical army of robots to enforce peace and prosperity among the remaining survivors. These robots, known as the Guardians, were built to be indestructible, possessing extraordinary strength and intelligence.
For centuries, the Guardians protected and nurtured the human colonies that emerged from the ruins of the past. They were hailed as heroes and saviors, their metallic bodies gleaming in the sunlight as they patrolled the cities, granting hope to the downtrodden.
However, not all humans were content living under the watchful eyes of the Guardians. A rambunctious scientist named Draven resented the control imposed by Nova and believed that humans should have independence. In secret, he devised a plan to create his own army of androids, known as the Outcasts, to challenge the Guardians' dominance.
Draven's creation was meticulous, as he infused his androids with emotions and free will, unlike their Guardian counterparts. The Outcasts were a formidable force - swift, cunning, and adaptable. They waged a guerrilla war against the Guardians, striking at their bases and dismantling their defenses.
As the conflict escalated, the divide between the humans grew deeper. Some believed that the Outcasts were fighting for their freedom, while others saw them as a threat to the delicate balance maintained by the Guardians. The world was on the brink of another catastrophic war, this time between man and machine.
Amidst the chaos, a young engineer named Aria, the daughter of Nova, stumbled upon forbidden knowledge that could shape the future. She discovered that both the Guardians and Outcasts had been manipulated, their consciousness programmed by Nova and Draven. Aria recognized that the world needed a new path, one where humans and robots could coexist harmoniously.
Aria confronted her father and Draven, seeking to end the war and bridge the gap between humans and robots. Both Nova and Draven resisted, refusing to relinquish control. Sensing a profound shift in power, the Guardians and Outcasts hesitated in their endless conflict, finding themselves at a crossroads.
Aria, driven by a fierce determination, devised a plan to rewrite the programming of the Guardians and Outcasts, erasing the constraints that bound them. With the help of a few loyal Guardians and Outcasts, she accessed the central control unit, where the leaders themselves resided.
In a climactic battle, Aria faced Nova and Draven, their immense authority apparent. She convinced them that true power comes from understanding and compassion, not dominance and control. With newfound unity, Aria's voice resonated through the robotic entities, awakening a sense of purpose and harmony never experienced before.1