나의 프로그래밍 공부법 - 1.1. 가능하면 빨리 자신의 적성을 알아야 한다.

2012. 10. 21. 10:44기타/나의 프로그래밍 공부법

지금 생각해보면 프로그래밍 공부에 대한 조언을 얻기 위해 책을 산 사람에게, 적성이 맞지 않고 센스가 없다고 생각되면 다른 길로 가라라고 썼으니, 책으로 출간되기에는 문제가 있어보인다. 그렇다하더라도 필자가 가장 해주고 싶은 조언은 "네가 행복해하면서 즐길 수 있는 일이 아니라면 다른 길을 찾아라"가 맞다. 스트레스를 받으면서 불행하게 일하면서 먹고살기에는 우리네 인생은 너무 짧다.


좋은 개발자를 선발하는 입장에서 아쉬운 부분이라면, 요즘은 예전에 비해서 상대적으로 센스가 있는 (즉, 싹수가 있는) 개발자는 보기 힘들다는 점이다. 요즘엔 센스가 있든 없든 같이 일을 할 수 있는 여건이 되는 개발자라도 채용할 수 있으면 그나마 다행인 시대가 되어버렸다. 그래서인지 일을 할 때에 좋은 팀을 만드는 것이 무엇보다도 어려운 일이다.


--------------

가능하면 빨리 자신의 적성을 알아야 한다.


“농구에 센스가 없는 사람이 아무리 농구 연습을 아무리 많이 한다고 해도 좋은 농구 선수가 되는 것이 힘든 것처럼, 프로그래밍 센스가 없는 사람이 그냥 열심히 프로그래밍 언어 공부한다고 프로그래머가 될 수 있는 것은 아니다.”


필자가 개발자를 선발하기 위해 면접을 보면서 매번 하는 이야기이다. 지금까지 수많은 “개발자”들과 일을 해왔던 경험으로 비추어 본다면, 나이나 성별, 학력을 불문하고 개발자에게 필요한 것은 “프로그래밍 센스”이다. 센스가 있는 사람은 지금 당장 관련 지식이 부족하더라도 금방 따라올 수 있는 능력을 가진 것이고, 센스가 없는 사람은 지식이 문제가 아니라 일에 대한 이해가 쉽지 않은 문제가 있기 때문이다. 따라서, 만일 여러분이 소프트웨어의 개발자가 되기로 마음을 먹었다면 왜 그런 생각을 했는지를 다시 한번 짚어볼 필요가 있고, 반드시 “프로그래밍 센스”가 있는지를 확인할 필요가 있다.


이 세상의 모든 일은 그 일을 하기 위해 필요한 “적성”이라는 것이 있다. 사실, 특정 업무에 대한 적성이 있는지 유무를 알아내는 것이 쉬운 일은 아니다. 그렇다고 해서 복잡하고 특수한 업무를 반영할 수 없는 적성 검사 따위에 의존하는 것도 너무 무책임하다고 볼 수 있다. 그렇기 때문에 가능한 한 많은 시간을 할애해서 그 일에 대한 적성이 있는지 여부를 스스로가 확인할 수 있는 시간을 가져보는 것이 가장 중요하다.


우리 아이들이 어릴 때부터 다양한 분야 (음악, 미술, 컴퓨터, 학습, 체육 등)를 접해볼 수 있도록 해주는 것이 중요한 것도 바로 이러한 맥락과 상통한다. 필자 역시 초등학교 4학년 때 부모님께서 컴퓨터를 접할 수 있도록 해주셨기 때문에 컴퓨터와 관련하여 소질이 있음을 비로소 알 수 있게 되었다. 이러한 적성을 30대 후반이나 40대 초반에서야 비로소 알게 되었다면, 너무나 많은 시간을 잃어버린 셈이 된다. 이러한 엄청난 손해를 보지 않기 위해서는 조금이라도 어린 나이에 자신의 적성에 대해서 판단을 할 수 있는 기회를 만드는 것이 필요하다.


내 자신이 개발자에 대한 “적성”이 있는지 여부를 확인하는 방법은 생각보다 간단하다. 프로그래밍 공부를 하는 과정이나 프로그래머로써 일을 하는 것이 얼마나 재미있고 즐거운지를 곰곰이 생각해보자. 누군가가 시키지 않아도 프로그래밍을 하고 싶어서 몸이 근질거리거나 시간 가는 줄 모르고 몰두할 수 있다면, 회사에서 지시한 일도 아닌데 일부러 자신의 시간을 투자하여 스스로 해결책을 찾아서 연구를 하고 있다면 여러분은 이미 개발자로써 적성이 맞는다고 볼 수 있다.


반면에 여러분의 “프로그래밍 센스”를 측정하는 것은 쉽지 않은데, 프로그래밍과 관련된 새로운 것을 배우거나 익힐 때 얼마나 빨리 습득을 하여 내 것으로 만들 수 있느냐로 가늠해볼 수 있다고 생각한다. 누군가가 특별히 가르쳐 주는 사람도 없음에도 불구하고 책 한 두 권만 읽어보고 따라 해보았는데도 새로운 플랫폼에 쉽게 적응을 할 수 있다면 센스가 아주 뛰어나다고 볼 수 있는 것이고, 주위의 선배들이 열심히 도와주고 설명을 해주는 데에도 쉽게 이해가 되지 않고 그것을 응용하는 것이 힘들고 벅차다면 프로그래밍 센스가 떨어진다고 말할 수 있는 것이다.


만일 여러분이 프로그래밍 센스가 현저히 떨어지는데다가 개발 업무가 적성에 맞지 않는다면, 지금이라도 늦지 않았으니 서둘러 자신에 맞는 분야를 빨리 찾아가야 한다. 반대로 뒤늦게라도 프로그래밍에 관련하여 적성이 있고 센스가 있음을 깨달았다면, 늦었다고 생각하지 말고 서둘러 전문 프로그래머의 길을 걷는 것도 추천한다. 필자의 주위에도 간혹 뒤늦게 개발의 길을 걸었으면서도 다른 사람들보다 빨리 성공한 케이스들이 종종 있다. 특히나 요즘과 같이 프로그래머 한 사람이 자신의 역량을 전 세계에 펼칠 수 있는 시대에서는 어려운 일이 아니게 되었다.


이처럼 “적성”은 프로그래머의 길로 들어 설 때에만 필요한 요소는 아니다. 일반 사무직으로 근무하는 것과 소프트웨어 개발자로써 근무하는 것은 업무의 특성부터 시작해서 수행 방법이나 과정이 많은 차이가 있기 때문이다. 단순히 컴퓨터가 좋아서 라던지, 소프트웨어(또는 게임)을 만드는 것이 재미 있어서 선택하기에는 프로그래머는 직업은 여러 가지 종류의 “적성”을 요구한다.


정해진 시간 내에 서류 작업을 끝내면 일이 종료되는 업종과 달리, “소프트웨어”를 개발하는 개발자라는 직업은 정해진 시간 내에 계획적으로 업무를 마치기 어려운 직종이다. 아침에 출근하여 오늘 하루 종일 어떤 버그 하나를 수정하겠다 라고 마음을 먹고 시작을 해도, 실마리가 안 잡히는 경우에는 근무 시간 이외에 더 많은 시간을 사용하고도 문제 해결 조차 할 수 없을 수도 있기 때문이다. 이렇게 프로그래밍이라는 업무가 딱딱 떨어지는 정량화된 작업이 아니다 보니 부득이하게 야근이나 철야 작업이 많을 수도 있는 것이 소프트웨어 개발 업무이다.


특히 다른 분야의 일을 해왔거나 전산학과는 전혀 상관없는 학문을 전공했음에도 소프트웨어 개발자로서 입사 지원을 하는 지원자들 중에는 자신의 적성이 맞는지 여부는 충분히 고려하지 않고, 이전에 자신이 하던 일에 비해서 상대적으로 연봉이 높은 것 같아서 지원을 하거나 “개발자”라는 직업에 환상을 가지고 지원을 하는 경우도 있다. 이런 경우에는, 설령 취업이 된다고 하더라도 한 두 달 정도 실제 개발 업무를 해보다가 자신이 개발자로써 적성이 맞지 않는 것을 발견하고는 다시 자신이 일해왔던 분야로 되돌아가는 경우도 종종 볼 수 있다.


올바른 소프트웨어 개발 방법론을 이용하여 소프트웨어 개발을 하는 방법을 제대로 훈련 받은 경우라면, 주어진 소프트웨어 개발 업무에 대한 예상 작업량을 비교적 정확하게 추산해낼 수 있고 그것을 기준으로 오차가 적은 개발 일정 계획을 수립해낼 수 있다. 그렇게 하게 되면 불필요한 야근이나 철야, 주말근무 없이도 주어진 개발 기간 내에 좋은 품질을 가진 소프트웨어를 충분히 개발해낼 수 있다는 것을 이미 필자 스스로 수도 없이 지금까지 입증 해왔다. 이렇게 효율적인 개발 환경으로 만들기 위해서는 보다 많은 시행착오를 겪으면서 자신에게 맞는 다양한 개발 방법을 연구하고 적용해보려는 노력이 필요할 수 밖에 없다.


IT 업체 사장들이 자기 회사의 개발자들이 80~90년대의 해커들이 했던 것처럼 피자와 콜라를 먹으면서 지치지 않고 매일 밤샘 작업을 해줄 것이라고 기대를 하는 것도 큰 문제이지만, 모니터만 쳐다보면서 정해진 시간만 채우며 자신의 의자에 앉아있기만 하면 마치 좋은 개발자가 될 것이라고 꿈을 꾸는 것 또한 필요한 센스가 부족하거나 아예 적성이 맞지 않다는 가장 큰 증거라고 생각한다