Skip Navigation

ChatGPT - is using it cheating?

Over the last year I've been learning Swift and starting to put together some iOS apps. I'd definitely class myself as a Swift beginner.

I'm currently building an app and today I used ChatGPT to help with a function I needed to write. I found myself wondering if somehow I was "cheating". In the past I would have used YouTube videos, online tutorials and Stack Overflow, and adapted what I found to work for my particular usage case.

Is using ChatGPT different? The fact that ChatGPT explains the code it writes and often the code still needs fettling to get it to work makes me think that it is a useful learning tool and that as long as I take the time to read the explanations given and ensure I understand what the code is doing then it's probably a good thing on balance.

I was just wondering what other people's thoughts are?

Also, as a side note, I found that chucking code I had written in to ChatGPT and asking it to comment every line was pretty successful and a. big time saver :D

54 comments
  • No, it's not cheating, but also please don't blindly trust it. Random people on the internet can be wrong too but people can at least correct them if they are. Stuff ChatGPT outputs is fresh for your eyes only.

    Edit: typo

    • Agreed. While I've never used ChatGPT on an actual project, I've tested it on theoretical problems and I've never seen it give an answer that didn't have a problem.

      So I would treat it like any answer on Stack Overflow, use it as a start, but you should definitely customize it and fix any edge cases.

      • I've never used ChatGPT (the workflow sounds tedious) but I have used GitHub copilot for personal stuff. The free ChatGPT has weird rights to your queries, whereas GH copilot doesn't snarf up your code. It genuinely saves a ton of time if you treat it like an in-line Stack Overflow query. It never gets it 100% right, but it can crap out boilerplate like nobody's business.

      • It also seems to depend a lot on how popular what you're asking about is. I asked it some questions about docker and it helped me understand some nuances between different commands in Dockerfiles that I was having trouble with. Docker is pretty widely used. I then asked it some questions about how to use the jpackage command from Gradle and it couldn't help at all.

  • Over time you'll realize Chatgpt has giant holes.

    As a developer you do use tools every day -- you probably use a rapid gui tool, you use a compiler, you use APIs, and they're things you probably couldn't build on your own. Even under MS-DOS, you're using bios or msdos interrupts. The PC also handles lot of stuff.

    So it's just another tool, and it doesn't do everything so you need to use it as one thing in your pouch. Don't rely on it too much, and be mindful of IP concerns -- ai is like a monkey with a camera legally, you can't copyright whatever it creates.

    • This! Not even 2 months ago I had a classmate be convinced that he could prompt ChatGPT to write a program that could both encrypt and then decrypt files and store the key secured. It didn't do a single one of those things so we got a long way to go until we got ChatGPT Operating Systems.

      • My favorite test for ChatGPT is to ask it to write a function to divide two numbers in 6502 assembly. Not only is there no DIV instruction to rely on, but the 6502 is very register starved, so you get a lot of screwups. Here's one example of what ChatGPT generated:

         
            
        ; Inputs:
        ; - A: dividend
        ; - X: divisor
        
        DIVISION:
            LDX #0       ; initialize quotient to 0
            CPX #0       ; check for divide-by-zero error
            BEQ DIVIDE_BY_ZERO
            CLC          ; clear carry flag
        DIV_LOOP:
            CMP X,A      ; compare divisor with dividend
            BCC DIV_DONE ; if divisor is greater, division is complete
            SEC          ; set carry flag
            ROL A        ; shift dividend left
            INX          ; increment quotient
            JMP DIV_LOOP ; continue division
        DIV_DONE:
            RTS          ; return from subroutine
        DIVIDE_BY_ZERO:
            ; handle divide-by-zero error here
            RTS
        
          

        You can see it immediately overwrites the divisor with the quotient, so this thing will always give a divide by zero error. But even if it didn't do that, CMP X,A is an invalid instruction. But even if that wasn't invalid, multiplying the dividend by two (and adding one) is nonsense.

      • I recently took an "intro to C" course at my university, despite already having some experience - they wouldn't let me test out - so I ended up helping a few of my classmates. Some had made the rookie mistake of "posting the assignment into ChatGPT and hitting enter," whereupon their faces were eaten by nasal demons.

        Here's the worst example I saw, with my comments:

         
            
        char* getName() {
            // Dollar store ass buffer
            char name[1];
        
            printf("Enter your name: ");
            // STACK GOES BOOM
            scanf("%s", name);
            
            // Returning stack-allocated data, very naughty
            return name;
        }
        
          

        Sighs

  • If you understand the code and are able to adapt it to for your needs it's no different to copy pasting from other sources, imo. It's just a time saver.

    If you get to the point where you're blindly trusting it with no ability to understand what it's doing, then you have a problem. But that applied to Stack Overflow too.

  • I wrote a fairly detailed spec for some software and told it what dependencies to use, what it should do, and what command-line options it should use. The base was a decent starting point, but after several hours of back-and-forth, after actually reading the code, I realized it had completely misinterpreted my spec somehow and implemented a similar feature in a completely broken way, as well as making a few mistakes/redundancies elsewhere. I tried to coach it to fix these issues, but it just couldn't cope.

    I spent about 3 hours getting this base code generated, and about 5 hours re-writing it and implementing the features properly. The reason I turned to ChatGPT is because I needed this software written by the end of the day, and I didn't have time to read all the different docs for the dependencies I needed to use to write it. It likely would have taken me at least 2 days to write this program myself. It was an interesting learning experience, but my only ChatGPT usage in the future is likely to be with individual code blocks.

    You really need to pay attention if you're using LLMs to generate code. I've found it usually gets at least one thing wrong, and sometimes multiple things horribly wrong. Don't rely on it; look for other sources to corroborate all of its explanations. Additionally, please do not feed proprietary, copyrighted code into ChatGPT. The software I was writing was released under a free license. OpenAI will use it as training data unless you use their API and opt out of it. ChatGPT isn't really a tool; it's a service which is using you as much as you're using it.

  • Programming pays well because it's hard. Just keep in mind that if AI is making it easy for you, it's making it easy for a lot of people who could easily replace you.

    Use it as a tool, but know what it's doing, and be able to do it yourself after you learn from it.

    Personally, I generally struggle through on my own first and then ask it to critique. Great teachers don't just give you the code to copy.

    By analogy, you need to be able to hand fly this plane when the autopilot dies; those are the pilots who get the jobs.

    • Trying yourself first seems like the best approach. There are people who recommend you not to Google the answer until you have tried all the options and looked at the official documentation as an “exercise” of problem-solving without being fed the answer, cause you won’t always have it.

      I’m in a situation like that. I currently work for a huge bank which requires a lot of custom configurations and using their own framework for a lot of stuff. So, most of the problems people have cannot be searched online as they’re company specific. I see new workers there struggle a lot because they don’t try to understand what’s wrong and just want a fed copy paste solution to make the problem go away.

      • I see new workers there struggle a lot because they don’t try to understand what’s wrong and just want a fed copy paste solution to make the problem go away.

        I see that in my students a lot, as well. I've been hammering away that the goal (in school, but frankly in general) is not actually to solve the problem. It's to learn to solve the problem. And that every experience you have, success or failure, is learning to solve problems. The 10 ways you failed to solve this problem all are solutions to other problems that you now know.

        "The expert has failed more times than the beginner has even tried."

        I fear, however, the pervasive Pride in the Craft that existed 30 years ago is now something observed only by a minority.

  • I really don't think so. You are asking it how to write a function. It explains how the function works and sometimes even how to expand on it. You still have to intergrate that function into your program yourself and tailor it to the purpouse of the program. It's far quicker than Stackoverflow giving 8 functions that don't work.

  • No, it's not cheating (unless you are using it to do your homework, I guess). It's a tool and like any other we learn how to use it appropriately.

    But one needs to be aware of other ethical concerns related to using AI generated code. The discussion revolves around companies (OpenAI, Github, etc.) training their models using the code written by people who have not consented use of their code as training data. In some cases, licensing is clear and allows for such use, but in some cases it's debatable (I'm not that much involved in those discussions, so I cannot provide more details).

    When creating software, the value we bring is the understanding of a problem and the ability to ask the correct questions that will bring us to a good solution. In simple scenarios, even a machine can do what we do and we should definitely use the machine instead of spending time on that.

  • I've never seen utilizing advancing tools as "cheating", but I can understand why purists might scoff at it. You should always be running checks and making sure everything is legit before deployment anyway, so I have a hard time seeing it as anything but Autopilot+.

  • It’s no more cheating than scrubbing through StackOverflow posts for help. Just a lot quicker.

  • It depends what you're wanting to do and what you define as 'cheating'? I'd expect you'd get better at debugging massive amounts of hallucinated code, but I don't think it'd generally improve your skills in software design/engineering/architecture. It might help you learn about breaking down software and integration though.

54 comments