How ChatGPT made me lazy
newbeelearn.com
newbeelearn.com
We agreed the following experiment would be interesting to both of us: We're sharing a ChatGPT Plus subscription, and I'm allowed to read the conversations he has with the model related to his learning projects. He's using it for general tech questions, but also for code analysis and code generation, bug-finding and so on.
It's been a mixed bag. On some level, his progress is faster and his productivity is higher than it would have been without the AI assistance. OTOH, the cost to this progress not having been hard-earned is pretty high, too: He takes a lot of AI-generated boilerplate for granted now without understanding it or the concepts behind it, so when the AI gets it wrong or forgets it, he is unable to notice what's missing. He also gets stumped/stuck often where he shouldn't - technically he's aware of all the constituent parts of the solution he needs, but he can't integrate the knowledge. Often he doesn't even try and just heads to ChatGPT, which can't help him, often because he doesn't know how to phrase the question correctly.
There's a lot of value to having done the legwork and having fought for every line of code and little bit of a solution that gets skipped over here in this style of the skill acquisition.
Edit: A few more details in later comment.
You guys should write an article about it covering both perspectives.
Recently my ex-employer said he fired a junior dev because he was relying too much on paid ChatGPT, without understanding the concepts.
For senior programmers its an absolute productivity boost.
It's great at this, and I use it like this a lot.
Like I know how to write the code, and exactly how I want it to be, but I faster describe that in words and let GPT4 write it out like I want it to, than to write it out myself. Even in the cases when the code isn't even boilerplate.
Sometimes the system prompts need a bit of tuning, but time spent on that tends to even out after some usage.
The velocity of task completion on tasks that are within reach of what he can figure out by "pair-programming" with the AI is very high. However, the failure modes are devastating - when he gets stuck, he gets stuck completely, which no idea what to do next. And ChatGPT can't assist with the overall development plan, or at least it's a lot harder to ask it about it. Some questions are difficult to ask without the hindsight afforded by experience.
With earlier students, pre-AI, the work got done more slowly but afforded many more little mental on-ramps for "what to do next", or at least ideas. Partly because the ability to read and browse code gets trained much more if you have to piece your solutions together via reference code and docs, vs. getting code handed to you by gen AI. If you can read/navigate a codebase more effectively, you are also more likely to be able to generate ideas what to touch next and why. Partly also because your muscle for trying things out and experimenting gets trained more if that's your only choice.
In sum, as a mentor, when a student gets stuck I usually have more to work with in the dialog that follows. Ideas to interrogate, experiments to brainstorm, assumptions to challenge. With the ChatGPT-assistent student, almost nada - I've "caught" (this is of course perfectly fair under our agreement) him leaning on ChatGPT to even have the convo with me, handing my messages/questions to the model and coming back with what it generated, asking me whether ChatGPT got it right or not. I wind up being the second opinion that corrects/checks the AI, not the student, who is mentally fairly disengaged from the process by that point.
What I'm getting out of this experiment is an idea of what kind of guidance I will need to give future mentees on how to use the AI tools appropriately for their own development.
My last semester working with students was a year ago, and we were aware that they were going to ChatGPT for things, but not really sure how to deal with it. It seems obvious that in the future these tools will play a part, but of course those of us who learned without them aren’t in a particularly good position to teach how to use them or to structure things around them. It is a temporary problem but a pretty big one, IMO.
I wonder if a school-sponsored GPT with monitoring from the teaching assistants could be part of the puzzle; it seems really neat: it sets the expectation more realistically (some AI tools will be used whatever the policy is, may as well be ours), and gives the teaching staff some insight into how the students are using it and what they are struggling with. Although, it would have to be a pretty state of the art model, you’d want the students to prefer it to their own… also, setting the expectations correctly (it isn’t authoritative, it is on you to double check it—awkward, for a school-provided tool).
Anyway, hopefully there are more folks out there like you, actively experimenting with this stuff.
That's basically the whole idea behind dogs.
"The wolves generally attacked each puzzle immediately upon release from the start box and persisted until either the problem was solved or time had run out. In contrast, the malamutes investigated puzzle boxes only until they discovered that the food was not easily accessible, after which they typically returned to the start box and performed a variety of solicitation and begging gestures toward Experimenter 1."
There's a couple others that have followed on that are kind of neat to and related. Marshall-Pescini, et al. looked at wolves and dogs ability to play shell games, recognize hidden food choices, and rationalize about whether risky choices that don't pay out are better than somewhat not preferable food pellets. Part of the result from that test was that dogs may just not care as much as wolves. That wolves with their diet and carnivore nature, have a much stronger preference toward what researchers believe is the preferable choice. Yet, from the wild dog perspective, they took a long time to have any testing preference for meat vs pellets, compared to the wolves immediate preference. [2]
Which is actually vaguely related to the topic article. You get a mediocre food pellet, but it solves the task, so you don't really care that much and move on. The "quality" of the food pellet in modern human existence has limited bearing.
[1] Frank & Frank 1985, "Comparative Manipulation Test Performance in Ten Week Old Wolves and Malamutes", https://www.researchgate.net/profile/Harry-Frank-2/publicati...
What would you expect from pupils if the teacher gave them all solutions when they ask?
How materially different is this from "copy-pasted boilerplate from an example on a website that isn't fully understood"?
I've personally found one of the biggest advantages for learning a new stack with ChatGPT is being able to say "hey, how do I modify this boilerplate for [specific piece of functionality]" or "hey, I have this code and I'm getting this error, what should I try" vs just trying to find websites with other examples of slightly-different boilerplate or trying to start from square 1 (which would often mean dedicating days or weeks to less-immediately-relevant tutorial foundation projects).
When finding and copying, you have to employ at least some degree of critical thinking. The result is rarely the first on the search results, and usually cannot be used without some adaptation. Generated solutions usually require less adaptation.
You and I have workers with vastly different frontend "engineers" in that case, especially in web agency shops where "faster implemented === better" in most cases.
Having used GPT all year myself, I quit using it to generate new code for me for the most part. Back to StackOverflow, books, and of course reading boring documentation/manuals. I'm not closed off to the idea, just that I'm very worried it could atrophy certain skills.
It definitely feels harder to do, and doing small tweaks here and there is frustrating as you have to really understand everything. I however find it quite rewarding because I feel I become much more capable as a programmer, and I rely less on third party dependencies for everything. I come up with more original solutions and become more able to combine tools to solve different problems.
Hence, depending on the domain knowledge of the piece of code you are dealing with, GPT can be very helpful in generating a good scaffolding to get off the ground quickly (i.e you want to write a web app but don't want to deal with having to learn how to write a whole react app etc.), but asking GPT to...write an optimizer for a C runtime would end up with poor results as its heavily bent on the specifics of that task where a specialists' knowledge would outweigh any abstractive advantages.
One very useful experiment I did early on was try to solve a problem with GPT where I had deep domain expertise and see where the cracks are vs in one in which I had very poor expertise. This led me to make my abstraction based statement above, and so far I've seen it remain true with every successive version.
1. Software (my code) 2. OS (Linux, kernels, etc) 3. Hardware (3090, 5090x, etc) 4. Electrical (Where is my energy coming from? how is it produced?)
Each of these levels could be broken into another 10 abstractions: On the software level, some people may understand how their compiler is working, but could they program in binary? What about understanding how their program interacts with memory? What about the kernel of where their software is deployed in the cloud? Do they know how their software is deployed in the cloud? Could they build the production server rack that their container is deployed on? Obviously this gets a bit ridiculous the further down you go- it's impossible to have knowledge about every part of what makes your code work.
I think that when people use terms like "lazy" or say that knowledge is being lost with abstractions like GPT, they ignore the massive list of abstractions that allow them to be productive.
I'd guess my thesis is that newer/GPT-aided engineers don't necessarily have less understanding, but their knowledge might just be shifted by one level up on the abstraction stack.
After a couple of back-and-forth rounds of copying and pasting error messages and sample data, I got the ChatGPT script working as a drop-in replacement. The new script is more readable, the logic is simpler, it took me less time to complete than either debugging the old script or writing a new one from scratch, and it was an overall more enjoyable experience.
There is little doubt in my mind that in the not so distant future we will gawk at the thought that humans used to write production code by hand. Sure, the artisans and the enthusiasts among us will still be around to keep the flame, but day coding will be a mostly automated endeavor.
The next generation of thinkers will be shallow and won’t be able to or won’t want to think hard about problems by themselves.
When you’re starting out, you should be doing things the hard way on purpose. Learn things the hard way, don’t look at “Learn X in Y days” type tutorials. Use simple tools. Write code by hand.
It does not, however, provide any solutions all by itself:
1. A significant amount of code it suggests uses external APIs that, while it would be nice if they existed, are purely imaginary.
2. Even when suggesting sensible code using existing APIs, it will happily provide coding snippets that have nothing in common, style-wise, with the code base you asked questions about, even if you provided sufficient context.
3. Some code will be, even if you push back, wholesale lifted from sources whose license you simply can't comply with.
4. Even the most basic coding questions, like "give me a C# function to fold SMTP headers according to the RFC" are flat-out wrong, or, best-case, woefully inefficient.
So, whenever I use ChatGPT, it's entirely to see if there's a perspective that I missed. 80% of the cases, it's just babbling nonsense, and I happily disregard those results. The remaining 20% is quite valuable, though, even if separating the wheat from the chaff definitely involves my human judgement...
Sure, here are the corrected versions of the posts:
ramon156 2 minutes ago [–]
A bad painter blames his tools.
pdyc 0 minutes ago | parent [–]
Whom does a good painter blame?They fall for stupid claims which could be easily debunked with their smartphone.
Even simple calculations aren't done.
Many people forgot how to chew and only swallow.
Like teachers complaining about students using tables or sliding rules.
Or Socrates complaining writing makes people lazy to remember facts.
Ironically, I think the greatest quality of SO is exactly what most people complain about: that sometimes when you ask how to do X, they will tell you that X is a bad idea and you should probably do Y. I've learned many more efficient ways to do what I was trying to do, good security practices, and so on, because of this culture. Whereas if you ask ChatGPT how to do X, it'll happily tell you how to do X, even if X is a bad idea. (As a bonus, it might make something up if X is impossible to do.)
Besides, ChatGPT's answers are mediocre, by the definition of the word: dead average. You'll never get some guru-level insight from ChatGPT that you would sometimes get from a particularly exceptional answer in SO.
Note: I don't mean to say that SO is perfect, there's plenty of bad answers and it has other problems too. I just think SO does more good than harm to novices who want to become better at the trade, whereas ChatGPT is downright harmful for learning.
"How Google made me lazy"
"How Internet made me lazy"
...
And so on
All of the best programmers I know do not copy code, they try to understand first, and then apply what they learned. In this way, they use ChatGPT, SO, google, etc. the same amount for copy pasting code: Pretty much not at all.
ChatGPT is like doping in sports.
If generalizations are bad, why do you immediately make one about tribal thinking (not to mention 'generalizations' itself)?
Tribal thinking isn't always bad; it's the same glue that holds families together.
I would estimate for every one I would estimate that for every person who really benefits from such instruments, there are at least 10 who simply C&P without really understanding anything.
The next step for many is to contribute and make the path easier for others. Enabling lazy people to outgrow themselves can push boundaries and drive progress
Circle of life I guess.