i dont know where you are working, but where I work i cant prompt 90% of my job away using cursor. in fact, I find all of these tools to be more and more useless and our codebase is growing and becoming more complex
based on the current state of AI and the progress im witnessing on a month-by-month basis - my current prediction is there is zero chance AI agents are going to be coding and replacing me in the next few years. if i could short the startups claiming this, I would.
This has become especially true for me in the past four months. The new long context reasoning models are shockingly good at digging through larger volumes of gnarly code. o3, o4-mini and Claude 3.7 Sonnet "thinking" all have 200,000 token context limits, and Gemini 2.5 Pro and Flash can do 1,000,000. As "reasoning" models they are much better suited to following the chain of a program to figure out the source of an obscure bug.
Makes me wonder how many of the people who continue to argue that LLMs can't help with large existing codebases are missing that you need to selectively copy the right chunks of that code into the model to get good results.
But 1 million tokens is like 50k lines of code or something. That's only medium sized. How does that help with large complex codebases?
What tools are you guys using? Are there none that can interactively probe the project in a way that a human would, e.g. use code intelligence to go-to-definition, find all references and so on?
This to me is like every complaint I read when people generate code and the LLM spits out an error, or something stupid. It's a tool. You still have to understand software construction, and how to hold the tool.
Our Rust fly-proxy tree is about 80k (cloc) lines of code; our Go flyd tree (a Go monorepo) is 300k. Generally, I'll prompt an LLM to deal with them in stages; a first pass, with some hints, on a general question like "find the code that does XYZ"; I'll review and read the code itself, then feed that back to the LLM with questions like "summarize all the functionality of this package and how it relates to other packages" or "trace the flow of an HTTP request through all the layers of this proxy".
Generally, I'll take the results of those queries and have them saved in .txt files that I can reference in future prompts.
I think sometimes developers are demanding something close to AGI from their tooling, something that would do exactly what they would do (only, in the span of about 15 seconds). I don't believe in AGI, and so I don't expect it from my tools; I just want them to do a better job of fielding arbitrary questions (or generating arbitrary code) than grep or eglot could.
Yeah, 50,000 lines sounds about right for 1m tokens.
If your codebase is larger than that there are a few tricks.
The first is to be selective about what you feed into the LLM: if you know the work you are doing is in a particular area of the codebase, just paste that bit in. The LLM can make reasonable guesses about things the code references that it can't see.
An increasingly effective trick is to arm a tool-using LLM with a tool like ripgrep (effectively the "interactively probe the project in a way that a human would" idea you suggested). Claude Code and OpenAI Codex both use this trick. The smarter models are really good at deciding what to search for and evaluating the results.
I've built tools that can run against Python code and extract just the class, function and method signatures and their docstrings - omitting the actual code. If you code is well designed and has reasonable documentation that could be enough for the LLM to understand it.
This means I can feed in the exact code that the model needs in order to solve a problem. Here's a recent example:
llm -m openai/o3 \
-f https://raw.githubusercontent.com/simonw/llm-hacker-news/refs/heads/main/llm_hacker_news.py \
-f https://raw.githubusercontent.com/simonw/tools/refs/heads/main/github-issue-to-markdown.html \
-s 'Write a new fragments plugin in Python that registers issue:org/repo/123 which fetches that issue
number from the specified github repo and uses the same markdown logic as the HTML page to turn that into a fragment'
I have the same experience. It‘s basically a better StackOverflow, but just like with SO you have to be very careful about the replies, and also just like SO its utility diminishes as you get more proficient.
As an example, just today I was trying to debug some weird WebSocket behaviour. None of the AI tools could help, not Cursor, not plain old ChatGPT with lots of prompting and careful phrasing of the problem. In fact every LLM I tried (Claude 3.7, GPT o4-mini-high, GPT 4.5) introduced errors into my debugging code.
I’m not saying it will stay this way, just that it’s been my experience.
I still love these tools though. It’s just that I really don’t trust the output, but as inspiration they are phenomenal. Most of the time I just use vanilla ChatGPT though; never had that much luck with Cursor.
Yeah, they're currently horrible at debugging -- there seems to be blind spots they just can't get past so end up running in circles.
A couple days ago I was looking for something to do so gave Claude a paper ("A parsing machine for PEGs") to ask it some questions and instead of answering me it spit out an almost complete implementation. Intrigued, I threw a couple more papers at it ("A Simple Graph-Based Intermediate Representation" && "A Text Pattern-Matching Tool based on Parsing Expression Grammars") where it fleshed out the implementation and, well... color me impressed.
Now, the struggle begins as the thing has to be debugged. With the help of both Claude and Deepseek we got it compiling and passing 2 out of 3 tests which is where they both got stuck. Round and round we go until I, the human who's supposed to be doing no work, figured out that Claude hard coded some values (instead of coding a general solution for all input) which they both missed. In applying ever more and more complicated solutions (to a well solved problem in compiler design) Claude finally broke all debugging output and I don't understand the algorithms enough to go in and debug it myself.
Of course I didn't use any sort of source code management so I could revert to a previous version before it was broken beyond all fixing...
Honestly, I don't even consider this a failure. I learned a lot more on what they are capable of and now know that you have to give them problems in smaller sections where they don't have to figure out the complexities of how a few different algorithms interact with each other. With this new knowledge in hand I started on what I originally intended to do before I got distracted with Claude's code solution to a simple question.
--edit--
Oh, the irony...
After typing this out and making an espresso I figured out the problem Claude and Deepseek couldn't see. So much for the "superior" intelligence.
Don't get distracted by claims that AI agents "replace programmers". Those are pure hype.
I'm willing to bet that in a few years most of the developers you know will be using LLMs on a daily basis, and will be more productive because of it (having learned how to use it).
There's nothing stopping you from coding if you enjoy it. It's not like they have taken away your keyboard. I have found that AI frees me up to focus on the parts of coding I'm actually interested in, which is maybe 5-10% of the project. The rest is boiler plate, cargo-culted, Dockerfile, build system and bash environment variable passing circle of hell that I really could care less about. I care about certain things that I know will make the product better, and achieve its goals in a clever and satisfying way.
Even when I'm stuck in hell, fighting the latest undocumented change in some obscure library or other grey-bearded creation, the LLM, although not always right, is there for me to talk to, when before I'd often have no one. It doesn't judge or sneer at you, or tell you to "RTFM". It's better than any human help, even if its not always right because its at least always more reliable and you don't have to bother some grey beard who probably hates you anyway.
All major tokenisers have explicit support for encoding arbitrary byte sequences. There's usually a consecutive range of tokens reserved for 0x00 to 0xFF, and you can encode any novel UTF-8 words or structures with it. Including emoji and characters that weren't a part of the model's initial training, if you show it some examples.
Pretty sure that we’re talking apples and oranges. Yes to the arbitrary byte sequences used by tokenizers, but that is not the topic of discussion. The question is will the tokenizer come up with words not in the training vocabulary. Word tokenizers don’t, but character tokenizers do.
Source: Generative Deep Learning by David Foster, 2nd edition, published in 2023. From “Tokenization” on page 134.
“If you use word tokens: …. willnever be able to predict words outside of the training vocabulary.”
"If you use character tokens: The model may generate sequences of characters that form words outside the training vocabulary."
Those tokens won't come up during training, but LLMs are capable of In-Context Learning. If you give it some examples of how to create new words/characters in this manner as a part of the prompt, they will be able to use those tokens at inference time. Show it some examples of how to compose a Thai or Chinese sentence out of byte tokens, and give them a description of the hypothetical Unicode range of a custom alphabet, and a sufficiently strong LLM will be able to just output bytes despite those codepoints not technically existing.
And like I said, single-byte tokens very much are a part of word tokenisers, or to be precise, their token selection. "Word tokeniser" is a misnomer in any case - they are word piece tokenisers. English is simple enough that word pieces can be entire words. With languages where you have numerous suffixes, prefixes, and even in-fixes as a part of one "word" (as defined by "one or more characters preceded or followed by a space" - because the truth is more complicated than that), you have not so much "word tokenisers" as "subword tokenisers". A character tokeniser is just a special case of a subword tokeniser where the length of each subword is exactly 1.
So much this. The AI takes care of the tedious line by line what’s-the-name-of-that-stdlib-function parts (and most of the tedious test-writing parts) and lets me focus on the interesting bits like what it is I want to build and how the pieces should fit together. And debugging, which I find satisfying.
Sadly, I find it sorely lacking at dealing with build systems and that particular type of boilerplate, mostly because it seems to mix up different versions of things too much and gives you totally broken setups more often than not. I’d just as soon never deal with the he’ll that is front end build/lint/test config again.
I struggle to think how one person is supposed to interact with that many languages on a daily (or even weekly) basis.
I’ve been on projects with multiple languages, but the truly active code was done in only two. The other languages were used in completed modules where we do routine maintenance and rare alterations.
"I struggle to think how one person is supposed to interact with that many languages on a daily (or even weekly) basis."
LLMs. I've expanded the circle of languages I use on a frequent basis quite dramatically since I started leaning on LLMs more. I used to be Python, SQL and JavaScript only. These days I'm using jq, AppleScript, Bash, Go, awk, sed, ffmpeg and so many more.
I used to avoid infrequently used DSLs because I couldn't hold them in my memory. Now I'll happily use "the best tool for the job" without worrying about spinning up on all the details first.
Depends on the language. Python for instance has a massive default library, and there are entire modules I use anywhere from one a year to once a decade —- or never at all until some new project needs them.
Just as with anything else AI, you never accept test code without reviewing it. And often it needs debugging. But it handles about 90% of it correctly and saves a lot of time and aggravation.
AI generated tests are genuinely fantastic, if you treat them like any other AI generated code and review them thoroughly.
I've been writing Python for 20+ years and I still can't use unittest.mock without looking up the details every time. ChatGPT and Claude are great at that, which means I use it more often because I don't have to deal with the frustration of figuring it out.
They perhaps haven’t taken away your keyboard but anecdotally, a few friends work at places where their boss is requiring them to use the LLMs. So you may not have to code with them but some people are starting to be chained to them.
Yes, there are bad places to work. There are also places that require detailed time tracking, do not allow any time to write tests, have very long hours, tons of on-call alerts, etc.
How long until it becomes the rule because of some arbitrary "productivity" metric? Sure, you may not be forced to use it, but you'll be fire for being "unproductive".
> The rest is boiler plate, cargo-culted, Dockerfile, build system and bash environment variable passing circle of hell that I really could care less about.
Even more so, I remember making a Chrome extension and feeling intimidated. I knew that I'd be comfortable with most of it given that JS is used but I just didn't know how to start.
With an LLM it is way faster to spin up some default config and get going versus reading a tutorial. What I've noticed in that respect is that I just read what it does and then immediately reason why it's there. "Oh, there's a manifest.json file with permissions and a few other things, fair, makes sense. Oh, so you have the HTML/CSS/JS of the extension, you have the HTML/CSS/JS of the page you're injecting some code into and you have the JS of a background worker. Ah yea, I get that."
Then the code won't compile, or more likely your editor/IDE will say that it's invalid code. If you're using something like Cursor in agent mode, if invalid code is generated then it gets detected and the LLM keeps re-running until something is valid.
> It is better to read documentations and tutorials first.
I "trust" LLM's more than tutorials, there's so much garbage out there. For documentation, if the LLM suggests something, you can see the docstrings in your IDE. A lot of the time that's enough. If not, I usually go read the implementation if I _actually_ care about how something works, because you can't always trust documentation either.
> Plenty of incorrect code compiles. It is a very bad sign that people are making comments like "Then the code won't compile".
I interpreted the "hallucination" part as the AI using functions that don't exist. I don't consider that a problem because it's immediately obvious.
Yes, AI can suggest syntactically valid code that does the wrong thing. If it obviously does the wrong thing, then that's not really an issue either because it should be immediately obvious that it's wrong.
The problem is when it suggests something that is syntactically valid and looks like it works but is ever slightly wrong. But in my experience, it's pretty common to come across that stuff like that in "tutorials" as well.
> Yes, rubbish generated by AI. That is the rubbish out there. The stuff written by people is largely good.
I pretty strongly disagree. As soon as it became popular for developers to have a "brand", the amount of garbage started growing. The stuff written before the late 00's was mostly good, but after that the balance began slowly shifting towards garbage. AI definitely increased the rate at which garbage was generated though.
> Yes, AI can suggest syntactically valid code that does the wrong thing
To be fair, I as a dev with ten or fifteen years experience I do that too. That's why I always have to through test the results of new code before pushing to production. People act as if using AI should remove that step, or alternatively, as if it suddenly got much more burdensome. But honestly it's the part that has changed least for me since adopting an AI in the loop workflow. At least the AIncan help with writing automated tests now which helps a bit.
Even when it hallucinates it still solves most of the unknown unknowns which is good for getting you unblocked. It's probably close enough to get some terms to search for.
Because I've used it for problems where it hallucinated some code that didn't actually exist but that was good enough to know what the right terms to search for in the docs were.
Sample size of 1, but it definitely did in my case. I've gained a lot more confidence when coding in domains or software stacks I've never touched before, because I know I can trust an LLM to explain things like the basic project structure, unfamiliar parts of the ecosystem, bounce ideas off off, produce a barebones one-file prototype that I rewrite to my liking. A whole lot of tasks that simply wouldn't justify the time expenditure and would make it effort-prohibitive to even try to automate or build a thing.
Have you tried using AI only for things you already know for a while? I almost only do so (because I haven't found that LLMs speed up my actual process much) and I can tell you that the things that LLMs generally leave out/forget/don't "know" about are plentiful, they will result in tons of debugging and usually require me to "metagame" heavily and ask pointed questions that someone who didn't have my knowledge simply wouldn't know to ask in order to solve the issues with the code they generate. A LLM can't even give you basic OpenGL code in C for doing some basic framebuffer blitting without missing stuff that'll cost you potentially hours or a whole day in debugging time.
Add to this that someone who uses a LLM to "just do things" for them like this is very unlikely to have much useful knowledge and so can't really resolve these issues themselves it's a recipe for disaster and not at all a time saver over simply learning and doing yourself.
For what it's worth I've found that LLMs are pretty much only good for well understood basic theory that can give you a direction to look in and that's about it. I used to use GitHub Copilot (which years ago was (much?) better than Cursor with Claude Sonnet just a few months ago) to tab complete boilerplate and stuff but concluded that overall, I wasn't really saving time and energy because as nice as tab-completing boilerplate sometimes was, it also invariably turned into "It suggested something interesting, let's see if I can mold it into something useful" taking up valuable time, leading nowhere good in general and just generally being disruptive.
Do you mean the laconic and incomplete documentation? And the tutorials that range from "here's how you do a hello world" to "draw the rest of the fucking owl" [0], with nothing in between to actually show you how to organise a code base or file structure for a mid-level project?
Hallucinations are a thing. With a competent human on the other end of the screen, they are not such an issue. And the benefits you can reap from having LLMs as a sometimes-mistaken advisory tool in your personal toolbox are immense.
The kind of documentation you’re looking for is called a tutorial or a guide, and you can always buy a book for it.
Also something are meant to be approached with the correct foundational knowledge (you can’t do 3D without geometry, trigonometry, and matrixes. And a healthy dose of physics). Almost every time I see people strugling with documentation, it was because they lacked domain knowledge.
1. Code doesn't compile. This case is obvious on what to do.
2. Code does compile.
I don't work in Cursor, I read the code quick, to see the intent. And when done with that decide to copy/paste it and test the output.
You can learn a lot by simply reading the code. For example, when I see in polars a `group_by` function call but I didn't know polars could do that, now I know because I know SQL. Then I need to check the output, if the output corresponds to what I expect a group by function to do, then I'll move on.
There comes a point in time where I need more granularity and more precision. That's the moment where I ditch the AI and start to use things such as documentation and my own mind. This happens one to two hours after bootstrapping a project with AI in a language/library/framework I initially knew nothing about. But now I do, I know a few hours worth of it. That's enough to roughly know where everything is and not be in setup hell and similar things. Moreover, by just reading the code, I get a rough idea on how beginner to intermediate programmers think about the problem space the code is written in as there's always a certain style of writing certain code. This points me into the direction on how to think about it. I see it as a hint, not as the definitive answer. I suspect that experts think differently about it, but given that I'm just a "few hours old" in the particular language/lib/framework, I think knowing all of this is already really amazing.
AI helps with quicker bootstrapping by virtue of reading code. And when it gets actually complicated and/or interesting, then I ditch it :)
What do you do if you "hallucinate" and write the wrong code? Or if the docs/tutorial you read is out of date or incorrect or for a different version than you expect?
That's not a jab, but a serious question. We act like people don't "hallucinate" all the time - modern software engineering devops is all about putting in guardrails to detect such "hallucinations".
Of course, it all depends how you use the LLM. While the same can be true for StackOverflow, the LLMs just scale the issues up.
> The rest is boiler plate, cargo-culted, Dockerfile, build system and bash environment variable passing circle of hell that I really could care less about.
Except you do care. It's why you're frustrated and annoyed. And good!!! That feeling is because what you're describing requires solving. If something is routine, automate it. But it's really not good to automate in a statistical way, especially when that statistical tool is optimized for human preference. Because remember that also means mistakes are optimized to be missed by humans.[0]
With expertise in anything, I'm sorry, but you also got to do the shit work. To be a great musician you gotta practice boring scales. It's true even if you just want to be a sub par one.
But a little grumpy is good. It drives you to fix things, and frankly, that's our job. The things that are annoying and creating friction don't need be repeated over and over, they need alternative solutions. The scripts you build are valuable. The "useless" knowledge you gain isn't so useless. Those little details add up without you knowing and make you better.
That undocumented code makes you frustrated and reminds you to document your own. You don't want to be a hypocrite. The author of the thing you're using probably thought the same thing: "No one is gonna use this garbage, I'm not going to waste my time documenting it". Yet here we are. Over and over again yet we don't learn the lesson.
I'm not gonna deny there's assholes. There are. But even assholes teach you. At worst, they teach you how not to act.
And some people are you telling you to RTM and not RTFM. Sure, it has lots of extra information in it that you don't need to get your specific job done, but have you also considered that it has lots of extra information in it? The person that wrote it clearly thought the context was important. Maybe it isn't. In that case, you learned a lesson in how not to write documentation!
What I'm getting at is that there's a lot of learning done all over the place. Trying to take out all the work and only have "the fun" is harming yourself and has a large potential to make less time for the fun stuff[0]. I'd be surprised if I'm alone in this, but a lot of stuff I enjoy now was stuff that originally frustrated me. IME this is pretty common! It's true for every person I know. Similarly, it's also true for things I learned that I thought I'd never use again. It always has a way of coming back.
I'm not going to pretend it's all fun and games. I'm explicitly saying it's not. But I'm confident in the long run it's better. Despite the lack of accuracy, I use LLMs (and Google, and even the TFM) like I would a solution guide the homework problems when I was in school. Try first, then consult. The struggle is an investment in your future. It sucks, but if all the best things in life were easy then we'd all have them. I'm just trying to convince you that it pays off.
I'm completely aware this is all context dependent. There's a time and place for everything. But given the percentages you mention (even taken as exaggeration), something sounds wrong. It's hard to suggest specific solutions without details but I'd be surprised if there weren't better and more rewarding solutions than having the LLM do it for you
[0] That's the big danger and what drives distrust in them. Because you need to work extra hard to find mistakes, increasing workload, not decreasing, because debugging is most of the job!
While it looks like a productivity boost, there's a clear price to pay. The more you use it, the less you learn and the less you are able to assess quality.
Worse, it feels productive. But I'd bet if you watched the clock and tracked progress of a non-trivial project, you'd find what we've always known to be true: there are no shortcuts.
I'm sure it's faster in the short term. Just like copy-paste-from-stack-overflow is. But it is debt. The shit builds and builds. But I think the problem is we're so surrounded by shit we've just normalized it. It is incredible how much bloat and low hanging fruit there is that can be cheaply resolved but there is no will to. And in my experience, it isn't just a lack of will, it is a lack of recognition. If the engineers can't recognize shit, then how do we build anything better? It is literally our job to find problems
I think the fear for those of us who love coding, stability and security, that we are going to be confronted with apples that are rotten on the inside and our work, our love, is going to turn (even more so) into pain. The challenge in computing is that the powers that decide have little overview over the actual quality and longevity of any endeavour.
I work as a consultant assessing other people's code and it's hard not to lose my religion, sort of speak.
Frankly I don't want to spend 2 hours reading documentation just to find out some arcane incantation that gets the computer to do what I want it to do.
The interesting part of programming to me is designing the logic. It's the 'this, then that, except when this' flow that I'm really interested in, not the search for some obscure library that has some function that will parse this csv.
Llms are great for that, and let me get away from the pointless grind and into the things that I enjoy and are actually providing value.
The pair programming is also a super good thing. I work best when I can spitball and throw out random ideas and get quick feedback. Llms let me do that without bothering others who have their own work to do.
> Frankly I don't want to spend 2 hours reading documentation just to find out some arcane incantation that gets the computer to do what I want it to do
Then you are just straight up not cut out to be a software developer
The existence of LLMs may reduce the need to slog through documentation, but it will not remove that need
You're welcome to believe what you will, but the fact is I've written code that serves a purpose and provides value to those businesses, and at the end of the day that's is all that matters, not some arbitrary purity test you just made up.
The purpose of programming is to provide value for people, not to read documents.
There is more to "providing value" than simply producing working code
Does it have known security exploits built in that you have no idea about because you couldn't be bothered to read documentation?
Is the "value" you provided extremely temporary because someone is going to come along and exploit your shitty LLM generated code to steal all of your client's customer data?
Software Engineering isn't just about writing code it is about understanding what you're building because if you don't, other people will exploit that
No, because it's usually a few years old and already obsolete - the frameworks and the language have gone through a gazillion changes and what you did in 2021 suddenly no longer works at all.
I mean, the training data also has a cutoff date and changed beyond that are not reflected in the code suggestions.
Also, I know that people love to joke on modern software and JS in particular. But if you take react code from 2020 and drop it into a new react codebase it still works. Even class based components work. Yes, if you jumped on the newest framework bandwagon every time stuff will break all the time, but AI won’t be able to help you with that either. If you went for relatively stable frameworks, you can re use boilerplate completely or with relatively minimal adjustments
True. But LLMs have access to the web. I’ve told ChatGPT plenty of times to verify an SDK API or if I knew the API was new, I just gave it a link to the documentation. This was mostly around various AWS SDKs
The search improvements to o3 and o4-mini have made a huge difference in the last couple of weeks.
I ran this prompt (and others like it) and it actually worked!
This code needs to be upgraded to the new
recommended JavaScript library from
Google. Figure out what that is and
then look up enough documentation to
port this code to it
Ehh most people are good about at least throwing a warning before they break a legacy pattern. And you can also just use old versions of your tools. I'm sure the 2021 tool still does the job. Most people aren't working on the bleeding edge here. Old versions of numpy are fine.
I keep seeing that suggestion as well and the only sensible way I see would be to use one off boilerplate, anything else does not make sense.
If you keep re-using boilerplate once in a while copying it from elsewhere is fine. If you re-use it all the time, just get a macro setup in your editor of choice. IMHO that is way more efficient than asking AI to produce somewhat consistent boilerplate
You know. I have my boilerplate in Rails and it is just a work of art... I simply clone my BP repo, bundle, migrate, run and I have user management, auth, smtp client, sms alerts, and literally everything I need to get started. And it was just this same week I decided to try a code assistant, and my result was shockingly good, once you provide the assistant with a good clean starting point, and if you are very clear on what you want to build, then the results are just too good to be dismissed.
So yes, boilerplate, but also yes, there is definitely something to be gained from using ai assistants.
Like many others writing here, I enjoy coding (well, mostly anyway), especially the when it requires deep thought and patient experimentation to get anywhere. It's also great to preside over finally wiring together the routines (modules, libraries) that bind a project into a coherent whole.
Haven't much used AI to assist. After all, hard enough finding authentic humans capable and willing to voluntarily review/critique one's code. So far AI doesn't consistently provide that kind of help. OTOH seems almost certain over time AI systems will improve in terms of specific and comprehensive "insights" into the particular types of code one is writing.
I think an issue is that human creativity is hard to measure. Likely enough AI is even tougher to assess. Probably AI will increasingly be assigned tasks like constructing project skeletons, assuring parts can be joined together without undue strain, handling "boilerplate" and other routine chores. To be sure the landscape will look different in 50 years, I'm certain we'd be amazed were we able to see what future systems will be doing.
In any case, we shouldn't hesitate to use tools that genuinely boost our creativity. One badly needed role would be enabling development of higher reliability software. Still that's a far cry from the contributions emanating from the best of human originality, talent and motivation.
> doesn't judge or sneer at you, or tell you to "RTFM". It's better than any human help, even if its not always right because its at least always more reliable and you don't have to bother some grey beard who probably hates you anyway.
After all, if we lose the joy in our craft, what exactly are we optimizing for?
Solving problems for real people. Isn't the answer here kind of obvious?
Our field has a whole ethos of open-source side projects people do for love and enjoyment. In the same way that you might spend your weekends in a basement woodworking shop without furnishing your entire house by hand, I think the craft of programming will be just fine.
Same as when higher-level languages replaced assembly for a lot of use cases. And btw, at least in places I've worked, better traditional tooling would replace a lot more headcount than AI would.
The output of the LLM is determined by the weights (parameters of the artificial neural network) estimated in the training as well as a pseudo-random number generator (unless its influence, called "temperature", is set to 0).
That means LLMs behave as "processes" rather than algorithms, unlike any code that may be generated from them, which is algorithmic (unless instrcuted otherwise; you could also tell an LLM to generate an LLM).
The parent is saying that when higher-level languages replaced assembly languages you only had to learn the higher level language. Once you learned the higher level language the machine did precisely what you specified and you did not have to inspect the assembly language to make sure it was compliant. Furthermore you were forced to be precise and to understand what you were doing when you were writing the higher level language.
Now you don't really have to be precise at any level to get something 'working'. You may not be familiar with the generated language or libaries but it could look good enough (like the assembly would have looked good enough). So, sure, if you are very familiar with the generated language and libraries and you inspect every line of generated code then maybe you will be ok. But often the reason you are using an LLM is because e.g. you don't understand or use bash frequently enough to get it to do what you want. Well, the LLM doesn't understand it either. So that weird bash construct that it emitted - did you read the documentation for it? You might have if you had to write it yourself.
In the end there could be code in there that nothing (machine or human) understands. The less hard-won experience you have with the target and the more time-pressed you are the more likely it is that this will occur.
The code that the compiler generates, especially in the C realm, or with dynamic compilers is also not regular, hence the tooling constraints in high integrity computing environments.
Exactly. If LLMs were like higher level languages you'd be committing the prompt. LLMs are actually like auto-complete, snippets, stackoverflow and rosetta code. It's not a higher level of abstraction, it's a tool for writing code.
It's not a higher-level language, I mean it's a productivity tool. It's not going to take away the joy or demand for coding, like how C didn't ruin things by cheapening assembly creation.
So what? I know most compilers are deterministic, but it really only matters for reproducible builds, not that you're actually going to reason about the output. And the language makes few guarantees about the resulting instructions.
I already see this happening with low code, SaaS and MACH architectures.
What used to be a project doing a CMS backend, now is spent doing configurations on a SaaS product, and if we are lucky, a few containers/serveless for integrations.
There are already AI based products that can automate those integrations if given enough data samples.
Many believe AI will keep using current programming languages as translation step, just like those Assembly developers thought compiling via Assembly text generation and feeding into an Assembly would still be around.
No, only primitive UNIX toolchains still do this, most modern compilers generate machine code directly, without having to generate Assembly text files and executing the Assembler process on it.
You can naturally revert to old ways, by asking for the Assembly manually, and call the Assembler yourself.
solving real problems is the core of it, but for a lot of people the joy and meaning come from how they solve them too. the shift to AI tools might feel like outsourcing the interesting part, even if the outcome is still useful. side projects will stick around for sure, but i think it's fair to ask what the day-to-day feels like when more of it becomes reviewing and prompting rather than building.
> Solving problems for real people. Isn't the answer here kind of obvious?
Look at the majority of the tech sector for the last ten years or so and tell me this answer again.
Like I guess this is kind of true, if "problems for real people" equals "compensating for inefficiencies in our system for people with money" and "solutions" equals "making a poor person do it for them and paying them as little as legally possible."
Those of us who write software professionally are literally in a field premised on automating other people's jobs away. There is no profession with less claim to the moral high ground of worker rights than ours.
> Those of us who write software professionally are literally in a field premised on automating other people's jobs away.
Depends what you write. What I work on isn't about eliminating jobs at all, if anything it creates them. And like, actual, good jobs that people would want, not, again, paying someone below the poverty line $5 to deliver an overpriced burrito across town.
That's fine; read it as me speaking to the whole thread, not challenging you directly. Technology drives economic productivity; increasing economic productivity generally implies worker displacement. That workers come out ahead in the long run (they have in the past; it's obviously not a guarantee) is besides my point. Software is automating software development away, the same way it automated a huge percentage of (say) law firm billable hours away. We'd better be ready to suck it up!
Got it, you're talking about workers getting ahead as a category -- no objections to that.
I doubt the displaced computers managed to find a better job on average. Probably even their kids were disadvantaged since the parents had fewer options to support their education.
So, who knows if this specific group of people and their descendants ever fully recovered let alone got ahead.
My argument is explicitly not premised on the claim that productivity improvements reliably work out to the benefit of existing workers. It's that practicing commercial software developers are agents of economic productivity, whether anticapitalist developers are happy about that or not, and have really no moral standing to complain about their jobs (or the joy in those jobs) being automated away. That's what increased economic productivity means: more getting done with less labor.
Why should one be entitled to do one thing for their entire career?
The world changes. Those changes cause a need, a job fulfills that need. The world changes again, the need disappears. Why should the job then persist?
> Why should one be entitled to do one thing for their entire career?
Because if you pursue a career and invest time and money into it over the course of your life, especially in the highly Americanized way which involves both a substantial time and MORE substantial outlay of money to achieve that, and you then go on to live in a society that demands you earn a living or starve/freeze to death, it is unconscionably immoral to fuck with other people's means to earn that living for your own profit.
And to be clear, that doesn't mean "you can never change your career," that's nonsense. People do that all the time, out of necessity or just desire. However currently the ability to do that is heavily gate-kept via the income of the person wanting to do the switching, and for a lot of the people most likely to be automated, they barely make enough to survive right now, where in the hell are they getting capital to retrain themselves on a new career?
And that's not even going into the physiological challenges. You objectively, factually, learn better when you are younger, and it's also worth noting that society at large benefits more from you learning at a younger age like we traditionally do, because you spend the first few years rolling around your house annoying your mother, you spend up to age 18 (usually) in mandatory K-12 education, you spend between 2 and 8 years in college after that if you decide to go or alternatively, a few years learning a trade or something, and then you have what we generally aim for about 40 years of being a productive member of society. If you have to retrain in the middle of that, that's just less efficient on every front. It costs you money and time, it costs society your productivity for however long you leave the workforce and return to education, and of course that's assuming you can afford to do it at all, and don't end up just lurching from one job that's about to nix you to the next, being miserable and depressed, until you can't find another and then you end up in the homeless system.
In my mind at least, the only way I can comprehend anyone being in favor of this sort of system is they imagine themselves one day being on the top of it, because that's the only group of people who are actually benefiting from this sort of instability. The looming threat of and execution of job automation has massive boons for employers; fewer employees can produce at higher rates, the job market is flooded with recently laid off people which lowers the value of labor and lets employers pay the ones who are hired on after less money, and the overall instability "vibes" present makes employees more willing to tolerate bullshit from their employer because they know how much the job market sucks and they don't want to find another, or, who knows, maybe they are trying and literally can't for the previous reasons.
Like in my mind, this just comes down to whether you think you're more likely to be the boot or the neck under the boot, and that's going to decide how you feel about this.
I think this is all a great argument for a strong social safety net. It’s not a great argument for keeping people in pointless jobs doing work that has been made obsolete by automation.
> "Computers" used to be people! Literally, people.
Not always. Recruitment budgets have limits, so it's a fixed number of employees either providing services to a larger number of customers thanks to software, or serving fewer customers or do so less often without the software.
Thank you for the link, the reference you're making slipped past me. That said, I think my point still holds: software doesn't always have to displace workers, it can also help current employees scale their efforts when bringing on more people isn't possible.
While this definitely helps consumers. I don't see how it doesn't displace workers.
If the work those workers were doing before software was truly valuable. Companies would find other ways to scale, and simply pass the higher costs onwards to consumers.
Haven't we been automating jobs away since the industrial revolution? I know AI may be an exception to this trend, but at least with classical programming, demand goes up, GDP per capita goes up, and new industries are born.
I mean, there's three ways to get stuff done: do it yourself, get someone else to do it, or get a machine to do it.
#2 doesn't scale, since someone still has to do it. If we want every person to not be required to do it (washing, growing food, etc), #3 is the only way forward. Automation and specialization have made the unthinkable possible for an average person. We've a long way to go, but I don't see automation as a fundamentally bad thing, as long as there's a simultaneous effort to help (especially those who are poor) transition to a new form of working.
But... My local library has a job searching program? I have a friend who's learning masonry at a government sponsored training program? It seems the issue is not that resources don't exist, but that these people don't have the time to use them. So it's unfair to say they don't exist. Rather, it seems they're structured in an unhelpful way for those who are working double jobs, etc.
I see capitalism invoked as a "boogey man" a lot, which fair enough, you can make an emotional argument, but it's not specific enough to actually be helpful in coming up with a solution to help these people.
In fact, capitalism has been the exact thing that has lifted so many out of poverty. Things can be simultaneously bad and also have gotten better over time.
I would argue that the biggest issue is education, but that's another tangent...
> So it's unfair to say they don't exist. Rather, it seems they're structured in an unhelpful way for those who are working double jobs, etc.
I'll be sure to alert the next person I encounter working UberEats for slave wages that the resources exist that they cannot use. I'm sure this difference will impact their lives greatly.
Edit: My point isn't that UberEats drivers make slave wages (though they do): My point is that from the POV of said people and others who need the aforementioned resources, whether they don't exist or exist and are unusable is fucking irrelevant.
At some point, you've stopped participating in good faith with the thread and are instead trying to push it towards some other topic; in your case, apparently, a moral challenge against Uber. I think we get it; can you stop supplying superficial rebuttals to every point made with "but UberEats employs [contracts] wave slaves"?
Slave wages? Like the wages for a factory worker in 1918[1]? $1300 after adjusting for inflation. And that was gruelling work from dawn to dusk, being locked into a building, and nickel and dimed by factory managers. (See the triangle shirtwaist factory). The average Uber wage is $20/hour[2]. Say they use 2 gallons of gas (60 mph at 30 mpg) at $5/gallon. That comes out to $10/hour, which is not great, but they're not being locked into factories and working from dawn to dusk and being fired when sick. Can you not see that this is progress? It's not great, we have a lot of progress to make, but it sure beats starving to death in a potato famine.
> Slave wages? Like the wages for a factory worker in 1918[1]? $1300 after adjusting for inflation.
I think they were using “slave wages” as a non-literal relative term to the era.
As you did.
A hundred years before your example, the “slave wages” were actually slave wages.
I think it’s fair to say a lot of gig workers, especially those with families, are having a very difficult time economically.
I expect gig jobs lower unemployment substantially, due to being convenient and easy to get, and potentially flexible with hours, but they lower average employment compensation.
> I think it’s fair to say a lot of gig workers, especially those with families, are having a very difficult time economically.
Great point. I wonder if this has to do with the current housing crisis and cost of utilities... Food has never been more affordable, in fact free with food banks and soup kitchens. But (IMHO) onerous zoning has really slowed down development and driven up prices.
Another cost is it's pretty much impossible to do anything without a smartphone and internet. I suppose libraries have free internet, but being able to get to said library is another issue.
And like you said, contract work trades flexibility for benefits, and that gets exploited by these companies.
I guess it just sucks sometimes because these issues are super hairy (shut down Uber, great, now you've just put everyone out of a job). "For every complex problem there is a solution which is clear, simple, and wrong."
* Everything is more expensive. You say "food has never been more affordable" but I'll absolutely challenge that. Food banks and kitchens are heavily locale-dependent type resources, and are not distributed according to the needs of the populace, but rather according to the ability and willingness of given communities to sustain them.
* You skated right past the need for a smartphone, mentioning, then going on to cite libraries for some reason. This is just a non-solution to a gig worker who will receive jobs and report their status/completion via a smartphone while on the go, doing the work. Ergo to even begin gig work, one REQUIRES a smart phone WITH a data plan.
* And, again, the pay is shit. In my relatively wealthy area, a good Uber Eats driver can make about $13 to $16 an hour, which on it's face sounds okay for a job that requires basic smartphone literacy and a driver's license. But just think about that. For starters, more than half statistically is tips, which aren't guaranteed and are based on performance. A performance, mind, that is subject to dozens of factors entirely outside the control of the driver. Further, it requires the use of the driver's personal vehicle (or one they have access to anyway) which costs obviously fuel, but traveling so many miles so fast will also mean more frequent oil changes, more replacement parts, not to mention a STEEP increase in the odds of bodily injury on the part of the driver, and NONE of this is being handled by Uber. All of these costs and risks are being felt by the driver.
And that still leaves tons of expenses on the table: insurance for the vehicle, many drivers want to run multiple apps which can require the use of multiple phones and therefore multiple data plans, they need to keep their vehicles clean and tidy for cargo or even passengers, they need to be available at the peak times for orders in order to make any money at all, and even if they do ALL OF THAT right... they are not guaranteed any wage, at all. If they simply don't get orders, or refuse too many and have the systems shadowban them, or simply aren't in the right place, their entire "shift" as it were can be a net loss for them.
> I guess it just sucks sometimes because these issues are super hairy (shut down Uber, great, now you've just put everyone out of a job). "For every complex problem there is a solution which is clear, simple, and wrong."
The solution is I think quite simple here: Uber (and all the rest of these gig apps to be clear) should be paying these people a wage, and the people should be driving cars in a fleet owned by Uber. You know, like Taxi companies did. Taxi drivers made tips, sure, occasionally, but they were hourly employees like any other. If they got in a car accident, the company was insured for that, both for the car and the worker. The employees enjoyed at least some benefits, didn't need to maintain or clean their own cars, certainly didn't need to buy the cars, and showed up to a place, on a schedule, and did a job. Like was normal before the "gig economy."
I'm really struggling to understand your argument, are you trying to argue in short-term or long-term trends? I'm trying to argue that in aggregate, life is getting better for people, while also awknowledging that there's not an equal distribution. For example, food has decreased in price 4x since 1900 in real terms[1]. I don't see how that's not more affordable.
> You skated right past the need for a smartphone.
Hmm? Like when I said "Another cost is it's pretty much impossible to do anything without a smartphone and internet"?
> a good Uber Eats driver can make about $13 to $16 an hour
Source? That doesn't line up with what I found.
> A performance, mind, that is subject to dozens of factors entirely outside the control of the driver.
This is just FUD if you haven't cited your sources on average/median/distribution of pay in whatever area.
You have a very good point on liability issues though.
> The solution is I think quite simple here
Thus increasing prices of rides, causing users to stop using the service, further shrinking pay? Uber just started being profitable after dumping billions of dollars in subsidies, on top of bad pay. If you make them full-time employees, you may just shut off the one source of income they have.
Uber won because they offered a superior service to taxis. I'm not going to open the can of worms of their predatory behavior, but there was still a significant part that was a better service.
Again, I am planning on helping these people, I think they should be helped, but you really need to think through what could happen if you force a company to become insolvent.
> I'm trying to argue that in aggregate, life is getting better for people, while also awknowledging that there's not an equal distribution.
I bet you like Steven Pinker. He does this shit too where he goes "people 50 years ago didn't even have air conditioning, and now a poor person has one in their car and one in their home" which ignores several things that are going to be their own rabbit holes so I'm just going to not, but that doesn't mean things are better. Yeah, poor people have more stuff, more creature comforts, more "luxuries" today than kings had in the 1400's. That doesn't change the fact that they're barely getting by, living perpetually on a debt and stress treadmill that studies too numerous to count have shown decrease their quality of life, shorten their overall lifespan and lead to health problems, in a country where having health problems is also, totally but coincidence I'm sure, the fastest ticket one can have to poverty.
And the worst part is, it doesn't NEED to be that way. We have more of... basically everything than we ever have, yet it all costs more, and tons of businesses go under, and everybody gets poorer, while the richest grow ever, ever, ever richer.
2 trillion was transferred from the working class to the 1% during COVID. 2. Fucking. Trillion. Dollars.
> Hmm? Like when I said "Another cost is it's pretty much impossible to do anything without a smartphone and internet"?
"Pretty much impossible" and "impossible" are not the same. It is not possible to do gig work without a smartphone.
> Source? That doesn't line up with what I found.
It's going to vary widely based on locale. Mine when I commented was the suburbs of Chicago.
> This is just FUD if you haven't cited your sources on average/median/distribution of pay in whatever area.
Yeah, it is. Because gig work is inconsistent. Would you be okay working your job when your salary was completely dependent on your performance, sure, but also just how much work you had to do during that particular day, and if there was a decent chance that one day you show up to your office, sit on your ass for 8 hours, and go home without a penny?
I doubt it.
> Thus increasing prices of rides
This just in: products and services should cost what it costs for them to be created/rendered unto you, with a little more at the end so the person doing it earns a living. If you can't afford to have a person pick up a burrito for you, drive it across town in a car, and drop it on your doorstep, I would humbly suggest you get in your own car, and get your own burrito.
> Uber just started being profitable after dumping billions of dollars in subsidies
Then shut the doors! If what you're doing doesn't work, close up shop! Why does Uber have to exist? Are people better off being Uber drivers than being homeless? I mean, I guess? I wouldn't call that an open and shut case. If all the people doing gig work were instead completely unemployed, and out protesting in the streets of their capital cities, maybe society would actually do something about the rampant exploitation? Maybe all these companies couldn't get away with paying people utterly shit wages if we didn't mandate that those on assistance programs find jobs, any jobs, even if those jobs don't get them off the assistance?
I would turn this back to you: instead of asking me why people are entitled to food, why are these massive companies entitled to exist? Why are we funneling people with few options towards them to work as many hours as they can while remaining firmly below the poverty line? Why do we demand people who are starving take a certain number of interviews every week so we give them access to a menial amount of sustenance, while judging them for taking it?
> Uber won because they offered a superior service to taxis. I'm not going to open the can of worms of their predato...
I think at this point we're at an impasse, so agree to disagree. I'm glad there is another person who is wanting to help these people, even if I disagree with their solution :)
Replying to your edit: it is relevant, because it means people are trying but it isn't working. When people aren't trying, you have to get people to start trying. When people are trying but it isn't working, you have to help change the approach. Doubling down on a failing policy (e.g. we just need to create more resources) is failing to learn from the past.
What is qualitatively different this time is that it affects intellectual abilities - there is nothing higher up in the work "food chain". Replacing physical work you could always argue you'd have time to focus on making decisions. Replacing decision making might mean telling people go sit on the beach and take your universal basic income (UBI) cheque, we don't need you anymore.
Sitting on the beach is not as nice as it sounds for some; if you don't agree, try doing it for 5 years. Most people require work to have some sense of purpose, it gives identity, and it structures their time.
Furthermore, if you replaced lorry drivers with self-driving cars, you'd destroy the most commonly held job in North America as well as South America, and don't tell me that they can be retrained to be AI engineers or social media influencers instead (some can only be on the road, some only want to be on the road).
I agree that we have been able to automate a lot of jobs, but it's not like intellectual jobs have completely replaced physical labor. Electricians, phlebotomists, linemen, firefighters, caregivers, etc, etc, are jobs that current AI approaches don't even scratch. I mean, Boston dynamics has barely been able to get a robot to walk.
So no, we don't need to retrain them to be AI engineers if we have an active shortage of electricians and plumbers. Now, perhaps there aren't enough jobs—I haven't looked at exact numbers—but we still have a long ways to go before I think everything is automated.
Everything being slop seems to be the much more likely issue in my eyes[1].
You're automating the 1's and 0's. There could be millions of people in an assembly like line of buttons, being paid minimum wage to press either the 1 or 0 button to eventually trigger the next operation.
I often think about the savage job-destroying nature of the open source community: hundreds of thousands of developers working tirelessly to unemploy as many of their peers as possible by giving away the code they've written for free.
(Interesting how people talk about AI destroying programming jobs all the time, but rarely mention the impact of billions of dollars of code being given away.)
> Those of us who write software professionally are literally in a field premised on automating other people's jobs away.
How true that is depends on what sort of software you write. Very little of what I've accomplished in my career can be fairly described as "automating other people's jobs away".
It’s not automation that is the problem, it’s that the fruits of that automation disproportionately go to those at the top. Don’t blame software engineering for that, blame capitalism.
> Solving problems for real people. Isn't the answer here kind of obvious?
No. There are a thousand other ways of solving problems for real people, so that doesn't explain why some choose software development as their preferred method.
Presumably, the reason for choosing software development as the method of solving problems for people is because software development itself brings joy. Different people find joy in different aspects even of that, though.
For my part, the stuff that AI is promising to automate away is much of the stuff that I enjoy about software development. If I don't get to do that, that would turn my career into miserable drudgery.
Perhaps that's the future, though. I hope not, but if it is, then I need to face up to the truth that there is no role for me in the industry anymore. That would pretty much be a life crisis, as I'd have to find and train for something else.
I'm probably just not as smart or creative as you, but say my problem is I have a ski cabin that I want to rent it to strangers for money. Nevermind a thousand, What are 100 ways without using software that I could do something about that, vs listing it on Airbnb?
I was speaking about solving people's problems generally. It's easy to find specific problems that are best addressed with software, just as it's easy to find specific problems that can't be addressed with software.
"There are a thousand other ways of solving problems for real people, so that doesn't explain why some choose software development as their preferred method."
Software development is almost unique in the scale that it operates at. I can write code once and have it solve problems for dozens, hundreds, thousands or even millions of people.
If you want your work to solve problems for large numbers of people I have trouble thinking of any other form of work that's this accessible but allows you to help this many others.
Fields like civil engineering are a lot harder to break into!
> No. There are a thousand other ways of solving problems for real people, so that doesn't explain why some choose software development as their preferred method.
I don't see why we should seek an explanation if there are thousands of ways to be useful to people. Is being a lawyer particularly better than being an accountant?
> That would pretty much be a life crisis, as I'd have to find and train for something else.
There's inertia in the industry. It's not like what you're describing could happen in the blink of an eye. You may well be at the end of your career when this prophecy is fulfilled, if it ever comes true. I sure will be at the end of mine and I'll probably work for at least another 20 years.
The inertia argument is real, and I would compare it to the mistaken believe of some at IBM in the 1970s that SQL would be used by managers to query relational databases directly, so no programming was needed anymore.
And what happened? Programmers make the queries and embed them into code that creates dashboards that managers look at. Or managers ask analysts who have to interpret the dashboards for them... It rather created a need for more programmers.
Compare embedded SQL with prompts - SQL queries compared to assembler or FORTRAN code is closer to English prose for sure.
Did it take some fun away? Perhaps, if manually traversing a network database is fun to anyone, instead of declaratively specifying what set of data to retrieve. But it sure gave new fun to people who wanted to see results faster (let's call them "designers" rather than "coders"), and it made programming more elegant due to the declarativity of SQL queries (although that is cancelled out again by the ugliness of mixing two languages in the code).
Maybe the question is: Does LLM-based coding enable a new kind of higher level "design flow" to replace "coding flow"? (Maybe it will make a slightly different group of people happy?)
This echoes my sentiment that LLMs are higher level programming languages. And, as every layer of abstraction, they add assumptions that may or may not fit the use case. The same way we optimize SQL queries by knowing how the database makes a query plan, we need to optimize LLM outputs, specially when the assumptions given are not ideal.
So if I'm understanding this, there are two central arguments being made here.
1. AI Coding leads to a lack of flow.
2. A lack of flow leads to a lack of joy.
Personally, I can't find myself agreeing with the first argument. Flow happens for me when I use AI. It wouldn't surprise me if this differed developer to developer. Or maybe it is the size of requests I'm making, as mine tend to be on the smaller size where I already have an idea of what I want to write but think the AI can spit it out faster. I also don't really view myself as prompt engineering; instead it feels more like a natural back and forth with the AI to refine the output I'm looking for. There are times it gets stubborn and resistant to change but that is generally a sign that I might want to reconsider using AI for that particular task.
One trend I've been finding interesting over the past year is that a lot of engineers I know who moved into engineering management are writing code again - because LLMs mean they can get something productive done in a couple of hours where previously it would have taken them a full day.
Managers usually can't carve out a full day - but a couple of hours is manageable.
See also this quote from Gergely Orosz:
Despite being rusty with coding (I don't code every day
these days): since starting to use Windsurf / Cursor with
the recent increasingly capable models: I am SO back to
being as fast in coding as when I was coding every day
"in the zone" [...]
When you are driving with a firm grip on the steering
wheel - because you know exactly where you are going, and
when to steer hard or gently - it is just SUCH a big
boost.
I have a bunch of side projects and APIs that I operate -
but usually don't like to touch it because it's (my)
legacy code.
Not any more.
I'm making large changes, quickly. These tools really
feel like a massive multiplier for experienced devs -
those of us who have it in our head exactly what we want
to do and now the LLM tooling can move nearly as fast as
my thoughts!
> a lot of engineers I know who moved into engineering management are writing code again
They should be managing instead. Not to say that they can't code their own tools, but the statement sounds like a construction supervisor nailing studs or welding steel bars. Can work for a small team, but that's not your primary job.
I've been an engineering manager and it's a lot easier to make useful decisions that your team find credible if you can keep your toes in the water just a little bit.
My golden rule is to stay out of the critical path of shipping a user-facing feature: if a product misses a deadline because the engineering manager slipped on their coding commitments, that's bad.
The trick is to use your minimal coding time for things that are outside of that critical path: internal tools, prototypes, helping review code to get people unstuck, that kind of thing.
Yeah I think flow is more about holding a lot of knowledge about the code and its control flow in your head at a time. I think there's an XKCD or something that illustrates that.
You still need to do that if you're using AI, otherwise how do you know if it's actually done a good job? Or are people really just vibe coding without even reading the code at all? That seems... unlikely to work.
I've been singin' this song for years. We should return to Small Data. Hand picked, locally sourced, data. Data I can buy at a mom and pop shop. Data I can smell, data I can feel, data I can yearn for.
When we outsource the parts of programming that used to demand our complete focus and creativity, do we also outsource the opportunity for satisfaction? Can we find the same fulfillment in prompt engineering that we once found in problem-solving through code?
Most of AI-generated programming content I use are comments/explanations for legacy code, closely followed by tailored "getting started" scripts and iterations on visualisation tasks (for shitty school assignments that want my pyplots to look nice). The rest requires an understanding, which AI can help you achieve faster (it's read many a book related to the topic, so it can recall information a lot like an experienced colleague may), but it can't confer capital K Knowledge or understanding upon you. Some of the tasks it performs are grueling, take a lot of time to do manually, and provide little mental stimulation. Some may be described as lobotomizing and (in my opinion) may mentally damage you in the "Jack Torrance typewriter" kinda way.
It makes me able to work on the fun parts of my job which possess the qualities the article applauds.
I don't know man, maybe prompt most of your work, eyeball it and verify it rigorously (which if you cannot do, you should absolutely never touch an LLM!), run a script to commit and push after 3 hours and then... work on whatever code makes you happy without using an LLM?
Let's stop pretending or denying it: most of us would delegate our work code to somebody else or something else if we could.
Still, prompting LLMs well requires eloquence and expressiveness that many programmers don't have. I have started deriving a lot of value from those LLMs I chose to interact with by specifying clear boundaries on what's the priority and what can wait for later and what should be completely ignored due to this or that objective (and a number of other parameters I am giving them). When you do that well, they are extremely useful.
Totally. And yet rigorous proof is very difficult. Having done some mathematics involving nontrivial proofs, I respect even more how difficult rigor is.
Ah, I absolutely don't verify code in the mathematical sense of the word. More like utilize strong static typing (or hints / linters in weaker typed languages) and write a lot of tests.
Nothing is truly 100% safe or free of bugs. What I meant with my comment up-thread was that I have enough experience to have a fairly quick and critical eye of code, and that has saved my skin many times.
Yeah, I think that's pretty common. It took me 15+ years of my own career before I got over my aversion to spending significant amounts of time reading through code that I didn't write myself.
We all do. But more often than not we have to learn to do surgical incisions in order to do our task for the day. It's what truly distinguishes a professional.
How did you get there from me agreeing 100% with someone who said that you should be ready to verify everything an LLM does for you and if you're not willing to do that you shouldn't use them at all?
Do you ever read my comments, or do you just imagine what I might have said and reply to that?
There's simply no way to verify everything that comes out of these things. Otherwise why use it? You also can't possibly truly know if you know more about a topic since by definition the models know more than you. This is automation bias. Do you not know the problems with even verifying or watching machines? This is a core part of the discussion of self driving vehicles. I guess I assumed you knew stuff about the field of AI!
It's a good question because I also hastily wrote that. You'll come to defer to the model on average when it comes to otherwise coin flip judgements you have make when you yourself are unsure. The model may not have any more information but you don't have any indication that it wouldn't and even suspect that it secretly does and this bias makes you trust the model and accept things that are ultimately bad in possibly ways that you'll not discover for a very long time because it is deep within a specific context.
> Still, prompting LLMs well requires eloquence and expressiveness that many programmers don't have
It requires magical incantations that may or may not work and where a missing comma in a prompt can break the output just as badly as the US waking up and draining compute resources.
> Let's stop pretending or denying it: most of us would delegate our work code to somebody else or something else if we could.
I don’t think this is the case, if anything the opposite is true. Most of us would like to do the work code but have realized, at some career point, that you’re paid more to abstract yourself away from that and get others to do it either in technical leadership or management.
Well, does not help that a lot of work tasks are meaningless drudgery that we collectively should have trivialized and 100% automated at least 20 years. That was kind of the core my point: a lot of work tasks are just plain BS.
> I don’t think this is the case, if anything the opposite is true
I'll be a radical and say that I think it depends and is very subjective.
Author above you seems to enjoy working on code by itself. You seem to have a different motivation. My motivation is solving problems I encounter, code just happen to be one way out of many possible ones. The author of the submission article seems to love the craft of programming in itself, maybe the problem itself doesn't even matter. Some people program just for the money, and so on.
You don't. That's why you don't use an LLM most of the time. I was talking about cases where either the tasks were too boring or required an expertise that I didn't have at the time.
Good question. I run it by the docs that intimidated me before. Because I did not ask the LLM for the code only; I asked it to fully explain what did it change and why.
Absolutely. That's why I don't give the LLM the reins for long, nor do I tell it to do the whole thing. I want to keep my mind sharp and my abilities honed.
I see this "prompting is an art" stuff a lot. I gave Claude a list of 10 <Route> objects and asked it to make an adjustment to all of them. It gave me 9 back. When I asked it to try again it gave me 10 but one didn't work. What's "prompt engineering" there, telling it to try again until it gets it right? I'd rather just do it right the first time.
And I do, most of the time. Sometimes the code to be written is quite verbose and I am on a tighter deadline. And it still takes less time and effort to vet the LLM's code. Otherwise yeah.
Prompt engineering is just trying that task on a variety of models and prompt variations until you can better understand the syntax needed to get the desired outcome, if the desired outcome can be gotten.
Honestly you’re trying to prove AI is ineffective by telling us it didn’t work with your ineffective protocol. That is not a strong argument.
What should I have done there? Tell it to make sure that it gives me all 10 objects I give it back? Tell it to not put brackets in the wrong place? This is a real question --- what would you have done?
How long ago was this? I'd be surprised to see Claude 3.7 Sonnet make a mistake of this nature.
Either way, when a model starts making dumb mistakes like that these days I start a fresh conversation (to blow away all of the bad tokens in the current one), either with that model or another one.
I often switch from Claude 3.7 Sonnet to o3 or o4-mini these days. I paste in the most recent "good" version of the thing we're working on and prompt from there.
Yeah I'm starting to think they aren't aware of the shell game in their own rhetoric. If nothing can ever be wrong then nothing is right either in that worldview.
A full two thirds of the comment you replied to there were me saying "when these things start to make dumb mistakes here are the steps I take to fix the problem".
Not actual knowledge but adages ! Lol "here is my magic potion that I can't tell you how it differs from the other magic potion!" That is not fixing anything. That's trying to string people along and insert yourself otherwise you'd be able to point so some kind of empirical documented experience as to why one vendor is better than the other or why older models have the problem but newer ones don't, and more importantly assurances that future models or even future unannounced changes to the models you mention will even work the same as they do today. What knowledge are you actually imparting other than "I think this is a road you could try." Thanks.
* experiment with multiple models, preferably free high quality models like Gemini 2.5. Make sure you're using the right model, usually NOT one of the "mini" varieties even if its marketed for coding.
* experiment with different ways of delivering necessary context. I use repomix to compile a codebase to a text file and upload that file. I've found more integrated tooling like cursor, aider, or copilot, are less effective then dumping a text file into the prompt
* use multi-step workflows like the one described [1] to allow the llm to ask you questions to better understand the task
* similarly use a back-and-forth one-question-at-a-time conversation to have the llm draft the prompt for you
* for this prompt I would focus less on specifying 10 results and more about uploading all necessary modules (like with repomix) and then verifying all 10 were completed. Sometimes the act of over specifying results can corrupt the answer.
I'm a pretty vocal AI-hater, partly because I use it day to day and am more familiar with its shortfalls - and I hate the naive zealotry so many pro-AI people bring to AI discussions. BUTTT we can also be a bit more scientific in our assessments before discarding LLMs - or else we become just like those naive pro-AI-everything zealots.
You should have dropped the LLM, of course. They are not replacing us the programmers anytime soon. If they can be used as an enabler / booster, cool, if not, back to business as usual. You can only win here. You can't lose.
I am also barely using LLMs at the moment. Even 10% of the time would be generous.
What I was saying is that I have tried different ways of interacting with LLMs and was happy to discover that the way I describe stuff to another senior dev actually works quite fine with an LLM. So I stuck to that.
Again, if an LLM is not up to your task, don't waste your time with it. I am not advocating for "forget everything you knew and just go ask Mr. AI". I am advocating for enabling and productivity-boosting. Some tasks I hate, for some I lack the deeper expertise, others are just verbose and require a ton of typing. If you can prompt the LLM well and vet the code yourself after (something many commenters here deliberately omit so they can happily tear down their straw man) then the LLM will be a net positive.
It's one more tool in the box. That's all there is to it really. No idea why people get so polarizing.
I wouldn't, I got into software exactly because I enjoy solving problems and writing code. Verifying shitty, mindless, computer generated code is not something I would consider doing for all the money in the world.
1. I work on enjoyable problems after I let the LLM do some of the tasks I have to do for money. The LLM frees me bandwidth for the stuff I truly love. I adore solving problems with code and that's not going to change ever.
2. Some of the modern LLMs generate very impressive code. Variables caching values that are reused several times, utility functions, even closure helpers scoped to a single function. I agree that when the LLM code's quality falls bellow a certain threshold then it's better in every way to just write it yourself instead.
> work on whatever code makes you happy without using an LLM?
This isn't how it works, psychologically. The whole time I'm manual coding, I'm wondering if it'd be "easier" to start prompting. I keep thinking about a passage from The Road To Wigan Pier where Orwell addresses this effect as it related to the industrial revolution:
>Mechanize the world as fully as it might be mechanized, and whichever way you turn there will be some machine cutting you off from the chance of working—that is, of living.
>At a first glance this might not seem to matter. Why should you not get on with your ‘creative work’ and disregard the machines that would do it for you? But it is not so simple as it sounds. Here am I, working eight hours a day in an insurance office; in my spare time I want to do something ‘creative’, so I choose to do a bit of carpentering—to make myself a table, for instance. Notice that from the very start there is a touch of artificiality about the whole business, for the factories can turn me out a far better table than I can make for myself. But even when I get to work on my table, it is not possible for me to feel towards it as the cabinet-maker of a hundred years ago felt towards his table, still less as Robinson Crusoe felt towards his. For before I start, most of the work has already been done for me by machinery. The tools I use demand the minimum of skill. I can get, for instance, planes which will cut out any moulding; the cabinet-maker of a hundred years ago would have had to do the work with chisel and gouge, which demanded real skill of eye and hand. The boards I buy are ready planed and the legs are ready turned by the lathe. I can even go to the wood-shop and buy all the parts of the table ready-made and only needing to be fitted together; my work being reduced to driving in a few pegs and using a piece of sandpaper. And if this is so at present, in the mechanized future it will be enormously more so. With the tools and materials available then, there will be no possibility of mistake, hence no room for skill. Making a table will be easier and duller than peeling a potato. In such circumstances it is nonsense to talk of ‘creative work’. In any case the arts of the hand (which have got to be transmitted by apprenticeship) would long since have disappeared. Some of them have disappeared already, under the competition of the machine. Look round any country churchyard and see whether you can find a decently-cut tombstone later than 1820. The art, or rather the craft, of stonework has died out so completely that it would take centuries to revive it.
>But it may be said, why not retain the machine and retain ‘creative work’? Why not cultivate anachronisms as a spare-time hobby? Many people have played with this idea; it seems to solve with such beautiful ease the problems set by the machine. The citizen of Utopia, we are told, coming home from his daily two hours of turning a handle in the tomato-canning factory, will deliberately revert to a more primitive way of life and solace his creative instincts with a bit of fretwork, pottery-glazing, or handloom-weaving. And why is this picture an absurdity—as it is, of course? Because of a principle that is not always recognized, though always acted upon: that so long as the machine is there, one is under an obligation to use it. No one draws water from the well when he can turn on the tap. One sees a good illustration of this in the matter of travel. Everyone who has travelled by primitive methods in an undeveloped country knows that the difference between that kind of travel and modern travel in trains, cars, etc., is the difference between life and death. The nomad who walks or rides, with his baggage stowed on a camel or an ox-cart, may suffer every kind of discomfort, but at least he is living while he is travelling; whereas for the passenger in an express train or a luxury liner his journey is an interregnum, a kind of temporary death. And yet so long as the railways exist, one has got to...
Needlessly polarizing. I love coding since 12 years old (so more than 30 years at this point) but most work tasks I'm given are fairly boring and uninteresting and don't move almost any science or knowledge forward.
Delegating part of that to an LLM so I can code the stuff I love is a big win for my motivation and is making me doing the work tasks with a bit more desire and pleasure.
Please don't forget that most of us out there can't code for money anything that their heart wants. If you can, I'd be happy for you (and envious) but please understand that's also a fairly privileged life you'd be having in that case.
Part of the joy of craft is the actual process of building a thing, even if the thing you're build is itself "boring". One of my clients right now is a React/Next.js app, which in terms of architecture I find deeply problematic (I tend to advocate vanilla JS, web components, close-to-browser-metal approaches, etc.)—but I still find ways to enjoy the work I do and furthermore I'm proud of the work that I do. I find it anathema that I'd offload any of that craft to a synthetic code text extruder.
Nice. I've got a whole lot of magical things that I need built for my day job. Want to connect so I can hand the work over to you? I'll still collect the paychecks, but you can have the joy. :)
Each activity we engage in has different use, value, and subjective enjoyment to different people. Some people love knitting! Personally, I do know how to sew small tears, which is more than most people in the US these days.
Just because I utilize the services of others for some things does not mean that it should be expected I want to utilize the service of others for all things.
This is a preposterous generalization and exactly why I said the OP premise is laughable.
Further, you’ve shifted OP’s point from subjective enjoyment of an activity to getting “paid well” - this is an irrelevant tangent to whether “most” people in general would delegate work if they could.
> most of us would delegate our work code to somebody else or something else if we could.
I saw your objections to other comments on the basis of them seemingly not having a disdainful attitude towards coding they do for work, specifically.
I absolutely do have tasks, coding included, that I don't want to do, and find no joy in. If I can have my manager assign the task to someone else, great! But using an LLM isn't that, so I'm still on the hook for ensuring all the most boring parts of that task (bugfixing, reworks, integration, tests, etc) get done.
My experience with LLMs is that they simply shift the division of time away from coding, and towards all the other bits.
And it can't possibly just be about prompting. How many hundreds of lines of prompting would you need to get an LLM to understand your coding conventions, security baselines, documentation reqs, logging, tests, allowed libraries, OSS license restrictions (i.e. disallowed libraries), etc? Or are you just refactoring for all that afterwards?
Maybe you work somewhere that doesn't require that level of rigor, but that doesn't strike me as a good thing to be entrenching in the industry by increasing coders' reliance on LLMs.
A super necessary context here is that I barely use LLM at all still. Maybe I should have said so but I figured that too much nuance would ruin a top-level comment and mostly casually commented on a tradeoff of using or not using LLMs.
Where I use LLMs:
1. Super boring and annoying tasks. Yes, my prompts for those include various coding style instructions, requests for small clarifying comments where the goal of the code is not obvious, tests. So, no OSS license restrictions. Libraries I specify most of the times I used LLMs (and only once did I ask it to suggest a library). Logging and telemetry I add myself. So long story short, I use the LLM to show me a draft of a solution and then mercilessly refactor it to match my practices and guidelines. I don't do 50 exchanges out of laziness, no.
2. Tasks where my expertise is lacking. I recently used an LLM to help me with making a `.clone()`-heavy Rust code to become nearly zero-copy for performance reasons -- it is a code on a hot path. As much as I love Rust and I am fairly good at it (realistically I'm IMO at 7.5 / 10), all the lifetimes and zero-copy semantics I still don't know yet. A long session with an LLM after, I emerged both better educated and with a faster code. IMO a win-win.
One of the things people often overlook don't talk about in this arguments is the manager's point of view and how it's contributing to the shakeups in this industry.
As a developer I'm bullish on coding agents and GenAI tools, because they can save you time and can augment your abilities. I've experienced it, and I've seen it enough already. I love them, and want to see them continue to be used.
I'm bearish on the idea that "vibe coding" can produce much of value, and people without any engineering background becoming wildly productive at building great software. I know I'm not alone. If you're a good problem solver who doesn't know how to code, this is your gateway. And you better learn what's happening with the code while you can to avoid creating a huge mess later on.
Developers argue about the quality of "vibe coded" stuff. There are good arguments on both sides. At some point I think we all agree that AI will be able generate high quality software faster than a human, someday. But today is not that day. Many will try to convince you that it is.
Within a few years we'll see massive problems from AI generated code, and it's for one simple reason:
Managers and other Bureaucrats do not care about the quality of the software.
Read it again if you have to. It's an uncomfortable idea, but it's true. They don't care about your flow. They don't care about how much you love to build quality things. They don't care if software is good or bad they care about closing tickets and creating features. Most of them don't care, and have never cared about the "craft".
If you're a master mason crafting amazing brickwork, you're exactly the same as some amateur grabbing some bricks from home depot and slapping a wall together. A wall is a wall. That's how the majority of managers view software development today. By the time that shoddy wall crumbles they'll be at another company anyway so it's someone else's problem.
When I talk about the software industry collapsing now, and in a few years we're mired with garbage software everywhere, this is why. These people in "leadership" are salivating at the idea of finally getting something for nothing. Paying a few interns to "vibe code" piles of software while they high five each other and laugh.
It will crash. The bubble will pop.
Developers: Keep your skills sharp and weather out the storm. In a few years you'll be in high demand once again. When those walls crumble, they will need people who what they're doing to repair it. Ask for fair compensation to do so.
Even if I'm wrong about all of this I'm keeping my skills sharp. You should too.
This isn't meant to be anti-management, but it's based on what I've seen. Thanks for coming to my TED talk.
* And to the original point, In my experience the tools interrupt the "flow" but don't necessarily take the joy out of it. I cannot do suggestion/autocomplete because it breaks my flow. I love having a chat window with AI nearby when I get stuck or want to generate some boilerplate.
> If you're a master mason crafting amazing brickwork, you're exactly the same as some amateur grabbing some bricks from home depot and slapping a wall together.
IDK, there's still a place in society for master masons to work on 100+ year old buildings built by other master masons.
Same with the robots. They can implement solutions but I'm not sure I've heard of any inventing an algorithmic solution to a problem.
I think you are right with the building analogy. Most stuff built in the last 25 years is crap quality! But importantly looks nice. Needs to look nice at first.
I’ve been struggling with a very similar feeling. I too am a manager now. Back in the day there was something very fulfilling about fully understanding and comprehending your solution. I find now with AI tools I don’t need to understand a lot. I find the job much less fulfilling.
The funny thing is I agree with other comments, it is just kind of like a really good stack overflow. It can’t automate the whole job, not even close, and yet I find the tasks that it cannot automate are so much more boring (the ones I end up doing).
I envy the people who say that AI tools free them up to focus on what they care about. I haven’t been able to achieve this building with ai, if anything it feels like my competence has decreased due to the tools. I’m fairly certain I know how to use the tools well, I just think that I don’t enjoy how the job has evolved.
I think.. based on recent events.. that some of the corporate inefficiencies are very poorly captured. Last year we had an insane project that was thrown at us before end of the year, because, basically, company had a tiff with the vendor and would rather have us spend our time in meetings trying to do what they are doing rather than pay vendor for that thing. From simple money spent perspective, one would think company's simple amoral compass would be a boon.
AI coding is similar. We just had a minor issue with ai generated code that was clearly not vetted as closely as it should have been making output it generated over a couple of months not as accurate as it should be. Obviously, it had to be corrected, then vetted and so on, because there is always time to correct things...
edit: What I am getting at is the old-fashioned, penny smart, but pound foolish.
I've tried getting different AIs to say something meaningful about code, never got anything of value back so far. They can't even manage tab-completion well enough to be worth the validation effort for me.
Yeah I wonder how do the code look after such professional AI development. I tried ChatGPT 1o to ask it about simple C function - what errors are there. It answered only after I directly asked about the aspects I was expecting it to tell about. It means that if I didn't know that the LLM wouldn't tell me...
Earlier this year, a hackernews started quizzing me about the size and scope of the projects I worked on professionally, with the implication that I couldn't really be working on anything large or complex -- that I couldn't really be doing serious development, without using a full-fat IDE like IntelliJ. I wasn't going to dox myself or my professional work just so he could reach a conclusion he's already arrived at. The point is, to this person, beyond a certain complexity threshold -- simple command-line tools, say -- an IDE was a must, otherwise you were just leaving productivity on the table.
People are going to be making the same judgements about AI-assisted coding in the near future. Sure, you could code everything yourself for your own personal enrichment, or simply because it's fun. But that will be a pursuit for your own time. In the realm of business, it's a different story: you are either proompting, or you're effectively stealing money from your employer because you're making suboptimal use of the tools available. AI gets you to something working in production so much faster that you'd be remiss not to use it. After all, as Milt and Tim Bryce have shown, the hard work in business software is in requirements analysis and design; programming is just the last translation step.
My professional career has mostly been in IT ops. I've worked for companies that do requirements analysis and design in-house, write up a huge spec, send the spec to an offshore development house, then simply acceptance test the software that is sent back.
Companies know that the quality of the software they get back might be lower than if they hired the bestest, smartest developers in the world. But it doesn't matter because keeping the production cost of the asset low means that they can maximize long term profits.
Writing good software is not the same as writing profitable software.
So long as your experience and skill allows you to produce work of higher quality than average for your industry, then you will always have a job which is to review that average quality work, and surgically correct it when it is wrong.
This has always been true in every craft, and it remains true for programmers in a post LLL world.
Most training data is open source code written by novice to average programmers publishing their first attempts at things and thus LLMS are heavily biased to replicate the naive, slow, insecure code largely uninformed by experience.
Honestly to most programmers early in their career right now, I would suggest spending more time reviewing code, and bugfixes, than writing code. Review is the skillset the industry needs most now.
But you will need to be above average as a software reviewer to be employable. Go out into FOSSland and find a bunch of CVEs, or contribute perf/stability/compat fixes, proving you review and improve things better than existing automated tools.
Trust me, there are bugs -everywhere- if you know how to look for them and proving you can find them is the resume you need now.
The days of anyone that can rub two HTML tags together having a high paying job are over.
> LLMS are heavily biased to replicate the naive, slow, insecure code largely uninformed by experience
The one time i pasted LLM code without reviewing it it belonged on accidentally quadratic.
It was obvious at first read, but probably not for a beginner. The accidental complexity was hidden behind API calls that weren't wrong, just grossly inefficient.
Problem might be, if you lose the "joy" and the "flow" you'll stop caring about things like that. And software is bloated enough already.
The problem with FOSSland is that it is increasingly driven by commercial interests, not by volunteers.
I don't know the last time I encountered a used (not random hobby projects) FOSS project that wasn't funded and supported by a company (with exceptions maybe only in the GNU software suite, but even then lots of authors there are making submissions using company email addresses).
I think it's totally acceptable to not make open-source contributions to those projects unless someone is paying you to.
Can't relate at all. I've never had so much fun programming as I have now. All the boring and tedious parts are gone and I can finally focus on the code I love to write.
The post focuses on flow, but depending on what you mean by it, it isn't necessarily a good thing. Trying to solve something almost too difficult usually gets you out of flow. You still need concentration, though.
My main worry about AI is that people just keep using the garbage that exists instead of trying to produce something better, because AI takes away much of the pain of interacting with garbage. But most people are already perfectly fine using garbage, so probably not much will change here.
The author is already an experienced programmer. Let me toss in an anecdote about the next generation of programmers. Vibe coding: also called playing pinball with the AI, hoping something useful comes out.
I taught a lecture in my first-semester programming course yesterday. This is in a program for older students, mostly working while going back to school. Each time, a few students are selected to present their code for an exercise that I pick randomly from those they were assigned.
This guy had fancy slides showing his code, but he was basically just reading the code off the page. So I ask him: “hey, that method you call, what exactly does it do?”.
Um…
So I ask "Ok, the result from that method is assigned to a variable. What kind of variable is it?" Note that this is Java, the data type is explicitly declared, so the answer is sitting there on his slide.
Um…
So I tear into him. You got this from ChatGPT. That’s fine, if you need the help, but you need to understand what you get. Otherwise you’ll never get a job in IT.
His answer: “I already have a job in IT.”
Fsck. There is your vibe coder. You really do not want them working on anything that you care about.
This is one of the biggest dangers imo. While I agree with the OP about the deflation of joy in experienced programmers, the related but more consequential effect seems to be dissuading people from learning. A generational threat to collective competence and a disservice to students and teachers everywhere
Does your course not have exams or in-lab assignments? Should sort itself out. Honestly, I'm all for homework fading away as professors can't figure out how to prevent people from using AI. It used to be the case that certain kids could get away with not doing much because they were popular enough to get people to let them copy their assignments (at least for certain subjects). Eventually the system will realize they can't detect AI and everything has to be in-person.
Sure, this guy is likely to fail the course. The point is: he is already working in the field. I don't know his exact job, but if it involves programming, or even scripting, he is faking his way with AI, not understanding what he's doing. That is frightening.
> I don't know his exact job, but if it involves programming, or even scripting, he is faking his way with AI, not understanding what he's doing. That is frightening.
That could be considered malpractice. I know our profession currently doesn't have professional standards, but it's just a side effect of it being very new and not yet solidified; it won't be long until some duty of care becomes required, and we're already starting to see some movement in that direction, with things like the EU CRA.
This comment section really shows the stark divide between people who love coding and thus hate AI, and people who hate coding and thus love AI.
Honestly, I suspect the people who would prefer to have someone or something else do their coding, are probably the devs who are already outputting the worst code right now.
If you're using those things to do *the core function* of the program you're writing, that's an issue.
SDKs and libraries are there to provide common (as in, used repeatedly, by many) functions that serve as BUILDING BLOCKS.
If you import a library and now your program is complete, then you didn't actually make a useful program, you just made a likely less efficient interface for the library.
BUT ALSO-
SDKs and libraries are *vetted* code. The advantage you are getting isn't just about it having been written for you, it's about the hundreds of hours of human code review, iteration, and thought, that goes into those libraries.
LLM code doesn't have that, so it's not about you benefitting from the knowledge and experience of others, it's purely about reducing personally-typed LoC.
And yes, if you're wholesale copy-pasting major portions of your program from stack overflow, I'd say that's about as bad as copy-pasting from ChatGPT.
People aren't taking LLM code and then thoughtfully refactoring and improving it, they're using it to *avoid* doing that, by treating the generated code as though it's already had that done.
That's why the pro-LLM-code people in this very thread are talking about using it to automate away the parts of the coding they don't like. You really think they're then going to go back and improve on the code past it minimally working?
There will be no advancement from that, just mediocre or bad code going unreviewed and ignored until it breaks.
No, problem is when others are no longer needed, a machine gets to do everything, and only a few selected humans get to take care of the replicator machine.
Every PR I have to review with an obviously LLM-generated title stuffed with adjectives, and a useless description containing an inaccurate summary of the code changes pushes me a little bit more into trying to make my side projects profitable in the hope that one takes off. It usually only gets worse from there.
Documentation needs to be by humans for humans, it's not a box that's there to be filled with slop.
> The actual documentation needs to be by humans for humans.
This is true for producing the documentation but if there is an LLM that can take said documentation and answer questions about it is a great tool. I think I get the answer far quicker with LLM than sifting through documentation when looking for existence of a function in a library or a property on an object.
The documentation are for answering your questions, it’s not a puzzle to be solved. Using the reference docs assumes that you already have an understanding about the thing that is being documented and you’re looking for specificity or details. If not, the correct move is to go through a book, a tutorial, or the user guide. Aka the introductory materials.
There are UI kits that have lots and lots of elements and then each element has lots and lots of properties to tweak. I have to either guess the correct term or go through dozens of exmaples for the desired behavior. AI has saved me a lot of time in this regard. It is basically a "full text search" but far better than whatever the docs websites have built in.
Right, just how back in the day, people who loved writing assembly hated high level languages and people who found assembly too tedious loved compilers.
I very much understand the result of code that it writes. But I have never gotten paid to code. I get paid to use my knowledge of computers and the industry to save the company money or to make the company money.
Do you feel the same way when you delegate assignments to more junior developers and they come back with code?
Picasso explicitly wanted his designs (for cutlery, plates, household items he designed) to be mass-produced, so your question is not as straightforward as you make it to be.
What is the connection to machine generated code? He designed the items manually and mass produced them.
No one objects to a human writing code and selling copies.
Apart from that, this is the commercial Picasso who loved money. His early pre-expressionist paintings are godlike in execution, even if someone else has painted a Pierrot before him.
It is absolutely possible to enjoy both- I have used LLMs to generate code for ideas about alternate paths to take when I write my code- but prompt generation is not coding, and there are WAY too many people who claim to be coding when they have in fact done nothing of the sort.
> a far higher intensity
I'm not sure what this is supposed to mean. The code that I've gotten is riddled with mistakes and fabrications. If I were to use it directly, it would significantly slow my pace. Likewise, when I use LLMs to offer alternative methods to accomplish something, I have to take the time to sit down and understand what they're proposing, how to actually make it work, and whether that route(s) would be better than my original idea. That is a significant speed reduction.
The only way I can imagine LLMs resulting in "far higher intensity" is if I was just yolo'ing the code into my program, and then doing frantic integration, correction, and bugfix work afterwards.
Sure, that's "higher intensity", but that's just working harder and not smarter.
What if I prefer to have a clone of me doing my coding, and then I throw my clone under the bus and start to (angrily) hyperfocus explore and change every piece to be beautiful? Does this mean I love coding or I hate coding?
It's definitely a personality thing, but that's so much more productive for me, than convincing myself to do all the work from scratch after I had a design.
I guess this means I hate coding, and I only love the dopamine from designing and polishing my work instead of making things work. I'm not sure though, this feels like the opposite of hate coding.
That's where we start to disagree what future looks like, then.
It's not there yet, in that the LLM-clone isn't good enough. But amusingly a not nearly good enough clone of me already made me more productive, in that I'm able to deliver more while maintaining the same level of personal satisfaction with my code.
The question of increasing productivity and what that means for us as laborers is another entire can of worms, but that aside, I have never yet found LLM-gen'd code that met my personal standards, and sped up my total code output.
If I want to spend my time refactoring and bugfixing and rewriting and integrating, rather than writing from scratch and bugfixing, I can definitely achieve that by using LLM code, but the overall time has never felt different to me, and in many cases I've thrown out the LLM code after several hours due to either sheer frustration with how it's written, or due to discovering that the structure it's using doesn't work with the rest of the program (see: anything related to threading).
I think that comment is conflating 2 different things: 1) people like you and I who use LLMs for exploring alternative methods to our own, and 2) people who treat LLMs like Stack Overflow answers they don't understand but trust because it's on SO.
Yes, there are tasks or parts of the code that I'm less interested in, and would happily either delegate or negotiate-off to someone else, but I wouldn't give those to a writer who happens to be able to write in a way that approximates program code, I'd give them to another dev on the team. A junior dev gets junior dev tasks, not tasks that they don't have the skills to actually perform, and LLMs aren't even at an actual junior dev level, imhe.
I noted in another comment that I've also used LLMs to get ideas for alternate ways to implement something, or to as you said "jump start" new files or programs. I'm usually not actually pasting that code into my IDE, though- I've tried that, and the work to make LLM-generated code fit into my programs is way more than just writing out the bits I need, where I need. That is clearly not the case for a lot of people using LLMs, though.
I've seen devs submitting PRs with giant blocks of clearly LLM-gen'd code, that they've tried to monkey-wrench into working with the rest of the program (often breaking conventions or secure coding standards). And these aren't junior devs, they're devs that have been working here for years and years.
When you force them to do a code review, they know it's not up to par, but there is a weird attitude that LLM-gen'd code is more acceptable to be submitted with issues than personally-written code. As though it's the LLM's fault or job to fix, even though they prompted and copied and badly-integrated and PR'd it.
And that's where I think there is a stark divide. I think you're on my side of the divide (at least, I didn't get the impression that you hate coding), it just sounds like you haven't really seen the other side.
My personal dime-store psych theory is that it's the same mental mechanism that non-technical computer users fall into of improperly trusting/ believing computers to produce correct information, but now happening to otherwise technical folks too because "AI" is still a black box technology to most of us, like computers in general are to non-techies.
LLMs are really really cool, and really really impressive to me, and I've had 'wow' moments where they did something that makes you forget what they are and how they work, but you can't let that emotional reaction towards it override the part that knows it's just a token chain. When you do, people end up (obviously on the very extreme end) 'dating' them, letting them make consequential "decisions", or just over-trusting their output/code.
I like solving problems but I hate coding. Wasting 20 minutes because you forgot a semicolon or something is not fun. AI let's me focus on the problem and not bother with the tedious coding bit.
I write code to solve problems for my own use or for my hobby electronics projects. Asking chatgpt to write a script is faster than reading the documentation of some python library.
Just last week it wrote me a whole application and gui to open a webpage at a specific time. Yeah it breaks after the first trigger but it works for what I need.
And that's OK! I'm not trying to gatekeeping anyone from the title of coder or programmer. But what is fine for quick small scripts and throwaway code can be quite bad even for smallish projects. If you're trying to solve a problem in a systematic way, there's a lot of concerns that pertain to the durability of the solution.
There's a lot of literature about these concerns and a lot of methodologies to alleviate them. I (and others) are judging LLMs in light of those concerns. Mostly because speed was never an issue for us in prototypes and scripts (and it can be relaxing to learn about something while scripting it). The issue is always reliability (can it do what I want) and maintainability (can I change it later). Performance can also be a key issue.
Aside: I don't know the exact problem you were solving, but based on the description, that could have been done with systemd timers (macOS services are more of a pain to write). Yes, there's more to learn, but time triggering some command is a problem solved (and systemd has a lot more triggers).
yeah i definitely enjoy the craft and love of writing boilerplate or manually correcting simple errors or looking up functions /s. i hate how it's even divided into "two camps", it's more like a big venn diagram.
Who write boilerplate this day? I just lift the code from the examples in the docs (especially css frameworks). And I love looking at functions docs, because after doing it a few times, you develop an holistic understanding of the library and your speed increases. Kinda like learning a foreign language. You can use an app to translate everything, or asks for the correct word when the needs arises. The latter is a bit frustrating at the beginning, but that’s the only way to become fluent.
Seriously, I see this claim thrown around as though everyone writes the same starting template 50 times a week. Like, if you've got a piece of "boilerplate" code you're constantly rewriting... Save It! Put it in a repo or a snippet somewhere that you can just copy-paste when you need it.
You don't need a multi-million dollar LLM to give you slightly different boilerplate snippets when you already have a text editor on your computer to save them.
Maybe all code is boilerplate for them? I use libraries and frameworks exactly for the truly boilerplate part. But I still try to understand those code I depends on, as some times I want to deviate from the defaults. Or the bug might be in there.
It’s when you try to use an exotic language, you realize the amount of work that has been done to minimize dev time in more mainstream languages.
i think everyone here has extremely different ideas of what AI coding actually is and it's frustrating because basically everyone is strawmanning (myself included probably), as if using it means i'm not looking at documentation or not understanding what is goin on at all times.
it's not about having the LLM write some "starter pack" toy scaffold. i means when i implement functionality across different classes and need to package that up and adapt, i can just tell the LLM how to approach it and it can produce entire sections of code that would literally just be adaptations of certain things. or to refactor certain pieces that would just be me re-arranging shit.
maybe that's not "boilerplate", but to me it's a collosal waste of my time that could be spent trying to solve a new problem. you can't package that up into a "code snippet" and it's not worth the time carefully crafting templates. LLM can do it faster, better, and cost me near nothing.
> LLM can do it faster, better, and cost me near nothing.
And this is one the thing I'm skeptical about. The above use case is a symptom of all code and no design. It is a waste of time because you're putting yourself in a corner, architecture wise. Kinda like building on a crooked foundation.
I've never done refactoring where I'm writing a lot of code, it's mostly just copy-paste and rebuilding the connection between modules (functions, classes, files, packages,...). And if the previous connections were well understood and you have a clear plan for the new design, then it's a no-brainer to get there. Same when adapting code, I'm mostly deleting lines and renaming variables (regex is nice).
Maybe I'm misunderstanding things, but unless it's for small scripts or very common project types, I haven't seen the supposed productivity gain compared to traditional tooling.
1) refactoring. copy paste, re-arrange, extract, delete and rebuild the connection. i have the mental model and tell the LLM do do it across multiple files or classes. does it way faster and exactly how i would do it given the right prompt which is just a huge file that dictates how things are structured, style, weird edge cases i encountered as time goes on.
2) new features or sections based on existing. i have a service class and want to duplicate and wire up different sections across domains. not easy enough to just be templated, but LLM can do it and understand the nuances. again, generate multiple files across classes no problem.
i can do all these things "fast". i can do them even faster when using the LLM, it offloads the tediousness and i save my brian for other tasks. alot of times i'm just researching my next thing while it chugs away. i come back, lint and review and i'm good to go.
i'm honestly still writing the majority of the code myself, esp if it's like design stuff or new features where the requirements and direction aren't as clear, but when i need to it gives me a huge boost.
keeps me in the flow, i basically recharge while continuing to code. and it's not a small script but a full fledged app, albeit very straightforward architecture wise. the gains are very real. i'm just surprised at the sentiment on HN around it. it's not even just skepticism but outright dogging on it.
Maybe it's different mindset at play. Refactoring these is my way of recharging (because I approach as a nice puzzle to learn how to do it effectively, kinda like a break from the main problem). And the LLM workflow don't sit well with me because I dislike checking every line of generated code. Traditional tooling is deterministic, so I do the check once and move on.
I love this detailed discussion of how people are actually using LLMs for coding, and I think this rarely happens in professional spaces currently.
I do see more people who seem to be using it to replace coding skill rather than augment it, and I do worry about management's ability to differentiate between those versus just reverting to LoC. And whether it will become a demand for more code, for the same pay.
> This comment section really shows the stark divide between people who love singing and thus hate AI-assisted singing, and people who hate singing and thus love AI-assisted singing.
> Honestly, I suspect the people who would prefer to have someone or something else do their singing, are probably the singers who are already outputting the worst singing right now.
The point is: just because you love something, doesn't mean you're good at it. It is of course positively correlated with it. I am in fact a better singer because I love to sing compared to if I never practiced. But I am not a good singer, I am mediocre at best (I chose this example for a reason, I love singing as well as coding! :-D)
And while it is easier to become good at coding than at singing - for professional purposes at least - I believe that the effect still holds.
I love coding - but I am not very good at it. I can describe what I want in great detail, with great specificity. But I am not personally very good at turning that detailed specification into the proper syntax and incantations.
AI is like jet fuel for me. It’s the translation layer between specs and code I’ve always wanted. It’s a great advisor for implementation strategies. It’s a way to try new strategies in code quickly.
I don’t need to get anyone else to review my code. Most of this is for personal projects.
I don’t really write professionally, so I don’t have a ton of need for it to manage realities of software engineering (large codebases, peer reviews, black box internal systems, etc). That being said - I do a reasonable amount of embedded Linux work, and AI understands the Linux kernel and device drivers very well.
To extend your metaphor: AI is like a magic microphone that makes all of my singing sound like Tony Rice, my personal favorite singer. I’ve always wanted to sound like him - but I never will. I don’t have the range or the training. But AI allows my coding level to get to that corresponding level with writing software.
Do you love coding, or do you love creating programs?
It seems like the latter given your metaphor being a microphone to make you seem like you could sing well, i.e. wanting the end state itself rather than the achievement via the process.
"wanted to sound like him" vs "wanted to sing like him"
I enjoy using tools to create, very much so. The process is fun to me. The thing I create is a record of the process/ work that went into it. Planning and making a cut with a circular saw feels good. Rattling a spray paint can is exciting.
I made a cyber deck several months back, and I opted to carve the case from wood rather than 3d printing or using a premade shell. That hands-on work is something I'm proud of. I don't even use the deck much, it was for the love of building one.
To be fair, I don't have any problem with people who do their jobs for the paycheck alone, because that's the world capitalism has forced us into. Companies don't care about or reward you for the skills you possess, only how much money you make them (and they won't compensate you properly for it, either), so there's no advantage to tying your self-worth up in what you produce for them.
But I do think that it's sad we're seeing creative skills, whether writing coding composing or drawing, be devalued by AI as we are.
> For the record: I can sing well.
That is awesome! It's a great skill to have, honestly. As someone whose body tends to be falling apart more than impressing anyone, I envy that. :)
> To extend your metaphor: AI is like a magic microphone that makes all of my singing sound like Tony Rice, my personal favorite singer. I’ve always wanted to sound like him - but I never will. I don’t have the range or the training. But AI allows my coding level to get to that corresponding level with writing software.
My experience with LLMs leads me to believe that it's more likely that the magic microphone in this case makes you sound still very, very bad, but being that you're not a good singer you can't tell the difference between very, very bad and Tony Rice's singing. You sang the song, though, i.e. the solution was reached.
I think the analogy/ substitution falls apart in that singing is generally not very stable or lucrative (for 99.999% of singers), so it is pretty rare to find someone singing who hates it. Much less uncommon to find people working in IT who hate the specific work of their jobs.
And I think we do tend to (rightfully) look down on e.g. singers who lip-sync concerts or use autotune to sing at pitches they otherwise can't, nevermind how we'd react if one used AI singing instead of themselves.
Yes, loving something is no guarantee of skill at it, but hating something is very likely to correspond to not being good at it, since skills take time and dedication to hone. Being bad at something is the default state.
> I think the analogy/ substitution falls apart in that singing is generally not very stable or lucrative (for 99.999% of singers), so it is pretty rare to find someone singing who hates it.
I tried to cover this particular case with:
> And while it is easier to become good at coding than at singing - for professional purposes at least - I believe that the effect still holds.
---
> Yes, loving something is no guarantee of skill at it, but hating something is very likely to correspond to not being good at it, since skills take time and dedication to hone. Being bad at something is the default state.
I tried to cover this particular case with:
> It is of course positively correlated with it.
---
> Being bad at something is the default state.
Well, skill-wise yes. But being talented at something can happen, even when you hate something.
> And I think we do tend to (rightfully) look down on e.g. singers who lip-sync concerts or use autotune to sing at pitches they otherwise can't, nevermind how we'd react if one used AI singing instead of themselves.
Autotune is de rigueur for popular music.
In general, I'm not sure that I agree with looking down on people.
I have been working in IT for 5 years while being a professional musician for 8 years (in France and touring in Europe).
I've never met a single singer who told me they hate singing, on other hand, I can't even count how many of my colleagues told me how much they hate coding.
Another analogy would be with sound engineering. I've met sound engineer who hate their job as they would rather play music. They are also the ones whose jobs are likely to be replaced by AI.
And I would argue that the argument stand stills. AI Sound Engineers who hate working on sound are often the bad sound engineers.
> And while it is easier to become good at coding than at singing - for professional purposes at least - I believe that the effect still holds.
I can't reconcile this with my own view of things but I think "for professional purposes at least" is doing a lot of work in your sentence and I get the feeling you intend to say "good enough" by adding that bit.
Most programmers are very bad at programming (and problem solving) and only if they were compared to absolute beginners with zero insight could they be said to be "good" (and most of that comes down to them at least knowing the names of maybe a couple of concepts, etc., which makes for at least a partial map of the knowledge space). Most of them will never become good at what they do either, but will stay middling because they basically just glue libraries together and learn surface level things over and over.
If all you've ever done is learn a language, a backend framework in that language, learn how to use SQL, learn JavaScript, learn a couple of frontend frameworks for JavaScript, you've just basically learned a bunch of trivia that at best could be considered table stakes for a certain part of the industry.
If you're not actually doing free form problem solving, implementing things from scratch, reading code you didn't have to read and building and reinforcing your own fundamentals in other ways you won't ever be a good programmer.
I've worked with people who've spent 10+ years in the industry only to be essentially useless without frameworks and libraries and it regularly showed in how poor their output was. It wasn't any better when they did have frameworks and libraries to use, but they could pretend it was because at least a solution was reached. The truth is that in most of those cases a much better version could've been reached by simply re-implementing only the parts that were needed, but these types of programmers don't have the capability to do so.
I started “coding” in 1986 in assembly on an Apple //e and by the time I graduated from college, I had experience with 4 different processor families - 65C02, 68K, PPC and x86. I spent the first 15 years of my career programming in C and C++ along with other languages.
Coding is just a means to an end - creating enough business value to convince the company I’m working for to give me money that I can exchange for food and shelter.
If AI can help me do that faster, I’m going to use it. Neither do I want to spend months procuring hardware and managing building out a server room (been there done that) when I can just submit some yaml/HCL and have it done for me in a few minutes.
I don't know if I'm a minority but I'd like to think there are a lot of folks like me out there.
You can compare it to someone who is writing assembly code and now they've been introduced to C. They were happy writing assembly but now they're thrilled they can write things more quickly.
Sure, AI could lead us to write buggier code. Sure, AI could make us dumber because we just have AI write things we don't understand. But neither has to be the case.
With better tools, we'll be able to do more ambitious things.
I think there are a lot of us, but the people who dislike AI are much more vocal in online conversations about it.
(The hype merchant, LinkedIn influencer, Twitter thread crowd are super noisy but tend to stick to their own echo chambers, it's rare to have them engage in a forum like Hacker News directly.)
I hate the reality of our current AI, which is benefitting corporations over workers, being used for surveillance and censorship (nevermind direct social control via misinformation bots), and is copying the work of millions without compensating them in order to do it.
And the push for coders to use it to increase their output, will likely just end up meaning expectations of more LoC and more features faster, for the same pay.
How is using Claude over Llama benefitting corporations over workers? I work with AI every day and sum total of my token spend across all providers is less than a single NVidia H100 card I'd have to buy (from a pretty big corporation!), at the very least, for comparable purpose?
How are self-hosted LLMs not copying the work of millions without compensating them for it?
How is the push for more productivity through better technology somehow bad?
> How is using Claude over Llama benefitting corporations over workers?
I'm not sure why you took the very general statement about AI being corp-over-worker to mean paid models vs free models? The technology itself heavily favors corporations, because the resources needed to create and operate the technology is massive, and is largely not available to individuals. Most of the freely downloadable models (and certainly the most popular ones) were trained by corporations. And there are many more models that are not available to individuals, only to corps.
> I work with AI every day and sum total of my token spend across all providers is less than a single NVidia H100 card I'd have to buy (from a pretty big corporation!), at the very least, for comparable purpose?
You don't need an H100 to run SLMs. You don't need LLMs that require commercial-grade memory capacities.
> How are self-hosted LLMs not copying the work of millions without compensating them for it?
Most are, especially when they're training data is closed-source. The ones that have open-source training data tend not to contain infringed-upon copywritten data. There is a huge issue right now with ML models being falsely called "open source", when in fact the source material needed to recreate them is not even known, much less provided publicly, which is probably the cause of the confusion.
> How is the push for more productivity through better technology somehow bad?
It's not, inherently. In practice though, it almost always means that workers are expected to be additionally productive, without being additionally compensated.
We're the silent majority, I'm pretty sure. If you love coding, you probably love technology, and if you love technology, you probably love AI, which is inarguably the most interesting tech advancement in this decade.
The others, who are not like us? They've got other priorities. If you hate coding but you love AI, you're probably into software engineering because of the money, not love of technology. If you love coding and you hate AI, you're probably more committed to some sort of ideology than you are the love of technology. If you hate coding and you hate AI, well, I hope you throw your cellphone into the river and find a nice cabin in the woods somewhere to hide in.
> If you love coding and you hate AI, you're probably more committed to some sort of ideology than you are the love of technology.
As someone that you may characterize as one of these people, I can share some perspective.
First, I would question the premise that “love of technology” is not itself an ideology.
I do love technology, but not for its own sake. I love solving problems, I love tinkering, and I love craftsmanship and invention.
But technology can also be dangerous, it can set us backwards and not forwards, and its progress is never as inevitable as its evangelists claim. You need to view technology with a critical eye, and remember that tools are tools, and not panaceas.
So I guess I’d ask you — what’s so wrong with choosing to live in a cabin in the woods without a cellphone?
I love coding and don't love questioning AI and checking responses.
But the simple fact is I'm much more productive with AI and I believe this is likely true for most programmers once they get adjusted.
So for production, what I love the most doesn't really matter, otherwise I'd be growing tomatoes and guiding river rafting expeditions. I'm resigned to the fact the age of manually writing "for loops" is largely over, at least in my case.
Funny that I found this article going to hacker news as a pause in my work : I had to chose between using Aider or my brain to code a small algorithmic task, sorting items of a list based on dependences between items written in a YAML file.
Using Aider would probably solve the task in 5 minutes. Coding it in 30 minutes. The former choice would result in more time for other tasks or reading HN or having a hot beverage or walking in the sun. The second would challenge my rusting algorithmic skills and give me a better understanding of what I'm doing for the medium term.
Hard choice. In any case, I have a good salary, even with the latter option I can decide to spend good times.
in the meantime im having lots of fun coding and using AI, reinventing every wheel i can. 0 stress cos i don't do it for money :).
I think a lot of people are having a tantrum because programing is not sexy anymore, its getting easier, the bar is lower now , the quality is awful and nobody cares. its like any other boring soul crushing job.
also if you want to see the real cost (at least part of it) of AI coding or the whole fucked up IT industry, go to any mining town in the global south.
473 comments
[ 3.6 ms ] story [ 298 ms ] threadbased on the current state of AI and the progress im witnessing on a month-by-month basis - my current prediction is there is zero chance AI agents are going to be coding and replacing me in the next few years. if i could short the startups claiming this, I would.
Makes me wonder how many of the people who continue to argue that LLMs can't help with large existing codebases are missing that you need to selectively copy the right chunks of that code into the model to get good results.
What tools are you guys using? Are there none that can interactively probe the project in a way that a human would, e.g. use code intelligence to go-to-definition, find all references and so on?
Our Rust fly-proxy tree is about 80k (cloc) lines of code; our Go flyd tree (a Go monorepo) is 300k. Generally, I'll prompt an LLM to deal with them in stages; a first pass, with some hints, on a general question like "find the code that does XYZ"; I'll review and read the code itself, then feed that back to the LLM with questions like "summarize all the functionality of this package and how it relates to other packages" or "trace the flow of an HTTP request through all the layers of this proxy".
Generally, I'll take the results of those queries and have them saved in .txt files that I can reference in future prompts.
I think sometimes developers are demanding something close to AGI from their tooling, something that would do exactly what they would do (only, in the span of about 15 seconds). I don't believe in AGI, and so I don't expect it from my tools; I just want them to do a better job of fielding arbitrary questions (or generating arbitrary code) than grep or eglot could.
If your codebase is larger than that there are a few tricks.
The first is to be selective about what you feed into the LLM: if you know the work you are doing is in a particular area of the codebase, just paste that bit in. The LLM can make reasonable guesses about things the code references that it can't see.
An increasingly effective trick is to arm a tool-using LLM with a tool like ripgrep (effectively the "interactively probe the project in a way that a human would" idea you suggested). Claude Code and OpenAI Codex both use this trick. The smarter models are really good at deciding what to search for and evaluating the results.
I've built tools that can run against Python code and extract just the class, function and method signatures and their docstrings - omitting the actual code. If you code is well designed and has reasonable documentation that could be enough for the LLM to understand it.
https://github.com/simonw/symbex is my CLI tool for that
https://simonwillison.net/2025/Apr/23/llm-fragment-symbex/ is a tool I released this morning that turns Symbex into a plugin for my LLM tool.
I use my https://llm.datasette.io/ tool a lot, especially with its new fragments feature: https://simonwillison.net/2025/Apr/7/long-context-llm/
This means I can feed in the exact code that the model needs in order to solve a problem. Here's a recent example:
From https://simonwillison.net/2025/Apr/20/llm-fragments-github/ - I'm populating the context with the exact examples needed to solve the problem.As an example, just today I was trying to debug some weird WebSocket behaviour. None of the AI tools could help, not Cursor, not plain old ChatGPT with lots of prompting and careful phrasing of the problem. In fact every LLM I tried (Claude 3.7, GPT o4-mini-high, GPT 4.5) introduced errors into my debugging code.
I’m not saying it will stay this way, just that it’s been my experience.
I still love these tools though. It’s just that I really don’t trust the output, but as inspiration they are phenomenal. Most of the time I just use vanilla ChatGPT though; never had that much luck with Cursor.
A couple days ago I was looking for something to do so gave Claude a paper ("A parsing machine for PEGs") to ask it some questions and instead of answering me it spit out an almost complete implementation. Intrigued, I threw a couple more papers at it ("A Simple Graph-Based Intermediate Representation" && "A Text Pattern-Matching Tool based on Parsing Expression Grammars") where it fleshed out the implementation and, well... color me impressed.
Now, the struggle begins as the thing has to be debugged. With the help of both Claude and Deepseek we got it compiling and passing 2 out of 3 tests which is where they both got stuck. Round and round we go until I, the human who's supposed to be doing no work, figured out that Claude hard coded some values (instead of coding a general solution for all input) which they both missed. In applying ever more and more complicated solutions (to a well solved problem in compiler design) Claude finally broke all debugging output and I don't understand the algorithms enough to go in and debug it myself.
Of course I didn't use any sort of source code management so I could revert to a previous version before it was broken beyond all fixing...
Honestly, I don't even consider this a failure. I learned a lot more on what they are capable of and now know that you have to give them problems in smaller sections where they don't have to figure out the complexities of how a few different algorithms interact with each other. With this new knowledge in hand I started on what I originally intended to do before I got distracted with Claude's code solution to a simple question.
--edit--
Oh, the irony...
After typing this out and making an espresso I figured out the problem Claude and Deepseek couldn't see. So much for the "superior" intelligence.
I'm willing to bet that in a few years most of the developers you know will be using LLMs on a daily basis, and will be more productive because of it (having learned how to use it).
Even when I'm stuck in hell, fighting the latest undocumented change in some obscure library or other grey-bearded creation, the LLM, although not always right, is there for me to talk to, when before I'd often have no one. It doesn't judge or sneer at you, or tell you to "RTFM". It's better than any human help, even if its not always right because its at least always more reliable and you don't have to bother some grey beard who probably hates you anyway.
“If you use word tokens: …. willnever be able to predict words outside of the training vocabulary.”
"If you use character tokens: The model may generate sequences of characters that form words outside the training vocabulary."
Source: Generative Deep Learning by David Foster, 2nd edition, published in 2023. From “Tokenization” on page 134.
“If you use word tokens: …. willnever be able to predict words outside of the training vocabulary.”
"If you use character tokens: The model may generate sequences of characters that form words outside the training vocabulary."
And like I said, single-byte tokens very much are a part of word tokenisers, or to be precise, their token selection. "Word tokeniser" is a misnomer in any case - they are word piece tokenisers. English is simple enough that word pieces can be entire words. With languages where you have numerous suffixes, prefixes, and even in-fixes as a part of one "word" (as defined by "one or more characters preceded or followed by a space" - because the truth is more complicated than that), you have not so much "word tokenisers" as "subword tokenisers". A character tokeniser is just a special case of a subword tokeniser where the length of each subword is exactly 1.
Sadly, I find it sorely lacking at dealing with build systems and that particular type of boilerplate, mostly because it seems to mix up different versions of things too much and gives you totally broken setups more often than not. I’d just as soon never deal with the he’ll that is front end build/lint/test config again.
Absolutely 0 framework or libs, nothing even for logging. Code architecture that would be left in the dust by most university semester projects.
This is how plsql codebases look, but boy Java (and rest of the world) moved quite far since 1995.
I’ve been on projects with multiple languages, but the truly active code was done in only two. The other languages were used in completed modules where we do routine maintenance and rare alterations.
LLMs. I've expanded the circle of languages I use on a frequent basis quite dramatically since I started leaning on LLMs more. I used to be Python, SQL and JavaScript only. These days I'm using jq, AppleScript, Bash, Go, awk, sed, ffmpeg and so many more.
I used to avoid infrequently used DSLs because I couldn't hold them in my memory. Now I'll happily use "the best tool for the job" without worrying about spinning up on all the details first.
AI generated tests are a bad idea.
I've been writing Python for 20+ years and I still can't use unittest.mock without looking up the details every time. ChatGPT and Claude are great at that, which means I use it more often because I don't have to deal with the frustration of figuring it out.
Even more so, I remember making a Chrome extension and feeling intimidated. I knew that I'd be comfortable with most of it given that JS is used but I just didn't know how to start.
With an LLM it is way faster to spin up some default config and get going versus reading a tutorial. What I've noticed in that respect is that I just read what it does and then immediately reason why it's there. "Oh, there's a manifest.json file with permissions and a few other things, fair, makes sense. Oh, so you have the HTML/CSS/JS of the extension, you have the HTML/CSS/JS of the page you're injecting some code into and you have the JS of a background worker. Ah yea, I get that."
And then I just get immediately on coding.
How if it hallucinate and gives you wrong code and explanation? It is better to read documentations and tutorials first.
Then the code won't compile, or more likely your editor/IDE will say that it's invalid code. If you're using something like Cursor in agent mode, if invalid code is generated then it gets detected and the LLM keeps re-running until something is valid.
> It is better to read documentations and tutorials first.
I "trust" LLM's more than tutorials, there's so much garbage out there. For documentation, if the LLM suggests something, you can see the docstrings in your IDE. A lot of the time that's enough. If not, I usually go read the implementation if I _actually_ care about how something works, because you can't always trust documentation either.
As for my editor saying it is invalid..? That is just as untrustworthy as an LLM.
>I "trust" LLM's more than tutorials, there's so much garbage out there.
Yes, rubbish generated by AI. That is the rubbish out there. The stuff written by people is largely good.
I interpreted the "hallucination" part as the AI using functions that don't exist. I don't consider that a problem because it's immediately obvious.
Yes, AI can suggest syntactically valid code that does the wrong thing. If it obviously does the wrong thing, then that's not really an issue either because it should be immediately obvious that it's wrong.
The problem is when it suggests something that is syntactically valid and looks like it works but is ever slightly wrong. But in my experience, it's pretty common to come across that stuff like that in "tutorials" as well.
> Yes, rubbish generated by AI. That is the rubbish out there. The stuff written by people is largely good.
I pretty strongly disagree. As soon as it became popular for developers to have a "brand", the amount of garbage started growing. The stuff written before the late 00's was mostly good, but after that the balance began slowly shifting towards garbage. AI definitely increased the rate at which garbage was generated though.
To be fair, I as a dev with ten or fifteen years experience I do that too. That's why I always have to through test the results of new code before pushing to production. People act as if using AI should remove that step, or alternatively, as if it suddenly got much more burdensome. But honestly it's the part that has changed least for me since adopting an AI in the loop workflow. At least the AIncan help with writing automated tests now which helps a bit.
Emphatic no.
There were heaps of rubbish being generated by people for years before the advent of AI, in the name of SEO and content marketing.
I'm actually amazed at how well LLMs work given what kind of stuff they learned from.
Add to this that someone who uses a LLM to "just do things" for them like this is very unlikely to have much useful knowledge and so can't really resolve these issues themselves it's a recipe for disaster and not at all a time saver over simply learning and doing yourself.
For what it's worth I've found that LLMs are pretty much only good for well understood basic theory that can give you a direction to look in and that's about it. I used to use GitHub Copilot (which years ago was (much?) better than Cursor with Claude Sonnet just a few months ago) to tab complete boilerplate and stuff but concluded that overall, I wasn't really saving time and energy because as nice as tab-completing boilerplate sometimes was, it also invariably turned into "It suggested something interesting, let's see if I can mold it into something useful" taking up valuable time, leading nowhere good in general and just generally being disruptive.
Hallucinations are a thing. With a competent human on the other end of the screen, they are not such an issue. And the benefits you can reap from having LLMs as a sometimes-mistaken advisory tool in your personal toolbox are immense.
[0]: https://knowyourmeme.com/memes/how-to-draw-an-owl
Also something are meant to be approached with the correct foundational knowledge (you can’t do 3D without geometry, trigonometry, and matrixes. And a healthy dose of physics). Almost every time I see people strugling with documentation, it was because they lacked domain knowledge.
1. Code doesn't compile. This case is obvious on what to do.
2. Code does compile.
I don't work in Cursor, I read the code quick, to see the intent. And when done with that decide to copy/paste it and test the output.
You can learn a lot by simply reading the code. For example, when I see in polars a `group_by` function call but I didn't know polars could do that, now I know because I know SQL. Then I need to check the output, if the output corresponds to what I expect a group by function to do, then I'll move on.
There comes a point in time where I need more granularity and more precision. That's the moment where I ditch the AI and start to use things such as documentation and my own mind. This happens one to two hours after bootstrapping a project with AI in a language/library/framework I initially knew nothing about. But now I do, I know a few hours worth of it. That's enough to roughly know where everything is and not be in setup hell and similar things. Moreover, by just reading the code, I get a rough idea on how beginner to intermediate programmers think about the problem space the code is written in as there's always a certain style of writing certain code. This points me into the direction on how to think about it. I see it as a hint, not as the definitive answer. I suspect that experts think differently about it, but given that I'm just a "few hours old" in the particular language/lib/framework, I think knowing all of this is already really amazing.
AI helps with quicker bootstrapping by virtue of reading code. And when it gets actually complicated and/or interesting, then I ditch it :)
That's not a jab, but a serious question. We act like people don't "hallucinate" all the time - modern software engineering devops is all about putting in guardrails to detect such "hallucinations".
Of course, it all depends how you use the LLM. While the same can be true for StackOverflow, the LLMs just scale the issues up.
Except you do care. It's why you're frustrated and annoyed. And good!!! That feeling is because what you're describing requires solving. If something is routine, automate it. But it's really not good to automate in a statistical way, especially when that statistical tool is optimized for human preference. Because remember that also means mistakes are optimized to be missed by humans.[0]With expertise in anything, I'm sorry, but you also got to do the shit work. To be a great musician you gotta practice boring scales. It's true even if you just want to be a sub par one.
But a little grumpy is good. It drives you to fix things, and frankly, that's our job. The things that are annoying and creating friction don't need be repeated over and over, they need alternative solutions. The scripts you build are valuable. The "useless" knowledge you gain isn't so useless. Those little details add up without you knowing and make you better.
That undocumented code makes you frustrated and reminds you to document your own. You don't want to be a hypocrite. The author of the thing you're using probably thought the same thing: "No one is gonna use this garbage, I'm not going to waste my time documenting it". Yet here we are. Over and over again yet we don't learn the lesson.
I'm not gonna deny there's assholes. There are. But even assholes teach you. At worst, they teach you how not to act.
And some people are you telling you to RTM and not RTFM. Sure, it has lots of extra information in it that you don't need to get your specific job done, but have you also considered that it has lots of extra information in it? The person that wrote it clearly thought the context was important. Maybe it isn't. In that case, you learned a lesson in how not to write documentation!
What I'm getting at is that there's a lot of learning done all over the place. Trying to take out all the work and only have "the fun" is harming yourself and has a large potential to make less time for the fun stuff[0]. I'd be surprised if I'm alone in this, but a lot of stuff I enjoy now was stuff that originally frustrated me. IME this is pretty common! It's true for every person I know. Similarly, it's also true for things I learned that I thought I'd never use again. It always has a way of coming back.
I'm not going to pretend it's all fun and games. I'm explicitly saying it's not. But I'm confident in the long run it's better. Despite the lack of accuracy, I use LLMs (and Google, and even the TFM) like I would a solution guide the homework problems when I was in school. Try first, then consult. The struggle is an investment in your future. It sucks, but if all the best things in life were easy then we'd all have them. I'm just trying to convince you that it pays off.
I'm completely aware this is all context dependent. There's a time and place for everything. But given the percentages you mention (even taken as exaggeration), something sounds wrong. It's hard to suggest specific solutions without details but I'd be surprised if there weren't better and more rewarding solutions than having the LLM do it for you
[0] That's the big danger and what drives distrust in them. Because you need to work extra hard to find mistakes, increasing workload, not decreasing, because debugging is most of the job!
While it looks like a productivity boost, there's a clear price to pay. The more you use it, the less you learn and the less you are able to assess quality.
I'm sure it's faster in the short term. Just like copy-paste-from-stack-overflow is. But it is debt. The shit builds and builds. But I think the problem is we're so surrounded by shit we've just normalized it. It is incredible how much bloat and low hanging fruit there is that can be cheaply resolved but there is no will to. And in my experience, it isn't just a lack of will, it is a lack of recognition. If the engineers can't recognize shit, then how do we build anything better? It is literally our job to find problems
I work as a consultant assessing other people's code and it's hard not to lose my religion, sort of speak.
Frankly I don't want to spend 2 hours reading documentation just to find out some arcane incantation that gets the computer to do what I want it to do.
The interesting part of programming to me is designing the logic. It's the 'this, then that, except when this' flow that I'm really interested in, not the search for some obscure library that has some function that will parse this csv.
Llms are great for that, and let me get away from the pointless grind and into the things that I enjoy and are actually providing value.
The pair programming is also a super good thing. I work best when I can spitball and throw out random ideas and get quick feedback. Llms let me do that without bothering others who have their own work to do.
Then you are just straight up not cut out to be a software developer
The existence of LLMs may reduce the need to slog through documentation, but it will not remove that need
The purpose of programming is to provide value for people, not to read documents.
There is more to "providing value" than simply producing working code
Does it have known security exploits built in that you have no idea about because you couldn't be bothered to read documentation?
Is the "value" you provided extremely temporary because someone is going to come along and exploit your shitty LLM generated code to steal all of your client's customer data?
Software Engineering isn't just about writing code it is about understanding what you're building because if you don't, other people will exploit that
I keep seeing people saying to use an LLM to write boilerplate, but like... do you not just copy that from another project where you already wrote it?
Also, I know that people love to joke on modern software and JS in particular. But if you take react code from 2020 and drop it into a new react codebase it still works. Even class based components work. Yes, if you jumped on the newest framework bandwagon every time stuff will break all the time, but AI won’t be able to help you with that either. If you went for relatively stable frameworks, you can re use boilerplate completely or with relatively minimal adjustments
If you take a project from 2020 it's a bit of a pain to upgrade it.
I ran this prompt (and others like it) and it actually worked!
https://simonwillison.net/2025/Apr/18/gemini-image-segmentat...If you keep re-using boilerplate once in a while copying it from elsewhere is fine. If you re-use it all the time, just get a macro setup in your editor of choice. IMHO that is way more efficient than asking AI to produce somewhat consistent boilerplate
So yes, boilerplate, but also yes, there is definitely something to be gained from using ai assistants.
Haven't much used AI to assist. After all, hard enough finding authentic humans capable and willing to voluntarily review/critique one's code. So far AI doesn't consistently provide that kind of help. OTOH seems almost certain over time AI systems will improve in terms of specific and comprehensive "insights" into the particular types of code one is writing.
I think an issue is that human creativity is hard to measure. Likely enough AI is even tougher to assess. Probably AI will increasingly be assigned tasks like constructing project skeletons, assuring parts can be joined together without undue strain, handling "boilerplate" and other routine chores. To be sure the landscape will look different in 50 years, I'm certain we'd be amazed were we able to see what future systems will be doing.
In any case, we shouldn't hesitate to use tools that genuinely boost our creativity. One badly needed role would be enabling development of higher reliability software. Still that's a far cry from the contributions emanating from the best of human originality, talent and motivation.
That’s a lot of trauma you’re dealing with.
Solving problems for real people. Isn't the answer here kind of obvious?
Our field has a whole ethos of open-source side projects people do for love and enjoyment. In the same way that you might spend your weekends in a basement woodworking shop without furnishing your entire house by hand, I think the craft of programming will be just fine.
The output of the LLM is determined by the weights (parameters of the artificial neural network) estimated in the training as well as a pseudo-random number generator (unless its influence, called "temperature", is set to 0).
That means LLMs behave as "processes" rather than algorithms, unlike any code that may be generated from them, which is algorithmic (unless instrcuted otherwise; you could also tell an LLM to generate an LLM).
Now you don't really have to be precise at any level to get something 'working'. You may not be familiar with the generated language or libaries but it could look good enough (like the assembly would have looked good enough). So, sure, if you are very familiar with the generated language and libraries and you inspect every line of generated code then maybe you will be ok. But often the reason you are using an LLM is because e.g. you don't understand or use bash frequently enough to get it to do what you want. Well, the LLM doesn't understand it either. So that weird bash construct that it emitted - did you read the documentation for it? You might have if you had to write it yourself.
In the end there could be code in there that nothing (machine or human) understands. The less hard-won experience you have with the target and the more time-pressed you are the more likely it is that this will occur.
What used to be a project doing a CMS backend, now is spent doing configurations on a SaaS product, and if we are lucky, a few containers/serveless for integrations.
There are already AI based products that can automate those integrations if given enough data samples.
Many believe AI will keep using current programming languages as translation step, just like those Assembly developers thought compiling via Assembly text generation and feeding into an Assembly would still be around.
Confused by what you mean. Is this not the case?
You can naturally revert to old ways, by asking for the Assembly manually, and call the Assembler yourself.
Look at the majority of the tech sector for the last ten years or so and tell me this answer again.
Like I guess this is kind of true, if "problems for real people" equals "compensating for inefficiencies in our system for people with money" and "solutions" equals "making a poor person do it for them and paying them as little as legally possible."
Depends what you write. What I work on isn't about eliminating jobs at all, if anything it creates them. And like, actual, good jobs that people would want, not, again, paying someone below the poverty line $5 to deliver an overpriced burrito across town.
Would you mind naming a few instance of the workers coming out ahead?
I doubt the displaced computers managed to find a better job on average. Probably even their kids were disadvantaged since the parents had fewer options to support their education.
So, who knows if this specific group of people and their descendants ever fully recovered let alone got ahead.
The world changes. Those changes cause a need, a job fulfills that need. The world changes again, the need disappears. Why should the job then persist?
Because if you pursue a career and invest time and money into it over the course of your life, especially in the highly Americanized way which involves both a substantial time and MORE substantial outlay of money to achieve that, and you then go on to live in a society that demands you earn a living or starve/freeze to death, it is unconscionably immoral to fuck with other people's means to earn that living for your own profit.
And to be clear, that doesn't mean "you can never change your career," that's nonsense. People do that all the time, out of necessity or just desire. However currently the ability to do that is heavily gate-kept via the income of the person wanting to do the switching, and for a lot of the people most likely to be automated, they barely make enough to survive right now, where in the hell are they getting capital to retrain themselves on a new career?
And that's not even going into the physiological challenges. You objectively, factually, learn better when you are younger, and it's also worth noting that society at large benefits more from you learning at a younger age like we traditionally do, because you spend the first few years rolling around your house annoying your mother, you spend up to age 18 (usually) in mandatory K-12 education, you spend between 2 and 8 years in college after that if you decide to go or alternatively, a few years learning a trade or something, and then you have what we generally aim for about 40 years of being a productive member of society. If you have to retrain in the middle of that, that's just less efficient on every front. It costs you money and time, it costs society your productivity for however long you leave the workforce and return to education, and of course that's assuming you can afford to do it at all, and don't end up just lurching from one job that's about to nix you to the next, being miserable and depressed, until you can't find another and then you end up in the homeless system.
In my mind at least, the only way I can comprehend anyone being in favor of this sort of system is they imagine themselves one day being on the top of it, because that's the only group of people who are actually benefiting from this sort of instability. The looming threat of and execution of job automation has massive boons for employers; fewer employees can produce at higher rates, the job market is flooded with recently laid off people which lowers the value of labor and lets employers pay the ones who are hired on after less money, and the overall instability "vibes" present makes employees more willing to tolerate bullshit from their employer because they know how much the job market sucks and they don't want to find another, or, who knows, maybe they are trying and literally can't for the previous reasons.
Like in my mind, this just comes down to whether you think you're more likely to be the boot or the neck under the boot, and that's going to decide how you feel about this.
Not always. Recruitment budgets have limits, so it's a fixed number of employees either providing services to a larger number of customers thanks to software, or serving fewer customers or do so less often without the software.
If the work those workers were doing before software was truly valuable. Companies would find other ways to scale, and simply pass the higher costs onwards to consumers.
Haven't we been automating jobs away since the industrial revolution? I know AI may be an exception to this trend, but at least with classical programming, demand goes up, GDP per capita goes up, and new industries are born.
I mean, there's three ways to get stuff done: do it yourself, get someone else to do it, or get a machine to do it.
#2 doesn't scale, since someone still has to do it. If we want every person to not be required to do it (washing, growing food, etc), #3 is the only way forward. Automation and specialization have made the unthinkable possible for an average person. We've a long way to go, but I don't see automation as a fundamentally bad thing, as long as there's a simultaneous effort to help (especially those who are poor) transition to a new form of working.
Somehow everyone who says this misses that never in the history of the United States (and most other countries tbh) has this been true.
We just consign people to the streets in industrial quantity. More underserved to act as the lubricant for capitalism.
I see capitalism invoked as a "boogey man" a lot, which fair enough, you can make an emotional argument, but it's not specific enough to actually be helpful in coming up with a solution to help these people.
In fact, capitalism has been the exact thing that has lifted so many out of poverty. Things can be simultaneously bad and also have gotten better over time.
I would argue that the biggest issue is education, but that's another tangent...
I'll be sure to alert the next person I encounter working UberEats for slave wages that the resources exist that they cannot use. I'm sure this difference will impact their lives greatly.
Edit: My point isn't that UberEats drivers make slave wages (though they do): My point is that from the POV of said people and others who need the aforementioned resources, whether they don't exist or exist and are unusable is fucking irrelevant.
[1] https://babel.hathitrust.org/cgi/pt?id=mdp.39015022383221&se...
[2] https://www.indeed.com/cmp/Uber/salaries/Driver (select United States as location)
I think they were using “slave wages” as a non-literal relative term to the era.
As you did.
A hundred years before your example, the “slave wages” were actually slave wages.
I think it’s fair to say a lot of gig workers, especially those with families, are having a very difficult time economically.
I expect gig jobs lower unemployment substantially, due to being convenient and easy to get, and potentially flexible with hours, but they lower average employment compensation.
Great point. I wonder if this has to do with the current housing crisis and cost of utilities... Food has never been more affordable, in fact free with food banks and soup kitchens. But (IMHO) onerous zoning has really slowed down development and driven up prices.
Another cost is it's pretty much impossible to do anything without a smartphone and internet. I suppose libraries have free internet, but being able to get to said library is another issue.
And like you said, contract work trades flexibility for benefits, and that gets exploited by these companies.
I guess it just sucks sometimes because these issues are super hairy (shut down Uber, great, now you've just put everyone out of a job). "For every complex problem there is a solution which is clear, simple, and wrong."
* Everything is more expensive. You say "food has never been more affordable" but I'll absolutely challenge that. Food banks and kitchens are heavily locale-dependent type resources, and are not distributed according to the needs of the populace, but rather according to the ability and willingness of given communities to sustain them.
* You skated right past the need for a smartphone, mentioning, then going on to cite libraries for some reason. This is just a non-solution to a gig worker who will receive jobs and report their status/completion via a smartphone while on the go, doing the work. Ergo to even begin gig work, one REQUIRES a smart phone WITH a data plan.
* And, again, the pay is shit. In my relatively wealthy area, a good Uber Eats driver can make about $13 to $16 an hour, which on it's face sounds okay for a job that requires basic smartphone literacy and a driver's license. But just think about that. For starters, more than half statistically is tips, which aren't guaranteed and are based on performance. A performance, mind, that is subject to dozens of factors entirely outside the control of the driver. Further, it requires the use of the driver's personal vehicle (or one they have access to anyway) which costs obviously fuel, but traveling so many miles so fast will also mean more frequent oil changes, more replacement parts, not to mention a STEEP increase in the odds of bodily injury on the part of the driver, and NONE of this is being handled by Uber. All of these costs and risks are being felt by the driver.
And that still leaves tons of expenses on the table: insurance for the vehicle, many drivers want to run multiple apps which can require the use of multiple phones and therefore multiple data plans, they need to keep their vehicles clean and tidy for cargo or even passengers, they need to be available at the peak times for orders in order to make any money at all, and even if they do ALL OF THAT right... they are not guaranteed any wage, at all. If they simply don't get orders, or refuse too many and have the systems shadowban them, or simply aren't in the right place, their entire "shift" as it were can be a net loss for them.
> I guess it just sucks sometimes because these issues are super hairy (shut down Uber, great, now you've just put everyone out of a job). "For every complex problem there is a solution which is clear, simple, and wrong."
The solution is I think quite simple here: Uber (and all the rest of these gig apps to be clear) should be paying these people a wage, and the people should be driving cars in a fleet owned by Uber. You know, like Taxi companies did. Taxi drivers made tips, sure, occasionally, but they were hourly employees like any other. If they got in a car accident, the company was insured for that, both for the car and the worker. The employees enjoyed at least some benefits, didn't need to maintain or clean their own cars, certainly didn't need to buy the cars, and showed up to a place, on a schedule, and did a job. Like was normal before the "gig economy."
> You skated right past the need for a smartphone.
Hmm? Like when I said "Another cost is it's pretty much impossible to do anything without a smartphone and internet"?
> a good Uber Eats driver can make about $13 to $16 an hour
Source? That doesn't line up with what I found.
> A performance, mind, that is subject to dozens of factors entirely outside the control of the driver.
This is just FUD if you haven't cited your sources on average/median/distribution of pay in whatever area.
You have a very good point on liability issues though.
> The solution is I think quite simple here
Thus increasing prices of rides, causing users to stop using the service, further shrinking pay? Uber just started being profitable after dumping billions of dollars in subsidies, on top of bad pay. If you make them full-time employees, you may just shut off the one source of income they have.
Uber won because they offered a superior service to taxis. I'm not going to open the can of worms of their predatory behavior, but there was still a significant part that was a better service.
Again, I am planning on helping these people, I think they should be helped, but you really need to think through what could happen if you force a company to become insolvent.
[1] https://ourworldindata.org/grapher/long-term-prices-food?foc...
I bet you like Steven Pinker. He does this shit too where he goes "people 50 years ago didn't even have air conditioning, and now a poor person has one in their car and one in their home" which ignores several things that are going to be their own rabbit holes so I'm just going to not, but that doesn't mean things are better. Yeah, poor people have more stuff, more creature comforts, more "luxuries" today than kings had in the 1400's. That doesn't change the fact that they're barely getting by, living perpetually on a debt and stress treadmill that studies too numerous to count have shown decrease their quality of life, shorten their overall lifespan and lead to health problems, in a country where having health problems is also, totally but coincidence I'm sure, the fastest ticket one can have to poverty.
And the worst part is, it doesn't NEED to be that way. We have more of... basically everything than we ever have, yet it all costs more, and tons of businesses go under, and everybody gets poorer, while the richest grow ever, ever, ever richer.
2 trillion was transferred from the working class to the 1% during COVID. 2. Fucking. Trillion. Dollars.
> Hmm? Like when I said "Another cost is it's pretty much impossible to do anything without a smartphone and internet"?
"Pretty much impossible" and "impossible" are not the same. It is not possible to do gig work without a smartphone.
> Source? That doesn't line up with what I found.
It's going to vary widely based on locale. Mine when I commented was the suburbs of Chicago.
> This is just FUD if you haven't cited your sources on average/median/distribution of pay in whatever area.
Yeah, it is. Because gig work is inconsistent. Would you be okay working your job when your salary was completely dependent on your performance, sure, but also just how much work you had to do during that particular day, and if there was a decent chance that one day you show up to your office, sit on your ass for 8 hours, and go home without a penny?
I doubt it.
> Thus increasing prices of rides
This just in: products and services should cost what it costs for them to be created/rendered unto you, with a little more at the end so the person doing it earns a living. If you can't afford to have a person pick up a burrito for you, drive it across town in a car, and drop it on your doorstep, I would humbly suggest you get in your own car, and get your own burrito.
> Uber just started being profitable after dumping billions of dollars in subsidies
Then shut the doors! If what you're doing doesn't work, close up shop! Why does Uber have to exist? Are people better off being Uber drivers than being homeless? I mean, I guess? I wouldn't call that an open and shut case. If all the people doing gig work were instead completely unemployed, and out protesting in the streets of their capital cities, maybe society would actually do something about the rampant exploitation? Maybe all these companies couldn't get away with paying people utterly shit wages if we didn't mandate that those on assistance programs find jobs, any jobs, even if those jobs don't get them off the assistance?
I would turn this back to you: instead of asking me why people are entitled to food, why are these massive companies entitled to exist? Why are we funneling people with few options towards them to work as many hours as they can while remaining firmly below the poverty line? Why do we demand people who are starving take a certain number of interviews every week so we give them access to a menial amount of sustenance, while judging them for taking it?
> Uber won because they offered a superior service to taxis. I'm not going to open the can of worms of their predato...
What is qualitatively different this time is that it affects intellectual abilities - there is nothing higher up in the work "food chain". Replacing physical work you could always argue you'd have time to focus on making decisions. Replacing decision making might mean telling people go sit on the beach and take your universal basic income (UBI) cheque, we don't need you anymore.
Sitting on the beach is not as nice as it sounds for some; if you don't agree, try doing it for 5 years. Most people require work to have some sense of purpose, it gives identity, and it structures their time.
Furthermore, if you replaced lorry drivers with self-driving cars, you'd destroy the most commonly held job in North America as well as South America, and don't tell me that they can be retrained to be AI engineers or social media influencers instead (some can only be on the road, some only want to be on the road).
So no, we don't need to retrain them to be AI engineers if we have an active shortage of electricians and plumbers. Now, perhaps there aren't enough jobs—I haven't looked at exact numbers—but we still have a long ways to go before I think everything is automated.
Everything being slop seems to be the much more likely issue in my eyes[1].
[1] https://titotal.substack.com/p/slopworld-2035-the-dangers-of...
I've worked in a medical space writing software so that people can automate away the job that their bodies used to do before they broke.
Now all those jobs are gone because of you.
(Interesting how people talk about AI destroying programming jobs all the time, but rarely mention the impact of billions of dollars of code being given away.)
Open source software is not just different in the license, it’s different in the design
Linux also doesn’t take jobs away - the majority of contributors are paid by companies, afaik
How true that is depends on what sort of software you write. Very little of what I've accomplished in my career can be fairly described as "automating other people's jobs away".
Sure, if you completely disregard the past 200 years or so of history.
No. There are a thousand other ways of solving problems for real people, so that doesn't explain why some choose software development as their preferred method.
Presumably, the reason for choosing software development as the method of solving problems for people is because software development itself brings joy. Different people find joy in different aspects even of that, though.
For my part, the stuff that AI is promising to automate away is much of the stuff that I enjoy about software development. If I don't get to do that, that would turn my career into miserable drudgery.
Perhaps that's the future, though. I hope not, but if it is, then I need to face up to the truth that there is no role for me in the industry anymore. That would pretty much be a life crisis, as I'd have to find and train for something else.
Software development is almost unique in the scale that it operates at. I can write code once and have it solve problems for dozens, hundreds, thousands or even millions of people.
If you want your work to solve problems for large numbers of people I have trouble thinking of any other form of work that's this accessible but allows you to help this many others.
Fields like civil engineering are a lot harder to break into!
I don't see why we should seek an explanation if there are thousands of ways to be useful to people. Is being a lawyer particularly better than being an accountant?
There's inertia in the industry. It's not like what you're describing could happen in the blink of an eye. You may well be at the end of your career when this prophecy is fulfilled, if it ever comes true. I sure will be at the end of mine and I'll probably work for at least another 20 years.
And what happened? Programmers make the queries and embed them into code that creates dashboards that managers look at. Or managers ask analysts who have to interpret the dashboards for them... It rather created a need for more programmers.
Compare embedded SQL with prompts - SQL queries compared to assembler or FORTRAN code is closer to English prose for sure. Did it take some fun away? Perhaps, if manually traversing a network database is fun to anyone, instead of declaratively specifying what set of data to retrieve. But it sure gave new fun to people who wanted to see results faster (let's call them "designers" rather than "coders"), and it made programming more elegant due to the declarativity of SQL queries (although that is cancelled out again by the ugliness of mixing two languages in the code).
Maybe the question is: Does LLM-based coding enable a new kind of higher level "design flow" to replace "coding flow"? (Maybe it will make a slightly different group of people happy?)
1. AI Coding leads to a lack of flow.
2. A lack of flow leads to a lack of joy.
Personally, I can't find myself agreeing with the first argument. Flow happens for me when I use AI. It wouldn't surprise me if this differed developer to developer. Or maybe it is the size of requests I'm making, as mine tend to be on the smaller size where I already have an idea of what I want to write but think the AI can spit it out faster. I also don't really view myself as prompt engineering; instead it feels more like a natural back and forth with the AI to refine the output I'm looking for. There are times it gets stubborn and resistant to change but that is generally a sign that I might want to reconsider using AI for that particular task.
Managers usually can't carve out a full day - but a couple of hours is manageable.
See also this quote from Gergely Orosz:
From https://x.com/GergelyOrosz/status/1914863335457034422It's been amazing to spin up quick React prototypes during a lunch break of concepts and ideas for quick feedback and reactions.
They should be managing instead. Not to say that they can't code their own tools, but the statement sounds like a construction supervisor nailing studs or welding steel bars. Can work for a small team, but that's not your primary job.
I've been an engineering manager and it's a lot easier to make useful decisions that your team find credible if you can keep your toes in the water just a little bit.
My golden rule is to stay out of the critical path of shipping a user-facing feature: if a product misses a deadline because the engineering manager slipped on their coding commitments, that's bad.
The trick is to use your minimal coding time for things that are outside of that critical path: internal tools, prototypes, helping review code to get people unstuck, that kind of thing.
You still need to do that if you're using AI, otherwise how do you know if it's actually done a good job? Or are people really just vibe coding without even reading the code at all? That seems... unlikely to work.
Gone are those days.
Most of AI-generated programming content I use are comments/explanations for legacy code, closely followed by tailored "getting started" scripts and iterations on visualisation tasks (for shitty school assignments that want my pyplots to look nice). The rest requires an understanding, which AI can help you achieve faster (it's read many a book related to the topic, so it can recall information a lot like an experienced colleague may), but it can't confer capital K Knowledge or understanding upon you. Some of the tasks it performs are grueling, take a lot of time to do manually, and provide little mental stimulation. Some may be described as lobotomizing and (in my opinion) may mentally damage you in the "Jack Torrance typewriter" kinda way.
It makes me able to work on the fun parts of my job which possess the qualities the article applauds.
Let's stop pretending or denying it: most of us would delegate our work code to somebody else or something else if we could.
Still, prompting LLMs well requires eloquence and expressiveness that many programmers don't have. I have started deriving a lot of value from those LLMs I chose to interact with by specifying clear boundaries on what's the priority and what can wait for later and what should be completely ignored due to this or that objective (and a number of other parameters I am giving them). When you do that well, they are extremely useful.
100% this.
Nothing is truly 100% safe or free of bugs. What I meant with my comment up-thread was that I have enough experience to have a fairly quick and critical eye of code, and that has saved my skin many times.
Do you ever read my comments, or do you just imagine what I might have said and reply to that?
Where does that idea that "by definition the models know more than you" come from?
It requires magical incantations that may or may not work and where a missing comma in a prompt can break the output just as badly as the US waking up and draining compute resources.
Has nothing to do with eloquence
I don’t think this is the case, if anything the opposite is true. Most of us would like to do the work code but have realized, at some career point, that you’re paid more to abstract yourself away from that and get others to do it either in technical leadership or management.
I'll be a radical and say that I think it depends and is very subjective.
Author above you seems to enjoy working on code by itself. You seem to have a different motivation. My motivation is solving problems I encounter, code just happen to be one way out of many possible ones. The author of the submission article seems to love the craft of programming in itself, maybe the problem itself doesn't even matter. Some people program just for the money, and so on.
Thought it was obvious.
How do you verify code that you don't have the expertise to write on your own?
Honestly you’re trying to prove AI is ineffective by telling us it didn’t work with your ineffective protocol. That is not a strong argument.
Either way, when a model starts making dumb mistakes like that these days I start a fresh conversation (to blow away all of the bad tokens in the current one), either with that model or another one.
I often switch from Claude 3.7 Sonnet to o3 or o4-mini these days. I paste in the most recent "good" version of the thing we're working on and prompt from there.
* experiment with multiple models, preferably free high quality models like Gemini 2.5. Make sure you're using the right model, usually NOT one of the "mini" varieties even if its marketed for coding.
* experiment with different ways of delivering necessary context. I use repomix to compile a codebase to a text file and upload that file. I've found more integrated tooling like cursor, aider, or copilot, are less effective then dumping a text file into the prompt
* use multi-step workflows like the one described [1] to allow the llm to ask you questions to better understand the task
* similarly use a back-and-forth one-question-at-a-time conversation to have the llm draft the prompt for you
* for this prompt I would focus less on specifying 10 results and more about uploading all necessary modules (like with repomix) and then verifying all 10 were completed. Sometimes the act of over specifying results can corrupt the answer.
[1]: https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/
I'm a pretty vocal AI-hater, partly because I use it day to day and am more familiar with its shortfalls - and I hate the naive zealotry so many pro-AI people bring to AI discussions. BUTTT we can also be a bit more scientific in our assessments before discarding LLMs - or else we become just like those naive pro-AI-everything zealots.
I am also barely using LLMs at the moment. Even 10% of the time would be generous.
What I was saying is that I have tried different ways of interacting with LLMs and was happy to discover that the way I describe stuff to another senior dev actually works quite fine with an LLM. So I stuck to that.
Again, if an LLM is not up to your task, don't waste your time with it. I am not advocating for "forget everything you knew and just go ask Mr. AI". I am advocating for enabling and productivity-boosting. Some tasks I hate, for some I lack the deeper expertise, others are just verbose and require a ton of typing. If you can prompt the LLM well and vet the code yourself after (something many commenters here deliberately omit so they can happily tear down their straw man) then the LLM will be a net positive.
It's one more tool in the box. That's all there is to it really. No idea why people get so polarizing.
2. Some of the modern LLMs generate very impressive code. Variables caching values that are reused several times, utility functions, even closure helpers scoped to a single function. I agree that when the LLM code's quality falls bellow a certain threshold then it's better in every way to just write it yourself instead.
This isn't how it works, psychologically. The whole time I'm manual coding, I'm wondering if it'd be "easier" to start prompting. I keep thinking about a passage from The Road To Wigan Pier where Orwell addresses this effect as it related to the industrial revolution:
>Mechanize the world as fully as it might be mechanized, and whichever way you turn there will be some machine cutting you off from the chance of working—that is, of living.
>At a first glance this might not seem to matter. Why should you not get on with your ‘creative work’ and disregard the machines that would do it for you? But it is not so simple as it sounds. Here am I, working eight hours a day in an insurance office; in my spare time I want to do something ‘creative’, so I choose to do a bit of carpentering—to make myself a table, for instance. Notice that from the very start there is a touch of artificiality about the whole business, for the factories can turn me out a far better table than I can make for myself. But even when I get to work on my table, it is not possible for me to feel towards it as the cabinet-maker of a hundred years ago felt towards his table, still less as Robinson Crusoe felt towards his. For before I start, most of the work has already been done for me by machinery. The tools I use demand the minimum of skill. I can get, for instance, planes which will cut out any moulding; the cabinet-maker of a hundred years ago would have had to do the work with chisel and gouge, which demanded real skill of eye and hand. The boards I buy are ready planed and the legs are ready turned by the lathe. I can even go to the wood-shop and buy all the parts of the table ready-made and only needing to be fitted together; my work being reduced to driving in a few pegs and using a piece of sandpaper. And if this is so at present, in the mechanized future it will be enormously more so. With the tools and materials available then, there will be no possibility of mistake, hence no room for skill. Making a table will be easier and duller than peeling a potato. In such circumstances it is nonsense to talk of ‘creative work’. In any case the arts of the hand (which have got to be transmitted by apprenticeship) would long since have disappeared. Some of them have disappeared already, under the competition of the machine. Look round any country churchyard and see whether you can find a decently-cut tombstone later than 1820. The art, or rather the craft, of stonework has died out so completely that it would take centuries to revive it.
>But it may be said, why not retain the machine and retain ‘creative work’? Why not cultivate anachronisms as a spare-time hobby? Many people have played with this idea; it seems to solve with such beautiful ease the problems set by the machine. The citizen of Utopia, we are told, coming home from his daily two hours of turning a handle in the tomato-canning factory, will deliberately revert to a more primitive way of life and solace his creative instincts with a bit of fretwork, pottery-glazing, or handloom-weaving. And why is this picture an absurdity—as it is, of course? Because of a principle that is not always recognized, though always acted upon: that so long as the machine is there, one is under an obligation to use it. No one draws water from the well when he can turn on the tap. One sees a good illustration of this in the matter of travel. Everyone who has travelled by primitive methods in an undeveloped country knows that the difference between that kind of travel and modern travel in trains, cars, etc., is the difference between life and death. The nomad who walks or rides, with his baggage stowed on a camel or an ox-cart, may suffer every kind of discomfort, but at least he is living while he is travelling; whereas for the passenger in an express train or a luxury liner his journey is an interregnum, a kind of temporary death. And yet so long as the railways exist, one has got to...
Not me. I code because I love to code, and I get paid to do what I love. If that's not you…find a different profession?
Delegating part of that to an LLM so I can code the stuff I love is a big win for my motivation and is making me doing the work tasks with a bit more desire and pleasure.
Please don't forget that most of us out there can't code for money anything that their heart wants. If you can, I'd be happy for you (and envious) but please understand that's also a fairly privileged life you'd be having in that case.
Part of the joy of craft is the actual process of building a thing, even if the thing you're build is itself "boring". One of my clients right now is a React/Next.js app, which in terms of architecture I find deeply problematic (I tend to advocate vanilla JS, web components, close-to-browser-metal approaches, etc.)—but I still find ways to enjoy the work I do and furthermore I'm proud of the work that I do. I find it anathema that I'd offload any of that craft to a synthetic code text extruder.
Hard disagree, I get to hyperfocus on making magical things that surprise and delight me every day.
Laughably narrow-minded projection of your own perspective on others.
Enjoying to code/knit is fine but we can no longer expect to get paid well to do it.
Just because I utilize the services of others for some things does not mean that it should be expected I want to utilize the service of others for all things.
This is a preposterous generalization and exactly why I said the OP premise is laughable.
Further, you’ve shifted OP’s point from subjective enjoyment of an activity to getting “paid well” - this is an irrelevant tangent to whether “most” people in general would delegate work if they could.
I saw your objections to other comments on the basis of them seemingly not having a disdainful attitude towards coding they do for work, specifically.
I absolutely do have tasks, coding included, that I don't want to do, and find no joy in. If I can have my manager assign the task to someone else, great! But using an LLM isn't that, so I'm still on the hook for ensuring all the most boring parts of that task (bugfixing, reworks, integration, tests, etc) get done.
My experience with LLMs is that they simply shift the division of time away from coding, and towards all the other bits.
And it can't possibly just be about prompting. How many hundreds of lines of prompting would you need to get an LLM to understand your coding conventions, security baselines, documentation reqs, logging, tests, allowed libraries, OSS license restrictions (i.e. disallowed libraries), etc? Or are you just refactoring for all that afterwards?
Maybe you work somewhere that doesn't require that level of rigor, but that doesn't strike me as a good thing to be entrenching in the industry by increasing coders' reliance on LLMs.
Where I use LLMs:
1. Super boring and annoying tasks. Yes, my prompts for those include various coding style instructions, requests for small clarifying comments where the goal of the code is not obvious, tests. So, no OSS license restrictions. Libraries I specify most of the times I used LLMs (and only once did I ask it to suggest a library). Logging and telemetry I add myself. So long story short, I use the LLM to show me a draft of a solution and then mercilessly refactor it to match my practices and guidelines. I don't do 50 exchanges out of laziness, no.
2. Tasks where my expertise is lacking. I recently used an LLM to help me with making a `.clone()`-heavy Rust code to become nearly zero-copy for performance reasons -- it is a code on a hot path. As much as I love Rust and I am fairly good at it (realistically I'm IMO at 7.5 / 10), all the lifetimes and zero-copy semantics I still don't know yet. A long session with an LLM after, I emerged both better educated and with a faster code. IMO a win-win.
Thanks for the follow-up!
As a developer I'm bullish on coding agents and GenAI tools, because they can save you time and can augment your abilities. I've experienced it, and I've seen it enough already. I love them, and want to see them continue to be used.
I'm bearish on the idea that "vibe coding" can produce much of value, and people without any engineering background becoming wildly productive at building great software. I know I'm not alone. If you're a good problem solver who doesn't know how to code, this is your gateway. And you better learn what's happening with the code while you can to avoid creating a huge mess later on.
Developers argue about the quality of "vibe coded" stuff. There are good arguments on both sides. At some point I think we all agree that AI will be able generate high quality software faster than a human, someday. But today is not that day. Many will try to convince you that it is.
Within a few years we'll see massive problems from AI generated code, and it's for one simple reason:
Managers and other Bureaucrats do not care about the quality of the software.
Read it again if you have to. It's an uncomfortable idea, but it's true. They don't care about your flow. They don't care about how much you love to build quality things. They don't care if software is good or bad they care about closing tickets and creating features. Most of them don't care, and have never cared about the "craft".
If you're a master mason crafting amazing brickwork, you're exactly the same as some amateur grabbing some bricks from home depot and slapping a wall together. A wall is a wall. That's how the majority of managers view software development today. By the time that shoddy wall crumbles they'll be at another company anyway so it's someone else's problem.
When I talk about the software industry collapsing now, and in a few years we're mired with garbage software everywhere, this is why. These people in "leadership" are salivating at the idea of finally getting something for nothing. Paying a few interns to "vibe code" piles of software while they high five each other and laugh.
It will crash. The bubble will pop.
Developers: Keep your skills sharp and weather out the storm. In a few years you'll be in high demand once again. When those walls crumble, they will need people who what they're doing to repair it. Ask for fair compensation to do so.
Even if I'm wrong about all of this I'm keeping my skills sharp. You should too.
This isn't meant to be anti-management, but it's based on what I've seen. Thanks for coming to my TED talk.
* And to the original point, In my experience the tools interrupt the "flow" but don't necessarily take the joy out of it. I cannot do suggestion/autocomplete because it breaks my flow. I love having a chat window with AI nearby when I get stuck or want to generate some boilerplate.
IDK, there's still a place in society for master masons to work on 100+ year old buildings built by other master masons.
Same with the robots. They can implement solutions but I'm not sure I've heard of any inventing an algorithmic solution to a problem.
The funny thing is I agree with other comments, it is just kind of like a really good stack overflow. It can’t automate the whole job, not even close, and yet I find the tasks that it cannot automate are so much more boring (the ones I end up doing).
I envy the people who say that AI tools free them up to focus on what they care about. I haven’t been able to achieve this building with ai, if anything it feels like my competence has decreased due to the tools. I’m fairly certain I know how to use the tools well, I just think that I don’t enjoy how the job has evolved.
AI coding is similar. We just had a minor issue with ai generated code that was clearly not vetted as closely as it should have been making output it generated over a couple of months not as accurate as it should be. Obviously, it had to be corrected, then vetted and so on, because there is always time to correct things...
edit: What I am getting at is the old-fashioned, penny smart, but pound foolish.
But when that last 1% breaks and AI can’t fix it. That’s where you need the humans.
This sounds a more likely reason for losing your joy if your passion is coding.
https://news.ycombinator.com/item?id=42511441
People are going to be making the same judgements about AI-assisted coding in the near future. Sure, you could code everything yourself for your own personal enrichment, or simply because it's fun. But that will be a pursuit for your own time. In the realm of business, it's a different story: you are either proompting, or you're effectively stealing money from your employer because you're making suboptimal use of the tools available. AI gets you to something working in production so much faster that you'd be remiss not to use it. After all, as Milt and Tim Bryce have shown, the hard work in business software is in requirements analysis and design; programming is just the last translation step.
Companies know that the quality of the software they get back might be lower than if they hired the bestest, smartest developers in the world. But it doesn't matter because keeping the production cost of the asset low means that they can maximize long term profits.
Writing good software is not the same as writing profitable software.
This has always been true in every craft, and it remains true for programmers in a post LLL world.
Most training data is open source code written by novice to average programmers publishing their first attempts at things and thus LLMS are heavily biased to replicate the naive, slow, insecure code largely uninformed by experience.
Honestly to most programmers early in their career right now, I would suggest spending more time reviewing code, and bugfixes, than writing code. Review is the skillset the industry needs most now.
But you will need to be above average as a software reviewer to be employable. Go out into FOSSland and find a bunch of CVEs, or contribute perf/stability/compat fixes, proving you review and improve things better than existing automated tools.
Trust me, there are bugs -everywhere- if you know how to look for them and proving you can find them is the resume you need now.
The days of anyone that can rub two HTML tags together having a high paying job are over.
The one time i pasted LLM code without reviewing it it belonged on accidentally quadratic.
It was obvious at first read, but probably not for a beginner. The accidental complexity was hidden behind API calls that weren't wrong, just grossly inefficient.
Problem might be, if you lose the "joy" and the "flow" you'll stop caring about things like that. And software is bloated enough already.
I don't know the last time I encountered a used (not random hobby projects) FOSS project that wasn't funded and supported by a company (with exceptions maybe only in the GNU software suite, but even then lots of authors there are making submissions using company email addresses).
I think it's totally acceptable to not make open-source contributions to those projects unless someone is paying you to.
This is fine, so long as the community decides what features they actually want to create the "menu" of unfunded objectives donors can sponsor
My main worry about AI is that people just keep using the garbage that exists instead of trying to produce something better, because AI takes away much of the pain of interacting with garbage. But most people are already perfectly fine using garbage, so probably not much will change here.
I taught a lecture in my first-semester programming course yesterday. This is in a program for older students, mostly working while going back to school. Each time, a few students are selected to present their code for an exercise that I pick randomly from those they were assigned.
This guy had fancy slides showing his code, but he was basically just reading the code off the page. So I ask him: “hey, that method you call, what exactly does it do?”.
Um…
So I ask "Ok, the result from that method is assigned to a variable. What kind of variable is it?" Note that this is Java, the data type is explicitly declared, so the answer is sitting there on his slide.
Um…
So I tear into him. You got this from ChatGPT. That’s fine, if you need the help, but you need to understand what you get. Otherwise you’ll never get a job in IT.
His answer: “I already have a job in IT.”
Fsck. There is your vibe coder. You really do not want them working on anything that you care about.
That could be considered malpractice. I know our profession currently doesn't have professional standards, but it's just a side effect of it being very new and not yet solidified; it won't be long until some duty of care becomes required, and we're already starting to see some movement in that direction, with things like the EU CRA.
So it causes developers to regularly fix what chatgpt is wrong about.
Not great.
Honestly, I suspect the people who would prefer to have someone or something else do their coding, are probably the devs who are already outputting the worst code right now.
Alright, please stop using SDK's, google, stackoverflow, any system libraries. You prefer to do it for yourself right?
SDKs and libraries are there to provide common (as in, used repeatedly, by many) functions that serve as BUILDING BLOCKS.
If you import a library and now your program is complete, then you didn't actually make a useful program, you just made a likely less efficient interface for the library.
BUT ALSO-
SDKs and libraries are *vetted* code. The advantage you are getting isn't just about it having been written for you, it's about the hundreds of hours of human code review, iteration, and thought, that goes into those libraries.
LLM code doesn't have that, so it's not about you benefitting from the knowledge and experience of others, it's purely about reducing personally-typed LoC.
And yes, if you're wholesale copy-pasting major portions of your program from stack overflow, I'd say that's about as bad as copy-pasting from ChatGPT.
Have we forgotten that we advanced in software by building on the work of others?
EDIT: incidentally, Suchir Balaji was 26 when he held those views.
People aren't taking LLM code and then thoughtfully refactoring and improving it, they're using it to *avoid* doing that, by treating the generated code as though it's already had that done.
That's why the pro-LLM-code people in this very thread are talking about using it to automate away the parts of the coding they don't like. You really think they're then going to go back and improve on the code past it minimally working?
There will be no advancement from that, just mediocre or bad code going unreviewed and ignored until it breaks.
Documentation needs to be by humans for humans, it's not a box that's there to be filled with slop.
This is true for producing the documentation but if there is an LLM that can take said documentation and answer questions about it is a great tool. I think I get the answer far quicker with LLM than sifting through documentation when looking for existence of a function in a library or a property on an object.
Secondly, you are not writing anything you get from an LLM. You prompt it and it spits out other people's code, stripped of attribution.
This is what children do: Ask someone to fix something for you without understanding the result.
Do you feel the same way when you delegate assignments to more junior developers and they come back with code?
No one objects to a human writing code and selling copies.
Apart from that, this is the commercial Picasso who loved money. His early pre-expressionist paintings are godlike in execution, even if someone else has painted a Pierrot before him.
> a far higher intensity
I'm not sure what this is supposed to mean. The code that I've gotten is riddled with mistakes and fabrications. If I were to use it directly, it would significantly slow my pace. Likewise, when I use LLMs to offer alternative methods to accomplish something, I have to take the time to sit down and understand what they're proposing, how to actually make it work, and whether that route(s) would be better than my original idea. That is a significant speed reduction.
The only way I can imagine LLMs resulting in "far higher intensity" is if I was just yolo'ing the code into my program, and then doing frantic integration, correction, and bugfix work afterwards.
Sure, that's "higher intensity", but that's just working harder and not smarter.
You may get to the same destination, but it is not the same activity
It's definitely a personality thing, but that's so much more productive for me, than convincing myself to do all the work from scratch after I had a design.
I guess this means I hate coding, and I only love the dopamine from designing and polishing my work instead of making things work. I'm not sure though, this feels like the opposite of hate coding.
Or are you calling an LLM a "clone" of you? In that case, it's more, "if you create a flawed enough starting premise, anything is possible".
That's where we start to disagree what future looks like, then.
It's not there yet, in that the LLM-clone isn't good enough. But amusingly a not nearly good enough clone of me already made me more productive, in that I'm able to deliver more while maintaining the same level of personal satisfaction with my code.
If I want to spend my time refactoring and bugfixing and rewriting and integrating, rather than writing from scratch and bugfixing, I can definitely achieve that by using LLM code, but the overall time has never felt different to me, and in many cases I've thrown out the LLM code after several hours due to either sheer frustration with how it's written, or due to discovering that the structure it's using doesn't work with the rest of the program (see: anything related to threading).
Can I just about corral the LLM into producing working output? Yea, sometimes. From a technology perspective, that’s pretty cool!
But is it a productivity boost? Absolutely not. Like not even close. Every time it would have been faster for me to just write the code myself.
I really don’t know how to square the vast gulf between my experiences and many other peoples’.
(And I don't enjoy the value judgement)
Yes, there are tasks or parts of the code that I'm less interested in, and would happily either delegate or negotiate-off to someone else, but I wouldn't give those to a writer who happens to be able to write in a way that approximates program code, I'd give them to another dev on the team. A junior dev gets junior dev tasks, not tasks that they don't have the skills to actually perform, and LLMs aren't even at an actual junior dev level, imhe.
I noted in another comment that I've also used LLMs to get ideas for alternate ways to implement something, or to as you said "jump start" new files or programs. I'm usually not actually pasting that code into my IDE, though- I've tried that, and the work to make LLM-generated code fit into my programs is way more than just writing out the bits I need, where I need. That is clearly not the case for a lot of people using LLMs, though.
I've seen devs submitting PRs with giant blocks of clearly LLM-gen'd code, that they've tried to monkey-wrench into working with the rest of the program (often breaking conventions or secure coding standards). And these aren't junior devs, they're devs that have been working here for years and years.
When you force them to do a code review, they know it's not up to par, but there is a weird attitude that LLM-gen'd code is more acceptable to be submitted with issues than personally-written code. As though it's the LLM's fault or job to fix, even though they prompted and copied and badly-integrated and PR'd it.
And that's where I think there is a stark divide. I think you're on my side of the divide (at least, I didn't get the impression that you hate coding), it just sounds like you haven't really seen the other side.
My personal dime-store psych theory is that it's the same mental mechanism that non-technical computer users fall into of improperly trusting/ believing computers to produce correct information, but now happening to otherwise technical folks too because "AI" is still a black box technology to most of us, like computers in general are to non-techies.
LLMs are really really cool, and really really impressive to me, and I've had 'wow' moments where they did something that makes you forget what they are and how they work, but you can't let that emotional reaction towards it override the part that knows it's just a token chain. When you do, people end up (obviously on the very extreme end) 'dating' them, letting them make consequential "decisions", or just over-trusting their output/code.
Just last week it wrote me a whole application and gui to open a webpage at a specific time. Yeah it breaks after the first trigger but it works for what I need.
There's a lot of literature about these concerns and a lot of methodologies to alleviate them. I (and others) are judging LLMs in light of those concerns. Mostly because speed was never an issue for us in prototypes and scripts (and it can be relaxing to learn about something while scripting it). The issue is always reliability (can it do what I want) and maintainability (can I change it later). Performance can also be a key issue.
Aside: I don't know the exact problem you were solving, but based on the description, that could have been done with systemd timers (macOS services are more of a pain to write). Yes, there's more to learn, but time triggering some command is a problem solved (and systemd has a lot more triggers).
I could have used Windows Task Scheduler but having a nice gui with a custom icon is much more pleasant to use.
You don't need a multi-million dollar LLM to give you slightly different boilerplate snippets when you already have a text editor on your computer to save them.
It’s when you try to use an exotic language, you realize the amount of work that has been done to minimize dev time in more mainstream languages.
it's not about having the LLM write some "starter pack" toy scaffold. i means when i implement functionality across different classes and need to package that up and adapt, i can just tell the LLM how to approach it and it can produce entire sections of code that would literally just be adaptations of certain things. or to refactor certain pieces that would just be me re-arranging shit.
maybe that's not "boilerplate", but to me it's a collosal waste of my time that could be spent trying to solve a new problem. you can't package that up into a "code snippet" and it's not worth the time carefully crafting templates. LLM can do it faster, better, and cost me near nothing.
> LLM can do it faster, better, and cost me near nothing.
And this is one the thing I'm skeptical about. The above use case is a symptom of all code and no design. It is a waste of time because you're putting yourself in a corner, architecture wise. Kinda like building on a crooked foundation.
I've never done refactoring where I'm writing a lot of code, it's mostly just copy-paste and rebuilding the connection between modules (functions, classes, files, packages,...). And if the previous connections were well understood and you have a clear plan for the new design, then it's a no-brainer to get there. Same when adapting code, I'm mostly deleting lines and renaming variables (regex is nice).
Maybe I'm misunderstanding things, but unless it's for small scripts or very common project types, I haven't seen the supposed productivity gain compared to traditional tooling.
1) refactoring. copy paste, re-arrange, extract, delete and rebuild the connection. i have the mental model and tell the LLM do do it across multiple files or classes. does it way faster and exactly how i would do it given the right prompt which is just a huge file that dictates how things are structured, style, weird edge cases i encountered as time goes on.
2) new features or sections based on existing. i have a service class and want to duplicate and wire up different sections across domains. not easy enough to just be templated, but LLM can do it and understand the nuances. again, generate multiple files across classes no problem.
i can do all these things "fast". i can do them even faster when using the LLM, it offloads the tediousness and i save my brian for other tasks. alot of times i'm just researching my next thing while it chugs away. i come back, lint and review and i'm good to go.
i'm honestly still writing the majority of the code myself, esp if it's like design stuff or new features where the requirements and direction aren't as clear, but when i need to it gives me a huge boost.
keeps me in the flow, i basically recharge while continuing to code. and it's not a small script but a full fledged app, albeit very straightforward architecture wise. the gains are very real. i'm just surprised at the sentiment on HN around it. it's not even just skepticism but outright dogging on it.
I do see more people who seem to be using it to replace coding skill rather than augment it, and I do worry about management's ability to differentiate between those versus just reverting to LoC. And whether it will become a demand for more code, for the same pay.
> This comment section really shows the stark divide between people who love singing and thus hate AI-assisted singing, and people who hate singing and thus love AI-assisted singing.
> Honestly, I suspect the people who would prefer to have someone or something else do their singing, are probably the singers who are already outputting the worst singing right now.
The point is: just because you love something, doesn't mean you're good at it. It is of course positively correlated with it. I am in fact a better singer because I love to sing compared to if I never practiced. But I am not a good singer, I am mediocre at best (I chose this example for a reason, I love singing as well as coding! :-D)
And while it is easier to become good at coding than at singing - for professional purposes at least - I believe that the effect still holds.
AI is like jet fuel for me. It’s the translation layer between specs and code I’ve always wanted. It’s a great advisor for implementation strategies. It’s a way to try new strategies in code quickly.
I don’t need to get anyone else to review my code. Most of this is for personal projects.
I don’t really write professionally, so I don’t have a ton of need for it to manage realities of software engineering (large codebases, peer reviews, black box internal systems, etc). That being said - I do a reasonable amount of embedded Linux work, and AI understands the Linux kernel and device drivers very well.
To extend your metaphor: AI is like a magic microphone that makes all of my singing sound like Tony Rice, my personal favorite singer. I’ve always wanted to sound like him - but I never will. I don’t have the range or the training. But AI allows my coding level to get to that corresponding level with writing software.
I absolutely love it.
Do you love coding, or do you love creating programs?
It seems like the latter given your metaphor being a microphone to make you seem like you could sing well, i.e. wanting the end state itself rather than the achievement via the process.
"wanted to sound like him" vs "wanted to sing like him"
The code is a tool. Nothing more.
I love the shed I built for my family. I don’t have a single feeling for the hammer I used to build it.
For the record: I can sing well. I just can’t sound like Tony Rice. I don’t have his vocal cords or training.
I made a cyber deck several months back, and I opted to carve the case from wood rather than 3d printing or using a premade shell. That hands-on work is something I'm proud of. I don't even use the deck much, it was for the love of building one.
To be fair, I don't have any problem with people who do their jobs for the paycheck alone, because that's the world capitalism has forced us into. Companies don't care about or reward you for the skills you possess, only how much money you make them (and they won't compensate you properly for it, either), so there's no advantage to tying your self-worth up in what you produce for them.
But I do think that it's sad we're seeing creative skills, whether writing coding composing or drawing, be devalued by AI as we are.
> For the record: I can sing well.
That is awesome! It's a great skill to have, honestly. As someone whose body tends to be falling apart more than impressing anyone, I envy that. :)
My experience with LLMs leads me to believe that it's more likely that the magic microphone in this case makes you sound still very, very bad, but being that you're not a good singer you can't tell the difference between very, very bad and Tony Rice's singing. You sang the song, though, i.e. the solution was reached.
And I think we do tend to (rightfully) look down on e.g. singers who lip-sync concerts or use autotune to sing at pitches they otherwise can't, nevermind how we'd react if one used AI singing instead of themselves.
Yes, loving something is no guarantee of skill at it, but hating something is very likely to correspond to not being good at it, since skills take time and dedication to hone. Being bad at something is the default state.
I tried to cover this particular case with:
> And while it is easier to become good at coding than at singing - for professional purposes at least - I believe that the effect still holds.
---
> Yes, loving something is no guarantee of skill at it, but hating something is very likely to correspond to not being good at it, since skills take time and dedication to hone. Being bad at something is the default state.
I tried to cover this particular case with:
> It is of course positively correlated with it.
---
> Being bad at something is the default state.
Well, skill-wise yes. But being talented at something can happen, even when you hate something.
Autotune is de rigueur for popular music.
In general, I'm not sure that I agree with looking down on people.
Another analogy would be with sound engineering. I've met sound engineer who hate their job as they would rather play music. They are also the ones whose jobs are likely to be replaced by AI. And I would argue that the argument stand stills. AI Sound Engineers who hate working on sound are often the bad sound engineers.
I can't reconcile this with my own view of things but I think "for professional purposes at least" is doing a lot of work in your sentence and I get the feeling you intend to say "good enough" by adding that bit.
Most programmers are very bad at programming (and problem solving) and only if they were compared to absolute beginners with zero insight could they be said to be "good" (and most of that comes down to them at least knowing the names of maybe a couple of concepts, etc., which makes for at least a partial map of the knowledge space). Most of them will never become good at what they do either, but will stay middling because they basically just glue libraries together and learn surface level things over and over.
If all you've ever done is learn a language, a backend framework in that language, learn how to use SQL, learn JavaScript, learn a couple of frontend frameworks for JavaScript, you've just basically learned a bunch of trivia that at best could be considered table stakes for a certain part of the industry.
If you're not actually doing free form problem solving, implementing things from scratch, reading code you didn't have to read and building and reinforcing your own fundamentals in other ways you won't ever be a good programmer.
I've worked with people who've spent 10+ years in the industry only to be essentially useless without frameworks and libraries and it regularly showed in how poor their output was. It wasn't any better when they did have frameworks and libraries to use, but they could pretend it was because at least a solution was reached. The truth is that in most of those cases a much better version could've been reached by simply re-implementing only the parts that were needed, but these types of programmers don't have the capability to do so.
Coding is just a means to an end - creating enough business value to convince the company I’m working for to give me money that I can exchange for food and shelter.
If AI can help me do that faster, I’m going to use it. Neither do I want to spend months procuring hardware and managing building out a server room (been there done that) when I can just submit some yaml/HCL and have it done for me in a few minutes.
I don't know if I'm a minority but I'd like to think there are a lot of folks like me out there.
You can compare it to someone who is writing assembly code and now they've been introduced to C. They were happy writing assembly but now they're thrilled they can write things more quickly.
Sure, AI could lead us to write buggier code. Sure, AI could make us dumber because we just have AI write things we don't understand. But neither has to be the case.
With better tools, we'll be able to do more ambitious things.
No, there's plenty of top-class engineers who love coding with AI. e.g. Antirez.
(The hype merchant, LinkedIn influencer, Twitter thread crowd are super noisy but tend to stick to their own echo chambers, it's rare to have them engage in a forum like Hacker News directly.)
I hate the reality of our current AI, which is benefitting corporations over workers, being used for surveillance and censorship (nevermind direct social control via misinformation bots), and is copying the work of millions without compensating them in order to do it.
And the push for coders to use it to increase their output, will likely just end up meaning expectations of more LoC and more features faster, for the same pay.
But FOSS, self-hosted LLMs? Awesome!
How are self-hosted LLMs not copying the work of millions without compensating them for it?
How is the push for more productivity through better technology somehow bad?
I am pro FOSS but can't understand this comment.
I'm not sure why you took the very general statement about AI being corp-over-worker to mean paid models vs free models? The technology itself heavily favors corporations, because the resources needed to create and operate the technology is massive, and is largely not available to individuals. Most of the freely downloadable models (and certainly the most popular ones) were trained by corporations. And there are many more models that are not available to individuals, only to corps.
> I work with AI every day and sum total of my token spend across all providers is less than a single NVidia H100 card I'd have to buy (from a pretty big corporation!), at the very least, for comparable purpose?
You don't need an H100 to run SLMs. You don't need LLMs that require commercial-grade memory capacities.
> How are self-hosted LLMs not copying the work of millions without compensating them for it?
Most are, especially when they're training data is closed-source. The ones that have open-source training data tend not to contain infringed-upon copywritten data. There is a huge issue right now with ML models being falsely called "open source", when in fact the source material needed to recreate them is not even known, much less provided publicly, which is probably the cause of the confusion.
> How is the push for more productivity through better technology somehow bad?
It's not, inherently. In practice though, it almost always means that workers are expected to be additionally productive, without being additionally compensated.
The others, who are not like us? They've got other priorities. If you hate coding but you love AI, you're probably into software engineering because of the money, not love of technology. If you love coding and you hate AI, you're probably more committed to some sort of ideology than you are the love of technology. If you hate coding and you hate AI, well, I hope you throw your cellphone into the river and find a nice cabin in the woods somewhere to hide in.
As someone that you may characterize as one of these people, I can share some perspective.
First, I would question the premise that “love of technology” is not itself an ideology.
I do love technology, but not for its own sake. I love solving problems, I love tinkering, and I love craftsmanship and invention.
But technology can also be dangerous, it can set us backwards and not forwards, and its progress is never as inevitable as its evangelists claim. You need to view technology with a critical eye, and remember that tools are tools, and not panaceas.
So I guess I’d ask you — what’s so wrong with choosing to live in a cabin in the woods without a cellphone?
When did I imply there was anything wrong with that?
Would that I could...
But the simple fact is I'm much more productive with AI and I believe this is likely true for most programmers once they get adjusted.
So for production, what I love the most doesn't really matter, otherwise I'd be growing tomatoes and guiding river rafting expeditions. I'm resigned to the fact the age of manually writing "for loops" is largely over, at least in my case.
Using Aider would probably solve the task in 5 minutes. Coding it in 30 minutes. The former choice would result in more time for other tasks or reading HN or having a hot beverage or walking in the sun. The second would challenge my rusting algorithmic skills and give me a better understanding of what I'm doing for the medium term.
Hard choice. In any case, I have a good salary, even with the latter option I can decide to spend good times.
also if you want to see the real cost (at least part of it) of AI coding or the whole fucked up IT industry, go to any mining town in the global south.
Don't see any mention regarding this in the post, which is the common objection people have regarding vibe coding.