remix logo

Hacker Remix

Using AI Generated Code Will Make You a Bad Programmer

49 points by cmpit 17 hours ago | 42 comments

artemsokolov 9 hours ago

1972: Using Anything Other Than Assembly Will Make You a Bad Programmer

1995: Using a Language with a Garbage Collector Will Make You a Bad Programmer

2024: Using AI Generated Code Will Make You a Bad Programmer

dwaltrip 8 hours ago

Generalized version: Using tool to do thing makes you bad at doing thing without tool.

I get where this is coming from and it is true sometimes (e.g. my favorite example is Google maps). But it’s quite silly to assume this for all tools and all skill sets, especially with more creative and complex skills like programming.

Wise and experienced practitioners will stay grounded in the fundamentals while judiciously adding new tools to their kit. This requires experimentation and continual learning.

The people whose skills will be impacted the most are those who didn’t have strong fundamentals in the first place, and only know the craft through that tool.

Edit: forgive my frequent edits in the 10 minutes since after initially posting

colincooke 4 hours ago

To me the issue with AI generated code, and what is different than prior innovations in software development, is that it is the the wrong abstraction (or one could argue not even an abstraction anymore).

Most of SWE (and much of engineering in general) is built on abstractions -- I use a Numpy to do math for me, React to build a UI, or Moment to do date operations. All of these libraries offer abstractions that give me high leverage on a problem in a reliable way.

The issue with the current state of AI tools for code generation is that they don't offer a reliable abstraction, instead the abstraction is the prompt/context, and the reliability can vary quite a bit.

I would feel like one hand it tied behind my back without LLM tools (I use both co-pilot and Gemini daily), however the amount of code I allow these tools to write _for_ me is quite limited. I use these tools to automate small snippets (co-pilot) or help me ideate (Gemini). I wouldn't trust them to write more than a contained function as I don't trust that it'll do what I intend.

So while I think these tools are amazing for increasing productivity, I'm still skeptical of using them at scale to write reliable software, and I'm not sure if the path we are on with them is the right one to get there.

danielmarkbruce 2 hours ago

It isn't an abstraction. Not everything is an abstraction. There is a long history of tools which are not abstractions. Linters. Static code analysis. Debuggers. Profiling tools. Autocomplete. IDEs.

morkalork 5 hours ago

Right, but having used assembler and C/C++ before has made me a better programmer, even if I choose to work with a more high level language day to day so I'm more productive.

perihelion_zero 6 hours ago

Plato: Writing will make people forgetful.

budududuroiu 5 hours ago

Copilot and AI generated code 100% has degraded code quality, judging simply by the now infamous metric about code churn in repositories shooting up after copilot was introduced.

The thing that bothers me is that your colleagues will use AI, your bosses will see it as progress, yet not realise the time saved now is going to be wasted down the road

Alifatisk 7 hours ago

This has been my concern for a while, that switching from basic autocomplete to ai generated code, copilot or switching the Cursor ide will make me stupid and forget how to write the most basic stuff without needing those tools again. I am very scared of losing my ability to write the code by myself again thanks to ai.

If it wasn't for that, I'd switch to Cursor or use copilot in a instant, because honestly, I've asked some ai tools like Claude for help a couple of times, and those has been for tasks that I know more than one would need to be involved in to complete that, but with Claude, I solved it in a couple of hours, incredible stuff!

Also, if it wasn't obvious, I am not claiming that this is the case, these are just my feelings, I would love to be convinced otherwise because then I might switch and try out the luxury QoF others are having.

viraptor 2 hours ago

> and forget how to write the most basic stuff without needing those tools again

This is a reality for some of us already - but it's not about tools. I'm working with 5+ different languages and likely between 20+ projects. I had to lookup in the docs how to (for example) lowercase a string every single time, because every language has to invent their own name/case for it. Now I'm free - just write tolower() and it gets fixed. New string array - ["foo"] and it gets fixed. etc. etc.

There's a huge number of things that are not necessary to remember, but you just do if you see them consistently every day. But now I'm free. If I ever need to do them manually again, I'll check the docs. But today I'm enjoying the time saving.

throw16180339 4 hours ago

My ChatGPT use falls into two categories:

1. Having it perform mechanical refactorings where there's no creativity involved. I'm hacking on a program that was written in the early 2000s. It predates language support for formatted IO. I had ChatGPT replace many manual string concatenations with the equivalent of sprintf. It's easy enough to test the replacements at the REPL.

2. Questions that would be unreasonable or impossibly tedious to ask a person.

Describe in detail the changes from language version X to language version Y.

Which functions in this module can be replaced by library functions or made tail recursive? This definitely misses things, but it's a good starting point for refactoring.

Is there a standard library equivalent of this function? I regularly ask it this, and have replaced a number of utility functions.

Give examples for using function.

rerdavies 1 hour ago

You might want to try Claude 3.5 Sonnet instead of Chat GPT. Claude 3.5 Sonnet seems to be a generational advance over earlier AIs like Chat GPT. I find that I can reliably uses it in cases where Chat GPT produces pure hallucinatory nonsense. I've only seen Claude hallucinate once, and that after I had incorrectly told it that its answer was wrong. It's not the only AI that does code well, but at this particular snapshot in time (Oct 2024), general concensus seems to be that it is currently the best.

It has fundamentally changed the way I write code. And I'm still exploring the boundaries of what kinds of tasks I can feed it. (45 year veteran senior programmer).

Sorry for the TLDR post, but I find it difficult to briefly make the case for why Claude 3.5 Sonnet (and other similarly modern and capable AIs) are fundamentally different from smaller and older AIs when it comes to use as a coding assistant.

I do use it for simple tedious things like "Convert an ISO date string in GMT to a std::chrono::systemclock::timepoint" (requires use of 3 generations of C/C++/Posix library functions that would take about 15 minutes of wading through bad documentation and several false starts to get right).

But have also had success with larger fragments ranging up to 100 or 200 lines of code. It still has distinct limitations (bizarre choices of functional composition, and an unpleasant predilection for hard-coded integer constants, which can be overcome with supplementary prompts. Seems to be brilliant tactically, and shows a terrifyingly broad knowledge of APIs and libraries across the the three platforms I use (android/javascript, typescript/React/MUI, C++/linux). But doesn't yet have a good sense of strategic coding (functional and class decomposition &c).And usually requires three or four supplementary prompts to get code into a state that's ready to copy and paste (and refactor some more). e.g. "Wrap that up in a class; use CamelCase for classnames, and camelCase for member names. ... &c &c.

And have also used it help me find solutions to problems that I've spent months on ("android, java: unable to connect to an IoT wi-fi hotspot without internet access when the data connection is active"; Claude:" blah blah ... use connectivityManager.bindProcessToNetwork()"!!!).

Or "C++/linux/asound library: why does this {3000 lines of code} fail to reliably recover from audio underruns".

And had some success with "find the wild memory write in this 900 line code fragment". Doesn't always work, but I've had success with it often enough that I'm going to use it lot more often.

And used it to write some substantial bash scripts that I just don't have the skills or literacy to deal with myself (long time Windows programmer, relative newcomer to linux).