3 ms·
Code Is Crap
- thinkingemote 17d ago(2011)
- bogardon 17d ago2026 Google would never have some "fun" like this
- verdverm 17d agoOne of the many reasons leadership needs to change, they are now more aggressive towards exploiting their customers, especially in cloud, Kurain is ruining that platform, but the investors like it
- svachalek 17d agoWow! Did not expect this blast from the past this morning. I worked with Alberto and Bob at the same startup long ago. Hello to any other Agitators who found this today.
- rdevilla 17d ago[dead]
- huurtehoog 17d agoTitle is editorialized. Original: "This code is CRAP" referring to code in review as Change Risk Anti Pattern. Also, (2011)
- GranPC 17d agoI believe the "This" might have gotten swallowed by HN's title normalizer.
- badc0ffee 17d agoThis title normalizer is crap.
- GranPC 17d agoIn its (admittedly weak) defense, if the submitter edits the title back during the few-minute window after submitting where this is possible, the normalizer does not kick back in. But it is a bit opaque, in the sense that the poster needs to: realize that the title has been changed; know that they can edit the title (but not too slow!); and know that it won't be filtered through again. I have no idea what the website would look like without it, but I have a feeling it does more good than harm.
- hunter2_ 17d agoWhat is the "good" when considering the lack of aggressive truncation/overflow concerns here?
- DANmode 17d agoNeutering Popular Science clickbait titles like “This Koala has a Secret Trick!”
- GranPC 17d agoIt's more of a gut feeling than anything else. I don't know what the normalization rules are, but I think we mostly notice the normalizer when it mangles something [1], and not when it's just quietly humming along. Someone with more spare time could probably figure out a dataset of original to normalized titles and measure that. [1]: Example from the frontpage right now: "How Big Are Factorials?" probably got normalized to "Big Are Factorials?" originally, based off other previous manglings I have seen previously.
- andai 17d agoMaybe it's invisible when it works as intended, but the only times I notice a title has been changed, is when it's changed back to the original title, stripping most of the valuable context in the process. De-editorialization, I suppose. (Or when the auto-renamer does a funny!)
- nilamo 17d agoIsn't that what this title is? Which part is editorialized?
- richardbarosky 17d agoThe pendulum has swung too far in the direction of class, function, cyclomatic complexity (and similar here, CRAP), and other idiotic metrics. This reminds me of a talk Sandi Metz did called "All the Little Things" where she covers the Gilded Rose kata. In the talk, she reworks her solution until there's almost nothing left showing the essence of the problem being solved. The cyclomatic complexity metric is touted at each step as a proxy for goodness of design and removal of complexity. However, a weakness of the measure itself is that it doesn't account for the control flow indirection that happens through method dispatch itself. At the same time, Kevlin Henney's talk called "Gilding the Rose" takes the same kata and arrives at a far more sane solution he works up to and reveals at the end.
- lumost 17d agoI suspect that we could bring this measure into the modern world with a little help from either DFS or ai. Something like abstractions traversed during interpretation, lines of abstraction v.s. functional implementation, or logic statement dispersion. It was hard to pin down what was abstraction vs. implementation, but it's much easier now.
- bunderbunder 17d agoThe thing is, AI has no idea when an abstraction is good or not. The reductio ad absurdum here is that, if abstraction can just be assumed to be bad for quality and maintainability, then perhaps we should go back to hand writing machine code for non-microcoded sequential execution CPU architectures. Conversely, if that idea sounds as preposterous to you as it does to me, then you’re stuck conceding that at least some abstractions are mostly good. So then, before you can automate deciding which ones should and should not count against a code quality metric that’s computed automatically, you need to find an operational definition that can be applied deterministically.
- bunderbunder 17d agoA while back Hillel Wayne did a talk (whose name I forget) on what empirical evidence on software quality actually says. As I recall, he concluded that there’s really no support for then-popular ideas like short functions, reducing cyclomatic complexity, avoiding explicit branch statements and loops, or TDD. (Tests yes, just not TDD.) He made a pretty strong case that only two principles are particularly robust. One was that limiting code volume is good. The other is that working people too hard is bad.
- Anonyneko 17d ago>Note: This post is rated PG-13 for use of a mild expletive. If you are likely to be offended by the repeated use a word commonly heard in elementary school playgrounds, please don’t read any further. Mild as this ironic passive aggressiveness is, can't imagine something like this in modern sterile corporate messaging.
- dionian 17d agofunny enough, the disclaimer comes after the term is used in the title and url.
- hunter2_ 17d ago"repeated use" seems to be doing the mitigation work here, though it does seem unusual that someone offended by the repetition would be unoffended by a one-off.
- dooglius 17d agoThere's a good chance it'll be scrubbed now that it's frontpaged here
- octantes 17d agodon't be evil! every bit of humanity went with the motto
- kelnos 17d agoMan, when I was a kid in the 80s, my parents considered "crap" to be a bad word, and my sister and I would get in trouble for using it. I'm sure that's still the case for some kids/parents today, but I can't imagine that being remotely common.
- fallat 17d ago> CRAP1(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) and > Here’s why we think that CRAP1 is a good anti-pattern to detect. Writing automated tests (e.g., using JUnit) for complex and convoluted code is particularly challenging, so crappy code usually comes with few, if any, automated tests. This is so wrong. The formula uses code coverage as a fundamental metric, when in reality, a lot of people write code "correct from construction", so coverage is not even applicable. Many times too, people only care the use cases they care about work perfectly. There are also many other reasons code is not tested, not because it's complex, but because it's simple.
- datadrivenangel 17d agoIf the code is simple, the tests aren't much extra work. High test coverage doesn't mean your code is good, but it at least reduces the rate at which you accidentally break stuff.
- kelnos 17d ago> If the code is simple, the tests aren't much extra work. Disagree. Even if it isn't much work to write (which is debatable), it still carries costs: CI takes longer to run, and the tests have to be carried and maintained (and possibly updated if the code itself changes). > High test coverage doesn't mean your code is good, but it at least reduces the rate at which you accidentally break stuff. Sure, for the most part. But that doesn't mean "more test code" is always a good thing. Tests aren't free, even for simple code.
- aomix 17d agoI have a goal to make the codebase at work cargo-crap compliant and enforce it with CI. I let an agent run overnight with it once and the diff touched like 40% of our codebase which is untenable for a single merge. So for now I’m doing it piecemeal as the opportunity presents itself.
- googenheim 17d agoGoogle is crap Are we just writing tautologies now?
- VCFundedGenYer 17d agoNo, we were writing them in 2011.
- almondfestival 17d agoI'm sure this method has evolved and/or been supplanted over the last 15 years, but one thing that struck me reading this is how much the dynamics of unit test coverage have changed in recent history, with AI-generated commits containing 10x as many unit tests (many of them kind of silly and tautological) as in the olden days. Gonna need to update some of those coefficients in their CRAP1 formula... Or maybe test coverage has/will become too noisy a parameter to use at all.
- acedTrex 17d ago> Or maybe test coverage has/will become too noisy a parameter to use at all. It already is, ive banned unit tests via ci checks from our codebases, they were not particularly useful before LLMs and now they are a net negative. We require int and some e2es and that does all that units do and more.
- agentultra 17d agoAre they slow and brittle? I like having both. Unit tests are a decent indicator for local development. Fast, quick to iterate on. Integration tests are slow as molasses and I can’t iterate with them when it takes 20 minutes to setup the suite and run everything. Too slow. But still useful as you say.
- acedTrex 16d agoThey don't flake, generally can run a few hundred in 3-4 mins. Iteration times are definitely key.
- eternityforest 16d agoI sometimes use unit tests to fill in gaps. I just caught a function with almost full coverage except for an if statement. Playwright e2e tests are harder to maintain than pytest code, so I wrote a test just for that one case, and while I was at it, a few other input strings that seemed like they could be problems. If the function had no test coverage at all, I probably would have tried to get it with an integration test, because that would mean the callers also weren't getting tested.
- Founderarcstone 17d agoEvery time I see a software update I cringe inside.
- bluGill 17d agoA measure is only good if I take action on it and in turn make things better. There are a lot of things that are easy to measure, but there is no useful action I should take on the measure.
- bunderbunder 17d agoYes, but also all too often “useful” is interpreted to mean “moves the metric”. If that metric is merely a proxy for some more tangible outcome then that may not be good enough. The one that tech tends to stumble on most often is velocity-type metrics. The problem there is that you can’t pay the bills with velocity. And velocity metrics tend to favor cheap shovelware features that cohere poorly over anything that involves having the team slow down on churning out code long enough to work out elegant solutions to subtle problems.
- onionisafruit 17d agoI've seen a couple of tools to calculate the CRAP score. I haven't used them in anger though. For Rust there's https://crates.io/crates/cargo-crap https://crates.io/crates/cargo-crap, and for Go there's https://padiazg.github.io/go-crap/ https://padiazg.github.io/go-crap/
- winternewt 17d agoWhen a measurement becomes a target, it ceases to be a good measure.
- estetlinus 17d agoWait, I thought all hand-curated enterprise code was godly pre-LLMs?