3 ms·
To quote an excellent article from last week: > The AI has suggested a solution, but the added code is arguably useless or wrong. There is a huge decision spac
by bccdee 1y ago
To quote an excellent article from last week:
> The AI has suggested a solution, but the added code is arguably useless or wrong. There is a huge decision space to consider, but the AI tool has picked one set of decisions, without any rationale for this decision.
> [...]
> Programming is about lots of decisions, large and small. Architecture decisions. Data validation decisions. Button color decisions.
> Some decisions are inconsequential and can be safely outsourced. There is indeed a ton of boilerplate involved in software development, and writing boilerplate-heavy code involves near zero decisions.
> But other decisions do matter.
(from https://lukasatkinson.de/2025/net-negative-cursor/ https://lukasatkinson.de/2025/net-negative-cursor/)
Proponents of AI coding often talk about boilerplate as if that's what we spend most of our time on, but boilerplate is a cinch. You copy/paste, change a few fields, and maybe run a macro on it. Or you abstract it away entirely. As for the "agent" thing, typing git fetch, git commit, git rebase takes up even less of my time than boilerplate.
Most of what we write is not highly creative, but it is load-bearing, and it's full of choices. Most of our time is spent making those choices, not typing out the words. The problem isn't hallucination, it's the plain bad code that I'm going to have to rewrite. Why not just write it right myself the first time? People say "it's like a junior developer," but do they have any idea how much time I've spent trying to coax junior developers into doing things the right way rather than just doing them myself? I don't want to waste time mentoring my tools.
- tptacek 1y agoNo, what's happening here is that you're using a different definition of "boilerplate" than the adopters are using. To you, "boilerplate" is literally a chunk of code you copy and paste to repeatedly solve a problem (btw: I flip my shit when people do this on codebases I work on). To them, "boilerplate" represents a common set of rote solutions to isomorphic problems. The actual lines of code might be quite different, but the approach is the same. That's not necessarily something you can copy-paste. Coming at this from a computer-science or PLT perspective, this idea of an "abstract, repeatable meta-boilerplate" is exactly the payoff we expect from language features like strong type systems. Part of the point of rigorous languages is to create these kinds of patterns. You had total expressiveness back in assembly language! Repeatable rigor is most of the point of modern languages.
- superconduct123 1y agoYour article comes across like you think every developer is the exact same as you, very egocentric piece Not everyone is just cranking out hacked together MVPs for startups Do you not realize there are many many other fields and domains of programming? Not everyone has the same use case as you
- usef- 1y agoWhich part of his article is specific to his use case? It all looks fairly general to me.
- nostrebored 1y agoAnd not everyone working in things that aren’t “hacked together MVPs” has your experience. You can read any number of reports about code generated at FAANG, incident response tooling that gets to RCA faster, etc. There are obviously still things it can’t do. But the gap between “I haven’t been able to get a tool to work” and “you’re wrong about the tool being useful” is large.
- sensanaty 1y ago> ...code generated ar FAANG... Oh, like these set of PRs on the dotnet repo? https://news.ycombinator.com/item?id=44050152 https://news.ycombinator.com/item?id=44050152
- Uehreka 1y ago> Not everyone is just cranking out hacked together MVPs for startups Now here’s the fun part: In a really restrictive enterprise environment where you’ve got unit tests with 85% code coverage requirements, linters and static typing, these AI programming assistants actually perform even better than they do when given a more “greenfield” MVP-ish assignment with lots of room for misinterpretation. The constant “slamming into guardrails” keeps them from hallucinating and causes them to correct themselves when they do. The more annoying boxes your job makes you tick, the more parts of the process that make you go “ugh, right, that”, the more AI programming assistants can help you.
- naasking 1y ago> Most of what we write is not highly creative, but it is load-bearing, and it's full of choices. The idea that you can't specify the load bearing pillars of your structure to the AI, or that it couldn't figure them out by specifying the right requirements/constraints, will not age well.
- whattheheckheck 1y agoWhat have you written with ai that ha made you or your business money
- JumpCrisscross 1y ago> What have you written with ai that ha made you or your business money I use R a little more than I should, given the simplicity of my work. Claude writes better R quicker than I can. I double check what it's doing. But it's easier to double check it used twang correctly than spend five trying to remember how to use the weird package that does propensity scoring [1]. I'm sure data analysis will still sort of be a thing. But it's just not as useful anymore in the form of a human being for most commercial applications at sub-enterprise scale. [1] https://cran.r-project.org/web/packages/twang/index.html https://cran.r-project.org/web/packages/twang/index.html
- bccdee 1y ago> The idea that you can't specify the load bearing pillars of your structure to the AI But English is a subjective and fuzzy language, and the AI typically can't intuit the more subtle points of what you need. In my experience a model's output always needs further prompting. If only there were a formal, rigorous language to express business logic in! Some sort of "programming language."
- naasking 1y ago> But English is a subjective and fuzzy language, and the AI typically can't intuit the more subtle points of what you need. I disagree on the "can't". LLMs seem no better or worse than humans at making assumptions when given a description of needs, which shouldn't be surprising since they infer such things from examples of humans doing the same thing. In principle, there's nothing preventing a targeted programming system from asking clarifying questions. > In my experience a model's output always needs further prompting. Yes, and the early days of all tooling were crude. Don't underestimate the march of progress.
- shlant 1y agoOP: https://fly.io/blog/youre-all-nuts/#but-its-bad-at-rust https://fly.io/blog/youre-all-nuts/#but-its-bad-at-rust > (from https://lukasatkinson.de/2025/net-negative-cursor/ https://lukasatkinson.de/2025/net-negative-cursor/) looks inside complaining about Rust code
- chotmat 1y agothe rust code in question is the example on the cursor landing page though
- godelski 1y agoThe current image on the landing page might be even worse. It just updates Message to MessageV1. Why would you pay money for what's a string replacement? The comment on the right says it'll help the user with protocol versioning. This is not how you do that...
- godelski 1y agoPlus, looks like it just hard coded vales. I see this happen a lot with AI code. Even when I try to get it to not it still tends to do it. Issues like that are simple and just create debt. Sure, it "works" now but who writes code not knowing that we're going to change things next week or next month. It's the whole reason we use objects and functions in the first place!
- phanimahesh 1y agoTBH the critique is completely valid when cursor advertised shitty code on their homepage.
- bccdee 1y agoYeah, only in Rust is the maximum value of an unsigned 16-bit integer 65535. These aren't Rust-specific syntax foibles. It's not a borrow-checker mistake or anything. These are basic CS fundamentals that it's thoughtlessly fumbling.
- monkaiju 1y agoAdding this comment to my HN bookmarks! Well said
- d--b 1y agoBoilerplate is a cinch when you already know what to do. I work in finance, I have for almost 20 years now. There are things in finance you do once every 5 years, like setting up a data source like Bloomberg in a new programming language. Now you know from the last time you did it that it’s a pain, you need to use a very low level api, handling all the tiny messages yourself, building up the response as it comes from the source in unordered packets. It’s asynchronous, there is a message queue, and what I specialize in is maths. Now I could spend hours reading documents, putting crap together, and finally come up with some half baked code that ignores most possible error points. Or I could use ChatGPT and leverage the fact that hundreds of implementations of the same module exist out there. And make something that just works. That is the first ever coding question I asked an LLM and it literally saved me days of trial and error for something where my added value is next to zero. Similarly I use LLMs a lot for small tasks that are in fact fairly difficult, and that don’t add any value to the solution. Things like converting data structures in an efficient way using Python idioms, or JavaScript 2023 features, that there is no way I can keep up with.
- RodgerTheGreat 1y agoAt least when you mentor an actual junior developer they often learn, and you can take satisfaction in aiding the growth of a human being. All the time and effort spent coaxing an LLM to "do better" either disappears in a puff of smoke the next time it goes schizoid and needs to have its context cleared or- at best- is recorded to help a for-profit company train their next generation of products. Like everything else about the "GenAI" fad, it boils down to extractively exploiting goodwill and despoiling the commons in order to convert VC dollars into penny-shavings.
- closeparen 1y agoThe thing that makes an agent special is making some kind of effort to gather the relevant context before generating. The quality of the edits from the "agent" panel in Cursor/Copilot/etc is quite a bit higher than the type-ahead suggestions or the inline prompt stuff. Bizarrely though, it seems to be limited to grep for the moment, doesn't work with LSP yet.