개발&Development/프로그래밍 일반

여러 분야 파기

겐도 2008. 11. 7. 16:54
"프로그래밍을 학습 하는 후배들에게" from 써니의 一生牛步行
저 글을 읽다가 생각난것(길어서 미투에 못적고 여기에)

어제 후배랑 이야기하다가, 후배가 새로운 영역으로 들어와서 전문가가 되기 위해 여러 분야를 거쳐 보고 싶다는 예기를 했다. 그래서 빠르게, 대충 맛만 보고 다음 영역으로 가겠노라고 이야기 하길래...

어느 영역의 전문적인 능력을 보인다라고 한다면 그 영역의 중심 분야에 대한 지식도 깊어야 겠지만 연관 분야들도 충분한 깊이가 필요할테고 그냥 맛만 보는 것만으로는 이런 영역까지 가지 못할 것이다. 지식의 넓이도 중요하겠지만 각 부분의 깊이도 충분히 필요하다. 그러고 나서야 정말 자신이 원하는 정도의 능력을 가지게 되고 발휘 할 수 있을 것이다.

시간도 없는데 언제 깊이 발을 담그고 삽질해요.. 라고 말할 수 있다. 상황에 따라, 개인에 따라 답이 없는 문제일 수도 있지만 적어도 나의 케이스를 이야기 해 본다.

제일 처음 Basic으로 프로그래밍을 시작했다. 컴퓨터 학원에서 배웠는데 수강 기간을 무려 1년으로 하기 위해서인지 몰라도 IF라는 조건문 조차도 몇주에 걸쳐 다양한 케이스를 가르쳐 준다. 하루에 한가지 케이스에 대해 여러가지 상황을 접하고 문제를 해결한다. 먼저 공책에 코드를 적고 강사에게 검사를 맞고 나서야 컴퓨터를 켤 수 있었고 그런식으로 1년을 하고 나서 문법을 다 배웠다. 그리고 2년은 더 그런식으로 BASIC을 공부하였다. 중 1때부터 C를 시작하였고 C++까지 포함하여 거의 15년을 넘게 공부했다. 물론 어느 순간부터는 문법을 공부한 것은 아니지만 계속 뉴스그룹이나 게시판에서 질문도 하고 남의 질문에 답변은 물론 다른 사람이 한 답변을 찬찬히 읽어 보기도 하였다. 당시로선 거금을 주고 ISO 스탠다드 문서도 사서 보고 책을 본것만 해도 책장 몇개는 나올 것이다.

이렇게 몇번 언어를 습득 하고 나니, 물론 어떤 언어를 잠시 쓴다면 문법 레퍼런스만 보고 바로 쓸 수도 있고, 이전 회사에서는 1~2개월 후에 PHP를 거의 전문적으로 쓸 수 있게 되었으며 지금 회사에선 4시간 동안 책 한번 주루룩 읽고는 막 코드를 생성해 내고 있다. 이것이 전부가 아니다. PHP의 경우 1년이 지나서는 언어의 깊은 곳까지 바로 이해할 수 있었고 나 스스로 전문 분야에 PHP도 포함 시킬 수 있게 되었다. 현재 Java는 아직 경험이 더 필요하긴 하지만 곧 충분한 수준의 전문성을 가질 수 있을 것이라 본다. 어떤 환경, 어떤 언어든지 한달의 시간이 주어지면 바로 고급 개발자로 투입될 자신이 있고 1년이 지나면 전문가 타이틀을 나에게 부여할 자신이 있다.

나는 이것을 "학습의 가속 효과"라 부른다. 어떤 지식에 대해 토대가 세워지고, 비슷한 것에 대해서도 한번더 토대를 세우고 나면 그 두개를 비교해 볼 수 있게 된다. 각 부분마다 각 영역이 어떤 특성이 있는지를 볼 수 있게 된다. 아니 그전에 어떤 부분들이 있는지를 알게 된다. 이런 기반이 쌓이고 나면 비슷하지만 또 새로운 것을 만나게 되면 중요한 부분들을 빨리 찾을 수 있고 기존것과 비교하여 새로운 것을 빨리 분석할 수 있게 된다. 습득 시간이 줄어들게 된다. 물론 또다른 토대가 생겼기에 분석정도는 더욱더 커진다.

"바쁠수록 돌아가라"란 말이 여기에도 적용될지 모른다. 많은 영역들을 공부해야 되어 급하게 보고 넘겨야 될 것 같지만 저런식으로 하나씩 차근차근 보는 것이 후반으로 갈 수록 빨라지고 충분한 시간이 지나고 나면 총 지식양이 급하게 지나간 것 보다 엄청나게 많음은 당연할 것으로 보인다. 그리고 그 지식양의 교차점은 그렇게 긴것 같지도 않다.

뭐 대충 여기까지가 후배에게 해 준 예기이고,
프로그래밍의 기반을 닦고 있는 사람들에게 좀더 세분화 해서 말한다면,

어떤 사람은 인기있는 언어 하나 대충 배워서 시장에 뛰어 들수도 있고, 어떤 사람은 동시에 몇가지 언어책 다 쌓아두고 대충대충 해서 뭐든지 할 수 있어요를 외치며 나갈 수도 있겠지만... 나라면 하나라도 제대로 파고는 본질을 이해해서 어떤 언어가 되든 빨리 적응 할 수 있도록 만들고 나가겠다. 어차피 컴퓨터라는 것이 할 수 있는 것은 정해져 있고 단순히 속도만 빨라지고 있다. 언어라는 것도 같은 일을 하는 것을 효율적으로 빨리 짤 수 있도록 발전하는 것이지 절대 새로운 일을 할 수 있게 되는 것이 아니다. 또한 이런 이유로 인기 언어, 인기 플랫폼은 항상 변하게 되어 있다. 적어도 버전업 되면서 그냥 보기엔 개념이 확확 바뀐다.

"난 AJAX 프로그래밍을 해 봤어요"란 말은 당장 일을 구하는데 도움이 될 지 모르지만 BJAX란 기술이 나온다면 굶어야 한다. 물론 6개월 쉬면서 공부할 수도 있겠지만 그것도 한두번이다. Z까지 갈 필요없이 G쯤에서 이미 도태되고 있을 것이다. "난 컴퓨터로 할 수 있는 일이면 뭐든지 일개월 기간만 있다면 시작할 수 있어요. 물론 그 일개월 동안 요구사항 분석하고 대충 아키텍처 초안까지 만들면서요" 란 말을 할 수 있는 것이 좋다. 그리고 그렇게 되는 방법의 시작은 하나부터 모질게 파는 것이다.


디테일한 기술에 집착하지 마라. 수수께끼 잘 푸는 사람이 좋은 대접 받는 것은 아니다. 결국 돈은 수수께기 잘 만들어 내는 사람이 번다. 본질을 발견해야 한다.