※ 이 글은 사회성 이야기의 첫 번째 글입니다. 사회성 없는 실력자?로 이어집니다.

1.

개발자 사회를 돌림노래마냥 떠도는 주제 중에 하나가 사회성입니다. 개발자에게 있어 사회성이란 얼마나 중요한가? 얼마 전 무슨 이유에서인지 이 떡밥이 또 터졌더군요. 지인들과 모여서 이야기를 하는데 다들 여기에 한 마디씩 얹는 분위기였습니다.

여기서 잠깐, 저는 개발자이지만, 흔히들 떠올리듯이 뭔가 '서비스'를 개발하는 사람은 아닙니다. 제가 하는 일은 '서비스'가 필요로 하는 '기술'을 개발하고, '기술' 사용에 어려움을 겪는 다른 개발자들을 돕는 일이죠. 그렇기 때문에 저는 기획자나 디자이너, 마케터 같은 직군을 볼 필요가 전혀 없습니다. 업무 시간의 대부분을 다른 개발자와 이야기하고 문제 해결 방법을 찾는 데 보내다가, 함께 기술을 개발하는 지구 반대편의 다른 개발자들과 이야기하다가, 뭐 그런 식이죠. 사정이 이렇다 보니 저는 아마 개발자 중에서도 가장 사람 얼굴 볼 일 적은 축에 속할 겁니다.

2.

결론부터 이야기하자면, 개발자들이 사회성이 부족한 것은 전반적으로 사실일 겁니다. 사회성도 엄연히 스킬이고 경험을 많이 타는 물건인데, 개발자라는 직군은 유난히 사람을 직접적으로 접할 시간이 적거든요. 심지어 관심사 같은 사람들끼리 몰려다니기까지 하죠. 의사나 변호사 같은 전문직의 수련 과정은 개발자와는 비교할 수 없을 정도로 빡세고 그들 역시 나름의 자기 사회가 있습니다만, 일단 일을 시작하면 별의별 종류의 사람들을 마주보지 않고서는 먹고 살기 어렵습니다. (자폐증을 앓는 변호사 이야기가 드라마로 나오면 아마 대박날 겁니다.) 반면 개발자는 굳이 그럴 필요가 없는 데다가, 사회성이 모자라도 크게 먹고 사는 데 지장이 있지는 않습니다. 계속해서 인력이 부족한 업종인 데다가 사람간의 편차까지 크기 때문에 더더욱 그렇습니다 - 아마도 개발자의 이미지가 오랫동안 "지저분한 몰골로 컴퓨터를 들여다보는 깡마른/뚱뚱한 남성"으로 스테레오 타입화 되어 왔던 데는 이러한 사정도 한 몫 했을 겁니다.

그런데 잠깐, 짚고 넘어가야 할 것이 있습니다. 과연 '사회성' 이라는 게 무엇을 의미하는 것이냐는 겁니다. 사회성은 "사회적 지능" - 그러니까, 자신의 행동이 타인에게 어떻게 받아들여지는지, 그리고 그로 인해 어떠한 효과가 날지를 인지하는 것 - 을 전제합니다. 문제는 사람이 전부 제각각이기 때문에 똑같은 행동 가지고도 받아들이는 방식 역시 다르다는 겁니다. 예를 들어서, "정신없이 바쁜 사람한테 달라붙어서 아무말 대잔치를 늘어놓는 것"은 영업 직군 사람들에겐 호의의 표시일 수 있지만, 개발자에게는 멱살 잡고 싸우자는 것으로 받아들여지는 식입니다. 그런 점에서 유치원에서 선생님이 애들한테 다른 아이의 심정이 어떻겠냐고 자꾸 물어보는 건 절반짜리 정답입니다. 어린 아이는 경험이 너무 없어서 상대방이 무슨 느낌을 받을지 알지 못하지만, 그렇다고 해서 항상 상대방이 나하고 똑같은 느낌을 받는 건 아니거든요. (네, 그런 점에서 회사는 유치원이 아니죠.)

사회성의 n가지 그림자

(이런 상황에서 유치원 선생님 떠올릴 게 필자 뿐만은 아닐 것이다.)

이렇게 '사회성'이란 다면적이고, 복합적이고, 상황 맥락을 많이 탈 뿐만 아니라 심지어 애매하기까지 한 물건입니다. 서로 다른 사람들 사이에서의 '사회성'은 조금 다르기 때문에, 다른 사람들과 모여 있을 때는 할 말이 없어 조용히 듣기만 하던 사람이 개발자 행사에만 가면 슈퍼 인싸 연예인으로 돌변하는 사태가 심심치 않게 벌어집니다 - 통용되는 상식이나 예상되는 행동의 범위, 관심사 심지어 유머감각 같은 게 완전히 다르다보니 벌어지는 일입니다. 이메일 같은 경우도 그렇습니다. 한국 사람들은 메일에 용건만 달랑 적어서 보내면 차갑고 정 없다고 느끼는 경우가 많지만, 미국인이나 독일인에게 메일을 보낼 때는 이야기가 좀 달라질 겁니다. 그런 점에서 사회성은 고정된 실체를 가진 무엇이라기보다, 위치에 따라 모습을 바꾸는 그림자에 더 가까운 물건인 셈이죠.

(평소 이런 인간들하고만 어울린다면 허용되는 패션의 범위는 굉장히 널럴할 것이다.)

3.

그렇다면, 개발자에게 사회성 같은 건 별로 중요하지 않을까요? 눈치 빠른 분들은 알아차렸겠지만, 저는 위에서 개발자는 사람을 '직접적으로' 볼 일이 적다고 했습니다. 왜 이런 단서를 붙였을까요? 간접적으로는 계속해서 보고 있기 때문입니다. 직업적인 개발자의 길로 들어서게 되면 지겨울 정도로 반복해서 듣게 되는 말이 유지보수성입니다. 소프트웨어는 개발되는 시간보다 유지보수되는 시간이 압도적으로 더 길기 때문에 나중에 다른 사람이 무리 없이 고칠 수 있도록 개발되어야 합니다. 그런데 이건 코드가 고치는 사람의 눈에 어떻게 보일지, 타인의 시각에 대한 이해를 전제하고 있습니다. (여기서의 '타인'에는 미래의 자기 자신도 포함됩니다.) 실제로 대놓고 코드를 공개해 놔도 흠잡기 어려운 뛰어난 개발자들을 보면 기술적인 지식 자체도 풍부하지만 무엇보다도 코드를 읽는 연습이 잘 되어있고, 읽는 사람에게 가해지는 인지 부하가 최소화되게끔 짜는 게 거의 척수반사급으로 몸에 배어 있는 경우가 많습니다. "극도로 자기중심적이어서 다른 사람이 도저히 알아볼 수 없는 코드를 짜는 천재 개발자"? 이건 형용 모순입니다. 그건 그냥 못 짠 거에요. 당사자만 모를 뿐이지.

(다른 개발자들을 이해하기는 커녕 이런 식으로 어그로나 끌고 다니면 쳐맞기 딱 좋을 것이다.)

간접적인 사회성 역시 사회성이기 때문에, 다면적이고 맥락에 민감하기는 마찬가지입니다. 이론적으로야 프로그래밍 언어는 문법(syntax)과 의미(semantic)의 묶음이지만, 현실적으로는 각 언어 커뮤니티별로 관심사나 중요하게 여기는 것이 다르기 때문에 '유지보수하기 좋은 코드'의 개념도 다릅니다 - 아마 자바 개발자가 파이썬스러운 코드를 짠다면 (개그 소재는 될 수 있을지 몰라도) 좋은 소리는 못 들을 겁니다. 중요한 건 바로 이 지점입니다. 개발자에게 사회성이 필요 없다...? 코딩할 때는 (간접적인) 사회성 잘만 챙겼잖아요? 함께 서비스를 만들어가는 (특히 다른 직군) 사람들과의 '직접적인 사회성'은 필요없다...? 아니, 개발자 사이에서도 언어 커뮤니티에 따라서 필요한 사회성 잘만 바꿔끼우잖아요? 언어적 사회성 같은 건 별로 중요하지 않다...? 반대 아닙니까? 솔직히 우리끼리는 (어차피 코드로 이야기하니까) 좀 직설적이고 불친절해도 되는데, 그 사람들은 해당 사항이 없지 않나요?

아, '서비스'가 아니라 '기술'을 하는 사람은 조금 다르지 않겠냐구요? 현실은 그 반대입니다. 요구되는 기술적 지식 수준이 높아서 그렇지, 이 분야도 똑같습니다. 기술을 개발하는 개발자는 그저 서비스를 개발하는 다른 개발자가 고객인 개발자일 뿐입니다. 상대방이 어떻게 작업을 하는지, 의도가 무엇인지, 무엇이 문제인지 이해하는 것을 전제로 한다는 겁니다. 타인의 시각을 인식하지 않아도 되는 곳? 사회성이 필요없는 곳? 그런 데는 없습니다. 요구되는 사회성의 모습이 조금 다를 뿐이죠.

4.

(남들 생각 안 하고 이런 거에나 집착한다면 개발자 사회 전체의 지탄을 받기에 충분할 것이다.)

제가 '서비스'가 아닌 '기술'을 업삼게 된 데는 제가 사람을 너무 싫어한다는 탓도 있었습니다. 하지만 정작 그렇게 먹고 살아보니, 생각하던 것과는 많이 다르더군요. "여러 서비스에 사용되는 기술을 개발한 사람" 의 정체는 "서비스를 개발하는 사람에게 무엇이 필요한지를 이해하고, 자신의 해법을 타인에게 설득할 수 있는 사람" 이었습니다. 문제는 서비스를 개발하는 사람들은 다른 직군의 사람들과 어울려서 일을 하기 때문에, 한 다리 건너 있는 그들의 존재를 전제하지 않고서는 일이 성립조차 되지 않는다는 것이었습니다. 사람이 싫어서 사람 안 봐도 되는 곳으로 왔더만 오히려 더 많은 수의 그림자에 갇혀버린 꼴이 된 거죠.

연말 휴일 반납해가며 로깅 라이브러리의 보안 취약점을 붙잡고 있는 개발자는 단순히 기술에 빠져서 세상과 담쌓은 사람이 아닙니다. 그는 사람의 문제를 풀고 있는 겁니다. 연관된 종속성을 사용하고 있는 수많은 다른 개발자들, 그리고 그들 뒤에 있는 다른 사람들 - 투자자들, 다른 직군 사람들, 그리고 그보다도 많은 최종 소비자들의 그림자를 보고 있는 겁니다. 처음에는 눈 앞의 개발자들이랑 이야기하기도 바쁜데 무슨 걔네까지 신경을 쓰냐 싶었습니다. 하지만 시간이 갈수록 분명해졌습니다. 제가 그들의 그림자에서 벗어나는 건 불가능했습니다.

5.

"전통적으로 이 기능은 a 기술을 사용해서 구현되었습니다만, 최근 a를 기반으로 한 b 기술을 쓰는 방식이 떠오르고 있습니다. 얼마 전부터 A 언어 커뮤니티에서 B 문제에 대한 해법으로 c 기술이 떠오르고 있는 것과 연관이 있는 것으로 보입니다. O사, R사도 이 트렌드에 합류하는 중이니 지원 중단 걱정은 안 해도 될 것 같습니다."

며칠 전, 상사에게 뭔가를 보고할 일이 생겼습니다. 특정한 기능을 구현하기 위한 기술 스택을 검토하는 것이었습니다. 열심히 조사한 내용을 써 놓고 보니, 묘하다는 생각이 들더군요. 극도로 기술적인 문제와 내용이었지만, 이건 전부 사람과 사회에 대한 이야기였습니다. 여러 이해 당사자들의 관심사? 거기에 대응하는 개발자 커뮤니티의 움직임? 이에 따른 기술 생태계의 트렌드? 우리는 이런 걸 사회라고 부릅니다. 충분히 기술적인 문제는 사회적인 문제와 구별할 수가 없는 겁니다.

유감스럽게도, 저는 그걸 너무 늦게 깨달아 버렸지만요.

한 줄 요약: 사회성 같은 거 안 따지면 저처럼 됩니다. 인생 조지고 싶으시다면 해보시든가.
착한 주니어는 절대 따라하지 마세요.