본문 바로가기

칼럼

프로그래머를 지망하는 지망생들을 위한 안내서.

지망생을 위한 프로그래머 가이드

2005년에 썼던 글을 살짝 고쳐서  다시 한번 적어봅니다.
사실 이 글은 좋은 프로그래머가 되기 위해 어떤 것을 공부해야하는가에 대한 글은 아닙니다.
진로에 대해 고민하는 학생들을 위한 글에 가깝죠.

다음번에는 좋은 프로그래머가 되기 위해 어떤 것을 공부해야하는가에 대해 정리해보고 싶군요. 


  1. 서론
  2. 프로그래머의 종류
  3. 프로그래머 테크 트리의 종류
  4. 그렇다면 프로그래머가 되고 싶어하는 당신
  5. 프로그래머에게 필요한 학문
  6. 프로그래머가 된 후에는..
  7. 마치며. 

1.서론


게시판들을 돌아다니다 보면 심심찮게  '프로그래머가 되는 법을 가르쳐주세요.' 내지  '프로그래머가 되려면 뭐가 필요한가요'  같은 질문이 자주 올라오길래 정리해보기로 했다.

이글은 이미 프로그램을 좀 하는 사람들의 공부 방법론이 아니라
순수하게 프로그래머가 되고 싶어하는 지망생들을 위한 조언에 가깝다.

사실 계속 그 질문에 그리플 달리는게 조금 짜증났다.

나도 일단 코딩질로 먹고 사는 사람이라 기획자를 지망하는 풋사과들을 위한 안내서나 그래픽 디자이너를 지망하는 풋사과를 위한 안내서 같은건 쓰기 힘들지만 그런건 나중에 좋은 분들이 써줄지도 모르니.

자 어쨌든 시작한다.

우선 한가지 강조하겠는데
'공부 잘하는 방법을 가르쳐주세요'
라고 하면 어떻게 대답할 것인가.
'프로그래머가 되려면 어떻게 하나요'
란 질문의 답도 마찬가지다.

정답은 없다. 정석은 있을지 몰라도. 내가 제시하는 것은 모범답안과 경우의 수다.
프로그래머가 되기 위한 법의 정답 같은 건 없으니 이점 양지해두면 좋다.

이하에 들어가는 내용은 기본적인 학생들을 위한 프로그래머가 되기 위한 테크트리 루트 에 가까우며

어떤 방법으로 프로그램을 공부하면 좋냐에 대한 체계적인 분석은 아니므로 그런 걸 기대했으면
백스페이스 누르고.
서점에가서 누구나 할수 있는 C, 깡통도 할 수 있는 자바, 열혈강의 파이썬같은 책을 사서 일단 읽는 것을 추천하겠다.


마지막으로 검색을 생활화 했으면 하는 작은 바램을 담겠다.
구글은 프로그래머의 친구이자 애인이다.

2. 프로그래머의 종류

우선 프로그래머가 어떠어떤 것들이 있나 알아보겠다.
기본적으로 프로그래머 라는 사람들은 말그대로 프로그램 을 하는 사람들이다.
하지만 프로그램이란 것의 종류가 다양하기 때문에, 프로그래머의 분파도 상당히 갈린다.
크게 리눅스계열과 윈도우계열로 나눌수 있지만 일단 이런 분류 자체가 통용되지 않는 분야도 상당히 많기 때문에.. 보통 자기가 하는 작업의 종류를 붙여서 나는 XXXX 프로그래머입니다 라고 한다.

2-1. 게임 프로그래머

일반적으로 프로그래밍을 하고 싶어하는 사람들이 원하는 프로그래머 1순위.  말그대로 게임에 관련된 프로그래밍을 하는 사람들이다. 일반적으로 클라이언트 프로그램 (그러니까 PC에서 돌아가는거)을 짜는 사람들이 많다. 서버프로그래머들은 왠지 자신들을 게임프로그래머라기보다는 서버프로그래머라고 하는 경우가 더 많은 것 같다. 이 것도 파고 들어가면 로직부터 3D, 툴 등등 많이 나온다.

2-2. 서버프로그래머

서버 관련 프로그래밍을 하는 사람들. 게임서버도 짜고, 웹서버도 짜고, 채팅서버도 짜고, 로비서버도 짜고.. 네트워크 프로그래머라고도 불린다.

2-3. 임베디드 프로그래머

쉽게 말하자면 mp3나 뭐 작게는 로봇 같은 작은 CPU에서 필요한 프로그램을 짤 수 있는 사람들 하드웨어에 관한 이해가 필요하고, 상당한 노가다가 들어가는 좀 어려운 일을 하는 사람들이긴 하지만 전문가는 부족하고 수요는 많기 때문에 앞으로도 전도유망.

2-4. 그외

 사실 열거하자면 끝도 없어서 게임 프로그래머는 사실 대부분 윈도우 프로그래머에 가깝고, 또한 툴 같은걸 직접 만들기 때문에 윈도우 프로그램도 무리 없이 할 수 있는 경우가 대부분이다.
그 왜 웹 프로그래머라던가 가끔 리눅스와 윈도우를 넘나드는 이종 프로그래머들도 있기 때문에 사실 이런 분류는 무의미하다. 그냥 프로그래머 앞에 XXX가 붙으면 저사람은 그 XXX관련해서 프로그램을 하는구나 라고 생각하면 된다.


3.프로그래머 테크 트리의 종류

세상에는 수많은 종류의 테크 트리가 있고, 그 중에는 알려지지 않은 경우도 많다. 현재의 프로그래머들이 어떤 테크 트리를 타는지 조금 나열해보겠다.

평범한 학창시절은 컴퓨터는 좀 만지나 프로그래밍을 깊게 파지는 않은 초중고생활,
비범한 학창시절은 컴퓨터 잘만지고 프로그램 잘해서 이름을 날리는 초중고생활을 뜻한다.

 

3-1. 평범한 학창시절 -> 대학교 컴퓨터 공학과 -> 프로그래머

가장 일반적인 프로그래머 테크 트리. 가장 무난하기도 하다. 기본적으로 컴퓨터 공학을 배우기 때문에 기본기가 탄탄한게 장점. 보통 선후배들의 네트워크가 있기 때문에 지식습득이 다른 사람들에 비해 굉장히 굉장히 굉장히 굉장히 굉장히 유리하다. 특히 3-2 케이스가 선배로 있으면 인생의 스승을 만난격.


3-2. 비범한 학창시절 -> 대학교 컴퓨터공학과 특채 -> 프로그래머

이건 초등학교때 집에서 지원을 받으며, 머리도 좋아서 프로그램에 출중한 재능을 보여 각종 대회에서 수상한 경력으로 대학교에 특채로 들어가서 컴과에 들어가는 말그대로 엘리트 코스.
...그런데 사실 초등학교, 중학교 때 남들보다 프로그래밍을 무지무지 잘해도 어른이 되면 거의 실력이 고만고만해지기 때문에 끊임없이 자신을 갈고 닦아야하며 무엇보다도 프로그래밍을 좋아해야한다. 아 덤으로 이런 케이스는 대부분 학점관리보다 코딩을 좋아해서 학점이 안좋은 경우가 많다.
 이케이스가 프로그래밍을 즐기면 정말 괴물인 케이스가 나온다. 여자친구 선물로 게시판을 짜준다던가, 집에서 노는게 프로그래밍을 하는 거면 말 다했음.

3-3. 비범한 학창시절 -> 현업 프로그래머

옛날에는 이런 케이스도 많았는데 주로 비범한 학창시절을 보내는 사람들은 PC통신 커뮤니티에서 한 몫들 했기 때문에 눈여겨 보던 사람들이라던가, 같이 놀던 사람들과 함께 회사에서 프로그래밍을 하는 경우도 많았다. 다만 지금에 들어서는 굉장히 힘든 케이스. 그 당시는 프로그래머 자체가 적었다. 

3-4 평범한혹은 비범한 학창시절 -> 컴퓨터공학을 제외한 공대 -> 프로그래머

코딩하고 놀다가 컴퓨터 공학과에 못갔으나 그래도 프로그램질이 좋은 사람들이 택하는 루트. 보통 이런 사람들은 미묘하게 컴퓨터 과학과 전공들도 들었기 때문에 비 공학전공보다는 컴퓨터 지식이 있으나, 컴퓨터 공학과의 컴퓨터 지식을 따라가기는 힘들다. 다만 전자과의 경우, 임베디드 프로그래머는 컴과보다 이쪽이 더 낫다.
혹 특이한 경우로 화공과 프로그래머나 건축과 프로그래머도 있는데 이경우는 자기 전공 제끼고 컴퓨터를 좋아했을 확률이 굉장히 높다. 혹은 미래를 바라보고 자신의 전공과 프로그램 스킬을 함께 익히는 부지런한 케이스일수도 있다.

 3-5 평범한 혹은 비범한 학창시절 -> 비 공학전공 -> 프로그래머

3-4와 마찬가지로 자기 전공 제끼고 프로그램만 했을 확률이 굉장히 높다. 프로그래밍 스킬은 꽤 있는 상태일 것이며, 컴퓨터 공학에 대한 지식의 부족이 약점이다.

 3-6. 평범한 학창시절 -> 비공학전공 -> 컴퓨터 학원 -> 프로그래머

 컴과가 아닌 사람들이 프로그래머가 될 수 있는 일반적인 루트. 다만 주로 프로그래밍 스킬을 배우는 탓인지 컴퓨터에 대한 이해자체가 부족하기 때문에.. 'FSM은 인공지능에서만 씁니다.' 이런 경우가 나올수 있다. 묘하게 컴과출신 프로그래머들은 학원출신 프로그래머들을 무시하는 경향도 있으니 참고해둘것. 덤으로 대부분의 컴퓨터 학원들은 취업에 관련되서도 도와주기 때문에 취업하기 좀 수월함.
*FSM (유한상태기계 자세한건 '황제의 새마음' 같은 책을 추천하겠음.)

 3-7. 평범한 학창시절 -> 컴퓨터 학원 -> 프로그래머.

3-7 와 별 다를바 없으나 점점 대졸이상의 학력을 원하는 현대세태에서 살아남기는 조금 힘든 케이스

 3-8. 고교중퇴 -> 프로그래머

3-3과 별 다를바 없지만 과거와는 달리 점점 대졸이상의 학력을 원하는 현대세태에서 살아남기는 조금 힘든 케이스.
아는 사람들끼리 회사를 만든다면 별 문제 없음.

3-9 고교중퇴 -> 검정고시 -> 이후

3-1,2,4,5,6 부분을 찾아갈것. 

4. 그렇다면 프로그래머가 되고 싶어하는 당신.

4-1. 초등학생의 경우

역시 가장 무난한건 2-1. 대학교의 컴퓨터 공학과에 진학 하는 것이다. 그러기 위해서 해야 할 것은 너무나도 명백하다. 공부다.
그리고 덤으로 책 많이 읽어두면 좋다. 그 외 기본 과목들에 충실 할것, 국어 산수 과학 같은.  영어같은건 조기교육을 받아두는 것도 좋다. 프로그래머에게 영어는 필수다.
다만 어렸을때 그렇게 프로그래머에 뜻을 두겠다면 비범한 초등학생의 길을 걷는 것도 나쁘지 않다. 학과공부에 충실하면서 프로그램 책들을 봐두는 것도 좋다. 요즘은 쉬운 책들도 많으니 여가시간을 이용해 프로그램을 하는 것도 나쁘지 않을 것이다. 영어가 된다면 오픈소스쪽에 투신 하는 것도 나쁘지 않다. 부모님이 먹여주고 재워줄때는 돈걱정없이 즐겁게 프로그래밍 할수 있을 때다.

4-2. 중학생의 경우

이번에도 가장 무난한건 2-1. 대학교의 컴퓨터 공학과에 진학 하는 것이다. 지금부터 슬슬 입시경쟁에 돌입하는 당신을 위해 가장 파워가 세다고 볼 수 있는 두 공대를 말해보겠다. 카이스트와 서울대 컴공. 이 두 대학의 인지도는 거의 국내 최고이다. 다른 대학교의 컴퓨터 과학과도 나쁘지 않다. 어쨌든 카이스트와 포항공대쪽으로 진학을 하려면 중학교때부터 내신관리를 착실하게 하거나, 대회입상경력을 노려 과학고에 진학을 하는 게 좋다. 과학고같은 특목고에 막연한 거부감을 가지고 있는 사람이라면 그냥 착실히 공부해서 인문계 고등학교에 진학할 것. 여기서도 중요한 것은 국어 영어 수학 과학이며, 특히 이 때 공부 착실히해놓으면 즐거운 고교생활을 보낼 수 있다. 여유시간이 있으면
독서와, 적절하게 프로그램을 만지면서 노는 것도 나쁘지 않다.

4-3. 인문계 고등학생의 경우

3년동안 얌전히 프로그램 접고 대학진학을 위해 불사르라고 조언하고 싶지만, 성실한 초등학교 중학교 시절을 보냈으면 고3때만 열심히해도 된다. 학교생활에 충실하면서 이 때 쯤은 컴퓨터 동아리에 들어두어 선배나 맘에 맞는 친구들과 프로그램을 하는 것도 나쁘지 않다. 컴공과로 갈꺼면 이과로 진학할것. 수학이 싫다는 이유로 문과 뭐 이러면 나중에 피 볼수도 있다 수2까지는 얌전히 끝내노는게 좋다. 수학은 공식으로 숫자놀이하는 학문이 아니라 세상에서 문제를 발견해서 풀이방법을 찾아내 그 문제를 해결하는 방법을 익힐수 있는 가장 좋은 수단이다. 그리고 그 것은 프로그래밍과 크게 다르지 않다.

4-4. 실업계 고등학생의 경우

뭐 빠른 취직 루트를 노리던가 컴퓨터로 공부보다는 게임을 많이 했으면 이 쪽으로도 올 수 있다. 하지만 대세는 졸업장이라는 것을 명심할것. 싫더라도 전문대나 4년제에 진학하게 될 것이다. 부족한 공부를 죽어라고 따라잡기 위해 공부와 독서를 병행할것. 지금부터 믿을수 있는건 인맥도 학벌도 아니다. 오직 실력뿐이다. 자신을 죽어라고 갈고 닦아라.

4-5. 고교중퇴생의 경우

솔직히 학교 X같다. 때려치고 검정고시를 준비할수도 있다. 역시 요점은 영어 수학 과학이다. 국어는 풍부한 시간을 이용한 독서로 때울것. 매우 열심히 공부하면서 시간에 여유가 생긴다면 적절한 커뮤니티에서 이것 저것 질문을 올리거나 아니면 자신의 지식으로 답변을 해주며 아는 사람들을 만들어 놓는 것도 좋다. 어쨌든 고등학교를 때려쳤어도 대학은 가두는게 좋다.

4-6. 컴공과 대학생의 경우

이제 조언이 필요없다 주변에 선배들을 잡아라. 요즘 선배들의 가치를 잘 모르는 애들이 있는데 이용할 수 있는건 최대한 이용해야한다. 또한 선배들도 후배들이 자신의 도움을 받아 무럭무럭 크는 것을 보는 것을 기뻐하기 때문에 망설일 필요는 전혀 없다. 가끔 기꺼이 밥을 대접하며 친하게 지내두면 반드시 도움이 된다. 모르는게 있으면 물어보고 세미나가 있으면 열정적으로 참여할 것. 학술 위주의 동아리에 들어두면 굉장히 도움이 된다.

4-7. 공대이며 비컴공과 대학생의 경우

적당히 프로그래밍 동아리에 들어갈것. 프로그래머 친구들이나 선배들은 프로그래머 인생을 사는데 굉장히 도움이 되며, 이 험한 세상 헤쳐나갈 훌륭한 동료들이 될 것이다. 가서 열심히 하면서 서로의 실력을 갈고닦아라.

4-8 비공대 대학생의 경우

프로그래밍 동아리에 들어가던가, 혹은 학원으로 들어가는 방법이 있는데 둘다 해도 괜찮지만 어쨌든 프로그래밍 동아리쪽이 더 도움이 된다.

4-9. 그외 나이가 있는 기타등등

우선 컴퓨터 학원을 이용해 기본적인 프로그램 스킬을 익힌후 컴퓨터 관련 서적을 팔것. 알고리즘 수련 같은것은 프로그램에 도움이 많이 된다. 인맥은 커뮤니티나, 학원을 이용하자.

 

5 프로그래머에게 필요한 학문

교과과정을 중심으로...

5-1. 국어

프로그래머는 기본적으로 언어를 다루는 사람들이며 심지어 언어를 만들어내야할 때도 존재한다. 뭐 어쨌든 기본적인 읽기 쓰기 능력은 비단 프로그래머들 뿐만이 아닌 모든 직종에게 필요한 능력이다.

5-2. 영어

대부분의 프로그램과 그 레퍼런스는 영어로 이루어져있다. MSDN정도는 가볍게 읽어줘야 윈도우 프로그래밍을 쉽게 할 수 있다. 독해 능력과 단어를 집중적으로 수련하자.

5-3. 수학

아까 말했듯이 수학은  공식으로 숫자놀이하는 학문이 아니라 세상에서 문제를 발견해서 풀이방법을 찾아내 그 문제를 해결하는 방법을 익힐수 있는 가장 좋은 수단이다. 그 외 3D프로그래밍 같은 경우 현실 좌표를 계산해야하는 경우가 많으므로 수학에 강하면 유리하다. 물리엔진의 경우도 마찬가지. 그 외 알고리즘 같은 것도 수학에 포함되므로 소홀히 하지 말자.

5-4. 과학

전자쪽을 잘 봐두면 컴퓨터 하드웨어의 구조를 이해하는데 도움을 얻을 수 있다. 주로 물리쪽이 도움이 된다.

5-5. 철학

왠 뜬금없는 철학이냐고 생각할텐데.. 사실 이부분은 고등학교 이하의 학생들한테는 무리고 새로운 패러다임을 생각해내야할 때는 철학도 필요해진다. 의외로 철학과 관련된 컴퓨터 서적도 많다.

5-6 독서

학문이라기보다는 취미로 삼으면 적절하다. 만화책만 보지 말고 폭넓은 독서를 할 것.

5-7 기타등등

다른 것도 열심히 해서 나쁠 것은 하나도 없다. 아 그리고 너무 공부만 해도 바보가 되므로 생각도 많이 할 것.


6. 프로그래머가 된 후에는..

사실 프로그램 함수만 좀 짜게된다고 입사는 가능할지 몰라도 아직까지 우리나라에서 프로그램 스킬을 얻는 대부분의 방법은.. 그러니까 정말정말 현업에서 이용 될 수 있는 프로그램 스킬의 대부분은 정말 회사에서 맞아가면서 배우는 수 밖에 없다. (그래도 요즘은 책들이 많이 나오고 있다.)
대부분의 프로그램 서적은 예제위주로 이루어져있고 예제코드는 예제일뿐 최적화나 현업에서 사용 할 수 있을 정도로 좋은 코드가 아닌 경우가 대부분이기 때문에 (특히 컴퓨터 과학과 출신은 이런 현업의 코드보다는 기본지식쪽에 주력해서 배우기 때문에 그 정도가 특히 심하다. 물론 현업스킬을 익히면 기본지식이 더해져서 가장 스펙좋은 프로그래머가 되겠지만)
누군가의 '프로그래머가 되고 싶다면 도시락 싸들고 말리고 싶습니다' 라는 리플이 기억나는데 편한 직종은 아니다.
쏟아져나오는 신기술에 따라가야할 것 들도 많다

그리고 당신이 프로그래머로 사회에 첫발을 딛어도 한 경력 5년차가 되기전에는 배울게 산더미다. 1년은 지나야 프로그램을 제대로 짤 수 있게 될 것이다.

뭐 이렇게 힘들고 가르쳐주는 사람 제대로 없는 분야의 직장이긴하나 이쪽이 적성에 맞는다면 어쩔수 없지 아니한가.


7. 마치며

어떤가 별거 없지 않은가.? 결국 어른들이 말하는 좋은 대학가서 프로그램해도 늦지 않다랑 별 다를 바 없다.
결국 학교 공부에 충실하란 소리고, 프로그래밍은 취미로 하다가 대학가서 본격적으로 해도 늦지 않다는 것이다.

하지만 학생의 본분은 공부이며, 그 공부이외에도 남는시간에 뭘 할지 고민이 된다면 그때는 프로그래밍 공부를 해도 괜찮을 것이다. 우선 책을 사다가 예제를 따라가며 하나씩 만들어보고, 자신이 직접 짠 프로그램이 컴퓨터에서 돌아가는 데 쾌감을 느꼈다면, 유감스럽게도 당신도 이제 이바닥에 뼈를 묻어야 할 것이다. :)

 

뭐 어쨌든 프로그램이 재밌어도 학교공부를 소홀히 하지는 않을 것을 충고한다. 뭐 물론 성공할 확률이 100%인 대형 프로젝트에 끼워준다고 하면 제끼고 그거 하는 것이 경력 쌓는데는 도움이 될 수도 있지만.
어쨌든 실력이 보증됐으니까 끼워준다고 하는것 아닐것인가.