프로그래머 라는 직업으로 우리나라에서 밥 벌어먹고 살 수 있을까? 흔히 공무원이 아닌 이상 정년을 보장 받을 수 없는 것이 대부분 직장인들의 공통적인 생각일 테지만, 프로그래머의 경우는 더더욱 그렇다고 생각한다.
10~20 년 넘게 프로그래밍을 한다고 해도, 본인의 의지와는 상관없이 관리직으로 빠지는 경우가 허다하다. 물론 자신의 의견을 개진하여 프로그래밍을 계속 할 수는 있겠지만, 상사나 다른 사람이 봤을 때는 능력이 없다고 생각거나, 더 높은 곳으로 올라가고 싶은 생각이 없는 사람으로 오해한다.
전에도 이런 식(?)의 책을 몇 번 본적이 있다. 이런 책의 단점(?)은 한국 실정에는 맞지 않는다는 점이었다. 외국은 특히 미국에서는 백발의 프로그래머들을 찾아보기 쉽지만, 우리나라는 거의 없다.
아무래도 프로그래머에 대한 사회적인 시스템이나 인식자체가 다르다는 것에서부터 출발하다보니, 외국에서 나온 이런 류의 책에서는 선뜻 동의할 수 없는 얘기가 나오곤 했다.
그나마 다행스러운 점은 이 책의 경우, 내가 읽어본 책에서는 가장 많이 동의할 수 있었다.
마스터라고 하면, 흔히 어떤 직종에서 최고의 반열에 오른 사람을 일컫는다. 마스터 밑에는 숙련공들이 있으며, 그 밑에 갓들어온 견습공이 있다.
지금의 프로그래머가 옛날의 대장장이라면, 마스터는 장인이라 불렸고, 그들은 나름대로의 장인정신과 노하우를 가지고 일을 했을 것이다.
견습공은 멘토를 찾고, 바로 위의 숙련공으로 부터 가장 단순한 일부터 부여받아 처리하기 시작한다. 조금씩 일에 대해 알아가게 되고, 노하우가 쌓이게 된다. 숙련공이 되었을 때, 그는 아무런 도움없이 스스로 일을 처리할 수 있는 수준이 된다. 또한 견습공과 함께 작은 프로젝트의 장이 되어 일을 끌고나갈 수 있고, 기술적인 노하우 뿐만아니라 사람들 간의 필요한 Skill 배우게 된다.
내가 마음에 들었던 내용은 어떤 문제 상황에 부딪혔을 때, 어떻게 해야 한다는 지침을 가이드 해주는 형식이었다. 마치 문제가 있어 멘토에게 상황을 설명했을 때, 멘토가 해결책을 알려주는 것처럼 말이다.
다행스럽게도, 내가 현재 처해있는 문제에 대한 FAQ 가 있었고, 해결책을 읽어보면서 공감이 많이 갔다.
다음은 책에서 나왔던 패턴 목록 들이다.
가장 뒤떨어진 이가 되라
주변의 모든 이들을 일찌감치 앞서버리면서 당신의 학습은 더디어졌다.
고전을 공부하라
당신과 함께 일하는 경험많은 사람들은, 당신이 이미 읽었을 것이라고 여기는 책에 나오는 개념들을 계속 언급한다.
구체적인 기술
뛰어난 개발 팀에서 일하고 싶지만, 당신에게는 아주 적은 실무 경험밖에 없다.
꾸준히 읽어라
신속하게 숙련도를 끌어올렸지만, 당신에게 보이지 않는 심오하고 더욱 근본적인 개념들이 어디선가 끝없이 흘러가고 있는 것 같다.
긴 여정
당신에게는 소프트웨어의 명장이 되고자 하는 포부가 있다. 비록 사람들이 당신에게 기대하는 것은 그게 아닌 것 같지만.
깊은 쪽
당신은 자신의 경력이 안정 상태에 접어든 것이 아니라 실은 틀에 박힌 듯 정체된 것이 아닌가 두려워지기 시작한다.
능력의 폭을 넓혀라
소프트웨어 개발에 대한 당신의 이해는 좁으며 일상 작업에 관련된 저수준의 세부 사항에 맞춰져 있다.
독서 목록
읽어야 할 책의 권수가 당신의 책 읽는 속도보다도 더 빠르게 늘어만 간다.
또 다른 길
당신이 가려는 방향은 소프트웨어 장인정신으로 향하는 길과 다르다는 것을 알게 되었다.
더 깊이 파고 들어라
당신은 많은 도구와 기술이나 기법에 대해 피상적인 지식밖에 가지지 못했고, 좀 더 어려운 문제들과 씨름하면서 계속 장애물에 부딪히고 있다.
마음 맞는 사람들
당신은 멘토도 없이 궁지에 빠져 있으며 당신의 포부와는 어울리지 않는 분위기 속에 놓여 있음을 알게 되었다.
멘토를 찾아라
당신은 이미 있는 것을 다시 만들고 장애물에 부딪히느라 많은 시간을 소비하고 있지만, 어디쯤에서 안내를 받기 위해 방향을 틀어야 할지 확신하지 못한다.
무지를 드러내라
당신의 지식에 큰 틈이 있음을 발견했고, 당신이 하고 있는 일에 대해서 잘 모른다고 사람들이 생각할까봐 두렵다.
무지에 맞서라
당신의 지식에 큰 틈이 있음을 발견했고, 당신이 하는 일은 이런 주제에 대한 이해를 요구하고 있다.
바닥을 쓸어라
당신은 미숙한 개발자이며 팀으로부터 신뢰를 얻고자 한다.
배운 것을 공유하라
주변의 사람들이 당신처럼 빠르게 학습하지 못하는 것 같아서 좌절하고 있다.
배운 것을 기록하라
당신은 같은 교훈을 계속 되풀이해서 배우지만, 도무지 몸에 붙지를 않는 것 같다.
부숴도 괜찮은 장난감
실패가 허용되지 않는 환경에서 일하지만, 당신에게는 여전히 안전하게 학습할 데가 필요하다.
소스를 활용하라
주변에 좋은 코드와 나쁜 코드를 구별할만한 사람이 없다면, 당신이 짜 놓은 것이 좋은지 어떤지 어떻게 알 수 있을까?
실패하는 법을 배워라
당신의 학습 역량은 성공적인 부분을 향상시켰지만, 실패와 약점은 그대로 남아있다.
연습, 연습 또 연습
당신의 일상적인 프로그래밍 작업은 실패하면서 배울 수 있는 여지를 제공해 주지 않는다.
열정을 드러내라
당신은 팀에 맞추기 위해서 소프트웨어 개발에 대한 흥분과 호기심을 숨기고 지내게 되었다.
열정을 키워라
당신은 기예에 대한 열정을 질식시키는 환경에서 일하고 있다.
예술보다 기예
고객에게 해결책을 주기로 했는데, 단순하고 검증된 해법을 선택할 수도 있고 뭔가 새롭고 환상적인 것을 만들 기회로 삼을 수도 있다.
익숙한 도구들
당신이 사용하는 도구와 기술들이 너무 급속히 바뀌어서, 작업을 추산하는데 어려움을 느낀다.
일하면서 성찰하라
지금의 지위에서 보낸 횟수와 수행한 프로젝트 개수가 늘어가면서, 당신은 마치 마법사처럼 '경험이 쌓이게'만들어 줄 계시의 순간을 기다리고 있음을 깨닫는다.
자신만의 지도를 그려라
고용주가 제시하는 어떤 경력경로도 당신에게 맞지 않는 것 같다.
전장에 머물러라
승진 제안을 받았지만, 그 자리로 가면 프로그래밍과는 멀어지게 된다.
지속적인 동기 부여
당신은 계속 바뀌고 상충되는 요구사항을 가져오는 고객을 위해 아리송하게 명세된 프로젝트라는 좌절스러운 현실에서 일하고 있음을 깨닫는다.
직위를 지표로 이용하라
공식적인 자리에서 자신을 소개할 때면 왠지 사과를 하거나 당신의 실제 기술 수준과 직무 내용간의 격차에 대해 변명을 해야 할 것 같은 생각이 든다.
첫 번째 언어
당신은 몇몇 언어에 익숙하지만, 그 어느 것에도 능통하지는 않다.
팔꿈치를 맞대고
뭔지 알 수는 없지만 더 상급의 테크닉과 접근 방식이 있을 것이란 느낌을 갖고 있다.
피드백 루프를 만들어라
당신은 자신이 '인식하지 못하는 무능력'으로 고통받고 있는지 알 수가 없다.
한발 물러서라
너무나 광대한 자신의 무지에 직면하면서 당신은 압도됨을 느낀다.
흰 띠를 매라
당신이 가진 경험이 새로운 기술의 습득을 더 어렵게 하는 것 같아서 학습에 애를 먹고 있다.