본문 바로가기
프로그래밍

프로그래밍 「 추천 편」프로그래머를 대체하는 ChatGPT?

by grapedoukan 2023. 6. 4.
728x90

AI가 일자리를 대체한다는 과대 광고와 함께 프로그래머의 작업과 AI가 현재 이러한 맥락에서 할 수 있는 일(그리고 할 수 없는 일)에 대해 [진지하고 간결하게] 이야기해 보겠습니다. 우리는 AI 과대 광고의 에코 챔버에 추가하거나 더 자세히 조사 할 수 있습니다 : 간단한 선택.

달-E

프로그래머가 아니라면이 질문은 불투명하게 시작됩니다. AI가 당신 자신이 어떻게 해야 할지 이해하지 못하는 일을 할 수 있다는 것을 '알거나' 믿는다는 것은 무엇을 의미합니까? 나는 만다린어를 할 줄 모르는데, 누군가가 할 수 있다고 주장한다면 그 능력을 어떻게 평가할 수 있겠습니까???

그럼에도 불구하고 이것은 대답이 그 이유만큼 중요하지 않은 [다른] 것입니다. AI가 프로그래머를 대체할 수 없다면 왜 그럴까요?

 

프로그래머는 어떤 일을 하나요?

프로그래머는 어떤 일을 하나요? 이것을 절대적인 보편적인 레시피로 요약하는 것은 불가능하지만 작업의 대략적이고 단순화된 개요는 다음과 같이 시작될 수 있습니다.

컨텍스트 : 우리는 새로운 / 기존 코드에 대한 원하는 솔루션 / 수정으로 시작하며, 이는 (예 : 제품 관리에 의해) 제공되거나 개발자가 구상합니다. 후자는 이 연습에 또 다른 복잡성을 추가할 수 있으므로 지금은 전자를 가정해 보겠습니다.

프로그래머 역할의 10단계

1) 원하는 새로운 (a) 용액 또는 (b) 실행 가능한 항목 목록으로의 수정에 대한 증류 및 세부 사항. (b) 기존 시스템에 대한 모드의 경우 기존 코드와 상호 종속성에 대한 신중한 조사가 필요합니다.

2) 솔루션과 관련된 기존 (a) 또는 새로운 (b) 프레임 워크에 대한 이해 또는 연구. 코드가 독자적으로 존재하는 경우는 거의 없으며, 대신 각각 API와 가정된 데이터 구조가 있는 프레임워크와 SaaS 서비스를 사용합니다. 작업에 가장 적합한 프레임 워크는 몇 가지 요인에 따라 다릅니다.

3) 새로운 코드(함수, 클래스, 데이터 구조 등)를 생성하고 (1)단계에서 증류된 목록의 각 항목에 대한 기존 코드를 수정합니다. 이 목록은 상호 의존성을 이해하기 위해 정렬되었을 것입니다.

4) 문제를 격리하기 위해 대상 방식으로 새로운/변경된 코드를 테스트합니다. 예를 들어 특정 함수를 호출하거나 새 클래스 인스턴스를 인스턴스화하고 특정 데이터를 제공하는 작업이 포함될 수 있습니다.

5) 단계 반복 (2, 3, 4) 이 반복에서 학습하면 1 단계의 세부 정보가 변경되는 것은 드문 일이 아닙니다.

이 시점까지는 항목 목록(2단계)에 대한 반복(4-1단계)이 있습니다. 이 초기 항목 목록 자체는 복잡한 시스템에 대한 더 큰 목록에서 가져올 수 있습니다. 이것은 우리가 종종 비교적 넓은 범위의 작업 내에서 일하고 있다는 것을 의미합니다.

6) 새로운/변경된 시스템을 테스트 환경에 배포합니다. 여기서는 사용자(예: 테스터)와 로그 데이터로부터 피드백을 수집합니다.

7) 단계 반복(6 및 2-4). 다시 말하지만, 이것은 1단계의 세부 정보에 대한 변경 사항을 알릴 수 있습니다.

위의 단순화된 단계와 같은 모든 테스트 단계에서는 사용자/로그 데이터 피드백을 검사하는 것이 중요합니다. 종종 우리는 우리가 구체적으로 무엇을 찾고 있는지 미리 알지 못하며 예상치 못한 결과가 일반적입니다.

8) 선택한 프레임워크에 대한 업그레이드 또는 변경. 일부 새로운 기능이나 사용 중단으로 인해 기존 프레임워크를 업그레이드해야 하는 경우가 많습니다. 이로 인해 기존 코드를 크게 변경해야 하는 경우가 있습니다.

9) 내부 데이터 구조에 대한 수정/개선. 테스트 결과 성능 향상, 운영 간소화, 새로운 기능 포함 등을 위해 내부 구조를 변경해야 하는 경우가 종종 있습니다.

아무리 많은 계획 (1 단계)에 관계없이 코드의 내부 구조를 재 작업 / 간소화 / 개선 할 수있는 위치에 있습니다. 초기 계획의 양은 이것을 막을 수 없습니다.

10) 새로운/변경된 시스템을 라이브 환경에 배포합니다. 여기서는 라이브 시스템을 업데이트합니다. 이는 다른 역할인 DevOps의 작업을 활용합니다. 초점을 맞추기 위해 이 단계는 중요한 세부 사항/합병증을 포함할 수 있으므로 더 이상 확장하지 않을 것입니다.

위의 개요는 프로그래머 간의 통신, 문서, 코드 저장소 관리, 프로그래머 간의 통신 / 설명 루프, QA, PM, 사용자와의 피드백 루프 등을 포함하지 않습니다. 프로그래머는 섬으로 혼자 일하는 경우가 거의 없습니다.

달-E

구체적인 예

여기서 우리는 우리가 노력해야 할 새로운 해결책, 즉 일련의 객관식 질문으로 사용자에게 설문 조사를 제공하는 시스템을 상상할 것입니다. 질문은 json 파일에 의해 구동되며 각 사용자의 답변은 응답 파일에 저장됩니다. 각 답변 후에 사용자는 각 옵션의 이전 답변 중 몇 퍼센트인지에 대한 그래프를 볼 수 있습니다.

이 예제는 웹 또는 앱 UI를 포함하지 않으며 다중 사용자 지속성(예: 데이터베이스)이 필요하지 않습니다. 이러한 예제의 단순성은 실제 프로그래밍 작업으로 적합하지 않지만 여기서는 관련된 단계와 인적 및 AI 리소스가 이러한 단계에 접근하는 방식을 조명하는 데 사용합니다.

입문 과정의 경우와 마찬가지로 간단한 예를 사용하여 실제 시나리오가 기하급수적으로 더 복잡해질 것임을 조명합니다.

프로그래머의 역할 1 단계

  1. 원하는 새로운 (a) 용액 또는 (b) 실행 가능한 항목 목록으로의 수정에 대한 증류 및 세부 정보.

일련의 요구 사항, 비전, 원하는 최종 상태 및 코드에서 출발하는 것은 종종 지능, 상황 별 이해 및 비전의 심각한 도약입니다. 세 번째 요소를 살펴보면 '비전'이란 무엇입니까? 프로그래머는 설명된 것으로부터 기술적 세부사항(예를 들어, 데이터 구조)을 구상하고 상상한다. 그녀는 "일련의 객관식 질문이 있는 설문 조사"를 듣고 예를 들어 Python 사전 목록을 구상합니다. 또한 비전 감각을 통해 개발자는 프로젝트 목표가 주어진 내부를 근시안적인 관점이 아닌 넓은 의미에서 생각할 수 있습니다. 말한대로 나무에서 숲을 봅니다.

평소와 같이 [GPT4] 프롬프트부터 시작하겠습니다.

단계:

실제로 프로그래머가 JSON 파일로 작업하는 방법을 알고 있다고 가정해 보겠습니다.

GPT4는 일부 Python 코드를 생성하고 questions.json 파일의 구조를 설명합니다.

즉시 우리는 GPT4가 목표에 대해 명확한 질문을 하지 않았다는 것을 알 수 있습니다. 이에 대해서는 나중에 자세히 설명합니다.

생성된 코드

GPT4 생성 코드는 다음과 같습니다.

import json
import matplotlib.pyplot as plt

class Poll:
    def __init__(self, questions_file, answers_file):
        self.questions_file = questions_file
        self.answers_file = answers_file
        self.questions = self.load_questions()
        self.answers = self.load_answers()

    def load_questions(self):
        with open(self.questions_file, 'r') as file:
            return json.load(file)

    def load_answers(self):
        try:
            with open(self.answers_file, 'r') as file:
                return json.load(file)
        except FileNotFoundError:
            return {}

    def save_answers(self):
        with open(self.answers_file, 'w') as file:
            json.dump(self.answers, file)

    def ask_question(self, question, options):
        print(question)
        for i, option in enumerate(options, start=1):
            print(f"{i}. {option}")
        answer = input("Your answer: ")
        return answer

    def update_answers(self, question, answer):
        if question not in self.answers:
            self.answers[question] = {}
        if answer not in self.answers[question]:
            self.answers[question][answer] = 0
        self.answers[question][answer] += 1

    def calculate_percentages(self, question):
        total = sum(self.answers[question].values())
        percentages = {answer: count / total * 100 for answer, count in self.answers[question].items()}
        return percentages

    def plot_results(self, question):
        percentages = self.calculate_percentages(question)
        plt.bar(range(len(percentages)), list(percentages.values()), align='center')
        plt.xticks(range(len(percentages)), list(percentages.keys()))
        plt.show()

    def run(self):
        for question, options in self.questions.items():
            answer = self.ask_question(question, options)
            self.update_answers(question, answer)
            self.save_answers()
            self.plot_results(question)

poll = Poll('questions.json', 'answers.json')
poll.run()

2회 실행 후:

이 코드는 합리적인 출발점이며 기본적인 예로서 건전한 것처럼 보입니다. 그러나 프로그래머의 작업은 코드가 처음 작성될 때 시작되고 시스템이 실제 세계와 상호 작용하기 시작하면서 흥미로워집니다.

여기서 사용되는 유일한 프레임 워크는 matplotlib 입니다. 이 경우 대안(전체 단계 #2)을 탐색하지 않지만 이는 많은 경우 개발자를 위한 몇 가지 세부 작업을 나타냅니다. 우리는 나중에 다른 프레임 워크를 시도 할 것입니다 ...

즉시 필요한 수정 및 개선 사항을 확인할 수 있습니다. 10 가지 모드를 살펴 보겠습니다.

UX 모드

  • 그래프는 x축에 답(텍스트)을 표시해야 합니다('필수' 간단한 UX 설명의 좋은 예).
  • 사용자 경험은 질문을 열거하여 개선 될 것입니다 ( '낮은 매달린 과일'의 좋은 예)
  • 일부 질문은 이전 질문에 대한 답변을 기반으로 해야 합니다('워크플로'의 간단하고 적용 가능한 예).
  • 이전 질문에 근거한 편견을 줄이기 위해 무작위 순서로 질문해야 합니다(간단한 인지 정신 변경).
  • 그래프에서 원형 차트 사용

데이터 구조 모드

  • 질문 목록이 변경되고 백분율을 계산할 때 시스템이 이러한 변경 사항을 고려해야 하는 상황 처리(내부 구조적 부조화를 생성하는 모드의 간단한 예)
  • 사용자 이름과 연결된 사용자 ID로 답변 추적(내부 상대 데이터 구조의 예) 사용자가 설문 조사를 다시 수행할 수 있지만 새 답변이 이전 답변을 덮어씁니다
  • 사용자가 설문 조사에서 나중에 제기 될 질문을 연기 ( '나중에 답변')하도록 허용합니다 ( '나중에'의 정의에 대한 설명이 필요함).
  • 사용자가 설문 조사에 참여할 언어를 선택할 수 있도록 허용(제품 디자이너가 정의하는 기본 언어 및 언어 옵션)
  • 질문에 최대 5개의 옵션이 있고 사용자의 답변이 유효한 옵션인지 확인합니다(데이터 무결성 검사의 간단한 예). 예외를 처리하는 방법은 디자인 세부 사항입니다

이러한 모드는 단순한 UX 변경에서 데이터 구조와 관련된 변경에 이르기까지 다양합니다. 이것은 매우 일반적인 예이며, 이 예의 단순성을 염두에 두고 더 정교한 프로그램에서 모드를 상상할 수 있습니다.

파트 2로 진행하기 전에 GPT4에 개선 가능성이 있다고 생각하는 것이 무엇인지 물어보겠습니다.

제안 #4, #5는 목록에 있었고 나머지는 새로운 것이며 단순함을 유지하기 위해 사용자 경험(UX)에 집중하도록 요청했습니다.

GPT4가 구조적 변경에서 무엇을 구상하는지 살펴보겠습니다.

여기서 다시 우리는 우리의 변경 사항, 특히 #3과 겹치는 부분을 볼 수 있으며 나머지는 데이터보다는 인프라 측면에서 더 '구조적'입니다.

GPT가 구상하는 데이터 구조 변경은 폴링 시스템과 관련된 수정보다 더 일반적입니다.

 
728x90