What surprised me was it knew what I wanted better than I did (for this MVP, I hadn't even considered 'reactivate' functionality - I'd have been happy just with deactivate).
So it didn't just write code I asked for, but suggested (and was right about) something it thought I might like beyond what was actually asked for.
It was my first time using CoPilot chat so perhaps it does this a lot, but it was my first time experiencing it. It challenged my thinking and improved it.
Doing nothing does not drive self improvement, I can't get stronger sitting on the couch watching videos on YouTube about weight lifting, even if I did type in the search term.
It's not like watching others lift, it's like having a sparring partner. ( A very fast, slightly stupid sparring partner...)
Coding a button isn't the part of software development that's intellectually stimulating, so I am glad we have robots to help us speed it up.
I feel like you're coming from a place of disliking chatbots and then working backwards.
Are you suggesting that you wouldn't want anyone (or anything) to suggest improvements for you because then you would not learn yourself how to improve?
There’s plenty of woodworkers that work exclusively with hand tools for the joy of it and that where a lot of programming will be a decade in the future.
Here, we investigate whether usage measurements of developer interactions with GitHub Copilot can predict perceived productivity as reported by developers.
And they use the "actual activity" to predict this perceived productivity.
It feels like how auto complete should actually work, but I haven't seen any exceptional performance from Copilot.
Like with Phind, the longer the code examples, the more errors.
But it feels a more fluid when typing boilerplate heavy code, which is nice.
Con: writing lots of boilerplate is less painful.
(So you get more boilerplate code)
The moment you work with something a bit more obscure, it just guesses.
Especially with TypeScript it's kinda funny, since IntelliSense which is right there, in the IDE, tells the truth, but is completely ignored by Copilot.
The problem I can foresee with copilot is that the scenario change you're agreeing to is that you'll type less but need to read over the code produced more - this is an effort that isn't normally necessary (typos happen but those should take a trivial time to correct) but when copilot is involved you need to proof all the code that is being generated. There is a motivation to skip this step and just accept the code was written correctly and that will inevitably lead to security problems - and there is a motivation to not correct or alter auto-filled command. If there's a multi-dimensional array and you think it semantically makes sense to iterate it over dimension a then dimension b and copilot instead goes with b as the major index then it's more likely to remain in a b major iteration - that may make code less readable or it may cause major issues down the line.
Copilot, IMO, is optimizing the least important part of development right now and it costs us more to correct it then it would to just splat out the correct code _but_ this is a similar argument to longbows vs. crossbows - hand a peasant a crossbow and they can fire a crossbow - train a peasant for 30 years and they can fire a longbow - the longbow is more powerful, but the crossbow is a clear choice in terms of RoI. It may be that today's developers will only benefit from copilot minimally since we've invested the training time in standard development practices but tomorrow's developers will eschew a lot of the algorithmic learning and still be able to deliver the majority of the value.
I think the rest of your comment already elaborates this point, but I want to highlight that language models do not reduce boilerplate, they automate it. Reducing boilerplate happens by designing simpler APIs, not by making language models interface with complex APIs for you.
I tried to migrate spring boot security configuration between major versions and Copilot was just not able to produce a failure free output no matter how long I tried (I tried to hint a lot but it didn’t help).
And in the end software engineering isn’t as much about writing code than to build systems for a certain purpose and in the first place you need to understand the needs/purpose and therefore talk with people instead of just writing code. Writing code is not difficult. Understanding you domain might be.
Pretty sure this bubble will burst and we will have a second wave in years which might be able to do it all. But not this text generation vodoo we see today.
- I have no idea how to use an API, and it is poorly documented, but I am an expert in the general problem it's trying to model
- I need to write code using this API in the next hour
- That code will only ever run 5-6 times, each by hand with an expert to look at any errors or crashes, and then will be thrown away forever
copilot is killer for this scenario. it's the most common scenario when writing machine learning research code. i think probably the people building these tools are enjoying the dogfood, maybe more than the typical end user.
Just built an ncurses python application in very little time, without knowing anything about ncurses at all
Some iterations can be frustrating and it can’t handle everything, but it saves a ton of time in getting to a productive rhythm with tools you hadn’t used before, it kinda flattens the initial learning curve, which is very nice
I'm guessing (without hard evidence) that this implies day job code-reviewed commits and weekend hobby project/side hustle/startup coding are held to different standards by the developers involved.
As others have mentioned, it's great for speeding up all the little boilerplate and other things too simple or otherwise too unrelated to the main goal.
Sometimes it almost works like rubberduck-development, by seeing what Copilot spits out, I have sometimes realized earlier than otherwise, that I missed certain components/checks that I should probably plan ahead for (eg remembering to add a convenient way to handle user profiles for a bot).
Here is the art I found about GitHub Copilot: https://gitprotect.io/blog/github-copilot-introduction-an-ai... .
Not perfect but invaluable.
It was extremely handy from an autocomplete perspective - EXCEPT it insisted on inserting triple backticks into my Rust code four out of five times
But anyway, the future is exciting.
So the speedup is likely a function of what you are doing. Application logic, high. Lower level stuff, low.
So much so that when there was an outage a few weeks ago (or maybe I had network issues on my side) the loss of it was palpable. I found myself pausing, waiting for Copilot to spit out code only to realize it wasn't going to do it. Once you've used Copilot for a while you get a good sense of what it can and can't do. When to pause and when to just keep typing. I was so used to knowing "this is a thing Copilot will do well" and waiting for it that I kept forgetting it wasn't working right now.
Even before this experience I was convinced of the usefulness of it. I've been writing code for close to 20 years and I think I'm pretty decent at it, I never take Copilot's suggestion without first understanding what it's doing but more often than not the suggestion is almost identical to what I would have written myself. Sometimes it wants to do a `.forEach` and I would prefer a `for()` loop but that's easy to fix and often writing `for(` is enough for it to re-write that part of code in the way I prefer. Those changes are often only stylistic.
In addition, it's great for code I don't write often but need something quick and dirty to test out a POC. It along with ChatGPT feel like cheating. Just yesterday we were looking into an issue where I work. We had some timing data in the logs but nothing was consuming/displaying that data. Yes, we could grep for the lines of data but we didn't have this feeding into prometheus and the effort to do that was not going to be minor.
Instead I had ChatGPT parse the log lines I had already filtered with grep and spit out CSV data ("Datetime, how many seconds something took") then I had it write an extremely basic HTML/CSS/JS file to graph the data. After checking that it was all working I hooked up the command directly in the php file that held the graph so we had "live" graphing (after a reload) of a problem we were investigating. This whole thing took well under 5 minutes.
Now I'm perfectly capable of doing everything I just outlined above but it would have taken me longer than 5 minutes just to look up and use the ChartJS syntax/api. Instead I had a tool displaying near-live data in almost no time at all.
"AI" feels like a superpower. I already know what I want to do and often I even know how to write the code to do it but LLMs let me skip the repetitive boring parts and focus on the things LLMs are not good at, my specific problem space, the specifics of my stack, etc. Only I can do that (for now at least), let the LLM spit out graphs, loops, awk commands, etc, I'll glue it all together and make it useful.
last friday i had to review 2 trash PRs that were blatantly made with ai coding assistance. hundreds of code lines for something that, by reading the doc of the library, could have been made in 5 lines. and the fantastic comments like "returns the body" over a body() function.
I admit I didn't read the whole article, but that bullet I thought was key. I totally agree. When folks yell "BuT HalliciNations!!!", I get it, but that doesn't mean that LLMs can still be a huge boon if you know how to use them and don't just trust their output blindly and yolo it into production.