LLM 기반 프로그래밍: 아, 정말요?

Feb 26 2023
제가 되고 싶은 만큼 저는 컴퓨터 과학 학자가 아닙니다. 별말씀을요.

제가 되고 싶은 만큼 저는 컴퓨터 과학 학자가 아닙니다. 별말씀을요.

그래도 나는 다른 길을 택했다.

저는 25년 동안 컴퓨터 프로그램을 읽고, 쓰고, 변경하고, 디버깅하는 데 많은 시간을 보냈습니다. 이 기간 동안 저는 데이터 처리에서 기술 학위를 취득하고 컴퓨터 과학 학부 과정에서 3년 이상(4학년 중퇴 전, 졸업 전 한 학기 정도) 공부했습니다. 영양학 학사 학위를 취득한 후 데이터 과학 및 빅 데이터 대학원 학위를 취득했습니다.

지난 25년 동안 제 자신을 교육하기 위한 정직한 노력으로 책, 기사, 블로그 등을 꽤 많이 읽었을 것입니다. 그럼에도 불구하고 나는 내 전문 분야, 즉 인터넷용 소프트웨어 시스템 설계 이외의 의견을 제시하기에는 교육 수준이 너무 낮다고 생각합니다.

그래서 나는 항상 나보다 더 잘 아는 사람들을 찾는다. 그래서 나는 인터넷에서 공짜로 나 자신을 부끄럽게 여기지 않는다. 멋지지 않을 수도 있지만 지적으로 정직합니다. 내가 할게요.

LLM 과대 광고

최근에 LLM(대형 언어 모델, 예: GPT-3 ) 주제, 특히 ChatGPT 에 대한 과대 광고가 있었습니다 . 그것에 대해 듣지 못한 당신은 바위 아래에서 살고 있음에 틀림 없습니다. 이것은 어디에나 있습니다. 사람들은 그것에 대해 그들의 마음을 놀라게하고 있습니다. 일부는 사랑하고, 일부는 미워하고, 그 사이의 모든 것 같아요.

나 여기있어.

데이터 과학 분야에서 대학원 학위를 받았지만 LLM 전문가와는 거리가 멀었습니다. 멀리 멀리. 인간의 눈에 보이지도 않습니다. 그래서 그것에 대한 나의 생각은 수년에 걸친 나의 관찰과 소프트웨어 엔지니어로서의 실제 경험의 상당 부분을 기반으로 합니다. 소금 한알과 함께 섭취하십시오.

나는 그것에 대해 어떻게 생각합니까?

프로그래머 도구 상자에서 편리한 도구가 될 수 있다고 생각합니다. Google과 스택 오버플로가 있으므로 거기에 두십시오. 그게 다야. 그렇게 간단합니다.

https://commoncog.com/content/images/2018/12/Paper.Commonplace.37.png

이 주장에 대해 좀 더 자세히 설명하겠습니다.

처음 프로그래밍을 시작했을 때 책과 잡지를 사거나 학교와 공공 도서관에서 빌려야 했습니다. 또한 직장에서 Clipper에 대해 많은 것을 가르쳐준 좋은 친구가 있었고 그게 전부였습니다. 그런 다음 온라인 토론 포럼(예: GUJ )을 발견했습니다. 그러다가 사용자 그룹 회의(예: SouJava ) 에 대해 알게 되었고 참석했습니다 . 그리고 Stack Overflow, GitHub , 그리고 인터넷에 도처에 있는 수많은 기술 콘텐츠가 있었습니다. ⎼ 제가 무슨 말을 하는지 아실 겁니다. 가장 난해한 프로그래밍 언어가 무엇이든 간에 Google만 있으면 됩니다.

그것들은 건물의 벽돌처럼 서로를 합산하고 있었습니다. 아니면 마천루라고 해야 할까요? 그림을 이동.

어쨌든 내가 말하려는 것은 Stack Overflow(또는 오히려 Google에서 포인트 앤 클릭)에서 무엇이든 검색할 수 있지만 블로그를 읽고 YouTube에서 모든 종류의 흥미로운 대화를 볼 수 있다는 것입니다. , 등등, 나는 여전히 책을 사서 읽습니다. 한 가지가 다른 것을 배제하지 않습니다.

LLM 도구에도 동일한 사항이 적용됩니다.

교육 우선 프로그래머 되기

저는 여기서 한 가지 지적하고 싶습니다. 저는 "양질의" 교육을 굳게 믿습니다. 그리고 그것은 정규 대학 과정에 참석하고 "살이 많은" 책을 읽는 것을 의미합니다.

21세기의 페니실린인 양 부트캠프, 초간단 동영상강좌, 나노컨텐츠 등이 쏟아지는 요즘 대중적인 의견이 아니라는 걸 알지만 솔직히 덜 신경쓰일 정도는 아니었다. 시간의 시험을 통과하는 지식을 굳히려면 강력한 교육이 필요합니다. 그러니 시간을 갖고, 열심히 일하고, 빠른 튜토리얼을 통과하고, 스스로 교육을 받으세요.

얕은 지식만으로는 스택 오버플로 답변이 옳은지 그른지 분별하지 못할 수도 있습니다. 그리고 그것이 옳다면, 그리고 그것이 예상대로 작동한다면, 왜 그렇게 되는지. 이 경우 작동하지 않으면 어떻게 하시겠습니까? 시행 착오 광고 구역질 , 맞죠? 그것은 우리에게 명백한 사실을 가져다줍니다.

사무실에서 항상 질문을 하고 모든 정보를 씹어먹어서 땀 한 방울 흘리지 않고 삼키려는 그 남자/여자를 좋아하는 사람은 아무도 없습니다. 나는 확실히하지 않습니다.

복사 및 붙여넣기 기반 프로그래밍은 적어도 인터넷을 통해 검색하는 대부분의 컴퓨팅 문제에 대한 후보 솔루션을 찾을 수 있었기 때문에 꽤 오랫동안 있었습니다 . 이것은 새로운 것이 아닙니다. 사람들은 오랫동안 이 일을 해왔습니다. 오픈 소스 소프트웨어와 강력한 검색 엔진의 출현 이후 훨씬 더. 그리고 인터넷에서 코드를 복사하여 붙여넣는 것은 잘못된 것이 아닙니다. 아무것도 아님. 글쎄, 적어도 그렇게 될 때까지는.

결국, 여기저기서 작은 코드 스니펫, 우리에게 익숙하지 않거나 아직 사용하지 않았거나 빠르게 시작하는 API의 샘플 사용법을 복사하여 붙여넣을 수 있습니다. 우리 모두는 그렇게 해왔고 앞으로도 그렇게 할 것입니다. (Regex? Cron? 그래, 나는 당신을 느낀다.) 그러나 우리가 프로그래밍과 소프트웨어 설계에 대한 견고한 기반을 가지고 있지 않다면, 우리가 하고 있는 일을 이해하는 데 시간을 들이지 않는다면, 우리는 결국 좌절하게 될 것입니다. 시행 착오의 루프. 설상가상으로 여러분, 우리 소프트웨어에서 찾기 힘든 버그, 성능 문제 및 보안 취약점을 도입하게 될 것입니다 ⎼ 그런데 대부분의 경우 우리 소프트웨어가 아니라 고용주의 소프트웨어입니다. 그것에 대해 잠시 생각해보십시오.

소프트웨어 개발에는 SQL 쿼리 작성, API 엔드포인트 구축, 모바일 앱에서 원격 서비스 호출, 깊이 우선 검색 코딩보다 훨씬 더 많은 일이 있습니다. 완벽한 소프트웨어 솔루션은 그 이상으로 구성됩니다. 하나의 분야인 소프트웨어 엔지니어링이 이에 대해 우려하고 있습니다. 따라서 여기서 내 요점은, 당신이 무엇을 요청해야 할지 모른다면 어떤 종류의 대답을 얻을 것이라고 생각합니까? 그리고 귀하의 특정 사례에 대한 정답을 식별할 수 있습니까?

쓰레기가 들어가면 쓰레기가 나온다는 말이 있듯이

Stack Overflow에 대한 답변을 읽을 때 찾고 있는 것이 무엇인지 확신하고 합리적으로 주장하는 것이 좋습니다. ⎼ 정크 콘텐츠도 많이 있습니다. "쓰레기"라는 라벨이 붙지 않습니다. 그런 다음 일부 코드 스니펫을 있는 그대로 복사하여 붙여넣거나 빌드된 솔루션을 기반으로 고유한 솔루션을 작성하기로 결정하기 전에 원래 질문의 모든 컨텍스트와 제공된 답변을 고려하고 여기저기서 쓰레기를 건너뛰어야 합니다. 지식 ⎼ 예를 들어 해결하려는 특정 문제는 특정 엣지 케이스를 소유합니다. 그리고 바로 이 일이 계속해서 당신에게 지식을 더할 것입니다.

우리가 어디로 가는지 봅니까? 여기 내 요점이 보이나요? ChatGPT가 어떻게 함정이 될 수 있는지 보십니까? 물어보면 답을 얻습니다. 프로그래밍에 대한 폭 넓고 탄탄한 지식이 없으면 자기도 모르는 사이에 절대 말장난을 사게 될 정도로 자신 있는 대답. 나는 트위터 등에서 친구들과 꽤 많이 보았습니다. 널리 알려진 알고리즘으로도 가능합니다.

따라서 이 "훨씬 더 많은 것"은 우리가 (기본 외에) 관심을 가져야 하는 것이고 우리가 집중해야 하는 것입니다 (기본이 제자리에 있는 경우). 또 다른 무자비한 사실이 있습니다.

우리는 우리가 모르는 것을 모릅니다. 그리고 그것에 대해 우리가 할 수 있는 유일한 일은 새로운 지식을 습득하는 것입니다 .

소프트웨어 아키텍처의 기초, Mark Richards & Neal Ford

이렇게 하면 우리가 찾고 있는 것이 무엇인지 알 수 있고 답을 찾았을 때 적어도 답을 파악할 수 있기를 바랍니다.

- 폭 넓은 지식은 답을 찾는 방향을 제시합니다.
- 깊은 지식은 우리가 찾은 답을 식별하는 데 도움이 됩니다.

좋아요. 시원한. 하지만 어떻게 해야 할까요?

알아야 할 정보에 대한 지식을 넓히려면 블로그와 YouTube 동영상이 훌륭하다고 생각합니다. 땀 흘리지 않고 매일 소비할 수 있는 짧은 콘텐츠입니다. 그러나 깊이 있고 견고한 지식을 위해서는 제 생각(N=1)에서 책과 공식 문서를 읽는 것보다 더 좋은 것은 없습니다. 그리고 할 수 있다면, 아직 하지 않았다면 대학 과정(그에 따라 대학원 또는 대학원 과정)에 자리를 잡습니다(물리적 또는 온라인).

다시 말하지만 대중적인 의견은 아닙니다. 하지만 나 자신도 인기가 없는데 누가 신경 쓰겠어?

LLM 도구 입력

그럼에도 불구하고 저는 인기 없는 의견이 몇 가지 있습니다. 저는 이 의견이 널리 퍼질 것이라고 생각합니다. LLM은 확실한 지식을 얻는 데 도움이 되는 멋진 도구일 수 있습니다. 방법 것입니다? 방법을 알려드리겠습니다.

예를 들어 모바일 앱 개발에 대해 알아야 할 사항을 ChatGPT에 묻는 것으로 시작하십시오. 그런 다음 큰 그림을 볼 수 있도록 짧은 자습서와 YouTube 비디오를 요청하십시오. 다음으로 이에 대한 추천 도서 및 강의를 요청하십시오. 궁극적으로 당신은 당신이 공부하고 있는 주제에 대한 확고한 이해를 얻기 위해 다른 관점을 가진 다른 저자의 여러 깊이 있는 기사를 읽고 싶기 때문입니다.

그것은 한 가지입니다. 도움이 될 수 있는 또 다른 점은 책을 읽다가 주어진 필수 주제에 대한 지식 부족으로 막힐 때입니다. 계속 진행하기 전에 기반을 확보할 수 있도록 ChatGPT에 해당 주제를 요약해 달라고 요청하세요. Google에서 하는 것과 동일한 작업으로 하나 또는 두 개의 소스를 읽지만 신속하고 정확하게 요점을 파악할 수 있습니다. 그러나 나중에 공부하고 있는 일반적인 문제에 중요한 것이면 해당 주제에 대해 계속해서 깊이 들어가십시오. 그렇게 해도 괜찮습니다.

그리고 매우 유용할 수 있는 또 다른 상황은 주어진 도메인에 대한 소프트웨어 응용 프로그램을 개발하는 동안 모든 기능에 익숙하지 않은 경우입니다. 나는 다른 날 그것을 보았고 그것이 상당히 똑똑하다는 것을 알았습니다.

피트니스 모바일 앱을 개발한다고 가정해 보겠습니다. 피트니스에 관심이 있고 사람들이 건강해지고 모든 것을 돕는 아이디어에 매우 흥분되기 때문입니다. 좋아요. 하지만 거기에 있는 모든 앱, 가장 사랑받는 기능, 수익 창출 방법 등을 알 수는 없습니다. 이는 매우 객관적인 질문입니다. 따라서 ChatGPT에 이러한 질문을 하여 신속하게 시작할 수 있습니다. 앱 요구 사항에 대해 묻습니다. 예를 들어 멋진 피트니스 앱의 신규 구독자에게 보낼 환영 이메일을 작성하도록 요청합니다. 오른쪽. 이제 뭐? 지금까지 제가 이야기한 내용을 이해하셨다면 다음에 무엇을 해야 하는지 이미 잘 알고 계실 것입니다. 당신은 그것을 개선하고, 당신은 그것을 더 좋게 만들고, 당신은 당신의 특별한 소스를 얹습니다. 즉, 관성을 깨고, 이 경우 틀림없이 가장 중요한 것입니다. 그런 다음 특별히 특별하게 만드십시오. 멋지지 않은 것 같아요.

GitHub Copilot 에 액세스할 수 있고 작업에 사용해도 문제가 없다면 파일 구문 분석 방법, 반복 테스트 케이스 등과 같은 코드 조각을 스캐폴드하도록 요청할 수 있습니다. 때때로 해야 하고 적절한 코드 설계와 스마트 라이브러리로는 완전히 피할 수 없는 지루한 작업입니다. 아무 문제가 없습니다. 귀하가 근무하는 곳에 정책이 없는 한 그렇게 하지 않으면 ⎼ 추가 포인트를 받을 수 없습니다.

다른 유사한 응용 프로그램이 많이 있을 수 있습니다. 생각해보세요.

오, 기다려. 저는 이것이 우리에게 가져올 수 있는 가장 큰 이점에 대해 생각했습니다. 학업에 대한 해결책을 묻는 포럼에 게시하는 것을 좋아하는 사람들을 알고 있습니까? 아시다시피 질문을 읽고 거의 문자 그대로의 할당문입니다. 아마 전에 본 적이 있을 것입니다. 예, 이제 그들은 ChatGPT에 요청하고 우리를 내버려 둘 수 있습니다. 모두가 그것에 대해 행복합니다.

LLM이 인간 프로그래머를 대체하게 될까요?

아니. 그렇게 생각하지 않아. 저는 "X가 인간 프로그래머를 대체할 것"이라는 것에 대해 매우 회의적입니다 . 1997년에 프로그래밍을 시작한 이후로 나는 이미 그런 유행에 대해 상당히 많이 들었습니다.

그것은 우리가 프로그래밍 교육을 받는 방식, 프로그래밍하는 동안 막혔을 때 블록을 극복하는 방식, 지루한 일을 처리하는 방식을 바꿀 것입니다. 나는 그것에 대해 매우 회의적입니다. 그래도 내가 틀렸을 수도 있습니다.

그리고 마지막으로 이 기사는 내가 이 글을 쓰도록 동기를 부여한 원동력이 됩니다.

어제 저는 Amy J. Ko 의 놀라운 기사를 우연히 발견하게 되어 정말 기뻤습니다. 먼저 그녀가 거기에 쓴 모든 것에 거의 동의하기 때문입니다. 둘째, 저와 달리 그녀는 학자이며 10년 이상 이 주제를 따라왔습니다. 따라서 그녀는 자신을 부끄럽게 만들지 않고 이 전체 토론에서 협력할 한두 가지가 분명히 있습니다.

그러니 자신에게 호의를 베풀고, 과대 광고를 끊고, 다른 관점에서 주제를 더 잘 이해하기 위해 다음의 뛰어난 기사를 읽으십시오.

- 큰 언어 모델은 프로그래밍을… 조금 바꿀 것입니다.
- 큰 언어 모델은 프로그래밍을… 많이 바꿀 것입니다.

TLDR 이 없습니다 . 거기. 시간을내어 타고 즐기십시오.

이제 이 긴 글을 재미있는 것으로 마무리하겠습니다. 저는 사람들이 학계가 실제 소프트웨어 개발과 얼마나 멀리 떨어져 있는지 말하면서 항상 학계를 조롱하는 것을 지켜보곤 했습니다. 학계 연구에서 곧바로 생명을 얻은 것. 정말 큰 아이러니입니다. 학자가 되기에 정말 좋은 시간입니다.

아무튼 다음에 또 만나요 ​​여러분.

과대 광고에 주의하세요.

⛧ leandrosilva.com.br 도 참조하십시오 . 거기에는 훨씬 더 많은 것이 있습니다 .