http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=476372


아름다운 이름 - 프로그래머 : 임백준

자본주의 경제 시스템에서 월급을 받으면서 일하는 임금 노동자가 일을 통해서 진정한 자유를 누리는 일은 드물다. 거의 불가능에 가깝다고 보아도 좋을 것이다. 프로그래머도 예외는 아니다. 그렇지만 프로그래밍이 결코 단순한 노동에 머무르지 않고 독창적인 창의성을 요구하는 창조적 활동이라는 점을 고려한다면 '영어 등급'이나 '신발 색깔'과 같은 여러 가지 일들을 고민할 수밖에 없는 현실은 서글픔을 자아냈다. 사소한 일들로 인해서 창의성이 억압받을 때마다 그림자 놀이를 하는 손가락이 잘려나가는 듯한 아픔을 느끼곤 했다. 그리하여 나는 유학을 결심했다. 컴퓨터 프로그래밍을 조금 더 본격적으로 공부해 보고 싶은 열망이 가슴에 차 올랐기 때문이다. 공부가 목적이라면 국내에서도 하지 못할 것도 없었지만 아직 '젊음'이 곁에 머무르고 있을 때 새로운 환경에 대한 도전을 해보고 싶었다. 그로부터 1년 뒤에 나는 6개월 된 아기를 안고 아내와 함께 낯선 땅에 도착했다. 그렇게 도착한 미국 중서부 인디애나주의 작은 도시 블루밍턴은 음악으로 유명한 젊음과 대학의 도시였다. ... 블루밍턴에 도착한 것은 1997년 6월이었는데 그 해 겨울이 되자 IMF가 터졌다. ... 한국의 원화를 기준으로 계산했을때 등록금이 거의 두 배 가까이 급등했기 때문에 그것을 감당하는 것은 쉬운일이 아니었다. 그리하여 나도 결국 일자리를 찾아 나설 수밖에 없었다. GA(Graduate Assitance) 자리에 결원이 발생하여 새로운 직원을 공개 모집한다는 광고가 나왔다. TA나 RA와 똑같이 등록금도 면제되고 월급도 나오는 일이었다. 눈이 번쩍 뜨이지 않을 수 없었다. ... 그런데 그 일을 위해서 요구되는 프로그래밍 기술은 선마이크로시스템즈의 솔라리스 운영체제와 펄이었다. CGI에 대한 개념은 어느 정도 이해하고 있었지만 솔직히 나는 그때까지 HTML로 이루어진 홈페이지조차 제대로 만들어 본 일이 없었다. 따라서 펄이라는 것이 시스템 관리를 위해서 유용하게 사용되는 스크립트 언어라는 정도만 알고 있었지 펄을 이용해서 프로그래밍을 해본 경험이 없었다. 그래서 나는 당장 보더스라는 책방에 가서 '거금'을 털어서 랜달 슈왈츠의 Learning Perl을 구입해서 읽기 시작했다. ... GA자리를 위한 인터뷰를 준비하느라 급하게 시작한 공부였지만 그 공부의 속내용에 완전히 사로잡히고 말았다. 아파치 웹서버가 동작하는 원리, CGI 스크립트가 사용자의 요청을 처리하는 과정, 펄 스크립트 언어의 구조, HTML 태그의 구성, HTTP 프로토콜의 동작 원리 등을 공부하다 보면 재미 있어서 시간이 가는 것을 느낄 수 없었다. 하지만 공부의 내용이 재미있을수록 GA자리를 꼭 얻고 싶다는 욕심으로 애가 탔다. 인터뷰의 뒷 이야기 GA일을 하면서 만나게 된 아드리안 저먼은 나의 첫번째 스승이 되었다. 그가 나와 충분히 친해 졌을 때 당시의 인터뷰에 얽힌 뒷이야기를 말해주었는데 그게 재미있었다. GA 포지션에 대한 광고가 나갔을 때 많은 사람이 신청을 해서 인터뷰를 여러 번 진행했다고 한다. 그리고 그 자리에 대한 offer는 최종적으로 어느 여학생에게 주어졌다.(나는 떨어진 것이다.) 그런데 그 여학생이 갑자기 학교를 옮기게 되었다. 그래서 그 오퍼는 다시 실시된 내부 심사를 통해서 다른 인도계 학생에게 주어졌다. 그 학생은 흔쾌히 오퍼를 받아들였기 때문에 그에 따른 서류가 처리되고 있었다.(이때 나는 마음을 졸이며 결과를 기다리고 있었다.) 그런데 어쩐 일인지 그 학생마저 막판에 마음을 바꾸고 다은 RA 자리로 옮겨갔다. 인터뷰를 진행했던 사람들은 다시 한 번 내부 심사를 하면서 고민을 했고, 결국 그 오퍼를 나에게 주기로 결정했다고 한다. 물론 나는 오퍼를 얼른 받아 들였다.(그때는 이러한 속사정을 몰랐기 때문에 내가 잘나서 합격한 줄만 알았는데, 알고 보니 그것이 전혀 아니었다.) 보통 인터뷰가 끝나면 일주일 정도 안에 결과를 알려주는 것이 상례인데, 당시에는 이런 속사정 때문에 나에게 최종 결과가 알려지기까지 한 달이 넘게 걸렸다. ... 프로그래밍 자체와 별로 상관이 없어 보이는 이 일을 자세하게 설명하는 이유는 다른것이 아니다. ... 훗날 돌이켜 생각해 보았을 때 이 일은 나에게 두 가지 교훈을 주었고, 그 교훈을 독자 여러분과 나누고 싶기 때문이다. 첫번째 교훈은, 모든 준비가 완벽하게 갖추어진 다음에 시작할 수 있는 일은 세상에 아무것도 없다는 사실이다. 만약에 내가 솔라리스와 펄을 다룰 수 있는 광고를 보고 지레 포기를 했더라면 좋은 기회를 스스로 외면하는 결과를 초래했을 것이다. 준비가 되어 있는가 아닌가 하는 것도 의미가 없는것은 아니지만, 정작 중요한 것은 준비가 되어 있지 않다면 노력을 해서 되어 있도록 만들겠다는 배짱이다. 이것은 비단 일자리를 구하기 위한 면접 과정에만 국한되는 이야기가 아니다. 인생에 있어서 도전이란 결코 입맛에 딱 맞는 방식으로 찾아오지 않는다. 그것은 언제나 두 발을 전부 땅에서 떼서 허공에 몸을 완전히 맡겨야 하는, 따라서 상당한 불편함과 두려움을 수반하는 방식으로 찾아온다. 어렵지만 마음에 쏙 드는 일자리를 만났을 때, 어렵지만 풀어 보고 싶은 문제를 만났을때, 어렵지만 한 번 걸어 보고 싶은 길을 만났을 때, 어렵지만 한 번쯤 말을 꼭 걸어보고 싶은 이성을 만났을 때, 필요한 것은 앞뒤를 재고 따지는 '계산'이 아니라 최선을 다해서 허공에 몸을 맡기는 '용기'다.

두번째 교훈은, 한번 시작한 일은 혼신의 힘을 다해서 최선을 다하라는 것이다. 용기를 내서 몸을 허공에 던졌는데 그 다음 일을 수습할 수 없다면 돌아오는 것은 '망신'과 '자신감의 상실' 뿐이다. 중요한 것은 결과가 아니라 수습의 과정에서 최선을 다했는가 여부다. 최선을 다하지 못하고 나태하거나 방심하여 실패를 한 사람은 스스로를 믿을 수 없게 되기 때문에 다시는 허공에 몸을 던지는 용기를 내지 못하게 된다. ... 내가 항상 도전하고 항상 최선을 다하는 것은 물론 아니다. 때론 게으름을 부리고 때론 넓은 길을 골라서 가려고 애쓴다. 하지만 젊을수록 그리고 창창한 미래가 앞에 놓여 있을수록, '용기' 와 '최선을 다하는 자세'는 중요하다. 이 책을 읽는 후배 독자들 중에서 특히 이제 막 스무살을 지났거나 아직 스무살조차 되지 않은 사람들에게 이 말을 꼭 해주고 싶었다. 훌륭한 인생을 살기 위해서, 그리고 훌륭한 프로그래머가 되기 위해서 가장 필요한 것을 말하라고 하면 나는 이 두 가지를 들고 싶다.

'' 카테고리의 다른 글

조엘 온 소프트웨어  (0) 2017.05.10
피플웨어  (0) 2016.07.05

https://brunch.co.kr/@sunghokimnxag/5

재미로 풀어본 면접문제. 하지만 면접문제로 좋은 문제인지는 모르겠다.


var assert = require('assert')
/**
 * 1,2,3,4,5,6,[7],6,5,4,3,2,1,[0],1,2,[3]
 * n번째 숫자가 7의 배수이거나 7이란 숫자를 포함할 시에 방향을 바꾼다.
 * for loop 또는 array를 쓰지 말 것.
 * assignment 를 쓰지 말 것. 즉, 변수 할당을 하지 말 것.
 * String을 쓰지 말것. 
 * 
 */
function pingpong(max, index, value, add) {
  function direction(add) {
    if (index % 7 === 0 || /7/.test(index)) {
      return add * -1
 
    } else {
      return add
    }
  }
  if (index === max) {
    return value
 
  } else {
    return pingpong(
      max, 
      index ? index + 1 : 1, 
      value !== undefined ? value + direction(add ? add : 1) : 1,
      direction(add ? add : 1)
    ) 
  }
}
 
describe('pingpong', () => {
  it('8번째 숫자는 6', () => {
    assert.equal(pingpong(8), 6)
  })
})

'coding' 카테고리의 다른 글

완전수 구하기  (0) 2017.04.02


http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=43132954


피플웨어 3판

톰 드마르코, 티모시 리스터 지음


인적 자원 관리

관리자로서 우리 대다수는 한 가지 실수에 취약하다. 바로 사람을 조립식 부품인 양 관리하는 성향이다. 관리자들이 이런 성향을 보이는 이유는 명백하다. 관리자가 되기까지 거쳐온 과정을 떠올려 보라. 실무자로서, 즉 기술자나 개발자로서, 일을 잘하면 우리는 좋은 관리자 재목이라는 평가를 받는다. 그리고 일을 잘하려면 자원을 모듈로 잘 나눠야 한다. 소프트웨어 루틴이든, 회로 모듈이든, 기타 업무 단위든 말이다. 우리는 블랙박스 특성이 드러나도록 모듈을 구성한다. 즉 모듈 각각의 내부적인 특이성은 무시해도 괜찮다. 모듈은 표준 인터페이스로 소통하도록 설계되니까.

 이 같은 모듈 방식에 오랫동안 익숙한 상태에서 갓 승진한 관리자라면 당연히 인적 자원도 같은 방식으로 관리하여 든다. 불행히도 이런 시도는 통하지 않는다.


초과근무는 소용없다.

직장인에게 초과 근무란 순진무구한 관리자의 허황된 망상이다. 물론 월요일 기한을 맞추려 토요일 몇 시간 정도 더 일하는 경우라면 도움이 될지도 모르겠다. 하지만 초과 근무 뒤에는 뒤쳐진 일상을 따라잡으려 그만큼 '업무와 무관한 활동'으로 보내는 시간도 반드시 필요하다. 단기적으로 이득일지 몰라도 장기적으로는 효과가 없다. 스페인식 경영이론('지구상에 존재하는 가치의 양은 한정되어 있다. 그러므로 부를 축적하는 길은 땅이든 사람이든 좀 더 효율적으로 착취하는 방법뿐이다')에 물든 관리자는 무급 초과 근무를 보지 못하듯 미달 근무도 보지 못한다. 근무일지에 시간이 남았다고 기록하는 직원은 한 명도 없다. 남는 시간은 전화나 담소나 휴식에 쓴다. 40시간을 쉬지 않고, 그것도 창의적인 지적 업무에 필요한 집중력을 유지하며, 일할 수 있는 사람은 사실상 없다.

초과 근무는 전력질주와 같다. 마라톤에서 몇백 미터를 남겨두고 조금이라도 기력이 남은 선수들에게는 말이 되지만 이제 막 달리기 시작한 선수에게는 시간 낭비다. 팀원들이 전력질주하게 너무 밀어 부치면 관리자는 오히려 신뢰를 잃는다. 유능한 팀원들은 이미 다 격어봤다. 4월까지 끝내야 한다고 열창하는 동안 그들은 입 다물고 조용히 앉아 속으로 말도 안 된다고 생각한다. 그리고는 초과 근무 시간만큼 보상으로 적절히 쉬며 결과적으로는 매주 40시간을 일한다. 유능한 사람은 이렇게 한다. 나머지는 일중독자들 이다.


일중독자들

일중독자들은 보상 없이 초과 근무를 한다. 효율이 떨어져도 엄청난 시간을 쏟아 붓는다. 적당한 압력을 가하면 사생활을 망쳐가면서라도 미친 듯이 일한다. 하지만 그것도 잠시뿐이다. 아무리 헌신적인 일중독자라도 언젠가는 다음 메세지를 받는다. 


진정해, 넌 잘하고 있어

시간 내에 네가 원하는 걸 다 이룰 수는 없는거야

그 경계에 선 오늘밤은 낭만적이지만 말이야

언제쯤이면 깨달을 거니... 비엔나가 널 기다리잖아 

 

이런 메세지를 완전히 이해하고 나면, 일중독자는 프로젝트에서 영원히 손을 뗀다. (가족, 사랑, 가정생활, 젊음이라는) 더 중요한 가치를 (일이라는) 덜 중요한 가치 때문에 희생했다는 깨달음은 굉장한 충격이다. 자신도 모르게 희생을 치러온 사람은 복수의 칼을 간다. 상사를 찾아가 앞으로는 지금처럼 일하지 않겠다고 침착하고 사려깊게 설명하지 않는다. 그냥 사표를 던져버린다. 과로로 인한 소진의 한 형태다. 어쨌거나 프로젝트에서 그는 사라진다.

 일중독은 병이다. 알콜 중독처럼 소수의 불행한 사람들만 걸리는 병이 아니다. 일중독은 감기와 비슷하다. 모두가 살면서 한 번씩 걸린다.  여기서 일중독을 언급하는 목적은 원인과 치료법을 논하기 위해서가 아니다. 관리자로서 일중독 팀원을 어떻게 다뤄야 하는지라는, 좀 더 단순한 문제를 지적하기 위해서다. 일중독 팀원을 전형적인 스페인식 경영 이론으로 악착같이 착취하면 결국 그들을 잃는다. 아무리 절박하게 초과근무가 필요하더라도 팀원들의 사생활을 희생하면서까지 일하게 두지는 말라. 초과 근무는 우수한 인력을 잃을 만큼 중요하지 않다. 이것은 단순히 일중독이라는 주제를 넘어 의미 있는 생산성이라는 좀 더 복잡한 주제와도 연결된다.


생산성: 이기는 전투, 지는 전쟁

다음번에 누군가 생산성을 거론하면 그 사람이 '이직률'이라는 단어를 쓰는지 유심히 들어보라. 십중팔구 쓰지 않을 것이다. 지금까지 수많은 사람과 수많은 글이 생산성을 논했지만 생산성과 연관지어 이직률을 언급하는 전문가는 단 한명도 만나보지 못했다. 하지만 이직률을 배제하고 생산성을 논하면 도대체 무슨 의미가 있을까? 다음은 생산성을 높이고자 회사들이 취하는 일반적인 조치다. 


* 일하는 시간을 늘리도록 사람들에게 압력을 가한다.

* 제품 개발 프로세스를 기계화 한다.

* 제품 질을 낮춰 타협한다.

* 업무 프로세스를 표준화 한다.


이런 조치를 취하면 당연히 업무가 따분하고 흥미가 떨어진다. 따라서 의욕적인 직원들이 좀 더 재미난 일을  찾아 떠날 위험이 높아진다. 생산성을 높이려면 이직률이라는 대가를 반드시 치러야 한다는 뜻이 아니다. 생산성을 높이고 싶다면 이직률이라는 사안을 고려해야 한다는 뜻이다. 그러지 않으면 생산성 '향상'으로 얻어지는 이익이 핵심 인력의 손실로 상쇄되어 버린다.

 대다수 회사들은 이직률 통계를 기록조차 하지 않는다. 숙련된 팀원 교체에 드는 비용을 파악할 방법이 사실상 전무하다. 생산성을 논의할 때마다 회사들은 이직이 존재하지 않는 듯, 아니면 비용이 전혀 들지 않는 듯이 행동한다.    

'' 카테고리의 다른 글

조엘 온 소프트웨어  (0) 2017.05.10
나는 프로그래머다  (0) 2017.03.28

+ Recent posts