독자분들 중에 자신이 하는 일에 큰 의미를 부여해 본 적이 있는지 모르겠다. 컴퓨터 프로그램을 만들면서 소프트웨어 그 자체의 의미보다 더 큰 스케일로 세상에 미치게 될 영향을 고민해 본 적이 있는지 모르겠다. 나는 가끔 세계적인 테크 리더들이 고민하는 스케일을 보면서 소름이 돋곤 한다. 나의 고민은 대게 코드의 효율성, 운영 용이성, 개발 파이프라인 구축 같은 것들이다. 그에 반해 세계적인 테크 리더들의 시야는 인류 전체를 향해있다. 그들은 환경에 대한 고민, 인구에 관한 고민, 생존에 관한 고민, 후손들에 대해 고민한다. 이를테면 CPU가 소모하는 전력을 단 1W라도 줄이기 위해 엄청난 투자를 한다. 한 사람 한 사람에게는 그 1W의 차이가 아무것도 아니지만 지구 전체로 본다면 탄소를 줄이고 자연환경을 보존하는데 크게 기여할 수 있는 것처럼 말이다.
사람들은 우주의 거대함을 깨닫게 되는 순간 인생의 허무함도 함께 느끼게 된다. 차원이 다른 스케일의 고민은 작은 세상의 고민을 다루는 사람들에게 영향을 미친다. 무한한 우주 속에서 나의 존재가 보잘것없다고 느껴지듯 스케일이 다른 고민 앞에서 나의 고민은 너무나도 작고 초라하게 여겨진다. 거시적으로 보면 분명히 그렇다. 하지만 결국 거시적인 세계는 미시적인 세계의 집합이다. 허무(虛無)와 염세(厭世)에 빠져서 자신이 하는 일에 보람을 느끼지 못한다면 거시적인 큰 고민도 아무런 의미가 없는 것이다.
나는 개발자가 프로그램을 만들 때는 '더 나은 인류를 만들어 가는데 기여하는 것'이라는 사명감을 가져야 한다고 생각한다.
혹시 개발을 하면서 아래와 같은 생각을 해 본 적이 있는지 점검해 보기 바란다.
항상 남이 원하는 프로그램만 만들어줘서 박탈감을 느낀 적이 있다.
맨날 비슷한 코드를 작성하는 나 자신에게 지쳐본 경험이 있다.
지금 내가 하는 일이 빠르게 발전하는 인류 문명과는 전혀 관련이 없다고 생각한다.
분산 원장을 관리하는 블록체인 기술에는 ‘스마트 컨트랙트’라는 개념이 있다. 나는 처음에 그 개념을 봤을 때 신선한 충격을 받았다. ‘계약서를 코드로 만들고 그것을 분산해서 검증하고 실행할 수 있다니...’ 놀랍지 않을 수가 없었다. 사람이 글로 작성하는 계약서에는 그것을 작성하는 사람의 역량에 따라 결함이 있을 수 있고, 읽고 해석하는 사람에 따라 오해와 그로 인한 분쟁이 있을 수 있다. 물론 ‘스마트 컨트랙트’도 코드를 작성하는 사람의 역량에 따라 결함이 있을 수는 있다. 하지만 본디 컴퓨터 코드는 한정적인 키워드 만을 가지고 논리와 연산으로만 이루어진 언어이다. 거의 무한에 가까운 표현력을 가진 인간의 언어보다는 결함을 만들어낼 확률이 현저히 낮다. 설사 작성 중에 결함이 있다고 해도 그것을 발견하는 것 또한 비교적 수월하다.
컴퓨터 프로그램은 이미 우리의 행동양식을 통제하고 있다. 다만, 사람들이 그것을 잘 느끼지 못할 뿐이다. 컴퓨터 프로그램의 통제는 때로는 법보다도 더 강력하고 실용적이다. 예를 들면 교통 시스템은 그 자체만으로도, 명문화되어 있는 교통법보다 우리를 더 강력하게 통제하고 있다. 금융 시스템은 복잡한 절차를 잘 몰라도 쉽게 개인이 은행 업무를 볼 수 있도록 도와준다. 미래에는 더욱더 우리의 삶에 컴퓨터 프로그램이 깊게 관여하게 될 것이다. 단순히 개인을 편하게 해주는 것을 넘어 사회 전반에 걸쳐 공공의 질서와 균형을 유지하는 것에 컴퓨터가 함께 하게 될 것이다. IT 개발자라면 이런 사실을 분명히 인지해야 한다.
법이나 규칙을 만드는 사람들은 자신들의 과업에 엄청난 사명감을 가지고 임해야 한다. 컴퓨터 프로그램을 만드는 우리들도 사명감을 가지고 일해야 한다. 비록 지금은 내가 만들고 있는 프로그램이 하찮게 느껴질지도 모른다. 그러나 내가 쌓아가고 있는 역량과 가능성이 세상에 어떤 영향을 미치게 될지는 아무도 모른다. 중요한 것은 이미 컴퓨터 프로그램은 세상의 많은 것들에 통제하고 있고, 앞으로 관여하게 될 것들이 더 늘어날 것이고, 당신은 지금 프로그램을 만드는 일을 하고 있다는 것이다.
'사명감'은 우리의 업을 대하는 태도에 대한 것이라면, 태도 못지않게 중요한 것이 있다. 바로 '전문성'이다. 개발자가 기술적 전문성을 가지고 있어야 함은 누구도 이견이 없을 것이다. '사명감'과 '기술적 전문성'만 보유해도 인정받는 프로가 될 수 있다. '기술적 전문성'이라는 말은 '컴퓨터를 잘 이해하고 있다'는 뜻이기도 하다. 그런데 사실 우리는 컴퓨터가 사용할 프로그램을 만드는 것이 아니다. 우리는 우리가 사용할 프로그램을 만들고 있다. AI 기술은 조금 예외라고 할 수 있을지도 모르겠다. 하지만, 결국 컴퓨터가 사용하게 할 프로그램을 만들어서 얻고자 하는 최종적인 목적은 인간의 욕망을 위한 것이다. 결국 '인간에 대한 이해'가 있어야만 비로소 인류에 기여하는 작품을 만들어 낼 수 있게 된다고 생각한다.
학교, 기업, 국가, 개발자 그룹 등에서 만드는 프로그램들은 그것을 이용하는 많은 사람들의 삶의 방식과 행동 양식에 영향을 준다. 여러 사람들의 삶의 방식을 결정하려면 다양성을 고려해야 한다. 세계의 여러 나라가 지정학적으로 멀리 떨어져 있는 것은 더 이상 한계가 아니다. 우리가 만든 프로그램은 내가 배포하는 즉시 지구 반대편에서도 사용할 수 있다.
지구촌 사람들에 대해서 얼마나 많이 알고 있을까?
그들을 이해하고 적절한 시스템을 제시할 수 있는가?
우리는 질문을 던져야 한다. 지구 반대편의 사람들은 어떤 생각을 하고, 어떤 시간대에 살고, 어떤 기후에 살고 있고 또 어떤 신을 섬기는지 관심을 가져야 한다. 그들에 대한 다양한 질문을 던지려면 여러 가지 경험을 해야 하고 정보를 습득해야 한다. 여러 가지 경험은 ‘외국인과 일을 해본다든지’, ‘소외 계층을 위한 봉사활동을 해본다든지’, ‘외국 여행을 떠난다던지 하는 것’ 등을 통해 얻을 수 있다. 정보를 습득하는 것은 바꿔 말하면 인간에 대한 공부를 해야 한다. 인문학을 공부해야 인간에 대한 기본적인 이해도를 가질 수 있고, 지리와 역사를 공부해야 현재 다른 이들의 모습을 시간의 흐름에 따라 이해할 수 있게 된다.
‘글로벌 마인드를 가져라’는 말을 많이 들어봤을 것이다. ‘글로벌 마인드’를 직역하면 ‘세계적인 마음’ 또는 ‘세계적인 정신’ 정도로 해석할 수 있을 것 같다. 하지만 나는 이렇게 해석하고 있다. ‘그들의 입장이 되어 생각하는 것’. 내가 작업하고 있는 소스를 함께 볼 나의 동료의 입장, 내가 만든 프로그램을 사용할 사용자의 입장, 프로젝트를 위해 투자하는 투자자의 입장, 나에게 배우고 싶어 하는 후배의 입장을 입체적으로 고려할 수 있다면 앞으로 다가올 인류의 삶의 질 향상에 큰 시행착오 없이 많은 기여를 할 수 있을 것이라고 생각한다.
개발자는 항상 사명감을 가지고 업에 임하며, 전문성 향상에 힘을 기울이고, 사람을 이해하기 위해 질문하고 공부해야 한다.