개발자 생각 #55
“개발자가 코드를 외우지는 않아요.
몸 속 어딘가에서 기억할 뿐이지요.
그래서 내 지식을 어딘가에 저장하고
검색가능하게 합니다.
결국은 테크 블로그를 운영하는 것 외에
대안은 없어요…”
평소 프로그래밍 강의를 하거나 기술 컨설팅을 할 때마다 하는 말이다.
개발자가 업무수행을 위해 알아야 할 데이터양은 상당하다. 그렇다보니 “머리 속에 넣어놓고 있는 것”들은 “매우 중요한 것”이어야 한다. 비교적 불필요한 생각은 어딘가에 백업하고 바로 복원할 수 있도록 관리해야 한다(그것이 대부분 기술블로그이다). 그래서 개발자 환경에서 중요한 것은 “자동완성” 기능이다. 반복되는 코드를 외우는 것이 아니라 툴이 완성해준다. 그리고 개발자는 체화된 키보딩에서 자동적으로 코드를 만들어낸다.
마치 우리가 문법을 생각하고 말을 하지 않듯, 개발자도 어느정도는 코드 스니펫(코드 덩어리, 여기서는 관용구라고 이해하자)을 머리에 각인시키지 않고 개발환경이 만들어주는 “자동완성 기능”을 위와 같이 사용하게 된다.
이런 자동완성 기능이 제공되기에 개발자는 더 중요한 것에 집중할 수 있다. 프로그래밍의 방법론과 구조에 대해 집중할 수 있다(그럼에도 버그는 넘쳐난다).
그러다보니 자동완성이 없는 환경에서는 코드를 기억하지 못할 때가 종종 있다. 그래서 개발자는 “자신의 머리 속에 학습된 지식(경험 또는 공부를 통한)”을 어딘가에 백업해야 하는 필요성이 생기게 된다. 그래서 개발자는 제2의 두뇌가 필요하게 된다. 이것이 개발자가 글을 쓰는 주된 이유이다.
그리고 다음은 개발자가 글을 쓰면서 터득하게되는 패시브 스킬이다.
지금 문제를 해결한 괜찮은 사고방식은 시간이 지나면 100%순도로 유지되지 않는다. 지금의 사고방식을 글로 백업하고 나중에 찾아보게 되면 98% 순도로 restore 가능해진다. 결과적으로 비슷한 문제를 나중에 경험하더라도 글로 정리한 개발자와 글로 정리하지 않은 개발자의 문제해결능력은 현격하게 차이가 난다.
뱉은 말은 주어담을 수 없다. 그러나 글은 나중에 수정하면 된다. 인간은 소통의 오류를 범하는 짐승 중에 하나다. 그러므로 생각없이 말을 하게 되면 오류를 범하기 쉽다. 반면 글로 소통을 할 경우는 의도분석이 가능해지고 대화의 오류를 발견하기 쉽다. 그래서 논리오류가 발생했을 경우, 글로써 해결이 가능하다. “말은 그렇게 하기 쉽지않다”
메모를 모아 논리적으로 글을 만들다보면 “생각의 오류”를 발견하게 된다. 자신이 믿고 있었던 “사고패턴”에 심각한 구조적 모순을 발견할 때도 있지만, 대부분 앞뒤가 안맞는 흐름의 오류를 발견할 때가 많다. 글을 쓰다보면 이런 앞뒤가 안맞는 비효율적인 사고방식을 버리게 되므로 “프로그래밍 하는 습관”으로는 매우 유익하다.
[글이야 말로 진정한 “인공지능”이다]. 일 예로 AI Bot인 Bing은 블로그의 데이터를 활용하기도 하지만 RLHF를 받아가며 진화하고 있다. 내가 쓴 글이 누군가에게 지식으로 쌓이기도 하지만 그 지식이 또다시 나에게 피드백을 통해 새로운 학습으로 다가오기도 한다. 쉽게 말해 “내가 쓴 글을 피드백” 해주면서 서로 발전할 수 있다. [개발자는 비개발자들에게는 패쇄집단이지만 내부 문화는 “오픈마인드”가 강하다]. 서로에게 배울 수 있는 점이 있다면 “글로 써” 소통하는 문화를 가지고 있다. 그리고 서로가 진화됨을 즐긴다.
이런 점은 개발자의 글쓰기는 작가의 글쓰기와 많은 부분이 다르다. 개발자는 “내 작품이 세상 무엇보다 가치있어”를 주장하는 것을 혐오한다. “모두가 인정할 수 있는 도움되는 기술인가?”에 가치를 둔다. 공학은 예술이 아니기 때문이다. 예술은 나만의 세계가 주장될 수 있지만 공학은 나만의 세계를 주장했다간 병자 취급받는다.
그런 이유로 작가는 나만의 세상을 만들기를 좋아하지만, 개발자는 우리의 세상을 만들기를 좋아한다. 결국 작가와 개발자의 글쓰기는 서로 다른 가치에 방점을 찍을 수 밖에 없다. 같은 한글을 사용하더라도 "개발자의 글쓰기"는 마음이 따듯한 글이 아니라 머리가 뜨끈한 글을 써야 가치가 있는 것이다.
개발자는 세상의 문제를 같이 풀며 공유하기를 좋아한다.