Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "software rot"
Code fuckup day or what?! After two weeks where I wasn't on my project and a co-worker handled it, I came back to my project and reviewed what he had done so far.
Me: "I don't understand how this new code part here can work?"
Him: "Uhm, actually, it doesn't, somehow."
Then he had checked in his stuff with spaces while the whole project is with tabs. And variables that were used in a different way, but still under the old name, now completely misleading. Bypassing existing infrastructure and defines with "just for this case" hacks. But the best was tracking higher level state by peeking into lower level data buffers, even pulling out their data definitions into global header files - instead of using proper states in the higher layer itself.
NOT! IN! MY! FUCKING! PROJECT!!!
So I spent the day cleaning up the shit to fight off software rot right in the beginning.4
Let's face it: I am and will always be a tinkerer. Yes, I know my ways around, I can sneak into legacy code bases easily and throw new stuff in there, I've seen software stacks. But scarcely sound design, really modular. Even from the cleverer, experienced ones. They can master more complexity, so they can handle more spaghetti. Some essay from the 80's had this grand idea to organically 'grow' software. That's how it looks like most of the times: cancerous, parasitic super fungi (armillaria). Yeah, we all know have to fight bit-rot and entropy, but it was all lost before already. We'll never get rid of legacy protocols, legacy code.
And even when we go green field, start a fresh. Yeah, take a great design, make everything new, after some months of throwing features and outer constraints at the thing, it's the same old mud again.
But we can still dream on: some day I will design great APIs, I will have great test coverage, documentation, UML design, autometed tests, fuzzing, memchecking, I'll work professionally, clean coder style.
Pfft forget it. Maybe change for consulting, because we'll continue to dream of the 'clean' code, so you can sell the next 'recipe', development method. It's like diets. As effective. For the one selling.2
Don't leave "broken windows" (bad designs, wrong decisions, or poor code) unrepaired. Fix each one as soon as it is discovered. If there is insufficient time to fix it properly, then board it up. Perhaps you can comment out the offending code, or display a "Not Implemented" message, or substitute dummy data instead. Take some action to prevent further damage and to show that you're on top of the situation.
We've seen clean, functional systems deteriorate pretty quickly once windows start breaking. There are other factors that can contribute to software rot, and we'll touch on some of them elsewhere, but neglect accelerates the rot faster than any other factor.
"The Pragmatic Programmer"2
So I'd like to start my (late) morning by throwing some shits and fucks at ruby, more precisely rvm and rbenv:
Why the fuck is it so hard writing scripts that work? I can script a fucking ruby build from 0 to 100, why the fuck can't your "amazing tool" set up paths and all the other shits so I don't get a fuck ton of alerts at night from CI just because rvm decides to INTERMITTENTLY not do it's job?
Why does it say it works and makes things easier when it doesn't? Why the fuck are you lying?
Why do I have to divert my focus and waste my time trying to figure out why it doesn't do the ONE thing it's supposed to do: install.ruby. That's it. No recompiling kernels, no launching fucking spaceships, no rewiring silicon structures, no quantum effects, just a plain simple ruby installation, one single version.
Why am I supposed to have a phd to work with this crap?? why can't it ever just fucking WORK as it says it does and should? Is it some kind of complex conspiracy to keep me busy so I can't play with my dog or what the fuck??!?!
I hope whoever wrote this crap sees this one day: GET YOUR SHIT TOGETHER or stop publishing open source software that waste our time.
Oh It wOrKs On My cOmpUtER and AlL teSts PaSS. I don't give a flying fuck. I hope all developers who think their job is done when it works on their box and tests pass get dick rot. Your job doesn't end there. Software should be intuitive and easy to use, not just "work'. No traps, no gotchas, no caveats, no endless configs and files and settings and vars and shits and ifs and buts.
Your product is not just a piece of code, but also the time you save people who use your crap. And you've fucked up.1