ChatGPT Isn’t as Good at Coding as We Thought::undefined

    • tenextrathrills@lemmynsfw.com
      link
      fedilink
      English
      arrow-up
      17
      arrow-down
      3
      ·
      1 year ago

      I would hate to see your code if you think ChatGPT’s code works great. I’m guessing you’ve never asked it do anything complex.

      • abhibeckert@lemmy.world
        link
        fedilink
        English
        arrow-up
        5
        arrow-down
        1
        ·
        edit-2
        1 year ago

        So this isn’t a real example, it’s just something I slapped together now as an example of how I generally use ChatGPT 4.0. In a more realistic scenario, I’d be asking more detailed questions, pasting in my existing code, and asking the AI to write smaller sections (maybe 10 lines of code at a time).

        A single chat might run for five or six hours, continuously discussing an individual task I’m working on, and I won’t just be asking it to write a bunch code. For example in this case I might spend 10 minutes hashing out the exact contents of the ‘Activity’ record (or, maybe I already did that a month ago, and I might just paste in an example). I’d also be testing the code as I go and writing some of it myself, occasionally asking questions like ‘how do I format a date as 4 Feb 2016’ in JavaScript?’ or ‘this line of code fails with X. Why?’

        In those five or six hours, I estimate I’m able to get two or three days of work done (at my level of productivity before I started paying $20/month for ChatGPT+).

        I’m also only pasting the code - ChatGPT also explains the code it outputs, and often those explanations are more useful than the actual code.

        In JavaScript write a “reserveSeat(‘A42’, ‘Adult’)” function that sends an ActivityStreams 2.0 activity to (this.apiUrl)/reserve and inform the user if it failed to be reserved

        class SeatReservationService {
          constructor(apiUrl) {
            this.apiUrl = apiUrl;
          }
        
          async reserveSeat(seatNumber, seatType) {
            // Construct an ActivityStreams 2.0 compliant JSON object
            const activity = {
              '@context': 'https://www.w3.org/ns/activitystreams',
              'type': 'Reserve',
              'actor': {
                'type': 'Person',
                'name': 'User'
              },
              'object': {
                'type': 'Seat',
                'id': seatNumber,
                'category': seatType
              }
            };
        
            try {
              // Send the activity object to the specified API endpoint using an HTTP POST request
              const response = await fetch(`${this.apiUrl}/reserve`, {
                method: 'POST',
                headers: {
                  'Content-Type': 'application/json'
                },
                body: JSON.stringify(activity)
              });
        
              // Handle the server’s response
              if (response.ok) {
                // If the request was successful, log a success message
                console.log('Seat reserved successfully.');
              } else {
                // If the server responds with a status code other than 2xx, throw an error
                throw new Error('Failed to reserve seat. Server responded with ' + response.status);
              }
            } catch (error) {
              // Inform the user if the reservation failed
              console.error('Failed to reserve seat:', error);
              alert('Failed to reserve the seat. Please try again.');
            }
          }
        }
        
        // Usage
        const service = new SeatReservationService('https://example.com/api');
        service.reserveSeat('A42', 'Adult');
        

        Write a PHP request handler that does $this->reserveSeat(‘A42’), and checks if it failed with a SeatNotAvailable exception

        class SeatNotAvailable extends Exception {
            public function __construct($message = "Seat not available", $code = 0, Exception $previous = null) {
                parent::__construct($message, $code, $previous);
            }
        }
        
        class SeatReservationService {
        
            public function reserveSeat($seatNumber) {
                // Mockup condition that the seat 'A42' is not available
                if ($seatNumber === 'A42') {
                    throw new SeatNotAvailable("Seat $seatNumber is not available.");
                }
        
                // Normally here you'd interact with a database or another kind of storage
                // to actually reserve the seat.
                // ... (reserve seat logic) ...
                
                return true;
            }
        }
        
        class SeatReservationController {
        
            private $service;
        
            public function __construct() {
                $this->service = new SeatReservationService();
            }
        
            public function handleRequest() {
                try {
                    $this->service->reserveSeat('A42');
                    echo "Seat reserved successfully.";
                } catch (SeatNotAvailable $e) {
                    echo $e->getMessage();
                }
            }
        }
        

        Write a PHPUnit test for SeatReservationController, and a Jest one for SeatReservationService

        createMock(SeatReservationService::class);
                $serviceMock->method('reserveSeat')
                            ->willReturn(true);
        
                $controller = new SeatReservationController($serviceMock);
                $this->expectOutputString("Seat reserved successfully.");
                $controller->handleRequest();
            }
        
            public function testSeatNotAvailableException() {
                $serviceMock = $this->createMock(SeatReservationService::class);
                $serviceMock->method('reserveSeat')
                            ->will($this->throwException(new SeatNotAvailable()));
        
                $controller = new SeatReservationController($serviceMock);
                $this->expectOutputString("Seat not available");
                $controller->handleRequest();
            }
        }
        
        const SeatReservationService = require('./SeatReservationService'); // Adjust the path as necessary
        
        test('reserves a seat successfully', async () => {
            const service = new SeatReservationService('https://example.com/api');
            global.fetch = jest.fn(() => 
                Promise.resolve({
                    ok: true
                })
            );
        
            await service.reserveSeat('A41', 'Adult');
            expect(fetch).toHaveBeenCalledWith(
                'https://example.com/api/reserve', 
                expect.objectContaining({
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                })
            );
        });
        
        test('fails to reserve a seat', async () => {
            const service = new SeatReservationService('https://example.com/api');
            global.fetch = jest.fn(() => 
                Promise.resolve({
                    ok: false,
                    status: 400
                })
            );
        
            global.console = { error: jest.fn(), log: jest.fn() };
        
            await service.reserveSeat('A42', 'Adult');
            expect(console.error).toHaveBeenCalledWith(
                'Failed to reserve seat:', 
                expect.any(Error)
            );
        });
        
        • TropicalDingdong@lemmy.world
          link
          fedilink
          English
          arrow-up
          5
          arrow-down
          1
          ·
          1 year ago

          In those five or six hours, I estimate I’m able to get two or three days of work done (at my level of productivity before I started paying $20/month for ChatGPT+).

          This is very comparable to the ROI I would say that I’ve been seeing for my programming work. I feel like a super hero, or a 22 year old on adderall. I know everything I need to do for any project, but between client meetings, executive meetings, business development, meetings with the product team, mentoring, the actual amount of focused time I get is so little. I can offload a huge amount of the “I know how to do this and I’ll know if you do it wrong, but please do this for me” to the machine. This past May I took on a task that would have taken a comparable person, probably 6 months, and I knocked it out in 2.5 weeks. If you already know what you are doing, ChatGPT is steroids.

    • SeymoureButtocks@lemmynsfw.com
      link
      fedilink
      English
      arrow-up
      2
      arrow-down
      2
      ·
      edit-2
      1 year ago

      This. It’s incredibly useful considering it’s age and is more useful than the ego trip that StackOverflow became. Niche topics are a struggle sure, but if you know what to ask it and to check what it says, it is an amazing coding companion.