6 ms·
I think this is where the future of coding is. It is still useful to be a coder, the more experienced the better. But you will not write or edit a lot of lines
by mg 2y ago
I think this is where the future of coding is. It is still useful to be a coder, the more experienced the better. But you will not write or edit a lot of lines anymore. You will organize the codebase in a way AI can handle it, make architectural decisions and organize the workflow around AI doing the actual coding.
The way I currently do this is that I wrote a small python file that I can start with
llmcode.py /path/to/repo
Which then offers a simple web interface at localhost:8080 where I can select the files to serialize and describe a task.
It then creates a prompt like this:
Look at the code files below and do the following:
{task_description}
Output all files that you need to change in full again,
including your changes. In the same format as I provide
the files below, that means each file starts with
filename: and ends with :filename
Under no circumstances output any other text, no additional
infos, no code formatting chars. Only the code in the
given format.
Here are the files:
somefile.py:
...code of somefile.py...
:somefile.py
someotherfile.py:
...code of someotherfile.py...
:someotherfile.py
assets/css/somestyles.css:
...code of somestyles.css...
:assets/css/somestyles.css
etc
Then llmcode.py sends it to an LLM, parses the output and writes the files back to disk.
I then look at the changes via "git diff".
It's quite fascinating. I often only make minor changes before accepting the "pull request" the llm made. Sometimes I have to make no changes at all.
- shatrov1 2y agoWould you be kind to share your script? Thanks!
- mike_hearn 2y agoThere is an open source project called Aider that does that.
- KronisLV 2y ago> You will organize the codebase in a way AI can handle it, make architectural decisions and organize the workflow around AI doing the actual coding. This might sound silly, but I feel like it has the potential of resulting in more readable code. There have been times where I split up a 300 line function just so it’s easier to feed into an LLM. Same for extracting things into smaller files and classes that individually do more limited things, so they’re easier to change. There have been times where I pay attention to the grouping of code blocks more or even leave a few comments along the way explaining the intent so LLM autocomplete would work better. I also pay more attention to naming (which does sometimes end up more Java-like but is clear, even if verbose) and try to make the code simple enough to generate tests with less manual input. Somehow when you understand the code yourself and so can your colleagues (for the most part) a lot of people won’t care that much. But when the AI tools stumble and actually start slowing you down instead of speeding you up and the readability of your code results in a more positive experience (subjectively) then suddenly it’s a no brainer.
- DJBunnies 2y agoYou could have done all that for your peers instead.
- KronisLV 2y agoI already do when it makes sense… except if you look at messy code and nobody else seems to care, there might be better things to spend your time on (some of which might involve finding an environment where people care about all of that by default). But now, to actually improve my own productivity a lot? I’ll dig in more often, even in messy legacy code. Of course, if some convoluted LoginView breaks due to refactoring gone wrong, that is still my responsibility.
- croes 2y agoThen you aren’t a coder, you are an organizer or manager
- msoad 2y agoI'm sure a few decades ago people would say that for not fiddling with actual binary to make things work.
- deleted 2y ago[deleted]
- maccard 2y agoI disagree. If I put hook a library into a framework (e.g. laminar into rails) that doesn’t make me an organizer
- croes 2y agoBut this does > You will organize the codebase in a way AI can handle it, make architectural decisions and organize the workflow around AI doing the actual coding.
- maccard 2y ago“Anyone” can implement a class that does something - the mark of a good engineer is someone who understands the context it’s going to be used in and modified , be that a one shot method, a core library function or a user facing api call that needs to be resilient against malicious inputs.
- fifilura 2y agoMany people identify themselves with being "a coder". Surely there are jobs for "coders" and will be in the future too. But not everyone writing programs today would qualify to doing the work defined as what "a coder" does. I like to be a "builder of systems" , "solver of problems". "Organizer or manager" would also fit in that description. And then what tool you use to get stuff done is not relevant.
- flessner 2y agoEven just "organizing" the code requires great amounts of knowledge and intuition from prior experiences. I am personally torn between the future of LLMs in this regard. Right now, even with Copilot, the benefit they give fundamentally depends on the coder that directs them - as you have noted. What if that's no longer true in a couple years? How would that even be different from e.g. no code tools or website builders today? In different words will handwritten code stay valuable? I personally enjoy coding so I can always keep doing it for entertainment, even if I am vastly surpassed by the machine eventually.
- maccard 2y ago> Even just "organizing" the code requires great amounts of knowledge and intuition from prior experiences. > I personally enjoy coding so I can always keep doing it for entertainment, even if I am vastly surpassed by the machine eventually. I agree with both these takes, and I think they’re far more important than wondering if hand written code is valuable. I do some DIY around the house. I can make a moderately straight cut (within tolerances for joinery use cases). A jig or circular saw makes that skill moot, but knowing I need a straight clean cut is a transferable skill. There’s also two separate skills - being able to break down and understand the problem and being able to implement the details of the problem. In trade skills we don’t expect any one person to design, analyze, estimate, build, install and decorate anything larger than a small piece of furniture and I think the same can be said of programming. It’s similar to using libraries/framesorks - there will always be people who will write shitty apps with shitty unmaintainable code - we’ve been complaining about that since I’ve been programming. Those people are going to move on from not understanding their wix websites to not understanding their AI generated code. But it’s another tool in the belt of a professional programmer
- maccard 2y agoI disagree that you won’t edit lines, but I think you’re right. At work this week I was investigating how we could auto scale our CI. I know enough Jenkins, AWS, perforce, power shell, packer, terraform, c++ to be able to do this, but having the time to implement and flesh everything out is a struggle. I asked Claude to create an AMI with our workspace preloaded on it, and a user data script that set up a perforce workspace without syncing it, all on windows, with the tools I mentioned. I had to make some small edits to the code to get it to match what I wanted but for the most part it took 2-3 days screwing around with a pretty clear concept in my head, and I had a prototype running in 30 minutes. Turns out it’s quicker to sync from perforce than it is to boot the custom AMI , but I learned that with an hour in total rather than building out more and we got to look at alternatives. That’s the future to me.
- senorrib 2y agoI don't understand what you disagreed with. The OP said > edit a lot of lines "a lot" being the keywords here.
- csmpltn 2y ago> "But you will not write or edit a lot of lines anymore" > "I wrote a small python file that I can start with" Which one is it, chief?
- jaapbadlands 2y ago> not a lot of lines > small python file They mean the same thing, chief.
- csmpltn 2y agoA lot of projects start as a "small python file", but over time will grow into large and complex beasts - as they need to handle edge cases and complexities and requirements. Extrapolating that "programming is dead" based on anecdotal experiences from a hobby weekend project is very silly, and that's the joke. Serializing an entire repository and feeding it to an LLM, and having the LLM change the code in response to specific asks, then storing the results - is not a trivial thing to implement. Think about large repositories with very long files, or repositories with a complex structure, or polyglot repositories. Projects where code and data are mixed together. Then think about security, with things like prompt injection in the source files, etc. Handling hallucinations.
- dark_star 2y agoWould you be willing to post the llm.py code? (Perhaps in a Github gist?)