Readit News logoReadit News
neilwilson · a year ago
Again one of the few advantages of having been round the sun a few more times than most is this isn’t the first time this has happened.

Packages were supposed to replace programming. They got you 70% of the way there as well.

Same with 4GLs, Visual Coding, CASE tools, even Rails and the rest of the opinionated web tools.

Every generation has to learn “There is no silver bullet”.

Even though Fred Brooks explained why in 1986. There are essential tasks and there are accidental tasks. The tools really only help with the accidental tasks.

AI is a fabulous tool that is way more flexible than previous attempts because I can just talk to it in English and it covers every accidental issue you can imagine. But it can’t do the essential work of complexity management for the same reason it can’t prove an unproven maths problem.

As it stands we still need human brains to do those things.

dkrich · a year ago
This seems to apply to all areas of AI in its current form and in my experience 70% may be a bit generous.

AI is great at getting you started or setting up scaffolds that are common to all tasks of a similar kind. Essentially anything with an identifiable pattern. It’s yet another abstraction layer sitting on an abstraction layer.

I suspect this is the reason we are really only seeing AI agents being used in call centers, essentially providing stand ins for chatbots- because chatbots are designed to automate highly repetitive, predictable tasks like changing an address or initiating a dispute. But for things like “I have a question about why I was charged $24.38 on my last statement” you will still be escalated to an agent because inquiries like that require a human to investigate and interpret an unpredictable pattern.

But creative tasks are designed to model the real world which is inherently analog and ever changing and closing that gap of identifying what’s missing between what you have and the real world and coming up with creative solutions is what humans excel at.

Self driving, writing emails, generating applications- AI gets you a decent starting point. It doesn’t solve problems fully, even with extensive training. Being able to fill that gap is true AI imo and probably still quite a ways off.

nottorp · a year ago
> But for things like “I have a question about why I was charged $24.38 on my last statement” you will still be escalated to an agent because inquiries like that require a human to investigate and interpret an unpredictable pattern.

Wishful thinking? You'll just get kicked out of the chat because all the agents have been fired.

marcosdumay · a year ago
> because chatbots are designed to automate highly repetitive, predictable tasks like changing an address or initiating a dispute

You know what is even cheaper, more scalable, more efficient, and more user-friendly than a chatbot for those use cases?

A run of the mill form on a web page. Oh, and it's also more reliable.

adamc · a year ago
Great analysis, and I agree it's Fred Brooks' point all over again.

None of these tools hurt, but you still need to comprehend the problem domain and the tools -- not least because you have to validate proposed solutions -- and AI cannot (yet) do that for you. In my experience, generating code is a relatively small part of the process.

jeremyjh · a year ago
Yeah, its more like it can generate 70% of the code by volume, rather than get you 70% of the way to a complete solution. 12 week projects don't become 4 week projects, at best they are 9-10 week projects.
jamil7 · a year ago
It’s an old one but I think Joel Spolsky‘s take on leaky abstractions is relevant again in this discussion as we add another abstraction layer with LLM assisted coding.

https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-a...

louthy · a year ago
Aligned with:

“The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” — Edsger Dijkstra

The abstraction has never been this leaky or vague — Me

rossmurphy · a year ago
Joel's blog posts should be hung in the Louvre.
bambax · a year ago
Where AI really really shine is to help an engineer get proficient in a language they don't know well. Simon Willison says this somewhere and in my experience it's very true.

If you can code, and you understand the problem (or are well on your way to understanding it), but you're not familiar with the exact syntax of Go or whatever, then working with AI will save you hundreds of hours.

If you can't code, or do not (yet) understand the problem, AI won't save you. It will probably hurt.

dartos · a year ago
I used to agree, but as an experienced engineer asking about rust and y-crdt, it sent me down so many wrong rabbit holes with half valid information.

I used Claude recently to refresh my knowledge on the browser history API and it said that it gets cleared when the user navigates to a new page because the “JavaScript context has changed”

I have the experience and know how to verify this stuff, but a new engineer may not, and that would be awful.

Things like these made me cancel all my AI subscriptions and just wait for whatever comes after transformers.

osigurdson · a year ago
It allows you to write a little code in languages that you are not familiar with. However, it is nothing like actually internalizing a language.
fatnoah · a year ago
> Where AI really really shine is to help an engineer get proficient in a language they don't know well.

I used GitHub Copilot in a project I started mostly to learn Go. It was amazing. I spent not so much time fiddling around with syntax, and much more time thinking about design.

vunderba · a year ago
I guess it depends on how you define "proficiency". For me, proficiency implies a fundamental understanding of something. You're not proficient in Spanish if you have to constantly make use of Google Translate.

Could code assistants be used to help actually learn a programming language?

- Absolutely.

Will the majority of people that use an LLM to write a Swift app actually do this?

- Probably not, they'll hammer the LLM until it produces code that hobbles along and call it a day.

Also, LEARNING is aided by being more active, but relying on an LLM inherently encourages you to adopt a significantly more passive behavior (reading rather than writing).

adamc · a year ago
Not sure I get how that would work. It seems to me that to do my job I will have to validate the semantics of the program, and that means I will have to become familiar with the syntax of Go or whatever, at a fairly sophisticated level. If I am glossing over the syntax, I am inevitably glossing over the fine points of how the program works.
croes · a year ago
If you don’t know the language well enough AI could lead you down the path of bad practices and you won’t recognize it.
cruffle_duffle · a year ago
It depends on the language and the libraries you will use. Python with a well known library? Sure no problem. Almost any model will crank out fairly error free boilerplate to get you started.

Terraform? Hah. 4o and even o1 both absolutely sucked at it. You could copy & paste the documentation for a resource provider, examples and all, and it would still produce almost unusable code. Which was not at all helpful given I didn’t know the language or its design patterns and best practices at all. Sonnet 3.5 did significantly better but still required a little hand holding. And while I got my cloud architecture up and running now I question if I followed “best practices” at all. (Note: I don’t really care if I did though… I have other more important parts of my project to work on, like the actual product itself).

To me one of the big issues with these LLM’s is they have zero ability to do reflection and explain their “thought process”. And even if they could you cannot trust what it says because it could be spouting off whatever random training data it hovered up or it could be “aligned” to agree with whatever you tell it.

And that is the thing about LLM’s. They are remarkably good bullshitters. They’ll say exactly what you want them to and be right just enough that they fool you into thinking they are something more than an incredibly sophisticated next token generator.

They are both incredibly overrated and underrated at the same time. And it will take us humans a little while to fully map out what they are actually good at and what they only pretend to be good at.

mgens · a year ago
Yes! Reading some basic documentation on the language or framework, then starting to build in Cursor with AI suggestions works so well. The AI suggests using functions you didn't even know about yet, then you can go read documentation on them to flesh out your knowledge. Learned basic web dev with Django and Tailwind this way and it accelerated the process greatly. Related to the article, this relies on being curious and taking the time to learn any concepts the AI is using, since you can't trust it completely. But it's a wonderfully organic way to learn by doing.
DanielHB · a year ago
LLMs are a great help with terraform and devops configuration, they often invent things but at least the point at the documentation I need to look up on.

Of course everything needs double-checking but just asking the LLM: "how do I do X" will usually at least output all the names of terrraform resources and most configuration attributes I need to look up.

They are great for any kind of work that requires "magical incantations" as I like to call them.

xboxnolifes · a year ago
I agree with this take. AI has essentially served me well as a more useful search engine when working in new languages, libraries, or frameworks.
heelix · a year ago
So very much this. As I was learning Rust, I'd ask what the equivalent was for a snippet I could create in Java. It is funny. I look at the Java code provided by prompts and go meh. The Rust code looks great. I realize this is probably due to 1) me being that junior level in Rust or 2) less legacy crap in the training model. I'm sure it is both, with more of the former as I work from working to beautiful code.
lxdlam · a year ago
Totally agree.

The software development is absolutely a fractal. In 1960s we were solving the complexity by using high level language that compile to machine code to enable more people write simple code. This has happened again and again and again.

But different generations face different problems, which requires another level of thinking, abstraction, and push both boundaries until we reach the next generation. All of this is not solved by a single solution, but the combination based on basic principles that never changes, and these things, at least for now, only human can do.

dkrich · a year ago
Interestingly it seems like we are investing many more magnitudes of capital for smaller and smaller gains.

For example, the jump in productivity from adding an operating system to a computer is orders of magnitude larger than adding an LLM to a web development process despite the LLM requiring infrastructure that cost tens of billions to create.

It seems that while tools are getting more and more sophisticated, they aren’t really resulting in much greater productivity. It all still seems to be resulting in software that solves the same problems as before. Whereas when html came around it opened up use cases that has never been seen before despite being a very simple abstraction layer by today’s standards.

Perhaps the opportunities are greatest when you are abstracting the layer that the fewest understand when LLMs seem to assume the opposite.

uludag · a year ago
> The software development is absolutely a fractal.

I think this analogy is more apt than you may realize. Just like a fractal, the iterated patterns get repeated on a much smaller scale. The jump to higher-level languages was probably a greater leap then the the rest of software innovation will provide. And with each iterative gain we approach some asymptote, but never get there. And this frustration of never reaching our desired outcome results in ever louder hype cycles.

smokel · a year ago
Too bad most of society is accidental as well. With which I mean to say that there are a lot of nonsensical projects being done out there, that still make a living for many people. Modern AI may well change things, similar to how computers changed things previously.

I get your sentiment, I've been through a few hype cycles as well, but besides learning that history repeats itself, there is no saying how it will repeat itself.

notRobot · a year ago
> With which I mean to say that there is a lot of nonsensical projects being done out there, that still make a living for many people.

I don't know why this is a bad thing. I don't think projects that you believe are nonsensical shouldn't exist just because of your opinion, especially if they're helping people survive in this world. I'm sure the people working on them don't think they're nonsensical.

whiplash451 · a year ago
At this point, I don't think that (truly) AI-informed people believe that AI will replace engineers. But AI tools will likely bring a deep transformation to the workflow of engineers (in a positive and collaborative way).

It may not be tab-tab-tab all the way, but a whole lot more tabs will sneak in.

Workaccount2 · a year ago
I don't think it will replace engineers, but I do think it will turn them from $200k/yr golden geese into regular old $90k/yr ducks.
dyauspitr · a year ago
No, I don’t believe you truly know where AI is right now. Tools like Bolt and v0 are essentially end to end development AIs that actually require very little knowledge to get value out of.
orbisvicis · a year ago
If I could sketch out the architecture I wanted as a flow chart annotated with types and structures, implementable by an AI, that would be a revolutionary leap.

I design top-down, component by component, and sometimes the parts don't fit together as I envisioned, so I have to write adapters or - worst case - return to the drawing board. If the AI could predict these mismatches, that would also be helpful.

Unfortunately, I don't think AI is great with only the accidental tasks either.

CuriouslyC · a year ago
AI is really good at goldfish programming. It's incredibly smart within its myopic window, but falls apart as it is asked to look farther. The key is to ask for bite sized things where that myopia doesn't really become a factor. Additionally, you as the user have to consider whether the model has seen seen similar things in the past, as it's really good at regurgitating variations but struggles with novelty.
adamc · a year ago
Maybe we need better terminology. But AI right now is more like pattern-matching than anything I would label as "understanding", even when it works well.
latexr · a year ago
For reference, to those who want to learn more:

https://en.wikipedia.org/wiki/No_Silver_Bullet

Izkata · a year ago
> Even though Fred Brooks explained why in 1986. There are essential tasks and there are accidental tasks. The tools really only help with the accidental tasks.

I don't know this reference, so I have to ask: Was "accidental" supposed to be "incidental"? Because I don't see how "accidental" makes any sense.

racingmars · a year ago
The Mythical Man-Month, by Fred Brooks.

Chapter 16 is named "No Silver Bullet—Essence and Accident in Software Engineering."

I'll type out the beginning of the abstract at the beginning of the chapter here:

"All software construction involves essential tasks, the fashioning of the complex conceptual structures that compose the abstract software entity, and accidental tasks, the representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints. Most of the big past gains in software productivity have come from removing artificial barriers that have made the accidental tasks inordinately hard, such as severe hardware constraints, awkward programming languages, lack of machine time. How much of what software engineers now do is still devoted to the accidental, as opposed to the essential? Unless it is more than 9/10 of all effort, shrinking all the accidental activities to zero time will not give an order of magnitude improvement."

BasilInc · a year ago
Brooks makes reference to this at some point in a later edition of the book, and about the confusion the word choice caused.

By accidental, he means "non-fundamental complexity". If you express a simple idea in a complex way, the accidental complexity of what you said will be high, because what you said was complex. But the essential complexity is low, because the idea is simple.

Anniversary edition, p182.

"... let us examine its difficulties. Following Aristotle, I divide them into essence - the difficulties inherent in the nature of the software - and accidents - those difficulties that today attends its production but that are not inherent"

olau · a year ago
> I don't know this reference

Right there is your problem. Read the Mythical Man-Month and Design of Design. They are not long books and it's material that's hard to find elsewhere. Old rat tacit knowledge.

christophilus · a year ago
It comes from philosophy: essential vs accidental.

https://plato.stanford.edu/entries/essential-accidental/

bluGill · a year ago
Buy and read the book. There is a reason the 25th aniversery eddition has been still in print for more than 30 years. It is a timeless combuter book that everyone should read and keep an their bookshelf.
dkdbejwi383 · a year ago
"Accident" in the same sense as "accident of birth" not "traffic accident".
bloomingkales · a year ago
Same with 4GLs, Visual Coding, CASE tools, even Rails and the rest of the opinionated web tools.

How many of those things were envisioned by futurists or great authors? This AI stuff is the stuff of dreams, and I think it’s unwise to consider it another go around the sun.

no_wizard · a year ago
Until it’s actually AI and not Machine Learning masquerading as AI because AI is the sectors marketing pitch, I would strongly hesitate considering it as anything other than a tool.

Yes, a powerful tool, and as powerful tools go, they can re-shape how things get done, but a tool none the less and therefore we must consider what its limits are, which is all OP is getting at and the current and known near future state suggests we aren’t evolving passed the tool state

latexr · a year ago
> This AI stuff is the stuff of dreams

This AI stuff? No, not really. The stuff of dreams is an AI that you can talk to and interact infinitely and trust that it doesn’t make mistakes. LLMs ain’t it.

DanielHB · a year ago
The better tech often lowers the barrier for people to do things but raises the bar of users (and stakeholders for contract projects) expectations. It is plainly visible with web development where the amount of tooling has grown dramatically (both frontend and backend) to do things.

Like, for example, all the big-data stuff we do today was unthinkable 10 years ago, today every mid-sized company has a data team. 15 years ago all data in a single monolithic relational database was the norm, all you needed to know was SQL and some Java/C#/PHP and some HTML to get some data wired up into queries.

snarf21 · a year ago
The most valuable thing I want AI to do with regards to coding is to have it write all the unit tests and get me to 100% code coverage. The data variance and combinatorics needed to construct all the meaningful tests is sometimes laborious which means it doesn't get done (us coders are lazy...). That is what AI to do, all the mind numbing draining work so I can focus more on the system.
jyounker · a year ago
Which is also a fantasy, since if you did achieve it, you'd just have tests that verified that all your bugs were in place.
js8 · a year ago
How do you expect AI to write unit tests if it doesn't know the precise desired semantics (specification)?

What I personally would like AI to do would be to refactor the program so it would be shorter/clearer, without changing its semantics. Then, I (human) could easily review what it does, whether it conforms to the specification. (For example, rewrite the C program to give exactly the same output, but as a Python code.)

In cases where there is a peculiar difference between the desired semantics and real semantics, this would become apparent as additional complexity in the refactored program. For example, there might be a subtle semantic differences between C and Python library functions. If the refactored program would use a custom reimplementation of C function instead of the Python function, it would indicate that the difference matters for the program semantics, and needs to be somehow further specified, or it can be a bug in one of the implementations.

macNchz · a year ago
I've been having good results having AI "color in" the areas that I might otherwise skimp on like that, at least in a first pass at a project: really robust fixtures and mocks in tests (that I'm no longer concerned will be dead weight as the system changes because they can pretty effectively be automatically updated), graceful error handling and messaging for edgier edge cases, admin views for things that might have only had a cli, etc.
chubot · a year ago
A bigger challenge, and a “senior engineer” thing, is to write code with small/tractable state spaces in the first place

It’s not either/or of course, and AI can help

But sometimes it takes another leap beyond the current set of test cases

9rx · a year ago
Tests are the documentation that explains what your application is intended to do. Once AI is able to figure that out, you won't be needed anymore.
Dalewyn · a year ago
>AI is a fabulous tool that is way more flexible than previous attempts because I can just talk to it in English

In an era when UIs become ever more Hieroglyphic(tm), Aesthetical(tm), and Nouveau(tm), "AI" revolutionizing and redefining the whole concept of interacting with computers as "Just speak Human." is a wild breath of fresh air.

skydhash · a year ago
Programming and interacting with computers in general is just translation to a more restricted and precise language. And that what's make them more efficient. Speaking human is just going the other way and losing productivity.

It's akin to how everyone can build a shelter, but building a house requires a more specialized knowledge. The cost of the later is training time to understand stuff. The cost of programming is also training time to understand how stuff works and how to manipulate them.

BlueTemplar · a year ago
To be noted, most popular programming languages are already in a bastardized for of English, and not some other human language.
singularity2001 · a year ago
>> for the same reason it can’t prove an unproven maths problem

that aged like LeCun

hinkley · a year ago
The first lead I worked with inoculated me to this. He taught me about hype trains long before the idea was formalized. He’d been around for the previous AI hype cycle and told me to expect this one to go the same. Which it did, and rather spectacularly. That was three cycles ago now and while I have promised myself I will check out the next cycle, because I actually do feel like maybe next time they’ll build systems that can answer why not just how, this one is a snooze fest I don’t need to get myself involved in.
danielbln · a year ago
Just be careful you don'tet your pendulum swing too much in the other direction, where your turn into an old curmudgeon that doesn't get excited by anything and that thinks nothing is novel or groundbreaking anymore.
arikrak · a year ago
AI is a potential silver bullet since it can address the "essential complexity" that Fred Books said regular programming improvements couldn't address. It may not yet have caused an "order of magnitude" improvement in overall software development but it has caused that improvement in certain areas, and that will spread over time.

https://en.wikipedia.org/wiki/No_Silver_Bullet

banku_brougham · a year ago
The devs get it from what i can tell, management are the slow learners here
HarHarVeryFunny · a year ago
> The tools really only help with the accidental tasks

I don't think that's really the problem with using LLMs for coding, although it depends on how you define "accidental". I suppose if we take the opposite of "essential" (the core architecture, planned to solve the problem) to be boilerplate (stuff that needs to be done as part of a solution, but doesn't itself really define the solution), then it does apply.

It's interesting/amusing that on the surface a coding assistant is one of the things that LLMs appear better suited for, and they are suited for, as far as boilerplate generation goes (essentially automated stack overflow, and similar-project, cut and pasting)... But, in reality, it is one of the things LLMs are LEAST suited for, given that once you move beyond boilerplate/accidental code, the key skills needed for software design/development are reasoning/planning, as well as experienced-based ("inference time") learning to progress at the craft, which are two of the most fundamental shortcomings of LLMs that no amount of scale can fix.

So, yeah, maybe they can sometimes generate 70% of the code, but it's the easy/boilerplate 70% of the code, not the 30% that defines the architecture of the solution.

Of course it's trendy to call LLMs "AI" at the moment, just as previous GOFAI attempts at AI (e.g. symbolic problem solvers like SOAR, expert systems like CYC) were called "AI" until their limitations became more apparent. You'll know we're one step closer to AI/AGI when LLMs are in the rear view mirror and back to just being called LLMs again!

koliber · a year ago
As the adage goes:

If you aim for the stars and fail, you'll end up on the moon.

rsynnott · a year ago
Other options are available, for instance ploughing into a village because your second stage didn't light, or, well, this: https://youtu.be/mTmb3Cqb2qw?t=16

Most of the "you'll never need programmers again!" things have ended up more "cars-showered-with-chunks-of-flaming-HTPB" than "accidentally-land-on-moon", tbh. 4GLs had an anomaly, and now we don't talk about them anymore.

(It's a terrible adage, really. "Oops, the obviously impossible thing didn't happen, but an unrelated good thing did" just doesn't happen that often, and when it does there's rarely a causal relation between A and B.)

cwillu · a year ago
If you aim for the stars and fail, you end up going in circles for all eternity.
steveBK123 · a year ago
Kind of the opposite lesson of Icarus?
EGreg · a year ago
AI totally is a silver bullet. If you don't think so, you're just using it wrong and it's your fault. If you think that it takes you just as long or longer to constantly double-check everything it does, then you don't understand the P vs NP problem. </sarcasm>

AI will only get better.

And AI has proven a lot of unproven maths problems as far back as 2019: https://mathscholar.org/2019/04/google-ai-system-proves-over...

blueprint · a year ago
What? AI can't prove any unproven math problems...?
andrewstuart · a year ago
None of those even came within 10% of delivering to the extent that LLMs have.
Retric · a year ago
Hardly, if you worked with the web in the mid 90’s, modern tooling is a much larger improvement than what LLMs bring to the table on their own. Of course they aren’t on their own, people are leveraging generations of improvements and then stacking yet another boost on top of them.

Programming today is literally hundreds of times more productive than in 1950. It doesn’t feel that way because of scope creep, but imagine someone trying to create a modern AAA game using only assembly and nothing else. C didn’t show up until the 70’s, and even Fortran was a late 50’s invention. Go far enough back and people would set toggle switches and insert commands that way no keyboards whatsoever.

Move forward to the 1960’s and people coded on stacks of punch cards and would need to wait for access to a compiler overnight. So just imagine the productivity boost of a text editor and a compiler. I’m not taking an IDE with syntax checks etc, just a simple text editor was a huge step up.

And so forth.

hnlmorg · a year ago
Oh I disagree. Like the GP, I’ve been round the block too. And there’s entire areas of computing that we take for granted as being code free now but that used to require technical expertise.
paganel · a year ago
Django/Rails-like platforms revolutionised programming for the web, people take web frameworks for granted now but it wasn't always like that.

And PHP (the programming language) just before that, that was a huge change in "democratising" programming and making it easier, we wouldn't have had the web of the last 20-25 years without PHP.

lordnacho · a year ago
Doesn't matter. We'll spend the extra capacity by making ever more complex solutions.

Just like we did at every earlier stage.

xxs · a year ago
From what I have seen LLMs are the worst (by far) in terms of gained productivity. I'd rate the simple but type correct auto complete higher than what I get from the "AI" (code that makes little sense and/or doesn't comply)
ulfw · a year ago
Exactly what you said Andrew.

The comparisons are lacking and are almost at whataboutism level.

The amount of actual 'work' that AI does versus the tools of yesterday are an order of magnitude away

GistNoesis · a year ago
>But it can’t do the essential work of complexity management

I think this is the "closing the loop" ( https://en.wikipedia.org/wiki/Control_loop#Open-loop_and_clo... ) moment for coding AI.

All pieces are there, we just need to decide to do it. Today's AI are able to produce an increasing tangled mess of code. But it's also able to reorganize the code. It's also capable of writing test code, and assess the quality of the code. It's also capable to make architectural decision.

Today's AI code, is more like a Frankenstein's composition. But with the right prompt OODA loop and quality assessment rigor, it boils down to just having to sort and clean the junk pile faster than you produce it.

Once you have a coherent unified codebase, things get fast quickly, capabilities grows exponentially with the number of lines of code. Think of things like Julia Language or Wolfram Language.

Once you have a well written library or package, you are more than 95% there and you almost don't need AI to do the things you want to do.

qazpot · a year ago
> I think this is the "closing the loop" ( https://en.wikipedia.org/wiki/Control_loop#Open-loop_and_clo... ) moment for coding AI.

> All pieces are there, we just need to decide to do it.

Another silver bullet.

rafaelmn · a year ago
>Once you have a coherent unified codebase, things get fast quickly, capabilities grows exponentially with the number of lines of code. Think of things like Julia Language or Wolfram Language.

>Once you have a well written library or package, you are more than 95% there and you almost don't need AI to do the things you want to do.

That's an idealistic view. Packages are leaky abstractions that make assumptions for you. Even stuff like base language libraries - there are plenty of scenarios where people avoid them - they work for 9x% of cases but there are cases where they don't - and this is the most fundamental primitive in a language. Even languages are leaky abstractions with their own assumptions and implications.

And these are the abstractions we had decades of experience writing, across the entire industry, and for fairly fundamental stuff. Expecting that level of quality in higher level layers is just not realistic.

I mean just go look at ERP software (vomit warning) - and that industry is worth billions.

fxtentacle · a year ago
"AI is like having a very eager junior developer on your team"

That's a perfect summary, in my opinion. Both junior devs and AI tools tend to write buggy and overly verbose code. In both cases, you have to carefully review their code before merging, which takes time away from all the senior members of the team. But for a dedicated and loyal coworker, I'm willing to sacrifice some of my productivity to help them grow, because I know they'll help me back in the future. But current AI tools cannot learn from feedback. That means with AI, I'll be reviewing the exact same beginner's mistakes every time.

And that means time spent on proofreading AI output is mostly wasted.

lz400 · a year ago
A very eager junior developer who is supremely confident, always says yes, does trivial work in seconds but makes very critical mistakes in the difficult stuff and when you thought he was learning and improving, he forgets everything and starts from square zero again.
smallerfish · a year ago
> when you thought he was learning and improving, he forgets everything and starts from square zero again.

I'd say it's more like: every time you start a new conversation with him, it's like his first day on the job.

But also: within the span of one interaction with him, he advances from junior to senior engineer in your specific domain.

noisy_boy · a year ago
While capitulating at the slightest nudge and apologizing profusely.
hinkley · a year ago
But at least you expect them to eventually get better. AI is more like a junior developer with anterograde amnesia.
jansan · a year ago
That behavior sounds like AI to me.
FeepingCreature · a year ago
In my experience, you can sort of help them grow by including a markdown file like LESSONS.md in the repo.

The big advantage to me is it's an unexperienced junior with approximate knowledge of every API and style on the internet. It's a super junior.

tomp · a year ago
> with approximate knowledge of every API and style on the internet

Like economists, who have predicted 7 of the last 3 recessions, AI knows 17 out of 11 API calls!

koliber · a year ago
I love this idea. In the past I stored our coding style guidelines and philosophy in our wiki. Putting it into git brings it closer to where it is used. Also, it makes it more easily accessible to AI tools, which is an added bonus.
soulofmischief · a year ago
Interesting idea. I have been using a SPECIFICATION.md and TODO.md to keep my models on track. What kind of stuff do you put in LESSONS.md that can't just live in the system prompting?
andrei_says_ · a year ago
But also willing to make up nonexistent features or uses of said APIs.
mrwww · a year ago
The "eager junior" takes 1-2 days to come back with the solution, AI takes 3-4 seconds.
daemin · a year ago
Eager junior can learn and in time not be a junior.

If you stop the need of having juniors you're never going to get more experienced people.

steveBK123 · a year ago
It's interesting because it actually endangers the junior dev job market in the present.

And in the near future the mid/senior level will have no replacements as we've under-hired juniors and therefore don't have a pipeline of 5YOE/10YOE/etc devs who have learned to stop being juniors.

mtrovo · a year ago
I see it the other way, assuming these tools keep on improving you will only need junior developers as there's no point on knowing more than the basics about programming to get a job done.
Muromec · a year ago
My favorite is when I gave chatgpt a serializer function that calls a bunch of "is enabled" functions and asked to implement those according to the spec, then hit enter before adding the actual spec to the prompt.

And it happily wrote something. When I proceeded to add an actual spec he happily wrote something reasonable which couldn't work, because it assumed all 'is_something' functions can be used as guard statements. Ah oh.

shireboy · a year ago
Funny, I think it's a perfect summary, but in a positive sense. Some of the tools you can modify the prompt, or include a .md file in context to help direct it. But even without that, I don't find it a waste of time because I have lower expectations. "This just saved me 15 minutes of typing out html+css for this form, so I don't mind taking 2 minutes to review and tweak a few things."
hiddencost · a year ago
My experience is that junior devs write most of the code at a company and senior devs spend most of their time making sure the junior devs don't break anything.

Which seems to work pretty well, in my experience.

cheeseface · a year ago
That sounds like a horrible environment to work in. How’s your senior dev retention?
Muromec · a year ago
Yeah, with the catch being that junior devs then become senior devs to review the code as the accumulate feedback given by the reward function.
IshKebab · a year ago
Well the time isn't wasted - you get code! In my experience even with the added work of checking the AI's output, overall it is faster than without coding assistants.
freeqaz · a year ago
I think one of OPs points is that it is more of a boost for juniors and a "tax" for seniors. The senior engineer wouldn't open a PR without cleaning up the code; the junior can't tell the difference.
DyslexicAtheist · a year ago
> But for a dedicated and loyal coworker, I'm willing to sacrifice some of my productivity

probably the more we sacrifice of our own productivity the quicker they gain experience (and seniority) right? the only confusing thing that confused me personally in your statement was that they would have to be loyal. Isn't that something that one can only hope but must be proven over time. Meaning that at the time you trust that they turn out well you have no way of proving that they are "loyal" yet. Loyalty is nigh impossible to request upfront? I mean, ... you have to deserve it. And a lot can also go wrong on the way.

colesantiago · a year ago
"AI is like having a very eager junior developer on your team"

I think this also applies to AI having an early or intermediate senior engineer on your team.

So in effect it would be having less engineers and probably 1 or 2 at best senior engineers and the rest are guiding the AI senior engineer in the codebase.

I didn't need to hire any senior engs for a while for my SaaS and only needed good juniors for 3 months.

Everyone in the future is going have access to senior engineers building projects.

john-tells-all · a year ago
I call AIs "aggressive interns". They're fantastic, very fast, and eager... but often go off the rails or get confused. And as you noted, never learn.

Just the dialog with an AI I find instructive. Sometimes it suggests things I don't know. Often after 1-2-3 mediocre AI solutions I'll code up something that re-uses some AI code but has much better code that I write.

lwhi · a year ago
A good point, but unfortunately we're going to need to get used to the new paradigm.

The LLM costs a minute fraction of the cost of employing a human junior developer.

Deleted Comment

Deleted Comment

tempodox · a year ago
> very eager junior developer

Not only that, but one who is infected with terminal Dunning-Kruger syndrome. Of all the things that LLMs are great at, demonstrating a hopeless case of Dunning-Kruger has to be at the very top.

CharlieDigital · a year ago
For the most part, engineering interview processes haven't adapted to this yet. I think a lot of engineering orgs are kind of head in the sand about this shift.

There is a surprising lack of focus on code reviews as part of that process.

A few months back, I ran into one company (a YC company) that used code reviews as their first technical interview. Review some API code (it was missing validation, error handling, etc.), review some database code (missing indices, bad choices for ID columns, etc.), and more.

I think more companies need to rethink their interview process and focus on code reviews as AI adoption increases.

foo42 · a year ago
I worry about 2 main pitfalls for junior devs, one more tractable than the other.

Firstly there is the double edged sword of AI when learning. The easy path is to use it as a way to shortcut learning, to get the juice without the pressing, skipping the discomfort of not knowing how to do something. But that's obviously skipping the learning too. The discomfort is necessary. On the flip side, if one uses an llm as a mentor who has all the time in the world for you, you can converse with it to get a deeper understanding, to get feedback, to unearth unknown unknowns etc. So there is an opportunity for the wise and motivated to get accelerated learning if they can avoid the temptation of a crutch.

The less tractable problem is hiring. Why does a company hire junior devs? Because there is a certain proportion of work which doesn't take as much experience and would waste more senior developers time. If AI takes away the lower skill tasks previously assigned to juniors, companies will be less inclined to pay for them.

Of course if nobody invests in juniors, where will the mid and senior developers of tomorrow come from? But that's a tragedy of the commons situation, few companies will wish to invest in developers who are likely to move on before they reap the rewards.

0xDEAFBEAD · a year ago
I think the tragedy of the commons problem for juniors has already existed for some time. Previously, companies were reluctant to hire juniors because they had a tendency to leave after a year or two, once you finished training them up. AI will just make the situation a lot worse.
Vegenoid · a year ago
Another reason companies hire juniors is because they cannot find/afford seniors. The demand that stems from this reason will increase over time when companies are not hiring "enough" juniors (because if we aren't hiring juniors we aren't making more seniors, so they become increasingly scarce and expensive).

Deleted Comment

jajko · a year ago
Yes but then as all else this can easily be cyclic. Too few seniors to hire and they ask for ridiculous packages? Well lets train some of them in house, its not like the situation will explode overnight.

Weird times ahead, probably, but we will be fine, mostly.

pcwelder · a year ago
> 3. The "Trust but verify" pattern

To add on to this point, there's a huge role of validation tools in the workflow.

If AI written rust code compiles and the test cases pass, it's a huge positive signal for me, because of how strict rust compiler is.

One example I can share is

https://github.com/rusiaaman/color-parser-py

which is a python binding of rust's csscolorparser created by Claude without me touching editor or terminal. I haven't reviewed the code yet, I just ensured that test cases really passed (on github actions), installed the package and started using it directly.

aiono · a year ago
I checked the code. The code validates that values are within the range https://github.com/rusiaaman/color-parser-py/blob/ec739c80ba... but the library it wraps already does validation and a lot more checks (see range check here: https://docs.rs/csscolorparser/latest/src/csscolorparser/par...). So the code generated by AI has unnecessary checks that will never be visited.
eesmith · a year ago
You might look into why rgba_255 return a fixed-length tuple while rgba_float returns a fixed-length list.

If it's so important to test isinstance(r, int) then you should also have tests for g and b, and likely similar tests for the floats.

Is is really worthwhile to 'Convert back to ints and compare' when you know the expected rgba floats already?

tuetuopay · a year ago
The readme even confuses itself, as the example shows rgba_255 returning a list and not a tuple. Oh well, I guess Claude was confused by the conventions between Rust and Python.

Also, all the checks of "if u8 < 255" will make me not want to use this library with a 10-foot pole. It screams "ai" or "I don't know what I'm doing" so much.

fmbb · a year ago
Did you write the test cases?
User23 · a year ago
TDD is, in my opinion and based on some tentative forays, one of the areas where LLM assisted coding really shines.
pcwelder · a year ago
No everything in the repo is AI generated.
LiamPowell · a year ago
I've been saying for a while that formal verification seems like the obvious way forward here. Test cases are good but only cover a limited number of cases, whereas formal verification can cover all cases.

The biggest reason that we don't see formal verification being used more is that it takes some time to formally define the output of an algorithm and significantly more time to convince a theorem prover that your code is correct according to the pre- and post-conditions. If we can get LLMs to work well alongside formal verification tools then I think that would greatly improve their usefulness.

Here's a made up and trivial example of how I imagine this might look:

User: Write me a binary search over "type A_Type is array (Integer range <>) of Integer;"

LLM: Implementing the following:

    function Search (A : A_Type; Target : Integer) return Integer with Pre => Sorted (A) and Target in A, Post => A(Search'Result) = Target;

    First implementation:

    function Search (A : A_Type; Target : Integer) return Integer is
       Left : Integer := A'First;
       Right : Integer := A'Last;
    begin
       while Left <= Right loop
          declare
             Mid : Integer := (Left + Right) / 2;
          begin
             if A (Mid) = Target then
                return Mid;
             elsif A (Mid) < Target then
                Left := Mid + 1;
             elsif A (Mid) > Target then
                Right := Mid - 1;
             end if;
          end;
       end loop;
    end Search;
    
Compiler:

    Phase 1 of 2: generation of Global contracts ...
    Phase 2 of 2: flow analysis and proof ...
    
    wrapper.adb:12:36: medium: overflow check might fail, cannot prove lower bound for Left + Right
       12 |            Mid : Integer := (Left + Right) / 2;
          |                             ~~~~~~^~~~~~~~
      reason for check: result of addition must fit in a 32-bits machine integer
    wrapper.adb:12:45: info: division check proved
    
    wrapper.adb:14:19: medium: array index check might fail
       14 |            if A (Mid) = Target then
          |                  ^~~
      reason for check: value must be a valid index into the array
     
LLM: Looks like there's a possible overflow for very large arrays, attempting new solution...

Etc. until a valid solution is found and the result is returned to the user.

As an aside, this bug was present in Java for 9 years and would have been caught by formal verification (which admittedly was more difficult at the time): https://research.google/blog/extra-extra-read-all-about-it-n...

jillesvangurp · a year ago
The use of formal methods has historically been limited to very limited niche areas. The volume of code that is covered by formal verification is some ridiculously small percentage of the overall amount of code out there.

The reason is probably that it is too tedious/difficult and you need some rare skills to do it. And mostly the categories of bugs it eliminates are not problematic enough. Either way, the amount of people capable of writing code vastly outnumber the people capable of formally verifying that code. I know a lot of programmers without computer science backgrounds that definitely have never been exposed to any of this. I have been exposed to some of this. But that's 25 years ago. And the persons teaching me that lived out his career in academia without ever working on real code that mattered. A lot of this stuff is rather academic and esoteric.

Of course, LLMs could change this a quite a bit. A lot of programming languages are optimized for humans. Lots of programmers prefer languages that sacrifice correctness for flexibility. E.g. static typing is the simplest form of adding some formal verification to a language and a lot of scripting languages get rid of that because the verification step (aka. compilation) is somewhat tedious and so is having to spell out your intentions. Python is a good example of a language that appeals to people without a lot of formal training in programming. And some languages go the other way and are harder to use and learn because they are more strict. Rust is a good example of that. Great language. But not necessarily easy to learn.

With LLMs, I don't actually need to learn a lot of Rust in order to produce working Rust programs. I just need to be able to understand it at a high level. And I can use the LLM to explain things to me when I don't. Likewise, I imagine I could get an LLM to write detailed specifications for whatever verifiers there are and even make helpful suggestions about which ones to pick. It's not that different from documenting code or writing tests for code. Which are two things I definitely use LLMs for these days.

The point here is that LLMs could compensate for a lack of trained people that can produce formal specifications and produce larger volumes of such specifications. There's probably a lot of value in giving some existing code that treatment. The flip side here is that it's still work and it's competing with other things that people could spend time on.

That Java issue you mentioned is an example of something that wasn't noticed for 9 years; probably because it wasn't that big of a problem. The value of the fix was lowish and so is the value of preventing the problem. A lot of bugs are like that.

eru · a year ago
You might like property based testing.
javaunsafe2019 · a year ago
I already wrote on another thread already but do it again: copilot failed me for any serious task. Let it be refactoring of a bit more complex Java method or iac code. Everytime there are hidden quirks and failures that make it easier to just do it myself instead of searching for the needle for minutes…. This combined the fact that ai already hitting a wall in terms of scaling gives a good outlook what’s its predictive future seems to be: successful in the far future when we have quantum computing or the like…
mrweasel · a year ago
Personally I've been mostly avoiding using AI tools, but I have friends and colleagues who do use or have used LLMs, at least they've tried to.

Those who seems to get the best results asks for a prototype or framework for how to do something. They don't expect to use the AI generated code, it's purely there as inspiration and something they can poke at to learn about a problem.

Most seems to have a bad experience. Either the LLMs doesn't actually know much, if anything about the subject, and makes up weird stuff. A few colleagues have attempted to use LLMs for generating Terraform, or CloudFormation code, but have given up on making it work. The LLMs they've tried apparently cannot stop making up non-existing resources. SRE related code/problems anecdotally seems to do worse than actual development work, but it feel to like you still need to be a fair good developer to have much benefit from an LLM.

The wall we're hitting may be the LLMs not actually having sufficient data for a large set of problems.

skydhash · a year ago
> Those who seems to get the best results asks for a prototype or framework for how to do something.

That's what GitHub and sample projects are here for. And the examples would be working ones. No need to train a model for that.

HDThoreaun · a year ago
Ive found copilot quite good at writing tests. Describe the test, let copilot generate, review + fix up takes me around 5 minutes versus 20 or so to write them myself most of the time. Also very good at scaffolding out new features, basically an extremely quick junior as the article said.
blixt · a year ago
I see the same things as Addy, though I'm not 100% sure it's something new happening because of AI assistants. I started learning programming in the late nineties as a 9-year-old sitting at a library paying 10 NOK for an hour of internet access (the librarians were sweet and "forgot" how long I was sitting at the computer because they saw how much I was enjoying it). And I did the exact same thing described in this article: I grabbed whatever code I could that did something, didn't know how to debug it, and at best I could slightly tweak it to do something slightly different. After a few years I got better at it anyway. I started pattern matching, and through curiosity I found out what more senior developers were doing.

Maybe the fact that I was just a kid made this different, but I guess my point is that just because AI can now write you a code file in 10 seconds, doesn't mean your learning process also got faster. It may still take years to become the developer that writes well-structured code and thinks of edge cases and understands everything that is going on.

When I imagine the young people that will sit down to build their own first thing with the help of AI, I'm really excited knowing that they might actually get a lot further a lot faster than I ever could.

skydhash · a year ago
I started learning how to program around 2010. I was learning Blender and wanted to use its game engine. It was python based, so after running a few examples found on some forum, I downloaded the Python interpreter and some tutorials/book. Maybe my learning process is different, but I don't enjoy spending a day tweaking things in the hope I will get something. I much prefer getting a book on the subject and start learning how to do it instead.
blixt · a year ago
Yeah that's fair, I think everyone has their own learning style. I mostly felt a need to respond with a slightly more optimistic view on what this new technology means for juniors, in particular responding to the part that "[AI coding tools] can actually impede learning." Though to be fair to Addy, I like his advice on how to approach this, those are good tips.
ChicagoDave · a year ago
This mirrors my own experiences with Claude with one caveat.

GenAI can get deeper into a solution that consists of well known requirements. Like basic web application construction, api development, data storage, and oauth integration. GenAI can get close to 100%.

If you’re trying to build something that’s never been done before or is very complex, GenAI will only get to 50% and any attempt to continue will put you in a frustrating cycle of failure.

I’m having some further success by asking Claude to build a detailed Linear task list and tackling each task separately. To get this to work, I’ve built a file combining script and attaching these files to a Claude project. So one file might be project-client-src-components.txt and it contains all the files in my react nextjs app under that folder in a single file with full file path headers for each file.

We’ll see how deep I get before it can’t handle the codebase.

causal · a year ago
In general it can get further the better the design/interfaces are. I find that if you can define your problem with a really clean set of interfaces, it can generally implement them perfectly. Most of the real thinking work is at the interfaces anyway, so this makes sense.

But for a really tricky logic problem, accurately explaining it in English to an LLM might be less natural than just writing the code.

xxs · a year ago
>GenAI will only get to 50% and any attempt to continue

50% seems exceeding high for 'never done before'.

HDThoreaun · a year ago
Even things that have never been done before are mostly made up of tasks that have been done many times.
thiht · a year ago
> While engineers report being dramatically more productive with AI

Where are these people in real life? A few influencers or wannabes say that on Twitter or LinkedIn, but do you know actual people in real life who say they’re "dramatically more productive with AI"?

Everyone I know or talked to about AI has been very critical and rational, and has roughly the same opinion: AIs for coding (Copilot, Cursor, etc.) are useful, but not that much. They’re mostly convenient for some parts of what constitutes coding.

kraftman · a year ago
I'm one of them. I've been coding for 22 years and now I use copilot all day every day. It gets stuff wrong, but I only ask it things I expect it to do well at, and I find it easy ignore or verify the bad answers.

I've never used electron and I got a small electron project up and running considerably faster than I would have otherwise.

I did some consulting for a project written in Vue and I know React, I got a good summary of the differences in the concepts, how to layout and structure files, etc. I had to modify a PHP project that was hosting Vue and I used chatgpt to find out where to look in the project to point to where I needed to look in the code to make the changes in the code. Just this morning I needed to use git bisect but I couldnt remember the exact syntax, I could have googled it and gone through the verbose documentation, the stackoverflow reply, or a long blog post. Instead, I got exactly what I needed back in seconds. I had to develop a migration plan for another project, I already had a rough idea of what to do, but I asked chatgpt anyway because why not, it takes seconds. It came up with what I had thought of already, some things I didn't need, and some things I hadn't thought of.

thiht · a year ago
That reads to me as "slightly more productive", not "dramatically more productive"
946789987649 · a year ago
I've always been a backend developer, but started my own company about a year ago. From that, I had to become full stack and AI has helped dramatically with the learning and implementation. There's a lot of things which would have simply just taken far longer to understand or fix with just stackoverflow/google.

And that's just on the coding side, even more on the actual start up side!

marcosdumay · a year ago
Oh, I know of a handful of people that report this.

The quality of their work has gone down dramatically since they started being "faster", and it needs rewriting way more often than before LLMs existed. But they do claim they are now much faster.

andy_adams · a year ago
I do freelance/custom dev work. I continue to bid projects as if AI didn't exist. Recently (particularly since Cursor came onto the scene) I'm finding I finish projects 50-60% faster than my estimates.

It has been utterly game-changing and time-saving. I question each new bid I do: Should I assume AI will continue to help this much, and adjust my pricing?

habinero · a year ago
Yeah, it's pretty decent when you're doing the nuts and bolts scaffolding part of coding.

Something like creating an ORM database table class, where all the fields are predictable and it's just a matter of writing out the right fields in the right format.

It's also replaced the really stupid Stack Overflow queries, when Ruby and Python and Javascript have corrupted my brain and I can't remember whether it's bar.lower() or bar.lowercase() or bar.lcase() or lower(bar) or whatever.