Changing my relationship with GitHub Copilot
ntietz.com
ntietz.com
Bring on the version that can support my coworker's 7 year sideproject 80k line rathole of python metaprogramming and tell me how to make a small change there, bring on the version that can understand version conflicts between react, react native, and expo libraries - or even fix their shit documentation in real time.
Even if the core product of these LLMs doesn't get any better, I'm stoked to see the wrappers and fine-tunes that they produce over the next few years. Maybe I'll get to be a super TPM with a legion of little AI agents to do the things I want and I'll only have to write code when I feel like it.
I’m a product engineer at heart. I love getting products off the ground and love tackling the “hard science” kernels of value which GPT can’t help with. Everything else is just implementation and while I agree it’s necessary to know programming and databases and networking or else you’re doomed following the pied piper of LLMs, I don’t find the rote implementation to be the fun parts of what I do - I’m happy to use GPT to ease the burden.
If you let it guide your code structure or your architecture, you will end up with a mess very quickly.
But if you use it as autocomplete on Steroids, it can really speed you up.
Most of the benefits come from taking the time to write out a design or description for the function I'm writing, but sometimes ChatGPT makes useful contributions.
What an age we live in. I figure I'll be just about adapted to these tools by the time GPT-5 comes out.
https://docs.sourcegraph.com/cody/overview
I've not used the copilot like features, but asking questions has been very useful.
This is especially beneficial for harder languages like Rust. Although I will admit that Copilot did not work very well with rust a few months ago but seems to be better now.
My pet theory is that there are two kinds of (hobby) coders: those who like making things, and those who like making things. One like myself is more excited about the mental task of wrestling out the minutiae of coding. Like making types agree or implementing an algorithm. The other is more excited about the product of the labor rather than the labor itself.
For me as a person who likes writing code as a mental relaxing excercise where sketching out a set of domain types or implementing an algorithm from a textbook is the fun part, and actually seeing the result and "banging out the remainnig issues" is the part that reminds me of my day job, I think AI helpers just help me with the wrong bit. It makes me do code reviews, bug hunting and nagging. But that's already my day job...
I should add that I never do anything with lots of boilerplate (e.g. no web dev). If I ever needed to touch anything with js/html/css/containers/yaml/sql/ then the AI would probably not just be helpful but completely necessary.
ChatGPT and Copilot makes the programming experience feel like the latter. Despite me having never used any of these libraries or tools before. The code just flows out smoothly.
Copilot seems to have vacuumed up all the “quick hack to make this work” code from blogspam and bootcamp-final-project type open source repos, but I’m in an area absolutely flooded with that kind of code (typescript/react) so maybe it’s better with other kinds of code. Typescript/react is so bad now that google searches often return blog posts full of confidence and issues.
A few times it’s generated bugs that I couldn’t even catch by reading but it blows up spectacularly when scaled up even a little bit.
If I code-as-meditation or code-as-a-concept-thinking it's more like "could I make a synthesizer?" or "how do B-trees work? Could I make a simple database?". And the coding is part of figuring out how something works or if I'm capable of doing it, rather than actually getting a working synth out of it.
I just want to make, not have a thing. Given the choice of completing the first project or starting a new one, I'd rather just work to the stage that I understand that it could be done in theory, or that I could do it personally (if I invested way too much time), than actually do it.
I have been a paid AI practitioner since 1982, and everything feels different now.
I have CoPilot always on in Emacs. I use Bing/ChatGPT, ChatGPT, and Bard to bounce ideas off of and research. I used MidJourney t9 create the cover for my last book Safe For Humans AI.
I can’t imagine not having these tools handy.
Now this is certainly not a new quip: people were mistrusting even basic compilers back in the early days too. In their defense compilers tended to have a ton of bugs early on that sometimes did bite the user.
Today LLMs tackle on a much higher semantic level and we can assume the scope of it will continue to grow. Your understanding of what you do will necessarily diminish, while quality and performance of your products will take statistical nature reflecting that of neural nets.
I enjoy the process of learning and getting better. Would you get the same satisfaction from typing “landscape best quality masterpiece” into Midjourney as you would from painting it yourself?
My only real exposure to an IDE like development experience is the Google Apps Script editor and I really dislike it. Auto completion, auto indenting, it's all such a pain.
I use ChatGPT-4 all the time for coding, but I just copy and paste between 2 interfaces. I might just be an old man yelling at a cloud but having things pop up and code jump around on the screen while I'm typing just annoys the shit out of me.
Also since I code in a relatively basic vim environment I'm able to work from any SSH terminal without having to worry about setting things up in a particular way which seems like a bonus to me (except in cases where vim comes with all sorts of auto-junk enabled in which case I find myself looking for how to disable everything which I guess is the same as setting things up in a particular way ... )
Rob Pike has no color - he thinks it is juvenile.
https://groups.google.com/g/golang-nuts/c/hJHCAaiL0so/m/kG3B...
I just don’t see the utility in having a bunch of colors.
Bet. No true adult likes colors.
i switched from VSCode to CLion (for Rust) the other night and only lasted 5 minutes because i missed how alternating braces change color.
For me it's searchable local history and searchable recent locations- both jetbrains features that vscode falls flat on.
Native stack-based clipboard is up there, but there is a vscode plugin.
With those three features I can do what I think of as "fearless development" where I can just delete / change things without a second thought, easily able to undo/find old changes without needing to micro manage.
totally and absolutely bonkers.
colour is insanely helpful as a _sense_ that can aid our brains in parsing. we aren’t compilers; it’s fine to like colour and not like colour but to say there can be no benefit or, worse, that it’s juvenile is even more childish of a statement.
eh, one thing i’ve learned is smart people in one field are not universally smart, and that’s ok.
In all seriousness, it's a valid opinion. All the best programmers I know had relatively bare bones setups. I've found when I get in the habit of using IDEs are things like ChatGPT, I start to get sloppy. If the language server or whatever is tracking the logic of the code to tell you whether it will parse correctly, then you aren't using your brain as much to do it.
Syntax highlighting adds more visual information to the code to help your brain navigating it. Some people probably don't need it, but personally it helps me tremendously and I would have to have to program without it. It's like eye shortcuts.
While color for syntax highlighting is relatively new, it does date to the 1980's, , and so if it was a person it'd be middle aged by now...
Even long before that the syntactic conventions of many languages were designed to achieve much the same (e.g. different casing patterns), some of which have survived into modern languages, along with a long string of "pretty printing" tools that to format things with bold, underline, italics etc.
The only reason I didn't rely on color for highlighting much in the early 90's was that e.g. at university I often still worked on monochrome terminals.
I do understand where the author is coming from though as I have friends who have similar setups, monochrome editors with no LSP. Talking to them, I believe they are ADHD or neurotic adjacent, where if the red squiggle is not dealt with immediately, they stress about or have anxiety over it, so the author must be similar. I think they can't relate to others because most others simply don't care. Hell, I'm the same way as the author about phone notifications, as I turn most off and those I don't turn off, I feel like I must deal with immediately as well lest I be anxiously thinking about them, and yet I see so many that have dozens of notifications active. But I simply don't feel the same way about code and writing, while the author does.
Anecdotally, I've been having a blast with ChatGPT Plus with GPT 4. I can ask it interesting programming questions and it provides novel insights. The other day I was thinking of how one could make a better GraphQL type interface, and ChatGPT suggested that the query language also handle local state, ie, there is no local or server side state, it's all just state. I was curious about that and asked it more, going down the rabbit hole as to how the syntax and semantics would look. Best of all, I could do it all on my phone through their app, while I was walking or doing other things. It felt like having another senior engineer who would endlessly trade ideas with you, never tiring.
And if AI automates that one day, I will move on.
The world has enough problems to solve, so far I see no need to work on those that can be solved by machines.
This detracts me quite a bit from writing code. I don't want to supervise my junior co-developer, I want to get something done - this is why I also, like the author, enable CoPilot only selectively. On the other hand, using ChatGPT-4 (as in chat.openai.com) for creating large-ish chunks of code after discussing the general idea and refining it for a while is a god-send.
YMMV, as always.
So I make sure I know what I want to write before I hit the keyboard.
You can trigger a 'disable copilot' popup from a command, but not a full-fledged toggle. Maybe I'm missing sometime this author is using?
If I could just toggle the whole thing on and off with the press of a button, it would be more useful. Sometimes I just need to write code undisrupted.
I’ve had more luck with ChatGPT for programming help, again in situations where I was working on something unfamiliar but needed more context than provided by Copilot. Prompts like “write a Vulkan compute shader to find the max of a list of numbers” definitely got me started faster than I would be able to do on my own. Still, it’s not something I would consider fundamentally game changing.
It's like commuting by train, it count on the fact that many people share the destination. But if you start deviating and using niche languages or tasks, it's no longer viable.
I think “reading” code is my least favourite part of the job, and CoPilot means I have to spend a lot more time reading the code it generates, trying to figure out what it’s trying to do, then realising it’s wrong and I still have to write it myself. It’s rapid fire context switching.
But turning it on only when I need a second opinion seems like a better way to use it.
But anything deviating from trivial boilerplate it tends to get subtly wrong more often than not, and the code is bad too. Always end up rewriting half of it.
Been keeping it off lately, feels like in most cases I'm more productive with dumb autocomplete, because then I already know what it will suggest, saves a lot of mental bandwidth over constantly parsing irrelevant copilot noise.
> I went and found a grayscale color scheme (since I do like a small amount of visual distinction for comments) and installed it. Immediately, I felt some relief. I disabled my LSP plugin in vim, disabled rust-analyzer. More relief.
Ah, two other people who've "switched off the targeting computer". After reading so many comments on Hackernews (and hearing similar from colleagues) to the effect of "I can't live without syntax highlight/autocomplete/refactoring tools/other", I was beginning to think I was some sort of weirdo/grognard for not bothering with many of those features and becoming frustratingly distracted when working in an IDE where autocomplete is enabled.
I was thinking about comparing it to a vehicle tach, but engine sound is a pretty clear indicator of when a shift needs to happen.
Personally, when in a flow state, I can't be interrupted. Eventually, it goes away, and I return from my trance to many unanswered messages and unread emails. Hopefully, it is nothing important, but life is cruel.
Some people need quiet to focus, and some like music or the TV playing in the background. I think the need is privacy. That's why working from home is so productive.
But for large, complex projects, an IDE is indispensable. Life's too short.
No longer get pulled out of the flow because I have to look up the difference between, say, unwrap_or and map_or (rust), or how to map/reduce over a NodeList (TS, Js) or how to open a file only if it exists (python). I don't care, at this point, how it is done, I just want a "if_file_exists_open_it" or I just want to sum the numbers in the subtotal column of that HTML table. Or I just want to provide a default "free" string when shipping.cost is None etc.
For me, flow isn't writing these very language specific algorithms, it's cruising along on a stable altitude.
I try to maintain a buffer of work that I can do for several hours without an Internet connection. I keep local copies of language and API references. I try to make a self-contained local environment for the module I’m working on.
This mode of working isn’t really compatible with cloud-only tools like Copilot, of course. So far I haven’t seen enough of a reason to start changing my habits, but the day will probably come. I’m hopeful local models like Code Llama will catch up and let me keep my flight mode.
It’s an article about Copilot, yet people are commenting as if it’s an article about coding with AI tools generally.
Copilot is very intrusive and is just one of the available options.
Discovering your control over this cacaphony is an extremely satisfying experience. And, after some time, you realize that silence is the default, and that cacaphony is life and it's good that it's there, but it's also nice to leave it in the distance, a tinny-sounding speck you leave behind while you hike in the wilderness.
The dream is that you write the method names and the A.I writes the code for you.
It’s not a tool ideal for beginners; but then again, an app written by a junior will end up a maintenance nightmare whether they have Copilot or not.
The fear of this thing is so much overblown, it’s ridiculous.
Having said that, I have seen contradictory statements on how people are using these, or see themselves using these.
One is the way you mentioned, completing line or perhaps writing complete functions given a prompt. However, people, including in this thread, have talked about working in new frameworks etc. which implies to me that they are probably using copilot to generate much of the code. I have had conversation with non-Engineers (read Product Manager types), who are using it to generate code and write applications. And, that is the situation I was referring to becoming a maintenance nightmare.
The way I see it, it's just a tool. It can be great in the hands of an experienced programmer, but might become a deadly weapon in the hands of a novice.
Just the other day I used Copilot to explain the disassembly of macOS KeyboardBacklight code, so that I can turn off the keyboard lights when using Lunar’s Blackout (https://lunar.fyi/#blackout)
It even helped me generate the ObjC function signatures from assembly and use the right calling convention in Swift afterwards. It really feels like magic.
I would have no joy in writing that code, it’s mostly bridging and translation anyway. I just need it to do this thing so that people can take advantage of it.
Where I have found it helpful is in the forays into front-end LLMs more generally have enabled. I can give it a HTML template and say stuff like "can you put the menu bar on the right?" or "I'd like this in bootstrap/tailwind" and it does a pretty magical job there.
I do wish ChatGPT-4 had access to more recent data. Being stuck in 2021 is bad when you are using libraries and frameworks that move very fast.
That said, I don’t think AI companions are advanced enough to be on the same level of utility. Maybe some day, but not soon.
While the latter is intrusive to the process as it is both uncontrolled, disruptive and without benefit, the former provides contextualized information in support of the process under control of the user.
In fact, the only time I ran into trouble was when a funky install caused one particular webpack dev server to leak and eventually force me to close every chrome process that was running (vscode + chrome windows) to let the system recover the memory.