2014년 2월 20일 목요일

개발자에게 야근은 미친 짓이다

어떤분야에 10년이상의 일을 하다보면 많을 것들이 공부된다.
세상을 보는 눈도 달라지게 된다.

소위 IT기술이라는 구현부분에 여러모습의 프로그래머들이 있다.
그들은 정확히 자본이 이익을 탐닉할 수 있는 도구적측면이 컸다.

대량생산의 산업화시대에도 같은 논리가 있었다.
루틴한 일은 기계가 하고, 사람은 창의적인 일을 해야 한다는...

결과는 기계값보다 인건비가 싸면 사람쓴다.는 현실에 직면하게 되었다.

인류가 살아오면서 발견하고 실현되었으면 하는 가치는
어디 갔는지 흔적도 발견하기 힘들다.
오히려 가치없는 허상의 거품들만 실상을 오염시키며 득세하고 있는 것이다.
어느시대나 그랬던 것 같다.

무엇이 문제일까?

민주주의는 사회적 결정을 하는 하나의 도구일 뿐이다.
가치가 아니다.

투표로 결정되는 민주주의 사회에서
그 사회의 제반문제는 다 그 구성원의 결정이다.
즉 그들이 원하는 것에 대한 결과물인 것이다.


아래 기사를 읽다가 생각이 나서 끄적거린 것.


개발자에게 야근은 미친 짓이다
http://www.zdnet.co.kr/column/column_view.asp?artice_id=20140218180039

이러저러한 사정 때문에 며칠 야근을 하게 되었다. 아침 8시부터 코딩을 시작해서 밤 12시까지 멈추지 않았다. 더 이상 몸이 견딜 수 없을 때 잠을 잤고, 다시 아침에 일어나서 새벽부터 코딩을 시작했다. 미국 동부에 폭설이 내려서 아침저녁으로 눈을 치워야 했던 것은 덤이다. 이런 식으로 끝까지 ‘달린’ 것은 5년 만의 일인 것 같다. 그리고 결론을 내렸다. 야근은 미친 짓이다.

프로그래머가 정신을 집중해서 양질의 코드를 만들어낼 수 있는 시간의 최대치는 하루에 2~3시간이라는 것이 정설이다. 내 경험에 비추어 봐도 그렇다. 나는 아침 9시에 사무실에 도착하고 오후 6시에 퇴근을 한다.

점심시간을 빼면 하루에 8시간을 컴퓨터 앞에 앉아 있는 셈이다. 하지만 컴퓨터 앞에만 앉아 있을 수는 없다. 미팅도 해야 하고, 클라이언트도 만나야 하고, 친구들과 잡답도 해야 하고, 커피를 마시느라 들락거리기도 해야 하고, 개인적인 용무도 봐야 한다.

이런저런 시간을 다 빼고 나면 손끝에서 코드를 뽑아낼 수 있는 물리적인 시간의 최대치는 5시간을 넘지 않는다. 그 5시간만 제대로 집중해서 코드를 만들어내면 그날 내가 할 수 있는 일은 모두 한 셈이다. 그나마 여기에서 5시간은 실제로 코딩을 하는 시간이 아니라 차분하게 컴퓨터 앞에 앉아 있을 수 있는 시간을 의미한다.

그럼 6시에 퇴근하는 대신 밤 11시까지 책상에 앉아 있으면 (즉, 야근을 하면) 코드를 뽑아낼 수 있는 시간이 5시간에서 10시간으로 늘어나는 것이 아닐까. 생산성이 두 배로 늘어나는 것이 아닐까. 바로 이것이 프로그래밍의 본질을 이해하지 못하는 책상물림들의 셈법이다.


기계적으로 키보드를 두드리는 ‘타자’와 코드를 짜는 프로그래밍을 같은 일로 착각하는 것이다. 그러한 착각이 참이면 이런 식의 셈법도 성립한다. 하지만 프로그래밍은 ‘양’의 노동이 아니라 ‘질’의 노동이다. 손가락이 아니라 머리로 하는 일이다.

프로그래밍을 할 때 프로그래머의 두뇌는 CPU 레지스터와 메모리의 확장된 버전이 된다. 수많은 변수의 상태와 상호작용이 두뇌에 기억되고, 각종 클래스와 패키지 이름, 구현해야 하는 알고리즘 개요, 다른 하위시스템과의 상호작용, 방금 수정한 버그 내용, 사용자 요구사항 내용 등이 모두 기억된다.

1차원적인 기억의 문제가 아니다. 기억한 내용들이 서로 다차원적인 방식으로 상호작용하는 것을 실시간으로 파악하고 판단해야 한다. 엉망으로 꼬이고 엉킨 실타래의 끝을 놓치지 않고 추적하는 것이다. 열 개의 볼링핀을 저글링하는 서커스 단원처럼 한순간도 잡생각을 할 수 없는 고도의 집중력을 요구하는 일이다.

이런 수준의 집중력을 하루에 2~3 시간 이상 발휘할 수 있는 사람은 없다. 괴물 같은 사람이라도 5시간이 한계다. 사람에 따라서 하루 평균 2~3시간 발휘할 수 있는 집중력을 특정한 날에 몰아서 발휘하는 사람도 있다. 대신 그런 사람은 더 긴 휴식시간을 필요로 한다.

핵심은 지속가능한(sustainable) 양질의 집중력을 하루 평균 얼마나 발휘할 수 있느냐 하는 것이다. 매일 10시간씩 컴퓨터 앞에 앉아 있는다고 해서 10시간 내내 양질의 코드를 생산할 수 있는 것이 아니라는 이야기다.

사람이 사용할 수 있는 정신적인 에너지는 정해져 있다. 그날 쓸 분량을 다 쓰고 나면 당연히 회복할 시간이 필요하다. 책을 읽거나, 영화를 보거나, 연인과 데이트를 하거나, 친구와 잡담을 나누어야 한다. 충분한 수면을 취해야 하는 것은 물론이다.

에너지가 바닥난 사람을 컴퓨터 앞에 앉혀두면 그가 할 수 있는 일은 “잠자코 앉아있기”말고 아무 것도 없다. 키보드 위에서 영혼이 담기지 않은 손가락 놀림만 분주하다.

그래서 '코드를 짜기 위한 야근'이라는 표현은 '따뜻한 얼음'이나 '둥근 삼각형'처럼 형용모순이다. 말 자체가 성립하지 않는다. 에너지가 고갈된 상태에서는 정상적인 코드를 만들어내는 것이 불가능하다. 코드가 아니라 버그만 생산한다.

일하는 시늉만 무성하고 실제로 일은 아무 것도 이루어지지 않는다.

야근을 하면서 실제로 프로그래밍을 할 수 있는 경우는 낮에 집중력을 발휘할 만한 일을 아무것도 하지 않았을 경우로 국한된다.

이런 이유 때문에 익스트림 프로그래밍 진영에서는 오래 전부터 프로그래머가 일주일에 40시간 이상의 노동을 수행하지 말아야 한다고 주장해왔다. 프로그래머의 인권이나 노동권에 대해서 말하는 것이 아니다. 소프트웨어 프로젝트의 진정한 ‘성공’을 원한다면 프로그래머를 양계장의 닭처럼 쥐어짜는 것이 결코 도움이 되지 않는다는 사실을 깨달아야 한다고 말하고 있는 것이다.

생산성 하락도 문제지만, 정상적인 시간과 비용에 포함되지 않는 암시장이 형성되는 것도 큰 문제다. 프로젝트 관리자나 물주들이 프로그래머들의 ‘야근’을 당연한 것으로 여기면서 의존하기 때문에 프로젝트의 단가가 비정상적인 방식으로 산정된다.

이러한 암시장 효과로 인해서 프로젝트 일정이 주먹구구식으로 정해지고 프로젝트에 참여한 프로그래머들의 개인적인 삶이 담보로 저당 잡힌다. 이러한 악순환 속에서 소프트웨어의 ‘품질’을 찾는 것은 알래스카에 가서 야자나무를 찾는 것과 마찬가지다.

결론을 내려 보자. 그대가 프로그래머라면 하루에 2시간 이상 코드를 생산할 수 없다고 해서 조금도 자책하지 않기 바란다. 2시간 이상 코드를 만들어낼 수 있는 사람은 세상에 없다. 그대의 상사가 야근을 하라고 하면 어쩔 수 없이 야근을 하되 '시체처럼 앉아있기' 이상을 하려고 노력하지 마라. 그렇게 하지 않아도 된다.

열심히 야근을 하는 것처럼 보이는 세상의 다른 모든 프로그래머도 그대와 다르지 않다. 원래 다 그런 것이다.

그대가 프로그래머에게 일을 맡기는 사람이라면 (프로젝트 관리자든 아니면 프로젝트에 돈을 대는 물주든) 하루에 2시간 이상 코드를 생산할 수 있다고 말하는 사람을 진심으로 두려워하기 바란다. 시키지도 않았는데 기꺼이 야근을 하겠다고 말하는 사람을 호환마마보다 더 무서워하기 바란다.

그 사람은 프로그래머가 아니기 때문이다. 그는 좀비다. 언제 그대를 물어뜯을지 모르는 영혼 없는 존재다.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.

2014년 2월 13일 목요일

Windows Blue Screen - forever

Devil is not special one. This is an evil's face.
Blue-screen at Windows 7 Enterprise.



2014년 2월 11일 화요일

윈도우서버 2012 R2 - 음질 대단합니다.

Audiophile Optimizer 라는 것을 검색하다보면
Windows Server 2012 R2 essential 버전의 core 모드를 설치하고
그 중에서도 불필요한 service, process, thread 들을 제거하고 구동하고
음질이 향상된 이야기들이 있다.
(심지어는 tweak된 pc를 팔기도 한다.)

그것들은 차차 해보기로 하고 윈도우서버 2012 R2(어떤 버전이라도)만 설치하더라도
windows7은 물론 windows8.1과 비교할 수 없는 향상이 있으며,
위의 방법으로 tweak하면 그 이상으로 변한다고 합디다.

그래서 사실 확인을 위해 굴러다니는  Datacenter(가장 무거운 버전)을 설치하고
foobar, dac driver, asio, upsampler 등을 설치하여 들어보았다.

과연, windows7과는 완전히 다른 세계다.

꽤나 오래된 amd propus 허접 데스크탑에 돌렸으니
리니어전원 마이크로 데스크탑이나,
요즘의 울트라북 같은 배터리 구동상태라면
훨씬 더 낫겠다는 생각이 들었다.

물론 윈도우7, 8.1 처럼 편리하지 않다.
하지만 거품을 뺏으니 컴퓨터적으로 더 간단하다.

네트워크를 비롯한 드라이버는 웬만큼 잡히고
비디오 드라이버도 64비트를 가지고 있다면 .inf를 찍어서 설치하면 된다.

문제는------- 초보자에게 UI나 기능등이 달라서 당혹스러울 것이라는 것.

또하나, windows 7과 동일하게 DSD를 설정을 해도 소리가 나지 않는다.
이것은 푸는 법을 찾아야겠다.

하는 잘 만들어진 작은 노트북을 사서 구동시키고 싶은 강렬한 욕구가 일지만,
pc로 모든 A.V.T를 해결하는 입장에서
드라마, 영화감상을 위해서는 그래픽성능도 중요한데 갈등이다.

뭏튼 pc의 접지만 단단히 잡아도 훌륭한 소리를 들려줄 것이며,
DAC전의 소스단에 집중하는 pc-fi 반드시 도전할 가치가 있다고 말하고 싶다.

tweak하면 리니어에 대한 도전이 될지도 모르겠다.