프로그래밍은 괴롭다.
일단 유행하는 사조가 있고, 유행하는 코드 스타일이 있다. 거기에 더해서 잘 팔리는 프레임워크와 라이브러리도 있다.
그냥 내가 전부 구현하면 안 되느냐고 묻고 싶지만, 사실 대부분의 프로그래머는 이미 만들어진 라이브러리를 가져다 쓴다. 세상에 있는 모든 것을 직접 구현할 수도 없거니와, 굳이 그럴 필요도 없기 때문이다.
비용대비 효율성의 문제다.
그런데 남이 만든 것을 사용하려면 남이 무엇을 만들었는지 알아야 한다.
어제까지 권장되던 방식이 오늘은 안티패턴이 되기도 하고, 멀쩡히 사용하던 라이브러리에서 보안 취약점이 발견되기도 한다. 그렇다고 매일 새로운 기술을 쫓아다니다 보면 정작 프로그램을 만들 시간이 사라진다.
이러니 프로그래밍이라는 직업은 참 피곤하다. 프로그램을 만드는 것도 바쁜데, 다른 사람들이 프로그램을 어떻게 만들고 있는지까지 알아야 한다.
특히 나는 프리랜서 프로그래머라 뒤쳐지기 시작하면 끝이 없이 뒤쳐진다. 나는 주변에 내 코드를 리뷰해주는 사람도 없고, 프로그래밍을 토론 할 사람이 없다.
내가 공부하는 건 AWS, 마이크로소프트, 구글에서 적어둔 기술문서와 유행한다는 프레임워크 문서만으로만 작업을 하기때문에 내 코드 스타일은 대체로 쉽게 안티패턴화되거나 잘못되는 경우가 잦다.
그래서 나는 프로그래밍 관련 정보 사이트와 커뮤니티를 자주 둘러본다.
그렇게 돌아다니다 보면 가끔 토론에 참여하게 된다. 그런데 이게 또 문제다.
내가 잘못 알고 있던 내용을 자신 있게 이야기했다가 반박받기도 하고, 커뮤니티의 분위기와 맞지 않는 의견을 남겼다가 잔뜩 비추천을 받기도 한다. 반대로 별생각 없이 남긴 댓글에 예상보다 많은 추천이 붙을 때도 있다.
조용히 읽고 필요한 정보만 가져오면 된다고 생각하지만, 실제로 부딪혀야만 정보를 얻을 수 있다.
개인적으로 지식을 얻을 때 가장 좋은 방법이라고 생각하는 것은 전문가 커뮤니티에 의문점을 물어보는 것이다. 대부분은 DownVoted나 비추천을 받지만, 간혹 친절하게 설명해주거나 한다.
AI한테 묻는 것도 하나의 방법이지만 AI를 써보면 알다시피 AI는 내 전문 분야에서도 알게 모르게 조금씩 잘못된 것들을 알려줘서 검증하기 어렵다. 초기에 틀을 잡을때 AI를 쓰면 틀이 잘못 잡힐 수 있다는 것이다.
나는 프로그래밍 지식을 배울때, 늘 전문가 커뮤니티에 전문가의 말을 비판하는 점에서 시작한다. 그러면 바로 사람들이 나타나 나를 응징하려고 하는데, 그럴때마다 내 의견을 보강하며 나름의 멘탈 모델을 만든다.
누군가는 이런 방식을 두고 굳이 매를 버는 짓이라고 말할지도 모른다. 인터넷에서 가장 정확한 답을 얻는 방법은 질문을 올리는 것이 아니라 틀린 답을 당당하게 적어놓는 것이라는 ‘커닝햄의 법칙(Cunningham's Law)’을 온몸으로 실천하는 셈이니까. 실제로 날 선 반박 댓글이 달리고 비추천 숫자가 올라가는 것을 보는 일은 언제나 유쾌하지 않다. 모니터 너머의 타인에게 내 무지를 들키고 공격받는 일은 분명 감정적인 에너지를 갉아먹는다.
솔직하게 단순하게 누군가는 DownVoted 딸깍 한번이면 되지만 나는 기분이 나쁘다. 하지만 그렇게 배우면서 날것의 지식을 얻는다.
그렇지만 남에게 비판 당하는 것은 괴롭다. 하지만 하지 않으면 뒤쳐진다.
늘 유행하는 사조가 있고, 늘 내가 자주 쓰는 것들이 안티패턴이 되고, 언제나 외부와 최신화 해야한다. 언어의 변경 사항도 봐야하고, 그 언어의 변경사항들을 사람들이 어떻게 적용하는지.
또 어떤 워크플로우가 더 결과물을 좋게 만드는지 정해진 답은 없지만, 매번 사람들과 부대끼면서 만들어 나가야한다.
가끔 그런 생각을 한다. 내가 충분히 좋은 대학과 영미권에서 학교를 다녔거나 태어났다면, 이런 소통이 더 편했을지 말이다.
주변에 좋은 동료가 있고, 코드에 진지하게 토론할 수 있는 사람이 있었다면 이런 방식을 쓰지 않아도 되지 않았을까라는 생각을 한다.
아니, 어쩌면 내 성격 탓에 좋은 환경에서도 마찰이 존재했을 수도 있겠지.
나는 늘 변두리에 서있는 느낌이다.
철학자 호세 메디나는 자신의 믿음과 다른 관점을 마주하면서 발생하는 지적 저항을 인식적 마찰이라는 개념으로 다루었었다.
그에 따르면 이러한 마찰은 자신의 믿음을 비판적으로 검토하고, 지식의 공백을 발견하며, 다른 관점과 비교하도록 만든다고 했다. 반대로 질문이나 의심을 억압하는 해로운 마찰도 존재한다고 했다.
내가 겪은 현실의 프로그래밍은 대부분 질문을 거부 당하고, 학벌을 이유로 무시당하는 게 대부분이었다. 대학원의 실패 경험에서도 대부분 그랬다.
서울에 살거나 실리콘 밸리에 사는 이들은 직장에서 코드 리뷰, 설계 회의, 동료와의 대화로 자신의 생각을 검토할 수 있을 것이다. 이는 에티엔 웽거의 실천 공동체이다.
하지만 변두리의 프리랜서인 나에게는 그런 안전하고 제도화된 실천 공동체가 존재하지 않는다.
나는 늘 독립적으로 프로그래밍 하고 싶어 하지만, 독립적으로 판단할 능력을 유지하려면 결국 타인을 필요로 한다.
지적인 자율성을 유지하기 위해 사회적 의존성을 연료로 삼는다.
상대랑 토론 할때마다 늘 정신적으로 피곤하다. 하지만 싸우지 않으면 내 생각을 정리할 수 없다.
가끔 내가 이렇게 냉소적이고 염세적인 것은 어쩌면 지적인 승인 욕구가 채워지지 않아서일지도 모른다는 생각을 한다.
하지만 나는 안다. 이 승인 욕구가 채워지지 않을 것을 말이다. 내 작업의 성질이 결국 일부에게 필요한 것들을 조립해서 제공하는 것뿐이니까 말이다.