Add to this the limited usefulness for generating code that's contextual - making some method deep inside a component tree that needs to reference a service class, and pick some dom elements to mutate etc... it requires knowledge and reasoning about the project and overall code structure.
I don't understand how folks are using it as a productivity booster, unless maybe as something like a better StackOverflow?
A few more:
- "Write a Python script with no extra dependencies which can take a list of URLs and use a HEAD request to find the size of each one and then add those all up" https://simonwillison.net/2023/Aug/3/weird-world-of-llms/#us...
- "Show me code examples of different web frameworks in Python and JavaScript and Go illustrating how HTTP routing works - in particular the problem of mapping an incoming HTTP request to some code based on both the URL path and the HTTP verb" https://til.simonwillison.net/gpt3/gpt4-api-design
- "JavaScript to prepend a <input type="checkbox"> to the first table cell in each row of a table" https://til.simonwillison.net/datasette/row-selection-protot...
- "Write applescript to loop through all of my Apple Notes and output their contents" https://til.simonwillison.net/gpt3/chatgpt-applescript
If someone on my team was doing things this unusually they’d probably be let go.
But... they're things that require research. Do you know how to loop through all of your Apple Notes using AppleScript off the top of your head?
That research isn't free: it takes time.
As someone who hasn't done much work with AppleScript before, I would guess it would take me about half an hour to figure out how to do this. But there's a risk that it might take longer.
So the sensible thing is probably not to take on that project at all! I don't care enough about solving it to invest the research time.
But the time taken to chuck a prompt through GPT-4 and then test the results to see if it works is less than a minute.
I wrote more about how this is encouraging me to be more ambitious with my projects here: https://simonwillison.net/2023/Mar/27/ai-enhanced-developmen...
I then Googled "applescript print to console" and got this: https://stackoverflow.com/questions/13653358/how-to-log-obje... ; admittedly this answer took a few minutes to read through, but the second most upvoted answer recommended using log, which your ChatGPT-developed solution (eventually) used.
This all took me < 5 minutes.
Compare them to my original transcript. They don't provide me with enough information: how do I actually run that code?
I got ChatGPT to split me out a zsh script, which caused it to show me how to use "osascript -e ".
I'm excited about using ChatGPT/GPT-4 because it takes the time I need to figure out how to do something "easy" down from half an hour to sub-5-minutes.
Also, take a look at the problems and projects simonw actually tackles.
I work in Deep Learning Research. I don't get any help at all from ChatGPT for my core job. Copilot spews gibberish, too.
I do get enough help about peripherals. Some weeks ago, I needed help with Flask and HTML deploying a model to show it to stakeholders. (I learned Flask some years ago, but not needing it regularly, I forgot enough.)
The data cleaning, preprocessing, model training, making it better than humans were the hard tasks.
Deploying a Flask app with a simple HTML frontend was the easy task. But easy != free. It would have required 2-3x more time researching how to do exactly what I needed, which I did with Copilot and ChatGPT in ~1 hr.
Programmers are paid not to bang out code, but rather to figure out the mess and crap of the existing codebase and how to selectively add one-two lines to change system's behavior and keep stability of the system.
I wouldn't expect much from them for figuring out gnarly changes in huge existing codebases (at least not yet).
But they've been actively encouraging me to write smaller, tighter tools - the good old Unix philosophy - for which they are extremely well suited.
Our existing tooling and helpers lack modularity to begin with. I'm now thinking it would be a better approach to start with having it build smaller tools and patch them together in more useful and interesting ways myself as opposed to being upset that it can't deliver complex, context aware solutions.
Still not buying into the hype that LLMs will replace all software engineers by 2030 due to thinking the nature of our work is not to write code but to solve problems, regardless of the tools we are using, but I definitely see potential productivity gains from using the tool with a different approach to what I have previously attempted.
Fair enough, but i also don't really feel this is threatening anybody's job.
* I'm always using it to munge/generated tables/csv/markdown/json - you can basically throw any copy and paste from a random PDF that's some weird gobbedlygook of tabs, spaces, newlines and get something cleanly formatted. On the one hand, it seems like a waste of computation, but on the other hand, it's way cheaper than my time and there are so many tasks that require using poorly formatted output. Even better, CI will of course write awk/sed for you if you need to do any automation.
* I'm always forgetting the syntax for named byobu sessions (it happily wrote a script to help with that) but I've also been staging some dev servers and it was able to generate the scripts to create new named session and windows, attaching/creating when necessary, handling if the processes were running, and creating the systemd units for spinning these up.
* On this same project it wrote some python scripts for managing SSH tunnels and reverse tunnels, including filtering/logging of error messages, handling jump servers, etc. This is all stuff I've done years ago (and even written lots of docs for), but it was actually way faster for ChatGPT to generate these than digging those out.
* I've been running into issues w/ some HTML5 audio output and needed to swap to websocket streaming w/ webmedia output (which I wasn't familiar with at all). ChatGPT gave me the code to swap into my FastAPI server and the frontend code I had w/o having to do any further research, great.
* I hate Docker setups, and I had issues w/ Nvidia containers and GPUs not showing up w/ my docker config. I was able pass the various error messages and get my problems fixed without spelunking/hair-pulling. Same with figuring out some cross-container network hijinx.
* There's a bunch of one-offs that I might just not have bothered doing, that I can just ask it to do as well - eg, I've previously written code for poisson distributions and the like, so I knew what to ask for, but would have been a huge PITA to dig out exactly how to do it, but took like no effort to just ask GPT4 CI to figure out a one off I just wouldn't have done otherwise: https://chat.openai.com/share/80fa7bc0-e099-4577-bad9-d026e7...
I really wanted to know what vague things OP's humans were doing, but they haven't responded to anything.
I've been reading your blog since the dark ages. Thanks for the great content over the years!
Largely I use CGPT for work that's boilerplate/LOC heavy but architecture light, things like writing first drafts of React hooks and the like. It's quite good with constraints like use typescript or use X function to do Y.
I usually give it about two goes if it goes in the wrong direction on the first try. If it seems to not conceptually understand what I'm asking I generally just write it directly rather than tinkering with prompts for 20 minutes.
I also have a couple of longer system prompts saved for converting Vue components to React using the house style and things like that using the playground.
It does fairly well for architecture, if you don't expect too many specifics. It, at least, works as a reasonable sanity check/brainstorm.
All of these LLM becomes less expert the finer resolution you take the context. Keep it high level, and you still have a relatively expert assistant.
Instead I paste the JavaScript and tell ChatGPT to add type definitions. Mostly it gets it right. If it doesn't, it gets me closer.
I don't use it for JS in general because I'm particular about how I write stuff. Though occasionally I'll lean on Copilot to fill out a utility function.
Where I have found LLM useful is in generating text. Where I used to use a thesaurus I now use LLM to find words to name things in themed UX. But it’s not great at function or variable names, it tends to pick names that look good but don’t precisely describe what something is. LLM is also great at generating text for role play.
Indeed because ChatGPT is excellent at writing text. And because I know exactly what I want to see even if I have a hard time putting it into words myself, I can easily catch the mistakes and hallucinations.
I don't get why there is so much focus on code generating AIs and so little on code analysis. Have AIs do code reviews, write tests and analyze the results, etc... LLMs are awesome at reviewing code, they are able to tell you what's unexpected. And what is unexpected has a good chance of either being a bug or some key element of the code that needs attention. I think I have seen a single article about that, out of hundreds that are about code generation.
same for SQL, if you are not familiar with SQL.
probably could be same with Splunk SPL, Kibana KQL, Prometheus PromQL, or any other DSL that you are not familiar with
I want to contribute, while being fully aware what I'm contributing with. This doesn't lend itself to that.
If it was actually a life altering tool (and it might be one day) there wouldn’t need to be an entire industry of people trying to convince everyone that with just one small trick Google doesn’t want you to know, you can quadruple your productivity.
At the very least, its a much more powerful google (dont nitpick my comparison, i realize it hallucinates). Getting the EXACT context of your question is something generalized search/articles online will NEVER give you, and you can read hundreds of pages of docs all day. This is good for certain things, but not when you want to know just a single setting or atomic piece of information. I want to get the smallest amount of accurate information very specifically to my problem, as I'm programming upwards of 10+ hours per day on my own companies as a one man show.
My search history on chat gpt includes a few things as examples:
- specific ways SOLID applies or doesn’t apply to non-OOP languages
- helping me quickly learn nuances of Lua for configuring neovim, specifically for weird syntax or things annoying to google (ie what does # mean) or what does a specific error mean within the context of the configuration
- more efficient top k algorithms than what I was building for learning purposes
- asking to break down big o complexity of certain types of sort functions and whether they differ from n log n
- helping me learn enough rust to do a bug fix Pr that was annoying me
- x vs s in neovim config for keymap modes
- figuring out why Ruby doesn’t implement descending ranges
Etc etc etc
This is repeated on like a daily basis anywhere online, and lots of people agree. All you will see are basically fake amazon review websites, or affiliate links in everything. The top 100 pages are pure garbage that they choose to favor over actual websites with real reputation.
Even for things that I've done before, it's often much easier to ask ChatGPT how to do something than to look through my projects to find how I did it previously. It might sound lazy, but if it takes me several minutes to search through various projects to find that one time I did something, why bother when I can just ask ChatGPT and know in seconds?
I will say that yes, ChatGPT can hallucinate APIs that don't exist, and that can be annoying, but even if it does it 20% of the time, it's still incredibly valuable in the time savings the other 80% of the time it does hit.
A common thing I've searched for, for instance, is the various date formatting options and types I need for managing time zones. I suppose I could sit down and learn the plethora of options, but I don't see that is information that's worth memorizing internally. Similarly, I suppose I could really internalize the complete syntax of regular expressions, but is it worth it? I've used them so many times before ChatGPT, but I've not memorized absolutely all the options available to me.
The other side of the coin is this is allowing me to make so much progress that I'm needing to even use more APIs than I would've previously. If I had done it the old way, I might only have time and energy to devote to a small number of tasks, but with ChatGPT I can "explore" more territory than I wouldn't have previously.
What tasks are you delegating to ChatGPT that were previously done by humans? Most of my input from others is regarding current information specific to the task at hand. I don't see how ChatGPT would have any idea what I'm talking about.
Do you have some specific examples you could share?