79
you are viewing a single comment's thread
view the rest of the comments
[-] Chana@hexbear.net 1 points 16 hours ago

I really don't see what new points your comment adds that we haven't already discussed.

I think you should read it again and rethink this response.

I've repeatedly pointed out that what I find LLMs to be effective at is doing surface level things, or building out isolated components that can be reasoned about and tested in isolation. I really don't see how the points you raise apply here.

You've said quite a few things, much of which make no technical sense. Mostly in response to my critiques of statements like this, such as reminding you that you still need to do the harder parts of maintenance, design, reviewing those modules, etc. I have repeatedly noted security as a topic where care must be taken, it must be hands-on, and you should not rely on black box thinking for anything important. I noted that common design patterns regarding state will inevitably means these components will not be things you can treat like black boxes, you will need to maintain them. I noted that others needing to read your code will need to have semantically named content to more easily understand it and that the writing portion of simple components is much less important (and time-sucking) than making a coherent and intentional design. I critiqued the idea of these LLMs producing idiomatic code, a claim you introduced, and you got confused about the topic, treating my challenge about newer idioms as a suggestion to follow fads as if it were silly for these LLMs to... produce idiomatic code. I explicitly noted inconsistencies like this.

You largely ignored these responses or seemingly misunderstood them, responding in ways that made no technical sense. I attempted to clarify, giving you many opportunities to recognize where we agree or reframe your responses.

Then you went meta and suggested this discussion was pointless. Now we are here, with you insisting you've responded to all of my germane points (you absolutely have not) and then repeating your original position for no reason.

If you'd like we can revisit all of them. Every point misunderstood, every technical error, every point ignored.

I think I was pretty clear what I meant. I was talking about coupling via shared mutable state. This is the aspect that I find makes code difficult to reason about.

No, you were not clear in what you meant, you were actually incorrect in your statements re: purity regarding functional programming. It is difficult to be less clear than stating something clearly technically false on a technical matter. Your claim simply does not apply to your described codebase. I have offered a few interpretations of what you might be meaning to say. Are any of my interpretations correct?

You're talking about implementation details here.

If the nature of calls and design in a React application are just implementation details then why are you talking about them so much? OOP vs FP? Purity of functions? Definitions vs. instantiations? As a reminder this all stems from me simply pointing out that LLMs will produce fairly boilerplate outputs that won't account for important design questions - like dependency injection. And you can't just ignore and separate this if you actually use those design decisions.

I'm talking about the semantics of how you use and reason about these components.

You're saying semantically incorrect things. I am attempting to present correction in a way that can be received, as you seem to not know what these terms mean or how React works, otherwise you wouldn't make such frequent mistakes. These mistakes should not be a big deal but the response of trying to justify or ignore them is not easy to work with.

Once again, what you really care about is scope. What data is passed to a component and what the ownership of this data is.

JS has no concept of data ownership or when variables go in and out of scope (except for the GC). I have no idea what you're talking about. These are not correct or meaningful statements, though I'm sure they mean something to you.

Hooks are obviously not pure, but they don't inherently prevent reasoning about your components or testing them in isolation.

They prevent your components from being pure... You are objectively wrong in how you described this strategy. Was my attempt to fix it and redescribe what you might be talking about correct? I have no idea, you presented only something in the form of counterargument that didn't directly address what I said.

Frankly, I'm not even sure what your criticisms are specifically.

This is absurd.

You've made some assertions about dependency injection, memoiztion, and so on, and claimed that this is somehow problematic when you have LLMs generate code.

Yes, what did I say about those things? What was my meaning? I was fairly explicit when I introduced those terms. That you have forgotten or did not try to understand in the first place is not a counterpoint.

I've personally not run into these issues, so this argument isn't really making a lot of sense to me.

If you will recall, I brought up dependency injection as something that LLMs will not produce by default as it is a design question (aside from existing patterns from boilerplate). This was just an example of the kind of design question that often touches fairly deeply on the application and how it has been modularized and generalized. There are many abstractikns like this that would not jibe with black box codegen.

If you will recall, I brought up Memoization with regards to you saying the LLMs produce idiomatic code. Choosing when to memoize and which variables to memoize is a reasoning problem and not one that LLMs do a very good job of, as they primarily reproduce patterns. I'm sure they do introduce memoization sometimes, but you'll still need to think about this yourself.

Notice that these are two fairly separate critiques. I presented them separately and with distinct rationales.

You not running into them, to me, just suggests that you don't use these kinda of things at all because your projects are very simple and not much design goes into them. They may not need more design than they have, so I am not criticizing that. But "I haven't run into these problems" isn't meaningful without acknowledging what those problems are, how they might cause issues, and asking whether they would have presented themselves in any of your projects. And both are just examples of the type of challenge they represent for codegen.

The type of side effects we're talking about matters. The problematic kind are the ones that result in coupling via implicit shared mutable state as a result of passing and modifying references to shared data.

As I explained, they are all problematic, just some are often outaide our control. If your API calls are to data with internal consistency or references, foe example, you may run into conflicting state information about the same server-side state because separate components are responsible for fetching that state independently - not in sync. Library developers for fetching web data often use complicated caching strategies for this reason. In the case of web data you might not even have control of when that state mutates!

What I'm saying is that avoiding shared mutable state is a prerequisite for modularity. You certainly can create coupling in other ways, but if you have shared state then you're inherently coupled from the start.

And you'd be wrong about that. Every React app that drills down into components with callbacks or uses contexts will use and potentially modify shared state when instantiated but can be developed as a modular component. They are essentially using dependency injection, a lucky coincidence.

The programmatic nature of these components as having side effects is the same as for components fetching state from the web. The difference is in what you have control over.

You didn't say which tools you used, you didn't say when you used them, or how much time you've actually invested in learning and becoming productive with them. Did you use qwen-code, Continue, Roo-Code, etc, which models were you using with them, how did you decide which parts of the project to apply them to, how did you limit scope, what structure did you provide them with that you've written up front?

You didn't ask for any of that and for infosec reasons I wouldn't describe my dev setup anyways. You seem to be inventing reasons to be dismissive ad hoc, as if I should have read your mind before you deigned to listen to my clearly uneducated opinions, right?

Of course I do, and I don't find the process is anything like working with a junior dev, which I have done extensively I might add. It's a process closer to using a very clever auto complete in my experience.

Either you're doing a full review of the code or you aren't. If you are, it is like reading anyone else's code, and with the propensity for being just a bit to very wrong for one's stated needs and matching documentation/stackoverflow a little too closely, quite similar to a junior dev. If you aren't, this isn't a serious production system and you're black boxing it.

Incidentally, writing tests is an excellent use case for LLMs because tests tend to consist of isolated functions that test a specific thing. It's easy to see if the test is doing what's intended, and LLM can crap out a lot of boilerplate for the tests quickly to test a lot of edge cases that's tedious to do by hand.

Tests are maybe the worst application of LLMs. Tests are where you, the designer, get to specify how your application is supposed to behave. If your tests are that tedious, I suspect your tooling is wrong or your architecture is wrong.

What I'm telling you is that I use LLMs on daily basis to implement functions, UI components, API endpoints, http client calls, and so on. (...)

Not a single one of these 4 paragraphs points out an error in my thinking re: LLMs.

[-] yogthos@lemmygrad.ml 1 points 6 hours ago

I think you should read it again and rethink this response.

I read them again, and my response remains the same. None of what you say matches my actual experience using these tools.

I have repeatedly noted security as a topic where care must be taken, it must be hands-on, and you should not rely on black box thinking for anything important.

And nowhere did I argue otherwise. However, if your input text boxes are a security concern then you might want to step back and think hard about the design of your app.

noted that common design patterns regarding state will inevitably means these components will not be things you can treat like black boxes, you will need to maintain them.

I don't know what design patterns you use, but I'd rethink them, because you absolutely can create self contained components. Any component library is a testament to that.

I noted that others needing to read your code will need to have semantically named content to more easily understand it and that the writing portion of simple components is much less important (and time-sucking) than making a coherent and intentional design.

This is based on an assumption you've made that code generated with LLMs will be difficult to understand. This is not my experience at all.

I critiqued the idea of these LLMs producing idiomatic code, a claim you introduced, and you got confused about the topic, treating my challenge about newer idioms as a suggestion to follow fads as if it were silly for these LLMs to… produce idiomatic code. I explicitly noted inconsistencies like this.

I'm not confused about anything here. I simply rejected your claim and you got upset about it.

You largely ignored these responses or seemingly misunderstood them, responding in ways that made no technical sense. I attempted to clarify, giving you many opportunities to recognize where we agree or reframe your responses.

No, I understood them fine and I addressed them repeatedly in this thread. What it comes down to is that none of your claims match with my actual usage of these tools.

Then you went meta and suggested this discussion was pointless. Now we are here, with you insisting you’ve responded to all of my germane points (you absolutely have not) and then repeating your original position for no reason.

I suggested this discussion was pointless because we just keep going in circles here, but evidently you find this to be a meaningful use of your time.

If you’d like we can revisit all of them. Every point misunderstood, every technical error, every point ignored.

I understood your points perfectly, I simply disagree with them based on my experience. That's all I can tell you.

No, you were not clear in what you meant, you were actually incorrect in your statements re: purity regarding functional programming.

If it's not clear to you that I was talking about shared mutable state after I repeatedly said then I really don't know what else to say.

If the nature of calls and design in a React application are just implementation details then why are you talking about them so much?

What I said repeatedly is that you can limit scope of your components within the application, which makes it possible to reason about them in isolation. Then you can focus on the API level of each component when considering the flow of logic within the application. This is really a fundamental aspect of how you structure large applications in a maintainable way.

The whole discussion is about the fact that if you structure your app properly, you can use LLM code in a way where the scope is limited which makes it easy to reason about them.

You’re saying semantically incorrect things.

Seems to me that we're just talking past each other here and you're not even putting a minimum effort into trying to understand what I'm actually saying.

JS has no concept of data ownership or when variables go in and out of scope (except for the GC). I have no idea what you’re talking about. These are not correct or meaningful statements, though I’m sure they mean something to you.

Js doesn't have to have a concept of data ownership. You as a developer absolutely should have one though. I've already pointed out how using an immutable data structure library is a great way to limit scope. The fact that you're struggling to understand such basic things is frankly concerning.

They prevent your components from being pure… You are objectively wrong in how you described this strategy.

See, this is what I mean we're going in circles. What did I say the main problem with side effects was, and what types of side effects did I say were problematic?

Yes, what did I say about those things? What was my meaning? I was fairly explicit when I introduced those terms. That you have forgotten or did not try to understand in the first place is not a counterpoint.

You made statements that have absolutely no relation to any code I've ever generated using LLMs.

If you will recall, I brought up dependency injection as something that LLMs will not produce by default as it is a design question (aside from existing patterns from boilerplate).

And I've repeatedly said that I don't need LLMs to do any design for me. This is precisely the problem with this whole discussion. You make a straw man and then demand that we argue about it.

If you will recall, I brought up Memoization with regards to you saying the LLMs produce idiomatic code.

Again, I do not need LLM to choose when to memoize anything. I'm perfectly capable of making that decision myself. This is not a problem I need it to solve for me.

You not running into them, to me, just suggests that you don’t use these kinda of things at all because your projects are very simple and not much design goes into them.

I'm not running into them because I'm making these decisions myself. In fact, I even explained how I sketch out the scaffolding for the LLM to fill in. I make all the design and architecture decisions in the code base.

But “I haven’t run into these problems” isn’t meaningful without acknowledging what those problems are

I haven't run into these problems because of the way I use the tool, not because my projects are so simple that these design decisions don't need to be made. I've explained this repeatedly to you.

As I explained, they are all problematic, just some are often outaide our control.

If you have problems like different components showing different state, then that's very much a sign of poor up front design.

And you’d be wrong about that.

If you have a component that modifies shared state outside it's scope that's coupling by the very definition. You evidently have a personal definition of what the word modular means.

The programmatic nature of these components as having side effects is the same as for components fetching state from the web. The difference is in what you have control over.

What you care about as a developer first and foremost is the state of the data in your app. If you manage state in a sane way, then most of your problems go away.

You seem to be inventing reasons to be dismissive ad hoc

Ah yes, you can't tell me whether you've actually used the tools you're heatedly arguing about for "infosec reasons". It's obvious that you have not used these tools with a serious intent of learning and understanding them.

Either you’re doing a full review of the code or you aren’t.

If you rely solely on visual review of code to determine that your production system works then you're not working on a serious system. Meanwhile, as I've explained, I use LLMs to fill in function signatures, and I read them one function at a time as I make and test them.

If your approach to using LLMs is to let them generate a bunch of code and then try to read and understand it all at once then I can see why you have a bad time.

Tests are maybe the worst application of LLMs. Tests are where you, the designer, get to specify how your application is supposed to behave.

I'm not sure how these things are contradictory in your mind. I know what I want in my tests, doesn't mean I can't have the LLM do the manual effort of writing things and then tweak the tests as I need to. I find any code I don't have to write to be tedious. Some of us get into programming because we like to automate things.

Not a single one of these 4 paragraphs points out an error in my thinking re: LLMs.

As I said earlier, this is a tool that works for me, if you can't figure out how to use if effectively that's your problem. Do what works for you, I'm not here to tell you how to live.

[-] Chana@hexbear.net 1 points 1 hour ago

I read them again, and my response remains the same. None of what you say matches my actual experience using these tools.

That's not what we were talking about in what we quoted. It was your ridiculous suggestion that an entire point by point comment I wrote and that you ignored had nothing we hadn't already discussed. If you "read them again" I would expect you to at least know what this part of the conversion was about, i.e. I just don't believe you.

I give up. Please self-crit on this interaction and whether you have been honest with your comrade.

this post was submitted on 22 Aug 2025
79 points (100.0% liked)

technology

23926 readers
124 users here now

On the road to fully automated luxury gay space communism.

Spreading Linux propaganda since 2020

Rules:

founded 5 years ago
MODERATORS