> Slowly your brain just gets trained to mid thinking like an LLM
Regression to the mean.I am doing a lot of the code reviews on my team and I can see that LLMs have a hard time with OOP (or are perhaps specifically guided to avoid) and writes a lot of `private static` utility functions. A lot of duplicated small utilities that can end up becoming a maintenance nightmare should the behavior need to be normalized/fixed. String key formatting, for example. JSON serialization behavior, another very common one. At a higher level, it needs very active guidance to search for existing code and re-use interface contracts via DI consistently (we have instructions and skills for this, but hit or miss on usage and adherence)
It generates very repetitive code and doesn't have the wits to refactor is in a way that is reusable, even in simple cases (basic JSON serialization).
It really dislikes to create object and type hierarchies on its own (e.g. move the repetitive serialization to a base class) and prefers to write one-offs. Works, but not very elegant; lots of duplication and touch points for regressions.
It also has a tendency to write more "verbose" solutions where sometimes simpler ones will work.
Mix of CLI (Codex) and GH Copilot (if I want active line selection).
We have a set of custom skills and knowledge base as well.
What is not clear to me is whether this is inherent desirable behavior on the part of the agent or not. Why? Because for the agent, the code is more isolated and its immediate changes have a lower blast radius by internalizing some behavior (`private static`) versus touching a shared method or hierarchy.
I can see why the underlying models may be steered this way, but it creates a different kind of problem when things really should be shared.
My hope is eventually open source models get far enough along we just train the models on company specific code needs.
Until then it is a lot of wack a mole with skills, hooks, system prompts, and interweaving deterministic needs.
This is my experience as well, and I've been using Claude Code a lot.
Extremely impressive tools, but they're like fast food. They will solve your immediate problems quickly and cheaply, but you're going to have issues on the long term if that's all you use.
Sometimes I get the "you're right!" response, but often it will also explain why it made the decision it did, and it's rational enough that I accept the new approach.
It's still very much like a junior dev in this way - pretty good at 'just make it work', pretty good at monkey-see-monkey-do, and occasionally surprises you with something novel (to you).
I think this is kind of what I’m worried about. Referencing Karpathy, an LLM can basically convince any one of anything. Doing this enough times and your opinions just become the LLM opinion. Same with problem solving approaches. I see this for myself so I reserve time to formulate my own solutions. Maybe my solutions are worse but at least I’m training the muscle that may lead to me outperforming the LLM in specific spaces
I've found myself on more than one occasion just stepping away and needing to really sit down and think and to not ask an LLM until I have a clear idea of what I want to do
The one thing that bothers me is that one process I really used to run is thinking in code, slowly sketching out a solution until it had the properties I wanted it to have
I find myself not really engaging with this at present and it really bothers me, I've been trying to figure out how to get back into doing it again because I think the most differentiated and interesting ideas and thinking I had were usually shaped by going through that process
However so far I've found working with LLM's just doesn't jive with that thought process and several months into using them I'm still figuring out how to go back to doing that
The quality of the craft can live on in open source and personal projects.
I've been working with Apache AGE (openCypher in Postgres) recently and found that left to its own device, the agent wrote terribly inefficient queries, even when given a test harness and instructions to examine the result of the query plan.
It just didn't seem to understand the graph traversal, even when given the graph schema and small snippets.
I ended up hand-writing the structural "skeleton" of the main query that I performance tuned to a certain extent and then handed it over to Codex to finish off. Once it had this skeleton to start from, it was able to do a much, much better job of writing this query.
It's not all that different from what happens if I am delegating a larger task to another human being. The only actual difference there is that wit a person, I'd rather underspecify as to give them ore of a sense of freedom and opportunity for growth, while the LLM isn't learning anything, so, if anything, it's easier.
I've noticed that Claude with the current model can act most of the time like a trusted senior engineer sounding board for me. However on occasions we disagree. Recently we had a stand up argument about a proposed solution to a potential security risk in a system. I realized Claude had taken on a kind of "corporate culture" thinking on the problem (which was to do with use of a vault/broker to hold user credential data) that would be appropriate in some contexts, but wasn't in ours. The experience was totally like arguing with someone on the corporate Slack, but in the end I control what gets deployed so I won. But I'd say 90% of the time I get as much value out of Claude on these discussions as I would if I knew one competent person for each of the subjects we discuss, and had called that person for advice. Of course even though my network is...vast...I just don't know a competent person in every single field.
totally depends on how you use the tools. Plenty of people fall in to that scenario, but plenty of others explicitly tell the LLM tools what and how to build something.
For the most part I use claude code w/ opus plan mode + sonnet implementation mode, and it does pretty well. I go through the planning process for anything other than the most basic changes.
Not really. You write the specs, you write the architecture. You ask the model to implement your solution.
You can stop this by detailing exactly what solution you want but I think continuous leaning on the LLM will lead you into a confined space.
I love software. It is my passion. I've practiced and studied it for decades. We should not delude ourselves on what it actually is. Writing software is more like plumbing a tract home, than computational fluid dynamics. I'm fine with that.