└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Shitlist 2 | 3 | ![Hate Level](https://img.shields.io/badge/Hate%20Level-11%2F10-red) 4 | ![Tech Ruined](https://img.shields.io/badge/Tech%20Ruined-All-orange) 5 | ![Build: Failing (by design)]() 6 | 7 | A lovingly crafted rundown of tech that's made me want to throw my keyboard out 8 | the window, complete with why these tools and languages deserve a spot in my 9 | personal hall of shame. Buckle your fuckle, because shit will go down. 10 | 11 | --- 12 | 13 | ## Dockerfiles/Containerfiles 14 | 15 | - Containers are dope, but writing Dockerfiles is a fragile nightmare. 16 | - It's all imperative, so one dumb typo and your build's toast. 17 | - Hermetic? Ha, good luck—builds shift depending on the machine like a cruel 18 | lottery. 19 | - Mandatory args? Nope, just pray your users guess right. 20 | - Secret handling was a dumpster fire until they patched it five minutes ago. 21 | - No digest pinning unless you hack it with stuff like `docker-lock`, so enjoy 22 | the chaos. 23 | - Unqualified images lean on whatever the daemon feels like doing that day. 24 | - Root-only builds were the norm forever until `buildah` and `podman` showed up 25 | to flex. 26 | - Docker Desktop's overpriced button-clicker trash. 27 | - Multi-stage builds turn into bloated monsters if you're not a wizard. 28 | 29 | --- 30 | 31 | ## Kubernetes 32 | 33 | - Containers were cool until this overcomplicated beast rolled in to "manage" 34 | them. 35 | - YAML. 36 | - YAML, again—thousands of lines of indentation roulette just to spin up a pod. 37 | - Debugging? Hope you enjoy spelunking through logs, kubectl vomit, and cryptic 38 | error codes. 39 | - Resource limits sound nice until your cluster starves because you forgot to 40 | appease the scheduler gods. 41 | - Networking’s a labyrinth, good luck untangling overlays, CNI plugins, and 42 | service meshes without losing your mind. 43 | - Upgrades are a gamble; one wrong move and your cluster’s a smoking crater. 44 | - "Self-healing" my ass. More like "self-breaking" when a node flakes out and 45 | takes half your app with it. 46 | - Helm charts promise salvation but deliver dependency bloat and version drift 47 | chaos. 48 | - Eats RAM and CPU like a black hole. Hope your budget’s ready for the cloud 49 | bill. 50 | - Documentation brags about simplicity while burying you in a 10-layer 51 | abstraction nightmare. 52 | 53 | --- 54 | 55 | ## GitLab 56 | 57 | - Global settings slam every branch at once with zero warning. 58 | - Config change audit logs? Nah, figure out who broke it yourself. 59 | - Project settings won't give you read-only access for sane debugging. 60 | - CI variables disappear into the ether, and your pipelines vanish with them. 61 | - Scheduling variable updates for credential rotation? Manual labor, baby. 62 | - Tries to be an all-in-one hero but skips basics like granular permissions. 63 | - Self-hosted? Better have a spare RAM stick or two lying around. 64 | 65 | --- 66 | 67 | ## Homebrew 68 | 69 | - Moves slower than a hungover sloth, all because Ruby's dragging it down. 70 | - Needing Ruby just to browse packages is peak overkill. 71 | - Installs bloat up with no deduplication—here's ten copies of `libc` for no 72 | reason. 73 | - Mac users deserve better than this lumbering mess. 74 | - Pre-v4, it leaned on `git` for metadata; now it's JSON, which is only 75 | marginally less awful. 76 | - Updates roll in and break stuff without so much as a heads-up. 77 | 78 | --- 79 | 80 | ## HCL 81 | 82 | - Semantic newlines over spaces make zero sense—HashiCorp, explain yourself. 83 | - Flirts with being functional but chickens out halfway. 84 | - Cue, Dhall, Nix, even Jinja2 run circles around it. 85 | - Terraform configs turn into repetitive, clunky sludge fast. 86 | 87 | --- 88 | 89 | ## CI/CD 90 | 91 | - Hard-coded names begging to fail. 92 | - User account ties mean security's a fairy tale. 93 | - Network shares as dependencies? Hope they don't blink out. 94 | - “Deployment” via `git pull`—genius. 95 | - Shared runners clog up like a bad drain. 96 | - Jobs on the master node are an accident waiting to happen. 97 | - Dependencies rot from neglect, and vulns shine so bright they're practically 98 | neon. 99 | - Absolute paths snap on new setups. 100 | - Prod leans on shaky scheduled runs. 101 | - Unpinned deps keep every build a wild surprise. 102 | - No backups mean one crash could end it all. 103 | - Regular tests pretend they're “performance” checks. 104 | - Repos stuffed with binaries, PDFs, and stack traces—what's wrong with you 105 | people? 106 | - Credentials, SSH keys, and API keys checked in like it's no big deal. 107 | - API keys in URLs leak faster than a busted pipe. 108 | - Tests retry until they pass—fixed it! 109 | - Build paths from another planet. 110 | - Custom tools reinventing the wheel badly. 111 | - Builds on every commit hog resources. 112 | - Relative paths like `../../../` snap like twigs. 113 | - Jobs drag on for hours. 114 | - Jenkins and Bamboo feel like medieval torture. 115 | - No local testing leaves devs in the dirt. 116 | - Runner state dependencies kill consistency. 117 | - Ancient CI/CD versions beg for upgrades. 118 | - Silent fails with no logs turn debugging into a guessing game. 119 | 120 | --- 121 | 122 | ## Terraform 123 | 124 | - HCL's trash—see above. 125 | - Plan/apply feels like a clumsy two-step when you need precision. 126 | - State files are a disaster waiting to blow; lose one, and you're toast[^1]. 127 | - Local state's a corruption magnet—remote or bust. 128 | - Modules suck at real composition, so it's copy-paste city. 129 | - Versioning's a slog with provider mismatches everywhere. 130 | - Providers break like cheap toys with every update. 131 | - It'll nuke and rebuild your infra if you don't babysit it. 132 | - Drift detection's half-baked, so trust is optional. 133 | 134 | [^1]: State files track your infra; corrupt or lose them, and Terraform's 135 | clueless. 136 | 137 | --- 138 | 139 | ## Dotnet 140 | 141 | - Microsoft. That's it, that's the rant. 142 | - XML infests everything, ugly and verbose, a parsing hellscape. 143 | - Build and CI tools are a sobbing disaster—MSBuild's a sadistic prank. 144 | - Compiled but still needs a runtime—grow up already. 145 | - DevOps basics like versioning or git hooks? Missing or barely there. 146 | - Took until v7.0 for sane string literals or container smarts—embarrassing. 147 | - Passing auth credentials is a soul-sucking slog through API purgatory. 148 | - Project files are hostile robot scribbles, not human-friendly. 149 | - NuGet's a lawless mess—people package ancient NuGet versions or jQuery 150 | hacks[^2]. 151 | - Debugging performance is like groping in the dark with a spoon. 152 | 153 | [^2]: Some NuGet packages are just jQuery wrappers because .NET's web tools were 154 | a disaster for years. 155 | 156 | --- 157 | 158 | ## Python 159 | 160 | - Writing it's a dream, but packaging's a horror movie. Good fucking luck 161 | shipping virtually anything. 162 | - No typing means random crashes sneak up like assassins. 163 | - Typing's fake anyway—static-only, no runtime safety, totally pointless. 164 | - `requirements.txt` is a fossil that won't die despite better tools. 165 | - Too many packaging options—pip, poetry, conda—and endless flame wars over 166 | them. 167 | - Containers turn into symlink soup with system package chaos. 168 | - Dependency isolation's a fantasy; three packages in, and you're in conflict 169 | hell. 170 | - Releases outpace the ecosystem, so half your packages break constantly. 171 | - Distributing means janky compiles or lugging the whole runtime along. Couldn't 172 | they have learned from Java/Perl that people need a single file to double 173 | click? Only other devs are willing to navigate Pyenv or virtualenv to run your 174 | project. 175 | - `setup.py` runs random code; PyPI's a minefield of mystery downloads[^3]. 176 | - Slow as molasses—don't even try heavy lifting. 177 | - Pip, PipX, bootstrapping—every step's a catastrophe. 178 | - Conda vs. Anaconda vs. Mamba—why so many forks of the same mess? 179 | - Git-ignorant packaging—test locally by publishing and crossing your fingers. 180 | - Config splits across TOML, YAML, ini—whatever devs felt like that day. 181 | - Pip lets people package apps, datasets, even a full Julia runtime—insanity. 182 | - Juggling Python versions is agony—system manager or not, it's fragile. 183 | - GIL chokes multithreading into a sad, single-threaded whimper. 184 | 185 | [^3]: PyPI packages often skip dependency metadata, forcing `setup.py` to run 186 | unknown code just to install. 187 | 188 | --- 189 | 190 | ## Nix 191 | 192 | - My favorite language, I hate it. 193 | - Confusing distinction of Nix/NixOS/NixPkgs as well as CppNix, NixLang, and 194 | other confusing terminology used for tug-of-war. Now with derivatives to fuck 195 | you up. 196 | - Docs are perpetually outdated—dig through code or weep. 197 | - NixLang's a bespoke oddity—because no normal language would do? 198 | - Performance is a slog; RIIR might've died quietly somewhere. 199 | - Post-install patches are a rickety duct-tape job. 200 | - Wrapping overlapping tools like Python is pure masochism. 201 | - Steep learning curve mocks newcomers with cryptic errors. 202 | - Bash and Perl everywhere, including places you don't want to see them in. 203 | - Packaging is a pain in the ass that never goes way. Some languages suck, other 204 | suck more. 205 | 206 | --- 207 | 208 | ## C 209 | 210 | - Memory management—hope you like leaks and crashes. 211 | - Pointer math—segfaults are your new best friend. 212 | - Package management? What's that? 213 | - Error handling's `if (return_code != 0)` until your eyes bleed. 214 | - Threading's a horror show—race conditions everywhere. 215 | - Security holes you could drive a truck through[^4]. 216 | - Simple tasks demand endless boilerplate pain. 217 | - Undefined behavior lurks like a silent killer. 218 | 219 | [^4]: Buffer overflows, dangling pointers. Need I go on? 220 | 221 | --- 222 | 223 | ## Lisp 224 | 225 | - Dialects out the wazoo—too many flavors to count. 226 | - It was awesome - in 1979. 227 | - Parentheses overload—code looks like a bracket storm. 228 | - Oh, single quote overload too. Who thought `''''')))))` belonged in code? 229 | - Common Lisp, Scheme, Racket, Clojure—pick your poison. 230 | - Code-as-data's neat until macro debugging breaks you. 231 | - Academic darling, real-world skeptic—fragile in practice. 232 | - Performance swings wildly by dialect and use. 233 | - Ecosystem's a ghost town—abandoned libs aplenty. 234 | - Community's tiny and smug—help's hard to find. 235 | 236 | --- 237 | 238 | ## Go 239 | 240 | - Simple, sure, but opinionated to a fault. 241 | - `if err != nil` everywhere—error handling's a grind. 242 | - No generics until recently—copy-paste galore. 243 | - Dep management was a vendoring mess pre-modules. 244 | - Tooling's decent—go fmt, go vet, etc.—but coverage sucks. 245 | - Goroutines rock, but channels trip you up fast. 246 | - Stdlib's solid but skimps on basics like date handling. 247 | - Community's preachy—dare to disagree, get flamed. 248 | - Fast, not fastest—hype oversells it. 249 | - Cross-compiling's easy but quirks bite back. 250 | 251 | --- 252 | 253 | ## Ruby 254 | 255 | - Syntax so sugary it rots your brain; blocks and end everywhere like it's 1995. 256 | - Performance crawls like it's allergic to speed; enjoy your glacial app boots. 257 | - Gems are a dependency hellscape—half are abandoned, the other half are 258 | bloated. 259 | - "Everything's an object" sounds cool until you’re debugging nil explosions. 260 | - Rails cultists swear it’s magic, but it’s just duct tape on a leaky pipe. 261 | - Homebrew's sloth? Ruby's fault—thanks for the assist, Matz. 262 | - [Wat](https://www.destroyallsoftware.com/talks/wat) 263 | 264 | --- 265 | 266 | ## Javascript 267 | 268 | - A language so loose it's basically coding with wet spaghetti. 269 | - Callbacks, promises, async/await—pick your poison, they all suck to debug 270 | anyway. 271 | - NPM pulls in half the internet for a "hello world"—enjoy your 10,000 272 | dependencies. 273 | - Type safety? Optional, because who doesn't love runtime errors crashing prod 274 | at 3 a.m.? 275 | - Browser quirks mean your code works until some ancient version of Edge says 276 | "nah, I'd break" 277 | - Frameworks churn faster than a reality TV cast—learn React today! It'll be 278 | obsolete tomorrow. 279 | - This behaves like a drunk toddler, changing meaning depending on where you 280 | stand. 281 | - "Use strict" to fix the mess? Too little, too late, buddy. 282 | - Hoisting and scoping rules feel like they were designed s a personal "fuck 283 | you." 284 | 285 | ## CSS 286 | 287 | - A styling system so brittle it's like building a house of cards in a 288 | windstorm. 289 | - Specificity wars—good luck figuring out why your `!important` still got 290 | ignored. 291 | - Flexbox and Grid are neat until you realize every browser interprets "center" 292 | differently. 293 | - Media queries turn into a spaghetti tangle just to make a button not look like 294 | garbage on mobile. 295 | - Naming classes is a Sisyphean nightmare—BEM, SMACSS, or just give up and cry. 296 | - Preprocessors like Sass promise help but drag you into nesting hell and 297 | bloated outputs. 298 | - "Cascading" sounds cool until your inherited styles ruin everything three divs 299 | down. 300 | - Tailwind's "fix" is just inline styling with extra steps and a cult following. 301 | - Responsive design? More like "redesign every breakpoint because nothing 302 | works." 303 | - ["Cascading Shitstorm"](https://canary.discord.com/channels/568306982717751326/568306982717751328/1346281745233875148) 304 | 305 | ## Flatpak 306 | 307 | - Solves a genuine problem, but ends up bloating your disk. 308 | - Why do I have six different copies of the GNOME runtime installed? I use 309 | KDE... 310 | - If devs don't keep up with dependencies, then every time you update you get 50 311 | warnings about outdated packaged using outdated dependencies. Maybe tell the 312 | dev that first? 313 | - At least it's not Snap. 314 | 315 | ## React 316 | 317 | - Component reusability's a joke when prop drilling turns code into Swiss 318 | cheese. 319 | - "Everything's a component" sounds cute until your codebase's a nested 320 | nightmare. 321 | - State management? Redux, Context, Zustand, MobX, ... Pick your poison and hope 322 | it kills you 323 | - Virtual DOM was revolutionary until it wasn't. Now it's just overhead other 324 | frameworks laugh at. 325 | - Hooks promised cleaner code but delivered spaghetti `useEffect` dependencies 326 | from hell. 327 | - Re-renders like it's getting paid per pixel refresh. Better pray your laptop 328 | fan works. 329 | - Error boundaries catch shit about as well as a colander holds water. 330 | - Class components, functional components, HOCs. Three paradigms fighting in a 331 | trench coat. 332 | - JSX mixes HTML and JS like a cocktail nobody ordered but everyone's forced to 333 | drink. 334 | - Documentation reads like it was written by someone allergic to examples. 335 | - Lifecycle methods are a sick game of "guess which one fires when." 336 | - "Just learn React" they said, forgetting to mention the 50 other libraries 337 | you'll need down the road _anyway_ 338 | - Meta owns it, so enjoy that corporate dependency while it rewrites half the 339 | API yearly. 340 | 341 | --- 342 | 343 | There. Next time someone asks why I despise these, I'll just shove this in their 344 | face. 345 | --------------------------------------------------------------------------------