오늘, 아니 어제 면접을 봤습니다. 면접관님이 이런 질문을 하셨습니다. "딱 두가지만 될 수 있다고 생각해봐요. 게으른 천재 프로그래머와 성실한 바보 프로그래머... 뭐를 고르겠습니까?"
저는 게으른 천재 프로그래머를 골랐습니다. 게으름의 미덕에 대해 이야기를 했습니다. 조금 횡설수설이었지만, MSP세미나중 표철민님이 말씀하신 것이 생각이 나 게으름이 나쁜 것이 아님을 이야기했습니다. 유레카를 외친 아르키데메스의 이야기를 덧붙여서요...(표철민님이 이 이야기를 하며 말씀하셨거든요. 게으름은 나쁜 것이 아니다. 아르키데메스가 게을렀기때문에 목욕탕의 물이 넘치는 것을 발견할 수 있었던 것이다. 라는 식으로요) 하지만 면접관님들은 아르키데메스의 이야기는 삶의 여유를 가져라 라는 의미에서 표철민님이 하신 것같다며, 게으른 것은 나쁘다라는 식으로 말씀하시더군요. 그리고 제가 제 장점으로 성실함을 꼽았는데, 제 말에 모순이 된다라는 말씀 또한 덧붙이셨습니다.
면접이 끝나감에 따라 느낌이 팍 왔습니다. 안됐구나...또 ㅠㅠ 요런? ㅋㅋㅋ 그런데 자꾸 마음에 걸렸습니다. 제가 떨어졌구나때문이 아니라, 제가 모순된 이야기를 했는가? 하는 것이 말입니다.
저는 제 말에 모순되지 않았습니다. 그리고 전 아직도 성실한 바보 프로그래머보다 게으른 천재 프로그래머가 되고 싶습니다. 전 잘 하는 것이 열심히 하는 것보다 중요하다고 생각합니다. 그래서 잘 하는 게으른 천재 프로그래머가 열심히 하는 성실한 바보 프로그래머보다 낫다고 생각한 것입니다. 그리고 전 천재가 아니기때문에 잘 해내기 위해 열심히 즉 성실히 하고 있는 것입니다.
라는 말을 메일에라도 보내구 싶더군요. 거기에 덧붙여 아래의 제 게으름 예찬론까지요... 천안으로 오는 차 내내 잠도 못자고 게으름이 왜 좋은지에 대해 끊임없이 생각했습니다. 지금까지도 잠을 못자고 이 글을 쓰는 이유도 계속 가슴이 답답해서 그 면접관님들께 말하고 싶지만, 메일주소라도 받아왔다면 메일을 보냈겠지만 아는 것이 없어 제 블로그에 임금님귀는 당나귀귀하고 있는 것입니다. 그럼 게으름(게으른 천재 프로그래머) 예찬론 시작하겠습니다...
1. 게으른 사람만이 필요성을 깨닫습니다.
티비가 있습니다. 티비에는 리모콘이 생기기 전입니다. 성실한 사람은 티비로 가 채널을 돌리는 것에 의문을 갖지도 불평을 하지도 않습니다. 게으른 사람만이 채널이나 음량조절을 위해 티비앞으로 가는 것에 대한 불편을 느끼고 리모콘의 필요성을 깨닫게 됩니다. 천재라면 리모콘을 만들기까지 하겠죠. 리모콘을 만드는 것은 천재에겐 물마시는 일이나 마찬가지일테니까요.
에스컬레이터(엘리베이터)가 없던 시절입니다. 100층건물에 올라갈 일이 생겼습니다. 성실한 사람은 열심히 한걸음 한걸음 걸어갑니다. 힘들지만 열심히 걸어갑니다. 왜? 그는 성실한 사람이니까요. 하지만 게으른 사람은 올라가지 않습니다. 100층에 올라가야 한다는 것을 알지만, 올라가는 것이 싫기 때문에 올라가지 않습니다. 올라가는 것 대신 어떻게하면 100층에 갈 수 있을까?를 생각합니다. 그 결과 내 다리가 움직이는 것이 아니라 계단이 내 대신 움직이면 되지! 라는 생각을 하게 됩니다. 덧붙여 그가 천재라면? 에스컬레이터를이 세상의 수만은 게으른 사람들을 위해, 나 자신을 위해 만들겠죠.
문명은, 게으른 자들을 위해 변해가고 있습니다. 좀더 쉽게 좀더 편하게 변해가고 있는 많은 서비스, 제품들은 모두 게으른 자들을 위해 게으른 자들의 필요에 의해 게으른자들에 의해서 만들어지고 있습니다.
2. 프로그래머로서...
함수, 클래스, 다형성 ... 이 모든 것들은 게으른자들을 위해서(어쩌면 게으른자에 의해서) 만들어졌습니다. 게으른 자가 아니라 성실한 바보 프로그래머라면 저것들을 하나도 이용하지 않을 것입니다. 함수, 클래스, 다형성 저 위의 세가지 다 똑같은 코드를 반복하지 않기 위해 만들어진 기능들입니다. 똑같은 것을 반복하느니 생각을 조금 더 해서 같은 것을 재사용할 수 있도록 하는 기법들입니다. 게으른 천재 프로그래머가 엄청나게 좋아하는 것들이죠. 또한 유용한 것들이기도 합니다. 재사용성 확장성 등 코드가 효율적으로 사용되기 때문입니다.
게으른 천재 프로그래머라면 추상화를 엄청나게 좋아할 것입니다. Abstraction. 똑같은 것을 자꾸 반복하기 싫기때문에 자주 사용하는 것을 묶어서 추상화시키고 이름을 지어주는 것입니다. 컴퓨터는 1010100의 전기적 신호로 돌아가겠지만 우리는 그것을 몰라도 컴퓨터를 잘 사용할 수 있는 것이 바로 이 추상화때문입니다. 성실한 바보 프로그래머라면, 추상화를 시키기보단 그냥 해내겠죠. 그는 성실하니까요. 추상화를 시키는 것은 어느정도의 생각이 필요한 일이기 때문입니다.
1010101010111 를 이용해서, 아니 조금 더 올라가볼까요? 어셈블러를 이용해서 windows를 만들 수 있을까요? 정답은 만들 수 있다입니다. 이론적으로는요. 하지만 거의 99.999%는 불가능합니다. 성실한 바보 프로그래머는 아마 할 수 있을꺼에요. 시간이 어마어마하게 걸리겠죠. 한 100만년쯤? 더 필요할지도 몰라요. 그건 엄청 힘든일이니까요. (게으른 천재 프로그래머는 windows를 만들 수는 있지만 절대 어셈블러를 이용해서는 못만듭니다. 이게 성실한 바보 프로그래머의 장점이라면 장점일 수 있겠네요)
사람들이 윈도우도 만들고 스타크래프트도 만들고 하는 것은 추상화가 매우 잘 되어있기 때문이라고 수업시간에 교수님께서 그랬습니다. 추상화시킨 것을 바탕으로 또 추상화를 하고 또 추상화를 하면서 이 문명사회는 발전된 것이라구요. 즉 조금 과장되게 표현하자면 이 문명사회는 게으른 사람들이 좋아하는 추상화를 통해 발전되었다. 라고 이야기할 수 있습니다.
게으른 천재 프로그래머는 항상 생각할 것입니다. 어떻게하면 코드를 줄일 수 있을까? 내 손이 조금만 키보드를 쳐도 좋을까? 짧고 간편한 코드를 생각하는 것이 길고 지루한 코딩을 하는 것보다 더 좋을테니까요. 하지만 성실한 바보 프로그래머는 행동할 것입니다. 그 문제를 해결하기 위해 열심히 키보드를 눌러되겠죠. 결과적으로 어떨까요? 시간의 여부를 떠나 게으른 천재 프로그래머는 100줄짜리 효율적인 코드를 내보일 것이고 성실한 바보 프로그래머는 1000줄짜리 길고 긴 코드를 내놓을 것입니다.
3. 벽에 마주쳤을때
다음과 같이 끝이 안보이는 벽에 게으른 천재 프로그래머와 성실한 바보 프로그래머가 마주쳤다고 생각해봅시다. 이 벽 넘어로 가야하는데 둘을 어떻게 행동할까요??(벽을 넘는 것의 여부는 개인의 능력여부(천재와 바보의 차이)라고 가정합니다.) 성실한 바보 프로그래머는 돌아갈 것 입니다. 벽을 넘는다는 것은 생각치도 못한채 계속해서 벽의 끝이 나올때까지 묵묵히 걸어가겠죠. 반면 게으른 천재 프로그래머는 어떻게했을까요? 돌아가지 못할 것입니다. 계속해서 생각하겠죠. '돌아가자니 귀찮은데 이거 어쩌지???? 아 돌아가야하나? 너무 귀찮은데......' 결국 자신의 천재성을 이용하여 벽을 넘을 것입니다.
4. 결론
서울에서 부산을 가는 기차(A)는 100km/h의 속도로 부산에서 서울로 가는 기차(B)는 120km/h의 속도로 같은 시간에 출발했습니다. 또한 제비역시 같은 시간에 150km/h의 속도로 서울을 향해 가고 있습니다. 제비는 부산을 향하는 기차를 만나면 되돌아가고 서울로 향하는 기차를 만난다면 방향을 바꿉니다. 그렇다면 서울에서 부산으로 가는 기차와 부산에서 서울로 가는 기차가 만날때까지 제비가 난 거리는 얼마일까요? (서울과 부산 사이 500km)
여러분이라면 이 문제를 어떻게 푸시겠습니까? 성실한 사람이라면 하나하나 다 계산하려고 들 것 입니다. 기차 A와 제비가 만난 위치와 속도 그만큼 기차 B가 온 거리 제비와 기차 B와의 거리 둘이 어디서 언제만나나를 계속해서 기차 A B가 만날때까지 구하겠죠. 하지만 게으른 사람이라면 이 문제가 무척 풀기 싫을 것입니다. 복잡하니까요. 그리고는 문제를 보며 생각하겠죠. 어디 간편한 방법 없을까? 그러다가 깨닫게 될 것입니다. 제비는 어느방향으로 날든 기차 A와 B가 만날때까지 계속해서 날고 있잖아! 그리고는 기차 A와 B가 만난 시간을 구한뒤 제비가 그 시간까지 150km/h의 속도로 날았으니까 얼마나 날았는지 구하게 되겠죠. 두줄도 안되 이 문제를 해결합니다.
전 여전히 게으른 천재 프로그래머가 성실한 바보 프로그래머보다 좋습니다. 제가 선택한 답이 면접관님 앞에서 하면 안될 이야기였다고 해도 전 게으른 천재 프로그래머를 고를 것입니다. 저는 여전히 열심히 하는 것보다 잘 해내는 것이 더 중요하다고 생각하고 결과가 중요하다고 생각합니다. 결과가 좋지 않다면 밤새며 열심히 한 것은 별 소용 없다고 생각합니다. 경험? 경험이 되었겠죠. 하지만 그 경험이 빛을 발휘하는 것 또한 다음 번에 성공하였을 때입니다. 실패는 성공의 어머니이다? 아닙니다. 성공을 했기 때문에 성공 전의 실패가 빛을 받게 되는 것입니다.
사실 그렇지 않습니까? 점수를 매기는 것도 열심히 한사람에게 높은 점수를 주는 것이 아니라 잘 한사람에게 높은 점수를 주잖아요. 전 열심히 하는 것을 좋아하는 사람이 아닙니다. 다만, 잘하는 것을 좋아하는 사람인데 잘 해내기 위해 열심히 하고 싶은 것입니다.
면접관님 길가다가 만나게 되면, 어쩌다 알게 되면 꼭 말하고 싶어요. 전 뭐든 잘하고 싶은 사람이구요. 그래서 열심히 하는 사람입니다. 또 게으른 천재 프로그래머가 성실한 바보 프로그래머보다 좋다고 생각하구요. 게으른 것이 나쁘다고 지금도 생각하지 않습니다. 전 전혀 모순되지 않았습니다.
출처 : http://blog.naver.com/hahiho0301/95813290
'Programming' 카테고리의 다른 글
게임 해킹, 아는 만큼 막을 수 있다. (0) | 2012.01.02 |
---|---|
게임개발자의 꿈을 꾸다 'Dream, Sweet Dreams!' (0) | 2011.01.10 |
[좌절개그] 입주오피스텔 주차장 지붕때문에 게임심의 못받는 대한민국.ㅜ.ㅜ (1) | 2011.01.06 |
나는 이렇게 앱을 만들었다 (0) | 2011.01.06 |