One Month Without AI(blog.bustikiller.com) |
One Month Without AI(blog.bustikiller.com) |
Just today it made three glaring mistakes in one session:
1. It read a file in the wrong directory, because that file had the same name as the file in the right directory. It apologized when I challenged it, promising me that it would remember to "read import statements" in the future.
2. It miscounted the number of times a function was called in my repo. It said 20, while my built-in IDE search accurately showed 17. Again, it apologized when I corrected it.
3. It referred to a variable by name that does not exist anywhere in my code. It apologized, and said it was referring to a variable used internally by one of the third-party packages installed in my repo.
So many apologies.
It's the little things like this that remind me on a regular basis just how little I can trust artificial "intelligence."
Playing an instrument vs electronic/computer music.
We do forget skills we don't practice, especially fine motor skills (like playing the guitar or typing code).
There's inherent pleasure in playing a musical instrument - practicing improves fine motor skills and produces satisfaction.
You can play for yourself and that can be a great experience.
Often people create music for other listeners - and now the satisfaction comes not just from your skill, but from how the music impacts your listeners.
They say you can put more of your 'soul' into music made with an instrument, but I'd say there's quite a bit of electronic music with just as much soul.
People who create electronic music don't generate any of those sounds with their fine motor skills, but they do have a plan about how the song progresses and what emotional state it elicits in users.
That's why you have DJs which are more popular than others.
If you stop playing the guitar for a year, then pick it up and try playing something, you will feel very rusty. But give it a week of practice and most of your skill comes back.. and in 1 month you're back to your peak skill.
I guess my point is - If you go full on agentic, you'll loose some of your coding skill, but you can get it back fairly quickly if you go back to manual coding. On the flip side, you get better at using AI if you use it, so your thinking is at a higher level, but you give up understanding the low level details of how exactly the code works.
Either way you're making 'music', albeit a different kind of music.
No, playing an instrument VS making electronic music has absolutely no comparison to writing code by hand or with AI.
You're comparing the difference between a motor skill and a knowledge-based competency, with the difference between two knowledge-based competencies.
The real challenge is forming the new ideas in the first place and most of those new ideas coming either from using the code as a product or time spent maintaining and refactoring large code.
Anyways, if you want to continue on the path towards regaining control and take it to the next level I wrote something similar here: https://blog.sharefile.systems/be-brave-go-low/
Now I can just say "add 2FA" and in 5 minutes, while I test something else, it is done.
It also made iterations a lot faster, you can try something out, see how it feels, if it doesn't work, you can just trash all the code and start again.
I'd expect it's in the tens of thousands, given how effortless you find it.
Code is a liability.
Removing the opportunity cost doesn't eliminate the other two costs of a feature
Over the past six months I tried using Claude, chatgpt, Grok and Gemini. At best I got reminders of how things worked. People online say they use them to write their code. The code they supplied to me has NEVER worked or was so convoluted that I threw it away and did it myself.
At most, I use these tools as search engines. Even then some references are poor.
I'm starting to think this is becoming a sad, sad world and AI is just the new TV of the programming world.
It usually takes me two or three iterations to get there though. Discussing design and principles before writing the bulk of the code is a must. And then a pass or two of review to weed out ugliness.
Still saves time compared to writing the code by hand. Especially for tricky things, where type checking and tests can verify correctness.
Of course if someone wants to stop using AI completely that's a completely valid decision[0], but I somewhat feel like AI is just a tool that can be easily misused.
I constantly have to review giant PRs and I noticed that I'm handwaving them more and more often. We went from almost no commit messages to walls of text that no one reads. We're starting to become bottlenecked on reviews because code is coming out too fast.
But at the same time, these are mostly issues stemming from a lack of understanding of why some of the standards/processes existed in the first place. If a developer thinks the commits have to be written just to tick a checkbox, they won't care about making them readable.
And at the same time, I'm getting a lot of value from AI, in tasks that do not necessarily have such adverse effects:
- I can create quick tools to test something, or parse/process some data. In these instances code quality is not important and I don't really want to spend hours on developing it myself (just to feel accomplished?)
- I can research issues in our codebase by just providing a log file. It's not always gonna be accurate or correct but it often gives me a very good starting point, almost always quicker than I could've done it myself
- While I do not use AI to completely generate ticket descriptions, asking it to generate me a body containing the relevant code snippets and references allows me to focus on verifying that what I'm writing is correct and understandable.
Etc etc.
So I don't know if it's just the nature of my work, the fact that I have a different skillset, or different priorities. But it somehow feels weird to me wanting to completely abandon AI just because in some cases it can lead to frustrating consequences.
[0]: I too just started a new project where I'm forcing myself to use absolutely no AI!
I use it to find reasoning gaps, add examples, add citations etc. The LLM/Agent can find them quicker than I.
This is using AI for productivity in any domain, in a nutshell. I just wrote a book using Claude as an experiment, and while the thing got done and it was an amazing tool and a great experience, what I’m left with is a book where every line needs rewriting, there are logical inconsistencies throughout, and the style is so bad it should actually just be binned rather than rewritten.
AI helps a lot but for code that matters, use it to fill your context window, not the other way around. For code that doesn't matter (prototypes, speed runs, etc), vibe away - it can be super fun!
I have not lost control.
I my most prolific project I do not review the code, but I QA test extensively.
In other projects at work, I review the code.
I prompt to simplify, I challenge implementation that solves irrelevant edge cases, resulting in much smaller PRs.
In projects where I do not work alone, I still write two line PR descriptions myself.
Dumping paragraphs of AI output into the description of a MR where I ask others to review I consider disrespectful.
---
> If you turn off your brain, and relax babysitting AIs, you’re not getting any better. You’re losing value
I'm hardly turning off my brain here.
As the author notes, the context switching and so on takes concentration and effort too.
I can say without doubt that I am more productive than ever.
I am getting better by the month, and I am not currently losing value, until the AI fully replaces both me and the author.
I see great engineers troubleshoot everything by pasting logs into the prompt and blindly accepting the answer. Zero added value while they ctrl-c ctrl-v themselves out of a job.
The barrier to software development has only ever been computer access and knowledge.
With AI, it’s roughly computer and internet access.
This means we’re getting a lot of people who aren’t good at either software development or AI automation playing with both. It’s the majority of what people seem to talk about.
I don’t think this is bad, but I do think it’s making real progress in AI automated software development on teams which are good at both much less visible.
A conservative team member of mine estimated we’re working at 200x speed these days, compared to 2 years ago. And we still see ways we can improve. A parallel team is only seeing an 1.2x increase, but they are unable to modify their architecture around AI.
Some of this is shifting roles. You can have a mildly technical domain expert vibe code the frontend for a new module. The more AI automation you’ve architected for, the faster they can go and the higher quality the outcome. We’re experimenting with mixing vibe coding with specifying formal requirements to push this further.
This works well. And now you’ve cut dozens of rounds of the PM not knowing the right shape for the new software out of the process. Even if we threw the end code away, this would save us tons of time.
This is just one example.
Like toddlers!
"See?? Here's that DEAD BEEF CAFFEE again! Look! Again! The FECE FACCA AFFEC7!! I'm so close to crackin' it! Aha.. Aha.. ABEBE23.. BECACA17.. 1337C0C.. It all clicks in place, don't you see? I'm totally getting it!"
He was all bubbling like this throughout the whole night until his brain just issued a shutdown to let the body rest a bit. That was truly a horrible sight.
I remember him every time I see instances of AI psychosis around.
For the rest I do not. I do not place AI-generated code anywhere.
You lose all control AND UNDERSTANDING.
When things go wrong it gets very messy.
I will keep doing this, I think it works well, I emjoy programming and I think it is productive.
For testimg I tend to write randomized testing, which takes a bit of design but oncr you have it, well, it os test-generatove and increases the quality of checks.
Soon we rediscovered Little’s Law. WIP was piling up and we were getting overwhelmed at the integration phase, and realized that we had got really good at starting projects but actually finishing them was a struggle. Tickets were moving fine, of course. Our rate of generating code and committing PRs was through the roof. But getting actual projects to a point where the stakeholders and customers were happy with the result was just not happening.
So now we have gone back to strict WIP limits and requiring every non-trivial project to have at least two people collaborating on it. The rate at which we are churning out code has gone back down, along with the token bill, but the logjam is clearing. Better yet, the stakeholders, who never cared about our quantitative velocity metrics in the first place, have eased off on complaining that we aren’t getting anything done.
I think there might be (dare I say) a middle ground to get the productivity of the llm, esp as we evolve them, while still maintain a global and even fine-grain comprehension of a code base.
It is not a simple change, however, but a fundamental one.
Overall I think we are still living in the past and try to apply ourselves to the future. But if the ai craze is to be taken clear-headedly for what it is, it is a complete break from the von Neumann computer and all its resulting artifacts. So why should we use the same tools?
If you cannot read it as the author, what hope do I have to read and make sense of the wall of text which doesn’t seem to describe what I actually need to start reviewing.
I really really encourage everyone to write their own descriptions for PRs. If you cannot succinctly describe it in a way another human understands then you don’t understand your own change and you should withdraw your request.
We’re using an online, undeterministic, black-box middleman to generate our code. It’s 100% Trust me bro. No proof, no scrutiny, no guarantees.
> let me tell you about this experience, and how it was turning me dumber, lazy, and a worse developer.
Though the article discusses from the point of using agents, I digress to the topic of building with AI in general.
My experience has been the exact opposite. A new idea (usually related to correctness or architecture) is discussed first with the LLM where it defaults to average Joe idiotic bullshit pushback.
This frustrates me and I abuse the LLM for being idiotic by explaining the how. This results in a more refined and concrete form of the abstraction leading me to even more insights.
The LLM remains an idiot. But a useful idiot nonetheless.
How was this a great experience if what was produced needed such extensive changes that your own assessment is that it should be thrown out? At what point is the necessary rework so much that the thing being reworked didn't really contribute much to the end product at all?
Have you noticed it, too?
And just like that, the book got abandoned.
N.b. some of its analysis and laying out of faults in arguments was actually pellucid and brilliant, it can’t be denied. Just it comes with prose that can’t really be used for anything. And even on another occasion when I got it to help me redraft and extend a different book of mine, then it randomly and consistently started stripping out all the stylistic flourishes out of my sentences, to the point where it couldn’t notice that word choices were very deliberate and actually set up little punchlines and logical payoffs paragraphs or chapters hence. And even when I explained and showed it what it was doing, it was like “ahh that’s so clever and brilliant” but just continued to do the same thing.
Haven't typed a line of code or read any code for over 6 months now.
And I used to love coding and be a competitive programmer, but this is how "coding" goes nowdays.
I have a mental model of what it would do, and how it would work, and I ask questions to confirm things and tell it to watch for specific gotchas. Then simply test the feature myself a bit.
Security-wise, I think the latest cyber models are better than me anyway at finding vulnerabilitates and pentesting such features.
Plus 2FA is a very common pattern, so it likely has in the training dataset many really good implementations.
I don't doubt that, but they are equally good in making mistakes, over-engineering, or adding things you never asked for. They have all sorts of patterns in their training data from excellent to inadequate and I find them challenging to guide them consistently in one direction. Also with questions and tests, they can add something extra you didnt need and you dont know about, so your scrutinizing questions and test cases could miss that.
At least for myself, I didnt find them reliable enough yet to do what you describe and just not look at the code at all.
I have no idea how the code looks like, and barely even tested the app entirely, because it is still not released yet, but I do think a lot about new features, tweaks, improvements, etc. Years of programming and game development did help, but I don't think anymore that code is relevant, as long as it looks ok and feels good.
[0]: https://ultimidi.com
I basically only manually test e2e myself, other tests are automated, code review is automated. I can tell the model to test for me too specific things or to add tests for specific potential issues, performance benchmarks, compared different implementations, etc.
The focus is a lot more around the code than on the code.
You're acting as if code was incredibly secure before LLMs because humans were reviewing it.
I dread to think what that means in security conscious code.
T3 Skynet already exists and is hunting John Connor down
I wanna see the conference room meeting where they decide to push an unfinished, unstoppable technology. I guess T1 is the closest as it happens when Skynet "gains intelligence"
> I wanna see the conference room meeting where they decide to push an unfinished, unstoppable technology. I guess T1 is the closest as it happens when Skynet "gains intelligence"
This is the mid-point of T3. From the Wikipedia plot summary:
General Brewster is supervising the development of Skynet for Cyber Research Systems (CRS), an autonomous weapons developer. The Chairman of the Joint Chiefs of Staff pressures him to activate Skynet to stop an anomalous computer virus from invading servers worldwide. Brewster fails to discover that the virus was Skynet becoming sentient. John, Kate, and the Terminator arrive too late to stop him from activating it. The T-X appears, fatally injures Brewster, and controls weaponized CRS T-1 and HK drones to kill other employees.