꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 알 수 없는 사용자
안녕하세요. 17일에만 여러분께 출몰하는 랩하는 좀비, 줄여서 랩좀비군입니다. 2일에도출몰해야하지만게으름이나를압박 원래 주말에 글을 쓰려고 준비해 놨는데 급한 사정이 있어서 이제야 게시하는군요. 날씨가 아직도 춥습니다. 언제 이놈의 겨울이 끝날 것인지 기다려지는군요. 이제 한국에는 여름겨울 뿐이야... 이런 아늑한(?) 분위기에서 다들 프로그래밍은 잘들 되십니까? 어서 봄이 되어야지 먹으러다니는데 외출도 하고 좋은 데 좀 거식하네요
 
오늘은 저에게 어울리지 않는 교양적인 이야기를 하려고 합니다. 사실, 저는 프로그래밍을 하면서 외적인 인자에 대해서는 무감각해지며 그것에 대해서는 깊게 생각하지 않는 프로그래밍덕후스러운 사람입니다. 학원다니던 시절에 동기들이 어떻게 해야 프로그래밍을 잘할까? 라는 고민을 할 때도, '그냥 졸라 열심히 하면 되 임마' 라면서 공부하던 기억이 납니다. 하지만 요즘에는 이런 것들을 많이 생각하게 되더군요. 어떻게 하면 프로그래밍을 더 잘 할 수 있는가, 다른 프로그래머와 어떻게 대화해야 하는가? 어떤 분을 뽑아야 우리 팀이 더 나아질까 등등, 프로그래밍을 배우던 시절에는 동기들의 고민에도 별로 공감이 가지 않고 그랬는데, 나이가 먹으니 심적인 변화가 좀 있는 것 같습니다.

아.. 벌써 30대가 되었어.


그런 의미에서 오늘 풀어볼 썰은 저희 회사에서 시행하고 있는 재택근문에 대해서 입니다. 우선 여러분께 질문을 하도록 하지요.
 

여러분은 언제 코딩이 제일 잘 되었나요?
다른 말로 표현해 볼까요?


여러분의 생산성은 언제 극대화 되었습니까?



프로그래머에게 생산성은 버그의 수정, 기능의 추가, 리팩토링 등등이 있겠습니다.
이런 것을 통틀어서 개인적인 경험을 말씀드려 보겠습니다. 

저희 회사에서 개발하고 있는 게임중에 R1이라는 게 있습니다.

이런 게임이라능.. 오덕심을 자극한다능.. 하악하악. 허벅지 하악하악.

이 게임을 만들고 있는 팀에 가서 현재 제작하고 있는 3d Engine을 이 게임에 맞게 변형시키는 일을 하게 되었습니다. 넷북에서도 돌아갈 수 있을만한 최소사양의 구성(고정파이프라인이 반드시 들어가야 겠네요), 기존의 3d Engine에서 동작하던 무거운 소스 코드의 제거, 라이트맵이라거나, 포스트 이펙트의 구성이라거나... 등등. 처음 얘기를 꺼냈을 때, 기간은 15일에서 20일 정도 소모될 것으로 예상하였고, 저도 최소한 코드를 붙이고 기능들을 추가하는 데만도 10일 정도 걸릴 것으로 예상했습니다.

 그런데 작업을 시작하고 열심히 하다 보니 5일만에 종료되네요?

난 좀 짱인듯.


감히 말하지만 이 5일동안 작업의 분량은 그 때까지 프로그래밍을 하면서 가장 많은 생산성을 보여준 5일이라 생각됩니다. 
그러면 어떤 것들이 이 일을 가능하게 했을까요? R1팀으로 파견 나가게 되었을 때, 저에게는 적지 않은 환경 변화가 있었습니다.
분리된 스튜디오, 문 앞 자리, 오직 인트라넷, 무한 통닭. 이 4가지가 그것입니다. 
하나하나 이야기 해 보도록 하겠습니다.

분리된 스튜디오
그 당시 R1을 만드는 스튜디오는 본사와 걸어서 5분정도 떨어져 있는 곳이었습니다. 어떻게 생각하면 가까운 거리지만, 다르게 생각하면 매우 먼 거리죠. 마음먹고 움직이지 않는 이상 쉽게 갈 수 있는 위치는 아니었습니다. 게다가 본사와는 다른 네트워크를 사용하고 있었구요.

적절한 멀티는 승리의 열쇠


 그렇게 해서 이동을 하고 나니 기존의 업무에서는 완전히 해방되게 됩니다. 기존에 엔진에서 만들고 있었던 기능에 대한 버그 리포트도 없고, 기존 팀의 요구사항도 없었지요. 한 마디로, 작업중에 누가 건든다거나 하지 않는 고립된 환경이 조성된 겁니다. 일을 하다가 다른 일을 하게 될 때는 많은 비용이 들어갑니다. 그것을 프로그래머들은 Context Switch라고 하는데, 예전에 본 글에 대한 기억에 의하면, '다른 프로그래머에게 질문하기 전에 20분은 검색해 보아라. 네가 질문을 하는 순간 그 사람은 20분을 다시 집중하는 데 투자해야 한다' 라고 하더군요. 이 비용은 무시할 수 없습니다. 하지만 이 비용을 발생시키지 않는 환경이 조성된 것이지요.

문 앞 자리

짧은 기간 발령(?)이 난 지라 크게 자리를 옮길만한 분위기가 아니었습니다. 게다가, 맡게 된 일도 딱히 팀과 관련된 일이 아닌 혼자서도 해결할 수 있는 일이었기 때문에 크게 상관이 없었지요. 그래서 문 앞에 자리를 마련하게 되었습니다. ...문 앞자리입니다.

언제나 간부님이 소리없이 나타나시는 문 앞 자리


 문을 열면 바로 모니터가 보인다거나 그렇지는 않지만, 동료들이 왔다갔다 하면서 가끔 모니터를 처다보는 자리였습니다. 그리고 조금만 방심하면 간부님이 나타나 제 모니터를 바로 확인할 수 있는 자리였습니다. 뭐, 딴짓을 해도 갈구거나 하는 회사는 아니지만, 그래도 대놓고 딴짓하기에는 사원으로서 회사에 대한 예의가 아니지요.

이렇게 실시간 감시가 되어지는 자리에서 일을 하게 되었습니다.
문 앞이라 동료들의 움직임이 신경쓰이기는 했지만 집중을 하게 되면 개의치 않게 되더군요. 게다가 좋은 점도 있었는데, 동료들이 하나의 기능이 완료될 때마다 모니터를 스윽 쳐다보면서 반응을 주기도 하였습니다. 라이트맵이 부활한다거나, 글로우의 강약이 쉽게 조절된다거나 할 때 말이죠. '우와 좀 쩐다?' '글로우 죽이는데?' 등등 더 많은 반응을 받고 싶어서 열심히 했던 기억이 나는군요.


오직 인트라넷
원래 회사에서는 개인 인터넷을 할 수 있는 PC를 제공해 줍니다. 하지만, 자리 이동할 때 귀찮아서 인터넷 PC를 안가져 갔더니(모니터까지 들고가야 하니까!) 따로 인터넷을 할 수 있는 기기가 없는 상황이었습니다. 뭐, 아이폰은 있지만 쾌적한 웹서핑은 할 수 없었지요.

군대에서는 인트라넷만 보고 있어도 재미있다.


업무에 대한 궁금증이 있을 경우는 동료의 넷북을 빌려서 검색할 수 있었습니다. 하지만, 동료의 넷북이니 바로 반납해야 하지요. 그걸로 인터넷을 할 수는 없었습니다. 눈에 보이는 것은 일밖에 없고, 한눈 팔 것도 없는 환경이었습니다.


무한 통닭

공돌이에게는 여러 모로 친근한 통닭. 통닭은 진리입니다.

하루 하루 기능이 만들어질 때마다 회사 게시판에 완료된 일들에 대해서 게시했는데, 그 때마다 이사님이 열심히 했다고 통닭을 사주셨습니다. 첫 하루는 그냥 앞으로 열심히 하라는 의미로 받아들이고 먹었는데, 다음날, 그 다음날도 저녁대신에 통닭을 먹게 되더군요. 그러다보니 오늘은 또래오래를 먹고 내일은 굽네를 먹기 위해 달리자! 라는 마음이 생기더군요. 그렇게 일주일동안 매일 빠른 포상 으로 통닭을 먹게 되는 상황이 되었습니다. 회사 입장에서는 싸고, 제 입장에서는 만족감이 뛰어난 긍정적인 포상이었찌요.

이렇게 4가지 환경이 조성되었습니다.
이 4가지의 핵심은 다음으로 표현할 수 있겠네요.

분리된 스튜디오, 오직 인트라넷 == 고립된 환경
문 앞 자리 == 실시간 감시
무한 통닭 == 빠른 포상


이렇게 말이죠.

하지만 사람은 이것만으로는 일을 하지는 않아요.
일에 대한 동기가 없다고 할까요? 물론 월급을 받고 있으니 일을 해야 하긴 합니다.
하지만 이 일에 집중하게 되는 상황은 쉽게 만들어지지 않죠. 그런의미에서 다른 질문을 해 보겠습니다.

여러분은 언제 일을 하고 싶어합니까?
역시 다른 말로 표현해 보겠습니다.

여러분은 언제 받습니까?

흔히 어떤 일이 아주 잘되면 '아 나 오늘 좀 받는데?' 라고 표현 합니다. 일 뿐만 아니라, 게임을 하거나 술을 먹거나 등등의 상황에서도 자주 이 단어를 사용하게 됩니다. 바로 지금 내가 하고 있는 행동에 대한 집중력이 최고에 달했을 때, 즉, 무아지경의 상황에 들어갔을 때 이 단어를 내뱉게 되지요.

여러분들에게는 제로의 영역이라는 단어가 더 어울릴지도... 오덕오덕

 
이 필이 충만한 상황으로 돌입을 하려면 어떻게 해야 할까요? 
아니, 그 상황으로 인위적으로 들어가는 게 가능할까요? 하야토는가능할지도
필은 인위적으로 만드는 게 아니라 영접하는 겁니다. 만약 만들 수 있다면 님은 외계인이니 어서 지구를 떠나세요. 
아니 떠나시기 전에 UFO는 주시고..

아무튼, 프로그래밍을 하다보면 잠자다가도 코딩이 하고 싶어지는 상황을 겪으신 분들이 많으실 겁니다.
회사 내에서 막 고민했었던 버그에 대한 해결책이 떠오르기도 하지요. 퇴근하다가 지하철에서 영접하기도 합니다. 
주말에 이것 저것 생각하다가 바로 실험해 보고 싶으시지 않으셨는지요?
그리고 잠에 들기 전에 눈을 감으면서 이것 저것 생각하다가 뭔가 퐉! 하고 오신 기억은 없으신가요?
하지만 그 때, 바로 코딩을 할 수는 없습니다. 왜냐구요?

  
다음날 아침에 일어나서 출근을 해야 하거든요. 

내일 일어나려면 자야 합니다.


그리고 자고 일어나면 아쉽게도 필은 어디론가 사라져 있습니다.
물론 남아 있을 때도 있긴 하지요. 한 8:2정도로 사라진다고 봐도 무방하겠네요.
아쉽습니다. 통탄할 지경입니다. 왠지 뭔가 하면 잘 될 것 같은 상황에서 우리는 다음날 출근을 위해서 잠을 자야 합니다.
그리고 잠을 안자도 되는 상황에서는 작업하고 있었던 소스코드가 없어요. 일을 하고 싶은데도 일을 할 수가 없습니다.
이는 회사와 개인에게도 큰 낭비입니다.

그렇다면 출근을 마음대로 할 수 있고, 소스코드만 있다면 어떻게 될까요?

집에서 잠자다가 해결되지 않는 버그의 답이 떠올랐습니다. 그럼 바로 작업에 들어가도 됩니다. 다음날 늦잠을 자도 되거든요. 
주말에 TV를 보다가 아이디어가 떠올랐어요. 그럼 시험해 봐도 됩니다. 소스코드가 집에 있거든요.
머릿속에 떠오르는 생각들을 바로 시험해 볼 수 있는 환경이 조성된 겁니다.

자, 이제 우리에게는 '고립된 환경, 실시간 감시, 빠른 포상' 그리고 '필 받으면 바로 작업할 수 있는 환경'이 조성되면 뭔가를 할 수 있을 것 같은 생각이 듭니다. 고립된 환경에서 다른 동료들의 요청이나 버그리포트를 받지 않고, 실시간으로 누군가가 감시하고, 빠른 포상이 있으며 게다가 필 받으면 바로 작업할수 있는 환경을 조성하면 됩니다.

 
그래서 저희 회사에서는 마음대로 재택근무를 시작해 보았습니다. 
이거어째회사광고스멜이

음.. 집 모니터는 좀 구린데?



재택근무

모두 잘 아시고 있는 집에서 근무하는 것을 말합니다.
하지만, 여기서는 꼭 집일 필요는 없습니다. 제 경험에 대해서 말씀드렸던 고립된 환경이 기억나시나요?
각자의 취향에 맞게 고립된 환경을 조성하면 됩니다. 동물을 좋아하시면 애견, 애묘카페. 바다가 좋으면 제주도.
돈 좀 있으시면 발리, 미국, 캐나다, 남극(?). 등 와이파이가 되는 곳이라면 어느 곳이든지 가능합니다.
자신의 재력이 커버할 수 있는 곳에서 오직 프로그래밍에만 집중할 수 있는 고립된 환경을 조성하면 됩니다.

애견 카페에서 작업하고 있었던 랩좀비군.


회사는 사원에게 재택근무를 할 수 있는 것만으로도 이미 빠른포상이 진행되었습니다.
작업한 결과물에 대한 포상이 아닌 미리 포상을 내리고 작업을 열심히 하기를 회사는 사원에게 기대합니다.
사원은 그런 회사의 믿에 대한 보답으로 결과물을 내기 위해서 집에서 열심히 쿵짝쿵짝합니다.

그러나 실시간 감시는 재택근무와는 완벽하게 상반되는 개념입니다.
회사에 사원이 없으니 무엇을 하고 있는지 체크를 할 수 없습니다.

이 부분은 빠른 포상과 더불어서 믿음에 의한 통제에 맡기고 있습니다. 회사가 사원을 믿고 재택근무를 허락하고, 그 믿음에 의해서 사원은 일을 하게 됩니다. 사원과 회사간의 신뢰관계는 증가하고, 사원은 회사에 대한 충성도가 증가하게 됩니다. 그리고 사원은 회사에 자신이 오늘 한 일에 대해서 게시하면서 어떤 일들을 했다고 게시를 합니다. 이 정도면 됩니다. 어떻게 일을할 것인지에 대한 수단은 중요하지 않습니다. 누워서 하던지, 게임 하면서 하던지 그저 그 날에 대한 결과물만 있으면 됩니다. (프로그래밍 방법론에 대한 수단이 아닙니다. 어떤 방식으로 일을 할 것인지에 대한 수단입니다.) 결과물이 없다면? 삽질을 한 기록도 결과물이 됩니다. 사원은 자신이 어떤 방법을 시도했고, 무엇때문에 실패했는지 게시판에 글을 남깁니다. 그러면 그는 일을 한 것입니다.

이제 필받으면 집에서 잡업하고 어떤 작업을 해서 어떤 결과가 나왔는지 회사 게시판에 게시 하면 됩니다.

삽질을 했다면 삽질을 했다고 표시를 합니다.



궁극적인 목적
사실, 저희 회사에서의 궁극적인 목적은 다른 곳에 있습니다. 재택근무는 궁극적인 목적으로 가기 위한 하나의 실험입니다.

일주일에 노동시간을 40시간으로 추천하고 있고, 일주일에 5일을 작업하는 게 통상적인 노동자들의 생활 방식입니다.
...어어 야근하시는 분들에게는 죄송하지만 통상적이라 하겠습니다.
보통 하루에 8시간씩 일하게 되는데, 사실 프로그래머에게 있어서는 그리 긴 시간이 아닙니다. ...아니지요?

예를 들어 볼까요? 게임에 들어갈 어떤 기능을 만들고 있습니다. 서버의 패킷도 바꾸고 클라이언트의 로직도 조금 손 봤습니다. 이제 이 두 개를 잘 조합해서 넣으면 됩니다. 빨리 게임에 넣어서 직접 해 볼 수 있다는 기대감으로 가득찬 상태입니다. 하지만 어느새 퇴근할 시간이 다가옵니다. 그렇다면 다음날을 위해서 퇴근을 하는 게 좋을까요? 아니지요. 필 받으면 그 자리에서 필이 사라질 때까지 작업을 하면 됩니다. 하루 24시간 중, 자는 시간8시간을 제외하곤 16시간 정도는 일을 할 수 있습니다.

 사실, 프로그래밍을 처음 공부하던 시절에는 하루에 12시간도 모자랐습니다. 공부하다보면 여기 저기 크게 삽질을 하게 되고, 이 구멍을 메꾸기 위해서 이것 저것 시도하다보면 12시간은 금방 지나갑니다. 심지어는 프로그래밍하는 게 너무 즐거워서 날을 샌 적도 있습니다. 이런 상태까지 가 본 경험이 있다면 다들 한 번쯔음은 생각해 본 것이 있을 겁니다.

필 받을 떄 2-3일 일하고 2-3일 쉬고 그러면 안될까?

됩니다. 사실 그 게 더 효율적일 수도 있습니다. 수단을 가리면 안됩니다. 결과물이 훌륭하다면 어떤 방식으로 일을 해도 됩니다.
그것을 위해서 조용한 곳에 프로그래머들만 따로 오피스텔을 잡아서 일을 해 볼까도 했습니다. 오피스텔에서 같이 자고, 일하고 싶을 때 일하고 심심하면 근처 바다 가서 놀다가, 다시 필 받으면 일하고 등등...국내일 필요도 없지요. 아에 말도 안통하는 외국에 나가서 일할 수도 있지요. 하지만 각 사원들의 개인사정이 있는지라 이 부분은 조금 힘들더군요. 그래서 저희는 그 중간과정으로 재택근무를 시행하고 있습니다.

성과
그 동안 재택근무를 하면서 많은 성과가 있었습니다.
잠자리에 들아가서 이것 저것 생각하다가 필 받아 밤 늦게까지 작업을 한 후 다음날 오후에 어그적 어그적 출근한다거나, 대규모 리팩토링을 위해서 짐을 싸들고 집에서 일하면서 일주일에 한 번씩 잡요청을 처리하기 위해 출근한다거나, 주말에 필 받아서 작업한 다음날 쉰다거나, 좀 더 메인 브랜치와 분리된 개발 환경을 만들기 위해서 머큐리얼을 설치해본다거나 등등, 그 동안 고립되지 않은 환경에 일을 하면서 '이것 좀 하면 프로젝트의 좋을텐데' 라고 시도해 보고 싶었던 일들을 이제 하게 되었습니다. 코드는 더욱 좋아지고, 앞으로 어떤 일을 해야 하는지 정리도 되었습니다. 프로그래머들의 회사에 대한 충성도도 높아졌습니다.

문제는 회사 입장이겠지요. 이놈이 일을 제대로 하고 있는지 안하는지 알 방법은 결과물 뿐입니다. 그런데, 사실 프로그래머가 결과물을 내지 않고 회사에 앉아 있으면 그것도 골치입니다. 차라리 집에서 회사밥 축내지 않고 일하는 게 더 좋을 수도 있습니다. 이건 사원을 믿으면 됩니다. 그리고 최소한의 장치로 그 날 한 일에 대해서 게시판에 게시하기를 하면 됩니다. 사원에게 믿음을 주면 제대로 된 사원은 그 믿음에 최선을 다해서 보답할 것입니다. 그렇지 않은 사원은 있으나 마나이니 짤라버리세요.

어떻습니까? 다른 분들의 회사에서도 한 번 재택근무를 시행해 보시지 않겠습니까?
그럼 랩좀비군은 이만.. 총총총. 

반응형
,