[HN Gopher] Write the damn code
       ___________________________________________________________________
        
       Write the damn code
        
       Author : walterbell
       Score  : 176 points
       Date   : 2025-09-29 15:45 UTC (7 hours ago)
        
 (HTM) web link (antonz.org)
 (TXT) w3m dump (antonz.org)
        
       | manoDev wrote:
       | I use AI as a pairing buddy who can lookup APIs and algorithms
       | very quickly, or as a very smart text editor that understands
       | refactoring, DRY, etc. but I still decide the architecture and
       | write the tests. Works well for me.
       | 
       | Apparently what the article talks against is using it like
       | software factory - give it a prompt of what you want and when it
       | gets it wrong, iterate on the prompt.
       | 
       | I understand why this can be a waste of time: if programming is a
       | specification problem [1], just shifting from programming
       | language to natural language doesn't solve it.
       | 
       | 1. https://pages.cs.wisc.edu/~remzi/Naur.pdf
        
         | lukevp wrote:
         | Yes, but... The AI has way more context on our industry than
         | the raw programming language does. I can say things like "add a
         | stripe webhook processor for the purchase event" and it's gonna
         | know which library to import, how to structure the API calls,
         | the shape of the event, the database tables that people usually
         | back Stripe stuff with, idempotency concerns of the API, etc.
         | 
         | So yes you have to specify things but there's a lot more
         | implicit understanding and knowledge that can be retrieved
         | relevant to the task you're doing than a regular language would
         | have
        
           | lomase wrote:
           | Have you deployed any of those Stripe integrations to prod?
           | 
           | Can you show it to us?
        
       | bryanrasmussen wrote:
       | currently on HN's front page we have write the damn code, and
       | write the stupid code, but we don't have write the good code.
        
         | recursive wrote:
         | Good code is a hoax.
        
           | hunterpayne wrote:
           | skill issue
        
             | peterfirefly wrote:
             | git gud
        
         | kragen wrote:
         | The first five times you solve a problem, you don't know enough
         | about it to write good code for it.
        
       | tarwich wrote:
       | Yup. It's not the learning AI or prompt engineering is bad in
       | anyway. A similar writeup
       | https://news.ycombinator.com/item?id=45405177 mentions the
       | problem I see: when AI does most of the work, I have to work hard
       | to understand what AI wrote.
       | 
       | In your model, I give enough guidance to generally know what AI
       | is doing, and AI is finishing what you started.
        
       | nasretdinov wrote:
       | I kinda agree with the author -- as a person with more than
       | enough coding experience I don't get much value (and, certainly,
       | much enjoyment) from using AI to write code for me. However it's
       | invaluable when you're operating in even a slightly unfamiliar
       | environment -- essentially, by providing (usually incorrect or
       | incomplete) examples of the code that can be used to solve the
       | problem it allows to overcome the main "energy barrier" for me --
       | helping to navigate e.g. the vast standard library of a new
       | programming language, or provide idiomatic examples of how to do
       | things. I usually know _what_ I want to do, but I don't know
       | exactly the syntax to express it in a certain framework or
       | language
        
         | CraigJPerry wrote:
         | There's a product called Context7 which among other things
         | provides succinct examples of how to use an API in practice
         | (example of what it does:
         | https://context7.com/tailwindlabs/tailwindcss.com )
         | 
         | It's supposed to be consumed by LLMs to help prepare them to
         | provide better examples - maybe a newer version of a library
         | than is in the model's training data for example.
         | 
         | I've often thought rather than an MCP server of this that my
         | LLM agent can query, maybe i just want to query this high
         | signal to noise resource myself rather than trawl the
         | documentation.
         | 
         | What additional value does an LLM provide when a good
         | documentation resource exists?
        
         | dunham wrote:
         | Yeah, I don't leverage LLMs much, but I have used it to look up
         | APIs for writing vscode extensions. The code wasn't usable as-
         | is, but it gave me an example that I could turn into working
         | code - without looking up all of the individual api calls.
         | 
         | I've also used it in the past to look up windows api, since I
         | haven't coded for windows in decades. (For the equivalent of
         | pipe, fork, exec.) The generated code had a resource leak,
         | which I recognized, but it was enough to get me going. I
         | suspect stack overflow also had the answer to that one.
         | 
         | And for fun, I've had copilot generate a monad implementation
         | for a parser type in my own made-up language (similar to
         | Idris/Agda), and it got fairly close.
        
       | fusslo wrote:
       | I think about 2 months ago my company got a license for
       | Cursor/claude ai access.
       | 
       | At first it was really cool getting an understanding of what it
       | can do. It can be really powerful, especially for things like
       | refactoring.
       | 
       | Then, I found it to be in the way. First, I had to rebind the
       | auto-insert from TAB to ctrl+space because I would try tabbing
       | code over and blamo: lines inserted, resulting in more work
       | deleting them.
       | 
       | Second, I found that I'd spend more time reading the ai generated
       | autocomplete that pops up. It would pop up, I'd shift focus to
       | read what it generated, decide if it's what I want, then try to
       | remember what the hell I was typing.
       | 
       | So I turned it all off. I still have access to context aware
       | chats, but not the autocomplete thing.
       | 
       | I have found that I'm remembering more and understanding the code
       | more (shocking). I also find that I'm engaging with the code
       | more: taking more of an effort to understand the code
       | 
       | Maybe some people have the memory/attention span/ability to
       | context switch better than me. Maybe younger people more used to
       | distractions and attention stealing content.
        
         | javier2 wrote:
         | Yeah, I also have the auto complete disabled. To me its the
         | most useful when I am working in an area I know, but not the
         | details. Such as, I know cryptography, but I don't know the
         | cryptography APIs in nodejs, so Claude is very helpful when
         | writing code for that.
        
         | WesleyJohnson wrote:
         | I love Cursor and the autocomplete is so helpful, until it's
         | not. I don't know why I didn't think to rebind the hotkey for
         | that. Thank you.
        
         | gopalv wrote:
         | > I have found that I'm remembering more and understanding the
         | code more (shocking).
         | 
         | I feel like what I felt with adaptive cruise control.
         | 
         | Instead of watching my speed, I was watching traffic flow,
         | watching cars way up ahead instead.
         | 
         | The syntax part of my brain is turned off, but the "data flow"
         | part is 100% on when reading the code instead.
        
           | stouset wrote:
           | Wait, really? This is kind of surprising to me. Even without
           | adaptive cruise control, I generally spend very few brain
           | cycles paying attention to speed. My speed just varies based
           | on conditions and the traffic flow around me, and I'm
           | virtually never concerned with the number on the dial itself.
           | 
           | As a result I've never found adaptive cruise control (or
           | self-driving) to be all that big a deal for me. But hearing
           | your perspective suddenly makes me realize why it is so
           | compelling for so many others.
        
             | ryukafalz wrote:
             | That's how it should be ideally, but that can be a problem
             | depending on the infrastructure around you. In my area
             | (South Jersey) the design speed of our roads is
             | consistently much higher than the posted speed limit. This
             | leads to a lot of people consistently going much faster
             | than the posted limit, and to people internalizing the idea
             | that e.g. it's only really speeding if you're going 10+ mph
             | over the limit. Which isn't actually safe in a lot of
             | places!
             | 
             | If the design speed of your roads is a safe speed for those
             | around you then yeah that works perfectly.
        
         | hansonkd wrote:
         | I think the worst part of the autocomplete is when you actually
         | just want to tab to indent a line and it tries to autocomplete
         | something at the end of the line.
        
           | dingnuts wrote:
           | ok call me a spoiled Go programmer but I have had an allergy
           | to manually formatting code since getting used to gofmt on
           | save. I highly recommend setting up an autoformatter so you
           | can write nasty, undented code down the left margin and have
           | it snap into place when you save the file like I do, and
           | never touch tab for indent. Unless you're writing Python of
           | course haha
        
             | justinrubek wrote:
             | Format on save is my worst enemy. It may work fine for go,
             | but you'll eventually run into code where it isn't
             | formatted using the one your editor is configured for.
             | Then, you end up formatting the whole file or having to
             | remember how to disable save formatting. I check formatting
             | as a git hook on commits instead.
        
               | chatmasta wrote:
               | If you're checking it on git hooks then it's even safer
               | to have format on save. Personally I default to format on
               | save, and if I'm making a small edit to a file that is
               | formatted differently, and it would cause a messy commit
               | to format on save, then I simply "undo" and then "save
               | without formatting" in the VSCode command palette.
        
               | jvalencia wrote:
               | We have format commits so that we have separate non-logic
               | commits that don't have to be aggravated over if we find
               | files are all off.
        
               | chatmasta wrote:
               | You can also add those non-logic commits to a .git-blame-
               | ignore-revs file, and any client that supports it will
               | ignore those commits when surfacing git blame
               | annotations. I _believe_ GitHub supports this but not
               | sure. I think VSCode does...
        
         | hatefulmoron wrote:
         | I remember discussing with some coworkers a year(?) ago about
         | autocomplete vs chat, and we were basically in agreement that
         | autocomplete was the better feature of the two.
         | 
         | Since we've had Claude Code for a few months I think our
         | opinions have shifted in the opposite direction. I believe my
         | preference for autocomplete was driven by the weaknesses of
         | Chat/Agent Mode + Claude Sonnet 3.5 at the time, rather than
         | the strengths of autocomplete itself.
         | 
         | At this point, I write the code myself without any
         | autocomplete. When I want the help, Claude Code is open in a
         | terminal to lend a hand. As you mentioned, autocomplete has
         | this weird effect where instead of considering the code, you're
         | sort of subconsciously trying to figure out what the LLM is
         | trying to tell you with its suggestions, which is usually a
         | waste of time.
        
           | wongarsu wrote:
           | LSP giving us high-quality autocomplete for nearly every
           | language has made simple llm-driven autocomplete less
           | magical. Yes, it has good suggestions some of the time, but
           | it's not really revolutionary
           | 
           | On the other hand I love cursor's autocomplete
           | implementation. It doesn't just provide suggestions for the
           | current cursor location, it also provides suggestions where
           | the cursor should jump next within the file. You change a
           | function name and just press tab a couple of times to change
           | the name in the docstring and everywhere else. Granted,
           | refactoring tools have done that forever for function names,
           | but now it works for everything. And if you do something
           | repetitive it picks up on what you are doing and turns it
           | into a couple quick keypresses
           | 
           | It's still annoying sometimes
        
         | lukevp wrote:
         | Autocomplete is a totally different thing that this article
         | isn't talking about. It is referring to the loop of prompt
         | refinement which by definition means it's referring to the
         | Agent Mode type of integrations. Autocomplete has no prompting.
         | 
         | I agree autocomplete kinda gets in the way, but don't confuse
         | that with all AI coding being bad, they're 2 totally distinct
         | functions.
        
         | leptons wrote:
         | "AI" autocomplete has become a damn nuisance. It always wants
         | to second-guess what I've already done, often making it worse.
         | I try to hit escape to make it go away, but it just instantly
         | suggests yet another thing I don't want. It's cumbersome. It
         | gets in the way to an annoying extent. It's caused so many
         | problems, I am about to turn it off.
         | 
         | The only time it helps is when I have several similar lines and
         | I make a change to the first line it offers to change all the
         | rest of the lines. It's almost always correct, but sometimes it
         | is subtlety not and then I waste 5 minutes trying to figure out
         | why it didn't work only to notice the subtle bug it introduced.
         | I'm not sure how anyone thinks this is somehow better than just
         | knowing what you're doing and doing it yourself.
        
         | bogdanoff_2 wrote:
         | I totally agree with the "attention stealing".
         | 
         | What you can do is create a hotkey to toggle autocomplete on
         | and off.
        
       | zkmon wrote:
       | Precisely. That's the most optimal way to use AI code assistants
       | right now.
       | 
       | If you keep on refining the prompts, you are just eating the hype
       | that is designed to be sold to C Suite.
        
         | bityard wrote:
         | I don't care much about hype one way or the other, but I find
         | that continually asking for changes/improvements past the first
         | prompt or two almost always sends the AI off into the weeds
         | except for all of the simplest use cases.
        
           | stocksinsmocks wrote:
           | New prompts in the same session are dangerous because the
           | undesired output (including nonsense reasoning) is getting
           | put back into the context. Unless you're brainstorming and
           | need the dialogue to build up toward some solution, you are
           | much better off removing anything that is not essential to
           | the problem. If the last attempt was wrong, clear the
           | context, feed in the spec, what information it must have like
           | an error log and source, and write your instructions.
        
       | MangoCoffee wrote:
       | AI is pretty good on CRUD web app for me. I worked out a web page
       | for create something and if the next page is similar. i just told
       | AI to use the previous page as template. it cut down a lot of
       | typing.
       | 
       | AI is just another tool, use it or turn it off. it shouldn't
       | matter much to a developer.
        
       | righthand wrote:
       | IMO no one is taking even the first bit of software development
       | advice with Llms.
       | 
       | Today my teammate laughed off generating UI components to quickly
       | solve a ticket. Knowing full well no one will review the ticket
       | now that it's Llm generated and that it will probably make our
       | application slower because of the unreviewed code gets merged.
       | The consensus is that anything they make worse, they can push off
       | to fix onto me because I'm the expert on our small team. I have
       | been extremely vocal about this. However It is more important to
       | push stuff through for release and make my life miserable than
       | make sure the code is right.
       | 
       | Today I now refuse to fix anymore problems on this team and might
       | quit tomorrow. This person tells me weekly they always want to
       | spend more time writing and learning good code and then always
       | gets upset when I block a PR merge.
       | 
       | Today I realized I might hate my current job now. I think all
       | Llms have done is enabled my team to collect a pay check and
       | embrace disinterest.
        
         | OutOfHere wrote:
         | I am in the minority who agrees with you that the code should
         | be right.
         | 
         | Don't quit. Get fired instead (strictly without cause). In this
         | way you can at least collect some severance and also
         | unemployment. You will also absolve yourself of any regrets for
         | having quit. Actually, just keep doing what you're doing, and
         | you will get fired soon enough.
         | 
         | The other thing you can try is to ask for everyone to have
         | their own project that they own, and for the assigned owner be
         | fully responsible for it, so you can stop reviewing the work of
         | other people.
        
           | hunterpayne wrote:
           | This is good advice. If you quit, you don't get severance nor
           | do you get UI. If they let you go, you do.
        
         | leptons wrote:
         | _Do Not Quit_ until you have accepted an offer from another
         | job. I 'm serious. Don't do it. It's fucking hell out there
         | right now for tech jobs.
        
         | nlcs wrote:
         | Job market is currently really bad, it has never been worse.
         | Two years ago, it was almost impossible to find an expert for a
         | more specialized domain like computer vision or RTOS. Now, it's
         | impossible not to receive applications from multiple experts
         | for a single role (and that's only counting experts; senior and
         | junior software developers or architects aren't even included)
         | that isn't even a sepcialized role and at best, "just a simple"
         | senior role.
        
           | kragen wrote:
           | That's surprising! Thanks for letting us know.
        
       | wduquette wrote:
       | Unless you're solving the same old problem for the Nth time for a
       | new customer, you don't really understand the problem fully until
       | you write the code.
       | 
       | If it's a new problem, you need to write the code so that you
       | discover all the peculiar corner cases and understand them.
       | 
       | If it's the (N+M)th time, and you've been using AI to write the
       | code for the last M times, you may find you no longer understand
       | the problem.
       | 
       | Fair warning. Write the damn code.
        
       | alphazard wrote:
       | The approach of treating the LLMs like a junior engineer that is
       | uninterested in learning seems to be the best advice, and
       | correctly leverages the existing intuitions of experienced
       | engineers.
       | 
       | Spend more time on interfaces and test suites. Let the AI toil
       | away making the implementation work according to your spec. Not
       | implementing the interface is a wrong answer, not passing the
       | tests is a wrong answer.
       | 
       | If you've worked in software long enough you will have
       | encountered people who are uninterested in learning or
       | uncoachable for whatever reason. That is all of the LLMs too. If
       | the LLM doesn't get it, don't waste your time; it will probably
       | never get it. You need to try a different model or get another
       | human involved, same as you would for an incompetent _and_
       | uncoachable human.
       | 
       | As an aside: my advice to junior engineers is to show off your
       | wetware, demonstrate learning and adaptation at runtime. The
       | models can't do that yet.
        
         | giancarlostoro wrote:
         | What's really funny is, if you copy its output, and start a new
         | prompt, and ask it "From the perspective of Senior / Staff
         | level engineer, what is wrong with this code?" and you paste
         | the code you got from the LLM, it will trash all over its own
         | code with a fresh mind. Technically you can do it in the
         | existing prompt, but sometimes LLMs get a bug up their butts
         | about what they've decided is reality all of a sudden.
         | 
         | When switching context in any way, I start a new prompt.
        
           | lomase wrote:
           | I never use LLMs but what happens if you use the same code
           | and write:
           | 
           | "From the perspective of Senior / Staff level engineer, what
           | is good about this code"
           | 
           | Does it praise it?
        
             | giancarlostoro wrote:
             | Probably points out the bits it got correct I suppose.
        
             | svieira wrote:
             | "This is a clever usage of the too--little--used plus
             | operator to perform high performance addition"
        
               | jeffrallen wrote:
               | You're absolutely right! /s
        
           | mierz00 wrote:
           | I do this to code I have personally written as well.
           | 
           | Taking a step back and reviewing all my changes gives a
           | different perspective and often find things I didn't see when
           | in the weeds.
        
       | pkdpic wrote:
       | > Ask AI for an initial version and then refactor it to match
       | your expectations.
       | 
       | > Write the initial version yourself and ask AI to review and
       | improve it.
       | 
       | > Write the critical parts and ask AI to do the rest.
       | 
       | > Write an outline of the code and ask AI to fill the missing
       | parts.
       | 
       | So well put. I'm writing these on a post it note and putting it
       | above my monitor. I held off on using agents to generate code for
       | a long time and finally was forced to really make use of them and
       | this is so in line with my experience.
       | 
       | My biggest surprises have been how much the model _doesn 't_ seem
       | to matter (?) when I'm making the prompts appropriately narrow.
       | Also surprised at how hard it is to pair program in something
       | like cursor. If your prompting is even slightly off it seems like
       | it can go from 10xing a build process to making it a complete
       | waste of time with nothing to show but spaghetti code at the end.
       | 
       | Anyway long live the revolution, glad this was so technically on
       | point and not just a no-ai rant (love those too tho).
        
       | g42gregory wrote:
       | Yes, you could write the code yourself, but keep in mind that
       | this activity is going away for most engineers (but not for all)
       | in 1 - 2 years.
       | 
       | I think a better advice would be to learn reading/reviewing an
       | inordinate amount of code, very fast. Also heavy focus on
       | patterns, extremely detailed SDLC processes, TDD, DDD, debugging,
       | QA, security reviews, etc...
       | 
       | Kinda the opposite advice from the blog. :-)
       | 
       | Edit: Somebody pointed out that, in order to read/review code,
       | you have to write it. Very true. It brings a questions of how do
       | you acquire/extend your skills in the age of AI-coding
       | assistance? Not sure I have an answer. Claude Code now has
       | /output-style: Learning, which forces you to write part of the
       | code. That's a good start.
        
         | rileymichael wrote:
         | > keep in mind that this activity is going away for most
         | engineers (but not for all) in 1 - 2 years
         | 
         | sure thing. we've been '6 months' away from AI taking our jobs
         | for years now
        
           | g42gregory wrote:
           | Not saying AI will take anybody's job. It's just that the
           | nature of the job is changing, and we have to acknowledge
           | that. Will still be competitive. Will still require strong
           | SE/CS knowledge and skills. Will still require/favor CS/EE
           | degrees, which NVIDIA CEO told us not to get anymore. :-)
           | 
           | Also, it looks like the OpenAI and Anthropic has completed
           | their fundraising cycles. So the AGI "has been cancelled" for
           | now. :-)
        
         | kragen wrote:
         | Nobody has any idea what will happen in 1-2 years. Will AI
         | still be just as incompetent at writing code as it is today?
         | Will AI wipe out biological humanity? Nobody has any idea.
        
           | g42gregory wrote:
           | Very true. One thing we could do it to take a
           | positive/constructive view of the future and drive towards
           | it. People can all lose their jobs, OR we could write 1,000x
           | more software. Let's give corporate developers tools to write
           | 1,000x more software, instead of buying it from the outside
           | vendors, as a way of example.
        
             | kragen wrote:
             | It might work!
        
         | mhuffman wrote:
         | >Yes, you could write the code yourself, but keep in mind that
         | this activity is going away for most engineers (but not for
         | all) in 1 - 2 years.
         | 
         | I'm not saying that it definitely isn't going to happen, but
         | there is a loooong way to go for non-FAANG medium and small
         | companies to let their livelihoods ride on AI completely.
         | 
         | >I think a better advice would be to learn reading/reviewing an
         | inordinate amount of code, very fast. Also heavy focus on
         | patterns, extremely detailed SDLC processes, TDD, DDD,
         | debugging, QA, security reviews, etc...
         | 
         | If we get to a point in 1-2 years where AI is vibe-coding at a
         | high mostly error-free level, what makes you think that it
         | couldn't review code as well?
        
           | g42gregory wrote:
           | I can't see into the future, but I think that AI, at any
           | level, will not excuse people from the need to acquire top
           | professional skills. Software engineers will need to know
           | Software Engineering and CS, AI or not. Marketers will have
           | to understand marketing, AI or not. And so on... I could be
           | wrong, but that's what I think.
           | 
           | AI-assistance is a multiplier, not an addition. If you have
           | zero understanding before AI, you will get zero capabilities
           | with AI.
        
       | dayvster wrote:
       | Yes! I could not agree more with this sentiment.
       | 
       | We over-analyse, over discuss, over plan and over optimize before
       | we even write the first import or include.
       | 
       | Some of my best ideas came to me as I was busy programming away
       | at my vision. There's almost a zen like state there
        
       | econ wrote:
       | Write the code, deploy.
       | 
       | the end
        
       | larodi wrote:
       | Blessings, brother, but this insight will never get through to
       | the masses. I can bet about it, so no rage.
        
       | 0x696C6961 wrote:
       | This is exactly how I work and I feel like the tools don't
       | accomodate this workflow. I shouldn't have to tell the agent to
       | explicitly re-read the a file after every edit.
        
       | arthurjj wrote:
       | "Two prompts and then do it yourself" is a pretty good heuristic.
       | Last year I was simulating a boardgame [1] and wasted ~1 hour
       | trying to get ChatGPT to solve a basic coding combinatorics
       | problem. I needed a method in python to generate all possible
       | hand decisions a player could make. I couldn't make it understand
       | that certain choices were equivalent
       | 
       | [1] https://arthur-johnston.com/paths_of_civ_tech_tree/
        
       | NewEntryHN wrote:
       | What's up with the "prompt refinement" business? Are folks trying
       | to get it right with one shot?
       | 
       | My experience is that treating the generated code as a Merge
       | Request on which you submit comment for correction (and then
       | again for the next round) works fairly well.
       | 
       | Because the AI is bad you get more rounds than in a real code
       | review, but because the AI is fast and in your command each round
       | is way faster than with a code review with a human (< 10 minutes
       | feedback loop).
        
       ___________________________________________________________________
       (page generated 2025-09-29 23:01 UTC)