메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

어느 구글러의 경험담: 내 코드를 숨기고 싶어요

한빛미디어

|

2022-05-31

|

by 브라이언 피츠패트릭

17,582

 

... 이는 프로그래머들이 느끼는 매우 일반적인 감정이라서 자연스럽게 동굴에 숨어 일하고 일하고 일하고 다듬고 다듬고 또 다듬습니다. 그 과정에서 여러분이 저지른 바보같은 짓은 아무도 보지 못하게 하고 모든 일을 마무리한 후 완성된 걸작을 공개하고 싶어 하죠. 그래서 코드가 완벽해질 때까지 숨기는 것입니다. ...

 

 

team-g13be7255b_400.png

 

지난 20년간 제 동료 벤과 저는 많은 프로그래밍 콘퍼런스에서 발표를 했습니다. 2006년, 우리는 (지금은 중단한) 오픈 소스 프로젝트 호스팅 서비스를 론칭하였습니다. 

 

초기에는 서비스에 관한 질문과 요청이 수없이 쏟아졌습니다. 그리고 2008년 중반에 이르자 밀려드는 요청들이 몇 가지 공통된 경향을 띈다는 사실을 알아챘습니다.

 

 

“구글 코드에서 운영되는 서브버전에서 특정 브랜치를 숨길 수 있는 기능을 넣어주시겠어요?”

“프로젝트를 비공개로 시작했다가 준비가 됐을 때 오픈 소스로 전환할 수 있도록 해주세요.”

“코드를 처음부터 다시 짜고 싶은데요, 히스토리를 싹 지워주실 수 있나요?”

 

 

이 요청들에서 공통된 주제가 보이나요? 정답은...

 

'불안감'입니다. 

 

사람들은 자신이 진행 중인 작업물을 다른 사람이 보고 판단하는 걸 두려워합니다. 어쩌면 이런 두려움은 인간의 본성에 속할 것입니다. 누구라도 비난받고 싶어 하지 않으며, 작업물이 완성되기 전이라면 더욱 그렇습니다. 

 

이 사실을 파악한 우리는 소프트웨어 개발에서의 좀더 보편적인 경향을 찾아낼 수 있었습니다. 불안감은 사실 더 큰 문제의 징후임을 말이죠.

 

 

천재 신화

많은 사람이 본능적으로 우상을 찾고 흠모합니다. 소프트웨어 엔지니어들에게는 '리누스 토르발스', '귀도 반 로섬', '빌 게이츠' 같은 이들이 영웅적인 업적으로 세상을 바꾼 아이돌일 것입니다. 

 

흔히들 리누스는 혈혈단신으로 리눅스를 개발해냈다고 알려져 있습니다. 사실 리누스가 한 일은 유닉스와 유사한 커널의 시제품을 만들어 메일링 리스트로 뿌린 것입니다. 작은 성취라 할 수 없는 놀라운 성과인 건 맞지만 전체 그림에서는 빙산의 일각일 뿐이죠. 

 

현재의 리눅스는 초기 커널보다 수백 배는 크고, 수천 명의 인재들이 함께 개발했습니다. 리누스의 진짜 업적은 이 사람들을 협업하도록 이끈 것입니다. 리눅스는 리누스만의 아이디어가 아니라 커뮤니티가 함께 노력해 이룬 결실입니다.

 

(유닉스도 켄 톰프슨과 데니스 리치만의 작품이 아닌 벨 연구소의 유능한 사람들이 힘을 합쳐 만들어냈습니다.)

 

마찬가지로, 파이썬은 온전히 귀도 반 로섬의 작품일까요? 그가 첫 번째 버전을 작성한 건 사실입니다. 하지만 그 후 버전들은 수천 명의 사람이 아이디어를 모으고 기능을 개발하고 버그를 수정하며 만들었습니다. 

 

스티브 잡스는 매킨토시 제작팀을 이끌었습니다. 빌 게이츠는 초기 가정용 컴퓨터를 위한 베이식(BASIC) 언어 인터프리터를 작성했지만, 더 큰 업적은 MS-DOS를 중심으로 마이크로소프트라는 회사를 일구어 성공시킨 일입니다. 

 

 

team-gd53356998_400.png

 

 

이들은 모두 커뮤니티를 이끌어 집단적 성과물의 상징이 되었습니다. 이렇듯 천재 신화는 팀이 이룬 성공을 단 한 사람(리더)에게 몰아주어 만들어지는 경향이 있습니다.

 

그런데 우리는 왜 매번 특정 개인을 우상화하는 걸까요? 사람들은 왜 유명인(셀럽, celebrity)이 홍보하는 제품을 구매할까요?

 

인간은 본능적으로 리더와 롤모델을 찾고, 그들을 우상화하고 흉내 내려 합니다. 우리 모두에겐 영감을 줄 영웅이 필요하며, 프로그래밍 세계도 다르지 않습니다. 

 

우리는 모두 리눅스처럼 세상을 바꾸는 무언가를 만들거나 아주 멋진 차세대 언어를 설계하고 싶어 합니다. 내면 깊숙한 곳에서 많은 엔지니어가 자신이 천재로 비치기를 원합니다. 그 환상이 실현되는 시나리오는 대략 다음과 같습니다.

 

  1. 굉장히 새로운 개념이 떠오릅니다.
  2. 몇 주 혹은 몇 달 동안 동굴로 사라져서 이 아이디어를 완벽하게 구현해봅니다.
  3. 완성된 소프트웨어를 세상에 공개하여 여러분의 천재성에 모두가 충격을 받습니다.
  4. 동료들이 여러분의 영리함에 놀라움을 금치 못합니다.
  5. 여러분의 소프트웨어를 사용하려는 사람들이 물밀듯 몰려듭니다.
  6. 명성과 부는 자연스럽게 따라옵니다.

 

여기서 잠시, 현실을 직시해볼까요? 여러분은 아마 천재가 아닐 것입니다.

 

도발하려는 의도는 전혀 없습니다. 여러분은 분명 매우 똑똑한 사람일 것입니다. 

 

그런데 진짜 천재는 정말 정말 드물잖아요? 여러분은 까다로운 기술인 코딩을 할 줄 압니다. 하지만 여러분이 설령 천재더라도 코딩 기술만으로는 부족합니다. 

 

천재들도 실수를 하고 훌륭한 아이디어와 최고 수준의 프로그래밍 기술도 여러분이 만든 소프트웨어가 성공하리란 보장은 해주지 못합니다. 심지어 여러분은 ‘사람들에게 가치 있는 문제’가 아닌 ‘분석 자체에만 의미를 두는 문제’를 풀고자 매달려 있을지 모릅니다. 

 

천재라고 해서 괴짜처럼 행동하는 게 용서받는 시대는 지났습니다. 천재든 아니든 사회성이 부족한 사람은 팀원으로 적합하지 않기 때문이죠. 

 

구글에서의 업무 대부분이 천재 수준의 지능을 요구하지 않는 반면, 모든 업무가 최소한의 사회성을 요구합니다(다른 회사들도 대동소이합니다). 그래서 우리의 경력을 미래로 이어주는 핵심은 다른 사람과 얼마나 잘 협력하느냐입니다.

 

천재 신화는 결국 우리 내면의 불안을 드러내는 또 다른 사례일 뿐입니다. 많은 프로그래머가 동료들이 자신의 실수를 보면 자신이 천재가 아님을 눈치챌 것이라는 두려움 때문에 방금 시작한 프로젝트를 공유하길 꺼립니다.

 

다음은 제 친구가 실제로 한 말입니다.

 

 

“다른 사람들이 아직 완성되지 않은 내 코드를 보는 건 ‘진짜 진짜’ 겁이 나. 

그걸 진지하게 보고 내가 바보라고 생각할 것만 같아.”

 

 

이는 프로그래머들이 느끼는 매우 일반적인 감정이라서 자연스럽게 동굴에 숨어 일하고 일하고 일하고 다듬고 다듬고 또 다듬습니다. 

 

그 과정에서 여러분이 저지른 바보같은 짓은 아무도 보지 못하게 하고 모든 일을 마무리한 후 완성된 걸작을 공개하고 싶어 하죠. 그래서 코드가 완벽해질 때까지 숨기는 것입니다.

 

진행 중인 프로젝트를 숨기려는 이유는 더 있습니다. 바로 누군가가 아이디어를 훔쳐서 나보다 먼저 세상에 내놓을지 모른다는 두려움입니다. 그래서 비밀에 부치고 통제하려 합니다.

 

cat-ge20e5861e_6002.jpg

 

 

숨기는 건 해롭다

만약 여러분이 오롯이 홀로 일한다면 실패할 위험성을 불필요하게 키우고 자신의 성장 잠재력을 속이는 것입니다. 

 

소프트웨어 개발이라는 것이 고도의 집중력을 요하고 혼자만의 시간을 견뎌내야 하는 매우 지적인 작업인 것은 사실이지만, 집중과 인내가 주는 가치(와 필요)를 협업과 인내로 맞서 이겨내야 합니다.

 

무엇보다, 자신이 올바른 길을 걷고 있음을 어떻게 확인할 수 있을까요?

 

여러분이 자전거 설계 애호가가 되었다고 상상해보죠. 

 

bike-g0719ee204_300.png

 

 

어느 날 지금까지 없던 놀라운 기어 변속기 설계가 떠올랐습니다. 필요한 부품을 주문하고 몇 주 동안 창고에서 프로토타입을 완성했습니다. 

 

역시 자전거 애호가인 이웃 사람이 어떻게 지내냐고 물어도 이 아이디어에 관한 이야기는 꽁꽁 숨겼습니다. 완성될 때까지 아무도 몰랐으면 했기 때문이죠. 

 

다시 몇 달이 지났지만 프로토타입을 완벽하게 만드는 데는 어려움이 따랐습니다. 하지만 비밀 프로젝트라서 기계를 아주 잘 아는 친구에게조차 조언을 구할 수 없었습니다.

 

그러다 어느 날 이웃 사람이 자기 창고에서 완전히 새로운 기어 변속기를 단 자전거를 끌고 나오는 게 아닙니까? 당신이 생각한 설계와 매우 흡사했는데, 자전거 매장에서 일하는 친구들의 도움을 얻어 완성했다고 하는군요. 

 

화가 났습니다. 그리고 당신이 만들던 것을 보여줬습니다. 

 

옆집 사람이 잠시 살펴보더니 몇 가지 간단한 설계 결함을 짚어줍니다. 그에게 진즉 보여줬다면 한 주면 해결됐을 결함들이었습니다. 

 

 

이 이야기가 몇 가지 울림을 던져줄 것입니다.

 

 

간헐적 버그들

사람은 완벽하지 않습니다. 그래서 인간을 ‘간헐적 버그들의 집합’에 가깝다고 이야기하곤 하죠. 하지만 동료에 내재된 버그를 이해하려면, 무엇보다 여러분 내면에 서식하는 버그를 먼저 이해해야 합니다. 

 

그런 취지에서 여러분들이 자신의 반응, 행동, 태도에 관해 되짚어보는 질문을 던져보길 바랍니다. 

 

 

together-gbf0f3055f_400.png

 

 

스스로를 되돌아보며 더 효율적이고 성공적인 소프트웨어 엔지니어로 가는, 즉 사람과 관련한 일에 쏟는 에너지를 줄이고 멋진 코드 작성에 더 많은 시간을 쓰는 엔지니어로 성장하는 진정한 깨달음을 얻기를 희망합니다.

 

 


 

이 글은 <구글 엔지니어는 이렇게 일한다> 도서 내용 일부를 발췌 편집하여 작성되었습니다. 구글러가 전하는 문화, 프로세스, 도구의 모든 것을 재미있게 풀어내어 출간과 동시에 국내외 많은 이들로부터 극찬과 공감을 얻어낸 내용들을 만나보실 수 있습니다.   

 

표지_구글 엔지니어는 이렇게 일한다_300(3).jpg


구글 엔지니어는 이렇게 일한다』

댓글 입력
자료실