I must be completely in the minority. I enjoy side projects and like the feeling of accomplishment from making something as much as anyone, but AI tools have been a real godsend. I feel reinvigorated, trying out new frameworks, building stuff I'd only sort of considered before. Maybe this is still honeymoon phase but it's been months and I'm still digging it.
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.
When you do code for fun, do you usually enjoy the coding, or seeing what you coded? I.e. when is it the most fun: when you type the code, or when you run your code?
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.
I like this theory. This explains the surprise others manifest when I tell them about my pet projects not receiving updates in months. My reasoning "they work already as expected" somehow doesn't strike any chord in them - I'm the one making things while they would fiddle constantly making things.
Yeah I guess it's depending what the goal is. When I do hobby coding in a new language then it's usually for learning. But obviously then I'm not going to be good enough to create much that is useful for anyone else (even me).
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.
There is making things, and there is making things as if you have a decade of experience in every single tool and framework and library that you’re using. The latter feels way better.
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.
This does not match my experience… Copilot produces code that I would be fine with coming from a junior, but I’ve never seen it do something more than one or two lines that doesn’t have serious issues or bad practices.
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.
I've been doing design iteration and first pass with ChatGPT-4, then me and Copilot take it from there to nearly done, and then I'll often just copy and paste back to ChatGPT to ask for review and thoughts.
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.
Yeah the only thing I don’t like about GPT-4 powered CoPilot is that its context window is too small. Same feelings here.
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.
One of my favorite aspects of coding a project from the ground up is designing the database schema, anticipating how things will need to scale. To me it's something better done first with paper and pencil. Then I'm constantly discovering the ways in which I need to reconsider parts of the data structure as I begin writing and tuning queries, figuring out where bottlenecks will be. I don't consider it "just implementation" in the way I do, like, writing UI components or user action trees. My concern is that if I didn't go through that process, mentally and on paper, but took GPT's suggestions at some turns, I would never really have the handle on the strengths and weakness of the underlying model that I have from knowing every nut and bolt. Which would likely lead to all the software I wrote on top of it being less robust than it could be.
Same for me. I am learning new software languages with a fraction of the effort that was required even just one year ago. If I don’t understand something or need help I just ask and usually I get the help I need.
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.
Copilot certainly has expanded what I feel comfortable tackling. Now, writing a simple SPA with some modern framework, is within reach for a person with very limited knowledge in JS, CSS, HTML and React.
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.
Copilot as well as chatgpt have helped me so much in learning a framework that I need to know at work. It's just amazing for entry level stuff. Of course it's not always correct but it can help so much if you already have some knowledge and can direct it into the correct path
I wonder how many programmers get their primary satisfaction from writing code versus creating the end result. I can't imagine ever gaining satisfaction from reducing productivity since the process of programming isn't that interesting to me. It's what I can do with it that motivates me. The faster and easier I get to the state of having built the thing the better. Though there are other areas where I couldn't care less about the end result and just find the process fun. I mean don't get me wrong - I can get motivated by pretty much any end result, from a big fix to a new app, but I'm always indexing on what I'm trying to do.
You don't fully understand something you didn't write.
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.
As a hobby, I could see some people treating programming like solving a puzzle, in which case tools that skip over the middle bit would be unwanted. I say that as someone who does enjoy the feeling of solving problems but who prefers to get to the solution, though:)
> I can't imagine ever gaining satisfaction from reducing productivity since the process of programming isn't that interesting to me. It's what I can do with it that motivates me. The faster and easier I get to the state of having built the thing the better.
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?
As I mentioned in the original post, there are other fields where it's flipped for me. Not with paining, not really my thing, but definitely for writing fiction it's the process of writing where all the fun is. I sometimes still write longhand
I feel the same but the work also has to be high quality. I want the end result - fast... but if it is a hairy mess then it doesn't really feel like anything real has been accomplished (other than learnings perhaps).
Yeah lik I said, I'm motivated by the end result. A low quality end result would be less motivating. But this article even talks about things like syntax highlighting and autocomplete which just lets you write the same code faster so I think its getting at something much more fundamental than work quality and related tradeoffs
I feel both sides of it. I really do want to create a well designed end product, but I also often succumb to shiny object syndrome, because, well, I want it to be well made inside and out. I'm reminded of Steve Jobs having his employees sign the inside of the motherboard because even though no one will see it, it feels good to know that you did your best, even where no one will see it.
Wow that’s fascinating - I definitely get satisfaction from writing the code itself. The end result is almost moot, it’s stringing code together to get there that I enjoy.
Ha, I thought I was the only person in the world who disliked syntax highlighting. I only use :syntax on when I can't find a parse error!
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 ... )
this feels like the _weirdest_ thing to call someone a child over. it’s akin to saying “real men don’t use umbrellas”.
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.
Real men don't write Pascal either, we write all our programs in Fortran.
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.
Yeah, it seems pretty arrogant. If anything I want more cues, not fewer.
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.
If being able to efficiently spot typos, visually parse code, and see the types of literals makes me juvenile, well, I prefer to think of it as young at heart.
Yeah, I just looked at the link in a sibling comment, and yikes that is awful. To me, that goes totally counter to what I want syntax highlighting for...
Similarly I don't use the feature. There are features I feel incredibly strongly about so I do understand the sentiment a bit.
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.
I use very very little, some keywords are bolded and strings are in blue but that is it. I absolutely hate more than that and I suspect I could do without it altogether.
Interesting article, as I feel the exact opposite. The more time I have to parse out what code does and fix bugs along with that, the less time I actually get to code. The lack of syntax highlighting is an exercise in frustration for me, it takes me 10x longer to read and therefore understand. So too with Copilot, I can now write side projects twice as fast, if not faster. That, to me, is where the real fun occurs.
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.
Interesting, I'm on the same page regarding the first paragraph of yours. And exactly because of this I dislike using Copilot, since most of the time it will provide a completion which has issues. Not necessarily bugs, but the completion does something slightly off or doesn't (or does) consider an edge case different to what is intended.
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.
If I know what I want to write, Copilot will really speed up my process of writing this. If I don't know what I want to write, ( how to structure the function, how to put the comment, etc...) then asking Copilot for suggestions is distracting.
So I make sure I know what I want to write before I hit the keyboard.
That's true, Copilot is often hit or miss but it's mostly been a hit for me, so the additional parsing of suggestions is acceptable to me as, in aggregate, it speeds up my iteration time.
I am fully with you. Coding is the act of solving a problem, figuring out an application design and iterating on it. I am satisfied if I fixed a bug, removed a bottleneck or have a new feature to show for at the end of the day.
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.
The biggest thing copilot needs is the ability to toggle it off in VSCode with a keyboard shortcut.
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 didn’t find Copilot all that useful. The only time I got any use from it was using a new library. It kind of worked for sketching out an initial attempt at using the library, at least good enough for me to get started. The code it generated was still wrong, however. For this reason, it’s actually harmful if I know what I’m doing.
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.
Yeah, I found Copilot depends on how mainstream is your environment.
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.
Intermittent fasting applied to IDE can be rather refreshing. It's similar to drinking a strong shot of espresso after daily drinking over-sweetened latte.
This mimics my experience with copilot (although not other coding tools like syntax highlighting.) Copilot can be extremely noisy and disruptive. It works best for me then I have it set up to only prompt on demand.
Good to hear it’s not just me. Syntax highlighting and old fashioned code completion are essential for me, but CoPilot is a distraction.
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.
I feel it's incredible good at boilerplate. Mapping SQL to object fields, that sort of thing.
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.
> But last week, a friend at RC noted that she doesn't use syntax highlighting and doesn't use other noisy editor plugins. I've been curious about stopping using syntax highlighting, and her reasoning really spoke to me, so I tried it.
> 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.
Comparing slack notifications and copilot is interesting, there are certainly some parallels. To me, it’s more like a horizon indicator when flying drones. I can manage without, but gonna have a hell of a time not crashing.
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.
Fun is a subjective metric. You can turn around the argument by saying it brings one joy to find new solutions to old problems with GH Copilot. And so on.
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.
For me, Copilot is a tool to keep in the flow. It handles the plumbing while I can keep my focus entirely on the larger flow.
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 mostly try to program in “flight mode”, mentally if not always literally.
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.
OP resonates. I was also using Copilot in March and it got me through some important parts of my project, the bash scripts I needed to write for setup. But it didn't do a great job on the application itself, apart from writing pretty decent comments after I wrote the code. (Which is funny, because it seems most people go the opposite direction...). Yeah it's hard to be creative in this space because of the noise, even without AI. Everyone has so many ideas and there is so much code in so many libraries and tools and it's like trying to play music that's similar to, but not the same, as something someone is playing on trumpet right beside you.
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.
Slightly off topic, but I seriously wonder if copilot/other AI coding tools are going to end up a one way street, in the sense that one would be able to write the v1 of the product, but will end up being maintenance nightmare since no one, not even the original author/ copilot-driver , would have an idea how things work and fit together.
I doubt you’ve ever really worked with Copilot on your own. It doesn’t write the entire application for you, but mostly completes the line you were about to write anyway.
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.
Yes, you're right that I have not worked with Copilot. But, I'm not afraid of it and am currently trying to run Code Llama locally. Am definitely looking forward to learn more.
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.
I quit using GC since it adds cognitive load and because it lures one into incorrect solutions. I always try to have a single focus when I work. I don't even like having multiple screens for the same reason. I do use AI for coding sometimes but then that tool is my main focus.
Some people like the process of writing code, more than the end result. I had a few months of that feeling, but nowadays it’s rarely about writing for me.
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.
Pair programming can be a productive, even fun, activity in limited situations. Now that we have the option of our pairing partner being human or AI, it sort of highlights a lot of the situations where pair programming is NOT productive, or even fun.
Copilot is generally pretty awesome. Copilot chat gives me the most frustrating experience, and seems to be following the OpenAI path of “make the models worse, so we can get more reasoning data when the user has to clarify the question 5 times”. I find I have to ask it multiple times in a row now just to get the help I needed. I would be severely at a loss without these AI tools in my day to day but I’m tired of being a Guinea pig.
I'm also on the Copilot Chat trial and I agree it's pretty weak at the moment. Good for asking random programming (or even general computer) questions, but lousy at understanding and working with my code -- which is basically what it's supposed to be there for.
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.
Before ChatGPT-4, I thought GitHub Copilot was very good. After, I think GC is brain-dead. Suggestions offered by ChatGPT-4 are far far superior. For me, GC has been more annoying than helpful lately. I may need to look into canceling the service.
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.
Do you guys get enjoyment from writing the boilerplate, integration code? I feel like the most interesting stuff is like the design of the system itself; I usually debate with ChatGPT4 on architecture, models, processes, and their tradeoffs, and then I wish all the implementation details could be filled in (by interns or copilot, which I haven't tried yet)
I do enjoy writing boilerplate code. It’s like a form of meditation for me. It allows me to think about big picture things without being distracted by running thoughts.
I cannot imagine programming without an LSP. For simple things like editing config files or yaml, sure, but anything more complex and the LSP is an essential tool. Syntax highlighting similar.
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.
Comparing syntactic highlighting to 'office noise' feels not right.
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.
Interesting article. I don't think there's one size fits all in regard to syntax highlighting and code completion tools. A lot of what's optimal might just come down to how individual brains work.
I find it equally refreshing to sometimes not use vscode and use instead helix (similar to vim). Or for projects that I’m not often contributing to, even just the IDE of gitlab/github directly.
What type of programming do you do / what languages? I've got three open 24/7 in different windows, sometimes more, and vscode behaves no differently than if I've got just the one. Total RAM usage is not exactly minimal, but still small enough I can have multiple servers running along with postgres, two chrome profiles and assorted terminals, and still have a comfortable amount of RAM left on my 16gb laptop.
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.
yadda yadda, human brain can only make "X" decisions everyday before fatiguing.... everytime copilot 'suggests' something, its a mini slice of your 'decision' energy, to ignore it and keep typing
There have been criticisms of decision fatigue which you are referring to. You might have already been aware, but it might be worth mentioning since those who disbelieve in it have been reported as better at decision-making than those who believe in it.
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.