좋은 프로그래머, 좋은 글작가
우리는 어릴적 글쓰기의 중요성에 대해 배웠다.
이에 글쓰기는 생각을 정리하고, 그 논리 기반과 수준을 고양(高揚)한다고 가르친다. 그러나 그것은 타자기와 수필이 보편화 된 시기의 말이다. 무엇하나 정보를 쉬이 얻을 수 없었던 세대에는 지혜를 얻기 위해 하나의 경험을 여러번 곱씹고는 했다. 사건이 썰물처럼 지나간 자리에서 단서를 끌어내는 일을 수시로 하였다.
다시 그러나 현재에 와서 깊은 성찰을 하는 사람이 드물다. 우리는 정보의 밀물 속에서 파편화(破片化) 된 정보를 모으고 생각을 바로 잡기 위해 글을 쓴다. 글을 대하는 시선이 바뀌었으므로, 우리는 새로이 글쓰기의 중요성을 어필할 방법이 필요하다.
AI가 보편화 된 시기에는 '코딩'이 글쓰기와 결이 같다는 것을 강조해보자. 교육과 학업성취에 관심이 많은 사람들이 글쓰기에 적극적으로 뛰어들 것이다. 우리 아이, 일론 머스크나 젠슨 황으로 기르고 싶다면 글쓰기를 가르쳐라!
Void ( 전하는 글 ){
여러분, 코딩과 글쓰기는 결이 같습니다. 어셈블리, 리눅스에서 파이썬과 유틸 내부 코드 스크립트(Script)까지 다양한 프로그래밍 언어를 다루다보면, 다양한 문법과 사고 방식을 마주하게 됩니다. 그리고 커널을 뚫고 파이프라인을 구축하는 과정을 하다보면, 나의 코드는 나날이 생각의 수준이 깊어진다는 것을 깨닫게 됩니다.
이것이 글쓰기와 무엇이 다르겠습니까?
}
로버트 C. 마틴(Robert C. Martin)은 객체 지향 프로그램을 위한 다섯가지 원칙을 발표했다.
SOLID 는 마이클 페더스(Michael Feathers)가 그 머릿글자 5개를 딴 것 인데, 그 원칙은 아래와 같다.
"""
1. Single Responsibility : 단일 책임
2. Open and Closed : 개방과 폐쇄
3. Liskov Substitution : 리스코프 치환
4. Interface Segregation : 인터페이스 분리
5. Dependency Inversion : 의존성 역전
"""
이것을 문학의 언어로 탈바꿈하면 아래와 같다.
"""
1. 글의 무게, 톤, 스타일과 관점 그리고 전하고자 하는 메세지는 일관되게 유지되어야 한다.
2. 글의 문단, 문장, 구절의 첫 마디의 작성할 때는 본질에 집중해야 한다.
3. 작은 가정에서 큰 결론을 내릴 수 없다.
4. 글의 양은 줄이고 구성은 탄탄하게 한다.
5. 소단원은 대단원을 따르고 세부내용은 목차를 따른다.
"""
정말 닮아있지 않은가?
글을 관리하는 것과 코드를 관리하는 것도 닮아있을까?
Git 은 분산형 버전 관리 시스템 (Version Control System) 으로, 프로그램을 구성하는 코드와 기능에 관여하는 작은 파일들을 관리한다. Git 에서는 매순간 작성된 코드를 스냅샷처럼 찍어서 보관한다. 그리고 해당 순간에 번호를 부여해 관리한다. 이것은 출판사에서 편집자들이 출판하기까지 최종 완성본을 검토하는 것과 비슷하다. 어떤 글은 롤백(Rollback)하고 어떤 글은 수정본을 받아들인다. 이것은 Wikipage 또는 수많은 Wiki가 글을 관리하는 방법이기도 하다. 프로그래머였던 소설가들은 적극적으로 Git을 이용하여 자기 소설의 버전을 관리하기도 한다.
왜 글과 코드는 이런 유사점을 보이는가.
글과 코드는 사람이 쓰고 사람이 읽는다. 여기 더해서 코드는 컴파일러 또는 인터프리터라는 해석 프로그램도 같이 읽는다. 컴파일러는 정해진 범위의 소스코드 전부를 기계어로 변환하여 실행하기 위한 상태로 코드를 다듬는다. 인터프리터는 한 줄, 한 줄 코드를 읽어서 해석한다.
글과 코드는 '공유성'을 띄고 있다.
그러므로 완성도가 높은 코드는 일종의 글이다.
소설처럼 글에 분위기가 있고, 문장에 힘이 있으며 단어에 무게가 있다. 이 글에는 메세지가 함의되어 있으며 결론 또한 명확하다. 어떤 부분은 시처럼 정확한 템포와 양식을 지키며 써내려 가야만 한다. 세부적인 묘사를 위해 문장을 끊지 않고 길게 써내려가야만 하는 경우도 종종 있다. 그리고 글의 곳곳에는 메모가 작성되어 있어 편집자들이 보기 쉽도록 할 수도 있다.
인터프리터는 위대한 시인의 작품을 연구 주제로 삼은 대학원생처럼 작성자의 글 한 문장, 한 문장 읽어나가며 의미를 음미한다. 컴파일러는 수험생이나 교수처럼 작성자 글의 핵심적인 부분을 요약하고 분류한 뒤, 체계 속에 편입시킨다. 훌륭한 글처럼 훌륭한 코드는 참조되고 복사되고 인용되어 다른 코드의 중요한 역할을 맡게 된다. 프로그래밍의 생태계 또한 저작물과 다름 없다.
코드는 마법이 깃든 글이다.
해리포터 볼드모트의 일기장처럼 스스로 작동하고 반응하게 만들 수도 있다. ChatGPT 나 인공지능을 이용한다면 스스로 자신을 수정하는 진정한 의미의 AI 도 탄생할 수 있을 것이다. 그러나 강하게 약속된 글은 문법 규칙에 크게 얽매인다. 마법에도 코드도 정해진 규칙을 엄격하게 따르지 않으면 작동하지 않는다. 반대로 글은 자체로 아무 능력이 없다. 그러나 글은 인간의 상상력 안에서 그 무한한 잠재력을 가지므로 문법에 크게 구애되지 않을 수 있다.
코딩은 글쓰기와 결이 같다.
코딩을 잘 하고 싶으면 글쓰기를 연습하라. 코딩에 자신이 있는 사람은 글쓰기 기법을 연구하라. 그리고 둘 다 잘하고 싶다면 도전하라.