Hacker News new | ask | show | jobs
by charlotte-fyi 43 days ago
I feel in a really weird position where I both really dislike what AI is doing to the experience and practice of writing code, to the point where I want a job doing literally anything else besides using the computer, but also think that these tools are extremely powerful and only getting better.

I think Mitchell's point is well taken -- it's possible for these tools to introduce rotten foundations that will only be found out later when the whole structure collapsed. I don't want to be in the position of being on the hook when that happens and not having the deep understanding of the code base that I used to.

But humans have introduced subtle yet catastrophic bugs into code forever too... A lot of this feels like an open empirical question. Will we see many systems collapse in horrifying ways that they uniquely didn't before? Maybe some, but will we also not learn that we need to shift more to specification and validation? Idk, it just seems to me like this style of building systems is inevitable even as there may be some bumps along the way.

I feel like many in the anti camp have their own kind of reactionary psychosis. I want nothing to do with AI but I also can't deny my experience of using these tools. I wish there were more venues for this kind of realist but negative discussion of AI. Mitchell is a great dev for this reason.

4 comments

I've never had more fun coding, but the key is actually still writing the code yourself. The LLM has terrible judgment but an encyclopedic knowledge and the ability to pick out important details in a sea of information. Their worse use is producing code, but somehow that gets all the energy. Being an LLM babysitter is energy draining and you feel less and less in control. No job is worth being miserable doing something that you used to enjoy.
In my experience, its the opposite. The AI is very good at writing code, but it is unreliable at any kind of design. I use it as a fancy form of autocomplete. I give the broad strokes: "add a method here and change all but this one caller to use the new method", "Apply this design pattern here for this change but don't do this other thing". It completes the task reasonably well and sometimes even remembers to run the code formatter and check that tests pass.

If I ask it to me produce a design, I'll almost always end up with something unworkable or inefficient.

Though if you push it hard enough then it can sometimes give you a good description of what existing code does and how it does it (which can be easily verified).

Can you pro-AI people at least agree on what is it even useful for?

Every thread is endless back-and-forth between the "AI works great and vibe coding is the future" and "no, AI works great as long as you don't vibe code" camps.

AI is in like year 4 of being useful for the task. And it’s changing rapidly. We don’t know what it’s good for yet!

But pick a technology used to write code and you’ll see many of the same things. Broad unit test adoption happened more then 20 years ago and people still can’t decide what it’s good for or even if it is useful.

That’s because it depends on the circumstances of the problem and the person solving it.

So no, we can’t decide exactly what it’s good for and if we could there would be exceptions. But that’s not an indictment of any tool.

So the solution is to wait and not use AI until people have spent all their money and actually figured out what the real use cases are. Good to know.
Is that your approach to unit tests? If so, sure.
Can developers agree on what the best programming language is? The best framework? The best OS?

AI is a diverse technology and will work differently for everyone, just like JS is a really, really bad technology for many, yet widely used.

On top of that it (as coding agent) is brand new, just a few years old. Looking at the history of technology it will probably take a few decades for it to settle into some sort of stability. Which does not mean it does not provide value during this time of exploration, however there is no trodden path leading you there.

Is it so hard to imagine that people who find LLMs useful might have different perspectives on it? If you put a lot of energy into being against something you might think that everyone who doesn't agree puts the same energy into being in favor of it, but that's not real life.
Fancy autocomplete is a solid use. I use the same pattern replication technique whenever the situation allows for it. It's great for following your lead, but unreliable at taking the lead. Even if it was more reliable, I won't have the same working knowledge of the structure it created.
After turning off my brain a few times and ending up in a place I don't want real fast, I am learning to ride this dragon.

And, you are right - use it as a fast typer, not a fast thinkier.

And for those who claim that AI is a good code writer - wrong. It can OUTPUT a wall of code, but it's overeager to flood you will legacy code on arrival to "solve a problem". It's harder to write LESS code, which is still the goal (even more true today).

> And, you are right - use it as a fast typer, not a fast thinkier.

That's a great way to put it.

My biggest complaint about AI is getting it to lock onto current or specific information has been darn near impossible. Its definitely there in its training data but for the life of me I cannot get it to stop bleeding long outdated or external information into its responses.
I find in these cases the best option is to provide references, docs, etc. If you'll need them regularly, save them to Markdown files.
What do you use an LLM for then? Or you’re saying just don’t use it at all?
working in a large codebase I use Claude for code understanding and the code reviews from Macroscope have caught bugs for me a bunch of times. Usually if I use claude it’s for refactoring a and source to source transformations that would be too confusing for me to figure out how to do with e.g. ast-grep, but that I can prompt in a minute or two and then have claude work through it. It’s stuff I could do without LLMs but it’s less effort to use them. I don’t let it write new code, because it decays the process of programming as theory building.
not the person you're replying to, but someone who agrees with the gist of their message - I personally use Claude Code as a better Google search for debugging and syntax.

It used to be "oh, why am I getting an error on line 352, let me google the error message and wade through Stack Overflow answers" now it's "Claude, why am I getting an error on line 352? Ah, it's because $REASON, let's see if that fixes it, yes, thank you."

Obviously reading the official documentation is very useful, but sometimes you can't find anything that relevant to your exact use case, and forums are also very useful, but it can take hours or even days to get a reply to question when the LLM can do it in like a minute.

I've used both ChatGPT and Claude, they seem interchangeable for my needs. I only use the web prompt interface except for the rare occasion that it is helpful for it to have the context of my entire project. I think less is more when it comes to LLM interaction, but sometimes they are exactly the right tool for the job.
What do you use it for then?

“right tool for the job” - what job exactly, why so mysterious?

I didn't realize you wanted that information too, I could probably bore someone to death talking about it.

Planning: I often ask it to help me plan an approach if we are dealing with something I don't have a lot of experience with, most recently working with the DOM. If there is a library or an API that is new to me, I ask for an overview and run my plan by it for comments. Feed it the documentation and it is like talking to author.

Coding: I have a pretty reliable sense for when a section of code that I want to write is obvious enough for the LLM to one-shot based on the other code in the file, and on those occasions I call in completion. I do this with code that I can verify at a glance.

Analysis: If I have any uncertainty at all about the code I've written, I run it by the LLM to find issues. Out of all the other uses, I think this is the most productive and time saving. If I run into a bug and I'm stumped, I show it the section of code. I'm amazed at how good it is at finding mistakes.

I'm working solo as a full stack developer coming from a different background, so I sometimes find myself out of my depth. Having access to the breadth of knowledge that an LLM brings and its attention to detail has been game changing. I've tried a couple agents and configuring them to work competently seems like a rabbit hole, and I like the tight control over the context that chatting with the web prompt interface brings. It seems like half the value is putting into words my intent, it forces me to have a cohesive understanding myself. It is like rubber duck debugging where the duck can actually talk back and sometimes provide the critical part that I'm missing. I have it speak like a pirate which is just for fun but sometimes the sailing metaphors that it uses are really intuitive.

I've been working on a C++ backend for F# and while I'm very familiar with F# and it's AST I barely know C++. The amount of time I save being able to ask things, check my understanding, get design patterns, and paste issues I'm having for a fix is insane

I ran into an issue where I was getting a segfault and everything looked right in the debuggr, including expected values near the segfault. Turns out I wasn't using placement new somewhere I needed, and the data for the object was getting copied but not the vtables. I have no idea how long it would have taken me to figure that out on my own because the segfault was coming from so far away

I haven't had the opportunity to use LLMs much for coding since I'm not working right now, but I can second how much of a boost just getting specific answers to my questions instead of reading tons of whatever online searches return is.

Rubber duck that talks back is a nice way to put it

This is more or less how I use Claude and Kim 2.5 via Kagi. If I just let it spew out code I have no idea what it does and no interest whatsoever to try to comn through it all. But when I have need to ask about syntax or correct use of library function etc. - I’m learning C++ - and can’t grok the docs, it can be incredibly helpful. Also is great at finding bugs.

I think of it kinda “very knowledgeable dumb person” - it knows everything but understands fuck all (although it can appear to do so just by breadth of information it has). If I can formulate a question in a way it gives me the correct info it helps me to conceptually understand the problem better then filling out the blanks. Often I figure out the answer to my question just by writing it down without needing to prompt it, so speaking rubber duck is very apt way to call it.

Thanks for the comprehensive explanation!
> The LLM has terrible judgment but an encyclopedic knowledge

Bingo. Claude can bang out nearly correct code when I give it an idea, but it doesn't have the idea and repeatedly misjudges both how much work remains and what kind.

On the other hand, I don't know all the ins or outs of macro expansion in yaml at compile time or when and where macros run, enabling us to conaume their results elsewhere in the yaml. Frankly, if I had time, I'd happily spend time on that and learn more about it. I don't, though. Claude knows and does the guessing and checking. So I provide the concept and it translates into a horrible soup of yaml. Clearly I'm able to press forward with ignorance, which is dangerous. There's a real risk that I'll wind up with the kinds of unhealthy work that worries the author of the tweet.

> But humans have introduced subtle yet catastrophic bugs into code forever

So now the AIs will do more of that, at superhuman speed.

> will we also not learn that we need to shift more to specification and validation

We'll just quickly learn what we've been trying to do for decades, while also treading water in floods of more code than has ever been written before? And some of the motivations to write correct code are being deflated - "just vibecode it again and see if the bugs disappear, it only took a week and $200."

I think the commenter was referring to formal verification with "specification and validation": have the LLM emit formal proofs about invariants etc.

Currently the bugs are found by people using LLM's but aren't the developers. As more projects start getting access to compute, they can run those LLM searches for bugs themselves, and can simply prevent shipping the bugs.

I'm surprised no one has tried making any statistical analysis of bug densities, and "bug authors" in an attempt to identify untrustworthy developers, regardless of intent. Given a dataset of authors and prior bugs, it may help find more bugs by tracking their pull requests with higher scrutiny...

Some people may end up with an eternal stain if they've been taking money to submit vulnerable code to code bases...

> I feel like many in the anti camp have their own kind of reactionary psychosis.

You're using psychosis wrong. My literal reality is my entire industry trying to use Ai as an excuse to payoff hundreds of thousands, to millions of American engineers in lieu of outsourcing work overseas. It's having hostile promots to use AI that never truly go away (if you're even given an option to turn off the prompt). It's seeing an emerging generation completely stunted because AI's best use is to cheat the education system and ruin the youth's critical thinking. It's looking in apallment at proposals for data centers that take more energy than the state actually has.

And while you can try to call these exaggerations, you're falling into the very psychosis of this article if you want to deny this reality as a whole. "but the tech is making us so productive" is not a valid justification to literally collapse human society as we know it.

> It's looking in apallment at...

"looking on appalled at..."

>You're using psychosis wrong

Also "reactionary" haha

Not FANG, but I work at a company that operates some infrastructure at scale. What I've seen is after we've rotated through a number of different tools, in different pilot groups, eventually converging on tool X (a custom, internal wrapper around opencode).

Now every "working session" like meeting, at the team or dept level, has been around how to use tool X. Tricks using tool X. Problems using tool X. I can't help feeling if we had spent the same amount of time building up core knowledge/contempencies around say, design patterns, networking, specs, we'd be in a better place for building.

Instead we are going to have a few thousand people who know a tool really well.