큰 언어 모델은 프로그래밍을 바꿀 것입니다…
나는 과대 광고를 좋아하지 않습니다. 아마도 그것은 항상 주장에 의문을 제기하고, 증거를 찾고, 판단을 내리기 전에 면밀히 조사하려는 내 안의 회의론자일 것입니다. 세상에 대한 이러한 입장은 내가 극적인 변화를 가장 늦게 받아들이고 가장 먼저 의문을 제기하는 경우가 많다는 것을 의미합니다. 컴퓨터 과학에서 이보다 더 모독적인 것은 없습니다.
그래서 지난 10년 동안 나는 대규모 언어 모델(LLM)이 순전히 확률적 규모를 통해 인간의 의사소통을 모방하는 것을 지켜보면서 의심을 품고 지켜봤습니다. 그들이 편견을 극복할 수 있을지 의심하고, 어떤 형태의 지능을 얻을 수 있을지 의심하고, 이익 이외의 다른 것에 적용할지 의심합니다. 내가 확신하는 것은 단 한 가지였습니다. 일단 그들이 세계의 작은 학문적 구석에서 주류로 등장하면 과대 광고가 그들을 보는 주요 렌즈가 될 것이라는 것입니다. 그리고 그것은 기본적으로 일어난 일입니다.
그러나 LLM이 GitHub CoPilot 및 ChatGPT 와 같은 시스템을 통해 프로그래밍을 시작하면서 더 미묘한 LLM을 보기 시작했습니다. 그렇지 않은 사람들에게 프로그래밍은 엉망진창 입니다 . 언어는 우리가 수십 년 동안 함께 살아온 이상한 역사적 표기법이며 가장 인기 있는 언어는 종종 가장 우연히 설계되었습니다. API는 종종 잘못 설계되고 제대로 문서화되지 않습니다. 더 간단한 것을 만들기 위한 거의 모든 노력은 복잡한 세계와 상호 작용하려고 시도하기 때문에 복잡성을 더할 뿐입니다. 그래서 저는 여전히 LLM을 사회 전반에 대한 위협으로 생각하지만, 프로그래밍 세계에서는 사람들이 복잡성을 통해 걸러낼 수 있도록 도와준다는 약속을 가지고 있습니다.
그러나 내가 그것에 대해 더 많이 생각하고 그들과 함께 놀았을 때, 나의 회의론이 돌아왔습니다. 그래서 저는 다음과 같은 예측을 하게 되었습니다.
첫째, LLM은 복잡성을 줄여 줍니다 . 그리고 몇 가지 명백한 이유가 있습니다. 오픈 소스의 세계는 프로그래밍 언어와 API 사용의 일반적인 지저분한 문제에 대한 방대한 솔루션 모음을 공유하므로 인터넷의 지난 20년 동안 문제는 이러한 문제를 해결하는 데 그다지 중요하지 않았습니다. 문제가 있지만 해결책을 찾는누군가가 이미 적어 놓은 것입니다. 이것이 Stack Overflow의 폭발적인 인기와 수십 년간의 코드 검색 연구를 가능하게 한 것입니다. LLM 기반 코드 합성은 그러한 솔루션을 찾기 위한 더 나은 검색 엔진이 될 것이며 이미 어느 정도는 그렇습니다. 이 미래는 더 나은 문서화와 더 나은 검색이 항상 그랬던 것처럼 프로그래머에게 약간 더 나은 미래가 될 것입니다. 무한한 오답 공간에서 유용한 디자인 패턴을 쉽게 찾을 수 있습니다.
물론 제대로 수행되지는 않습니다. 훈련받은 대부분의 코드 때문에? 그것은 나쁜. 보안 결함, 디자인 결함, 유용성 문제, 접근성 문제로 가득 차 있습니다. 이러한 모델은 디자인이나 소프트웨어 엔지니어링에 대해 전혀 모르기 때문에 이러한 결함에 대해 전혀 모릅니다. 그리고 스택 오버플로에서 찬성표를 던진 오답에서 누구나 알 수 있듯이 코드의 인기는 코드의 정확성에 대한 신뢰할 수 있는 지표가 아닙니다. 따라서 이러한 엔진이 할 수 있는 최선은 개발자가 문제를 바로 시작하거나 새로운 방향을 생각하는 데 도움이 되는 추측을 제공하는 것입니다. 그러나 개발자는 세상이 변화함에 따라 검증, 통합, 리팩터링, 재설계, 재설계 등 정확성을 보장하기 위해 이미 해야 하는 모든 작업을 수행해야 합니다. 이러한 모델은 기껏해야 유용하지만 짧은 코드 세그먼트에 대한 브레인스토밍 도구가 될 것입니다.
물론 그게 최선의 시나리오다. 일부 개발자는 이러한 도구를 사용하고 그들이 얻은 코드를 신뢰할 것입니다 . 그들은 그것을 프로덕션 코드에 넣을 것입니다. 그리고 그 코드가 문제를 일으키는 많은 이야기가 있을 것입니다. 하지만 실패와 일부 코드 사이에 선을 긋는 것은 어려운 일이고 사회는 여전히 개발자가 작성한 코드에 대해 책임을 묻도록 결정하지 않았기 때문에 아마 듣지 못할 것입니다. 따라서 대부분의 사람들은 이러한 확률적 앵무새 에 의해 역류된 나쁜 코드가 세상에 유출되고 있다는 사실조차 알아차리지 못할 것입니다 . 그들은 단지 약간 다른 이유로, 그리고 약간 더 빠른 속도로 소프트웨어가 항상 가지고 있는 일반적인 오류를 경험할 것입니다.
그리고 내가 가르치는 학생, 코드를 처음 접하는 청소년, 코드를 가르치기 위해 코딩을 배우는 교사를 포함한 학습자가 있습니다. 누군가는 (현재) 무료로 제공되는 간편한 프로그램 합성이 어려움에 처한 학생과 교사에게 큰 도움이 되어 이전에는 할 수 없었던 것을 만들고 더 쉽게 도전을 극복할 수 있게 해줄 것이라고 상상할 수 있습니다. 그러나 그것은 과대 광고 일 것입니다. 현실은 코드를 작성하는 것도 어렵지만 학생(그리고 실제로 모든 사람)에게 더 어려운 부분은 코드를 이해하는 것 입니다.실행 방법과 다르게 수행해야 할 사항에 대한 결정을 내립니다. 프로그램 이해력은 API를 사용하기 어렵게 만드는 것입니다(그 이유는 의도적으로 수행하는 작업을 숨기고 잘못 작성된 자연 언어를 통해서만 동작을 캡처하기 때문입니다). 이것이 프로그래밍 언어를 사용하기 어렵게 만드는 이유입니다(디버깅 도구가 가르치기에 충분히 느려지기 때문에). 이것이 대규모 소프트웨어 시스템을 변경하고 발전하기 어렵게 만드는 이유입니다(이해해야 할 코드의 양이 많기 때문입니다). LLM은 이러한 이해나 의사 결정을 더 쉽게 하기 위해 아무것도 하지 않습니다.
아이러니하게도 다른 사람이 대신 코드를 작성하면 프로그램 이해가 더 어려워질 뿐입니다 . 모든 개발자는 이미 이것을 알고 있습니다. 직접 작성하면 다른 사람이 작성한 것보다 동작을 훨씬 더 잘 이해할 수 있습니다. 당신이 그것을 썼다면 이것은 사실이지만 오래 전에. 아무도 이해하지 못하는 코드를 얻는 것은 확률론적 기계에서 추출되었기 때문에 어느 정도의 근거나 맥락을 제공하기 위해 Stack Overflow와 같은 사이트에서 발생하는 인간 상호작용이 거의 없이 가장 이해하기 어려운 코드를 생성할 수 있습니다. . (그리고 물론 사람들이 Stack Overflow와 같은 사이트에 대한 콘텐츠 작성을 중단하면 LLM은 훈련할 것이 없고 유용하지 않게 됩니다.)
그러나 이해력만이 학습자에게 새로운 부담이 되지는 않을 것입니다. 일부 학습자는 현재 StackOverflow에서 하는 것처럼 LLM 기반 프로그램 합성을 어려운 학습 작업을 피하기 위한 또 다른 지름길로 볼 수도 있습니다. 이것은 그들이 게으르기 때문이 아니라 학습이 어렵기 때문입니다. 우리 모두는 문제를 해결하는 더 쉬운 방법이 있을 때 학습을 피하기 위해 최선을 다합니다. LLM은 저항이 낮은 경로를 제공하기 때문에 계획 및 확인이라는 어려운 작업을 피하는 매우 비생산적인 추측 및 확인 주기로 이어질 것이며 아마도 이미 그렇게 될 것이라고 믿습니다. 스택 오버플로에는 적어도 막다른 골목이 너무 많아서 학습자는 결국 스택 오버플로가 대부분의 문제에 대한 훌륭한 리소스가 아니라는 것을 깨닫고 검색하는 대신 추론과 계획으로 돌아갑니다. 그러나 LLM은 정답이라는 환상을 만들어 위의 이해력 문제를 악화시킬 것입니다. 이로 인해 학습에 대한 의욕이 저하되어 궁극적으로 더 많은 투쟁, 더 많은 중도 탈락, 궁극적으로 혼란을 이해하려는 사람들이 줄어들지 않을까 두렵습니다.
LLM이 존재해야 합니까? 저는 LLM 기반 프로그램 합성에 대해 다른 개발자 도구에 대해 느끼는 것과 동일하다고 생각합니다. 우리가 이 난장판을 만들었으니 정리해야 할 것 같습니다. 아마도 LLM이 도움이 될 수 있습니다. 하지만 끝없이 생산성을 추구하면서 하나의 엉망진창을 또 다른 엉망진창으로 바꾸는 도구처럼 느껴집니다. 혁명처럼 느껴지지 않습니다. 그리고 최악의 경우, 그 새로운 혼란이 이해하기 더 어려울 수 있습니다.
내가 틀릴 수 있습니까? 물론! 위의 내 심술궂은 주장은 20년 동안 프로그래밍과 프로그래머를 공부한 결과 나온 것이지만 , 그 모든 연구와 경험은 나를 잘못된 방향으로 인도할 수 있습니다. 아마도 LLM은 프로그래밍을 근본적으로 바꿀 수 있지만 저는 그것을 볼 수 없습니다. 그런 경우라면 제가 가장 늦게 눈치채게 될 것 같아요 :)

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































