"AI 코딩 도구와 페어 프로그래밍하기"라는 부제에 이끌려서 책을 읽게 되었습니다. 읽다 보니 제가 기대하던 방향은 아니었지만 흥미로운 부분이 많은 책이었습니다. 그리고, 궁극적으로는 제가 원했던 내용을 이야기하고 있는 것 같아 기분 좋게 마지막 장을 넘길 수 있었습니다.
프레드릭 브룩스는 <맨 먼스 미신>에서 "은 총알은 없다"라고 단언합니다. 즉, 소프트웨어 개발이라는 '늑대 인간'을 한방에 처리해 줄 솔루션은 없다는 말이죠. 사실 컴파일러의 발명을 제외하고는 소프트웨어 개발의 퍼포먼스를 극단적으로 끌어올리는 사건은 드물었습니다. 하지만 사람들은 새로운 솔루션이 등장할 때마다 "은 총알"을 기대했던 것이 아닌가 싶네요. 1970년대 폭포수 모델이 나왔을 때도 그랬고, C언어가 나왔을 때도 객체지향 개념이 등장했을 때도, 그리고 "4세대 언어"라는 게 나왔을 때도 결국 개발자는 필요 없게 될 거라고 섣부른 말을 내뱉었습니다.
하지만 그때마다 보란 듯이 그런 전망은 빗나가고 말았죠. 챗 GPT가 세상을 들썩이게 만들었던 작년 말 올해 초에도 역시 사람들은 개발자가 없어지고 챗 GPT나 그런 식의 인공지능이 개발자를 대체할 거라 기대하기 시작했습니다.
하지만, 저는 "은 총알은 없다"라는 브룩스의 예언은 앞으로도 지속될 거라고 생각합니다.
그럼, 왜 그런지 말씀드려보겠습니다. 소프트웨어 개발 과정에서 개발자가 하는 일을 가장 직설적으로 들여다볼 수 있는 건, "짝 프로그래밍(페어 프로그래밍)" 현장입니다. 짝 프로그래밍은 두 사람의 개발자가 두 개의 역할을 나눠서 하나의 화면을 보며 작업하는 방식을 말하는데요. 그 역할은 드라이버와 내비게이터입니다. 드라이버는 키보드에 손을 얹고 코딩을 하는 사람이고 내비게이터는 드라이버가 하는 코드의 길을 잡아주는 역할을 하는 사람이죠. 짝 프로그래밍을 할 경우 두 사람이 함께 작업하기 때문에 생산성이 50%쯤 감소할 것으로 예측되지만 연구에 따르면 전혀 그렇지 않습니다. 15% 정도 생산성이 떨어지는 것으로 보이고 15% 결합이 줄고 15% 정도 간결한 코드를 사용하게 됩니다. 다시 말해, 두 사람이 각자 코딩할 때보다 나은 결과를 얻게 됩니다. 그럼 왜 그럴까요? 그건 드라이버 역할은 내비게이터의 역할에게 제어를 받아야 좋은 코드를 작성할 수 있기 때문입니다. 이건 우리 두뇌의 시스템과 연관성이 있습니다. 우리 두뇌는 두 개의 시스템으로 동작하는데요. <실용주의 사고와 학습>이라는 책을 보면 L 모드와 R 모드라는 용어를 사용해서 이를 설명합니다. 드라이버는 L 모드, 내비게이터는 R 모드인 것입니다. <생각에 관한 생각>에서 "대니얼 카너먼"이 말한 시스템 2가 L모드라면, L 모드는 "스스로를 영웅으로 여기는 조연"입니다. 다시 말해서, 코딩을 하는 드라이버 역할을 할 때는 코드 자체를 작성하는 데 있어서 완벽한 논리를 전개한다고 여길 수 있지만, 실상은 주연이 아니라 조연으로서 착각하고 있는 셈입니다. 그 가운데 15%의 결함이 발생하고 15%의 군더더기가 있는 코드를 작성하게 되며, 35%의 생산율 저하를 가져옵니다. 짝 프로그래밍을 하면 드라이버가 내비게이터의 제어를 받아 가며 작업하게 되기 때문에 이러한 문제점들이 상쇄되는 거죠. 그렇다면 혼자서 코딩하는 동안 우리는 드라이버 역할만으로 코딩해 가면 안 됩니다. 드라이버 역할로 집중력 있게 코드를 조금 진보시킨 다음 내비게이터 역할로 그 코드를 들여다보며 확인할 필요가 있습니다.
즉, 쓸만한 코드를 만드는 과정에서 드라이버와 내비게이터 역할은 모두 필요한 셈이지요.
인공지능은 다량의 데이터를 '학습'이라는 과정을 거쳐서 '알고리즘'으로 만들어 내는 기술입니다. 즉 다량의 데이터가 있어야 결과가 나옵니다. 인공지능이 개발자를 대체하려면, 다량의 데이터가 드라이버 역할과 내비게이터 역할을 모두 학습시킬 만큼 있어야 합니다. 드라이버 역할을 학습하는 데이터는 확보 가능한 게 많습니다. 깃헙 같이 엄청난 코드가 쌓여 있는 레포지토리도 있고, 그 외에도 인터넷에는 다량의 코드가 공유되고 있으니까요.
하지만 내비게이터 역할은 좀 다릅니다. 내비게이터는 "왜" 그렇게 코드를 진행해가야 하는지에 대답하는 역할입니다. 그런데, "왜"는 인터넷에 퍼져있는 코드에는 없습니다. 따라서 내비게이터는 인공지능이 학습해서 만들 수 없을 겁니다. ( 사실 우리가 인공지능으로 해결하려고 시도하는 대부분의 분야에서 내비게이터의 역할이 있고, 그 부분을 인공지능으로 쉽게 대체하는 건 어려울 거라 생각합니다. )
따라서, 가장 최적의 솔루션은 대체가 아니라 협업입니다. 연구에 따르면 체스 그랜드 마스터 보다, 인간을 이기는 체스 인공지능보다, 인공지능과 팀을 이룬 초보 체스 팀이 가장 실력이 뛰어났다고 합니다. 즉, 드라이버 역할은 점점 더 능력이 향상되는 인공지능이 하게 하고 인간은 내비게이터로서 일하면 최고의 성능을 낼 수 있게 된다는 거죠.
그래서 아무리 인공지능이 많이 발전해도 인공지능은 개발자를 대체하지 못합니다.
그래서 이 책 표지의 "AI 코딩 도구와 페어 프로그래밍하기"라는 문구가 제 눈길을 끌었습니다. 앞으로 인공지능과 개발자의 협업 방식이 인공지능은 드라이버 역할, 개발자는 내비게이터 역할을 할 거라고 생각하는 저로서는 엄청난 기대를 할 수밖에 없는 문구였기 때문입니다. 하지만, 이 책에서는 이러한 이야기를 직접적으로 하지는 않습니다. 다만 "코파일럿"이 실수하는 것도 보여주고 챗 GPT의 코드가 전적으로 믿을만한 것은 아님을 알려줍니다. 221페이지에서는 "도구는 도움이 될 수 있지만 우리는 그 한계를 항상 인식해야 합니다. "라는 이야기까지 해주고 있지요. 그렇습니다. 저자가 말하는 대로 인공지능을 사용해 가다 보면, 인공지능이 발전하는 방향은 드라이버 역할을 잘 하는 것으로 갈 겁니다. 여기에 저자가 마지막에 덧붙이는 말은 인공지능은 도구일 뿐이라는 것입니다. 즉, 제가 상상하는 것과 결은 다르더라도 방향은 같았습니다.
게다가 사용자 스토리나 기획 일부를 챗 GPT에게 맡겨보는 실험은 상당히 다양한 상상을 하게 만들어 주었습니다. 코파일럿이 나 챗 GPT를 쓰면 지금 시점에서도 우리의 업무 상당수를 빠르게 진행할 수 있는 노하우를 얻을 수 있겠다 싶었거든요.
이런 노하우들을 지금부터 천천히 익히다 보면, 인공지능 도구들의 발전과 더불어 우리는 2배 이상의 생산성을 가지는 개발자가 되어갈 거라 믿습니다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."