I’m in my first month of a paid GitHub Copilot Pro subscription. I had great success using GPT 4.1 to translate a Haskell project into OCaml; GPT 4 saved a couple days of effort on a week-long task. (In reality, I routinely underestimate how long projects take, so I probably saved a much larger amount of time). From there it was easy to pay for the first month of Copilot ($10 USD/mo). But I quickly realized that asking Copilot to do anything was very disruptive. I don’t do well with interrupt-driven development; I have a productive mental zone that takes several minutes to enter, and asking questions to an LLM breaks that zone. So my first month of LLMs has been trimmed down to just autocomplete in VS Code. One of my current tasks is to test a home-brewed, JSON build system. And one of my tests is to download, extract and normalize uutils (Rust-ified versions of <code>ls</code>, <code>find</code>, etc.) for multiple architectures. And no surprise, I quickly found my build scripts were repeating mostly the same thing with slight variations. I start typing the first item in a JSON array: <pre><code>“get-asset-file CommonsBase_Std.Coreutils.Assets@0.2.2 -p coreutils-0.2.2-aarch64-apple-darwin.tar.gz -f coreutils.File.Darwin_arm64.tar.gz”, </code></pre> and Copilot fills out the other JSON items: <pre><code>“get-asset-file CommonsBase_Std.Coreutils.Assets@0.2.2 -p coreutils-0.2.2-x86_64-apple-darwin.tar.gz -f coreutils.File.Darwin_x86_64.tar.gz”, “get-asset-file CommonsBase_Std.Coreutils.Assets@0.2.2 -p coreutils-0.2.2-aarch64-unknown-linux-gnu.tar.gz -f coreutils.File.Linux_arm64_gnu.tar.gz”, … 6 more … </code></pre> The auto-complete was accurate; in fact, it was more accurate than I would be. It also saved me lots of typing, and as an unapologetically lazy programmer I might call that a win. But it was not a win. The repetition was the direct result of the structural deficiency with overly simple build systems: they lack looping constructs. The proper thing to do is to use a loop over a map/table/dictionary, and in my case in particular that means I must do the grunt work of integrating some small language like Lua that can do loops. Does Copilot suggest the right thing? Of course not, at least without me prompting it first. Deeper thought: Conventional next-token prediction trains LLMs to produce words, not remove words. In our childhood training to become effective communicators, we learn when producing words is necessary; we also learn brevity. And as software engineers, we learn brevity is a good thing as we reduce repetitive lines of code into a loop. My first month: I have never seen the LLM autocomplete a repetitive block of code into a simpler loop. So, I’d love to see an explicit counter-bias during training to simplify and remove words. I could ask the LLM to simplify code. That might work (though not because the model is structurally aware of how to simplify code). Regardless, if I’m going to pay for a tool to suggest things to me, I shouldn’t have to suggest code simplification to the code suggestor. I’m going to keep paying the $10 even if I don’t find auto-complete that useful. Copilot has already paid for itself. But I’m left thinking that today’s LLMs have over-indexed on the wrong objective. Thoughts?