본문 바로가기
develop

독학인가, 강습인가

by 찬이 2004. 4. 27.

written by 김시찬 (chanywa), 2004-04-27
Homepage : http://chanywa.com
Email : chany@chanywa.com

프로그래밍은 컴퓨터 유저들의 로망?

프로그래밍이란 것은 컴퓨터를 사용하는 많은 이들의 부러움의 대상이거나 혹은 존경의 대상이 되곤 한다. 물론 노가다맨이나 폐인정도로 치부하는 사람도 없진 않지만, 자신이 사용하는 신기한 프로그램들을 만들기도 혹은 파괴하기도 하는 일종의 창조적 능력을 가진 자들을 특별한 시선으로 보는 것은 사실이다.

필자도 사실 C를 처음 시작한 것이 프로그래밍이 재미있어서라기보다는 내세우기 위함이었다고도 할 수 있다. 당시 돈좀 있다는 집안에서나 가지고 있는 컴퓨터라는 것을 중,고생인 내가 자유자재로 조립하고 고치고, 가르쳐주는 걸 주변에서는 참 신기하거나 대단하다고 여겼다. 하지만 조금씩 성장하고 실력이 늘면서 더 이상 이런 분야에는 할 게 없다는 걸 느꼈다. 조금만 공부하면 중학생이 아니라 초등학생도 할 수 있는 것을 아무리 잘해봐야 소용없다고 생각했기 때문이다. 그래서 시작한 것이 프로그래밍이었다.


세상에는 두 종류의 프로그래머가 있다


필자처럼 스스로 원해서 스스로 힘든 일 겪으면서 독학으로 배워서 실력을 쌓아온 사람들이 있다. 바로 자립형 스타일이다. 몸으로 익히면서 스스로 이해가 될 때까지 하는 타입이어서 은근히 숨어있는 실력이 높은 편이나, 매니아적이다보니 자신의 다른 생활을 포기하는 경우가 많으며, 얻게 되는 양에 비해서 많은 시간을 투자하는 편이다.

그와는 다른 또 하나의 스타일은 양성형이다. 비싼 학원, 과외 등을 통해서 최소 수개월에서 수년동안 교육을 받으며 성장하는 타입이다. 비록 비용은 많이 들지만, 짧은 시간안에 많은 것을 배우는 편이며 그만큼 프로그래밍 이외의 활동이 왕성해서, 프로그래밍 실력보다는 출신학교 혹은 다른 성적 등이 좋은 편이다.

여러분은 어떤 타입이라고 생각하는가? 혹은 어떤 타입으로 성장할 계획인가? 아마 대부분의 사람들이 한번쯤 생각해봄직한 문제일거라 생각된다.


어느 스타일이 좋을까


일단 정답은 없다. 필자는 현재 전자의 자립형 스타일이다. 혼자서 컴퓨터 잡지나 PC 통신(지금은 인터넷이지만, 당시에는 PC 통신뿐이었다)에 올라온 강좌를 보고 공부를 했으니 말이다. 나는 아직도 자립형인 나의 스타일이 좋다. 일이 힘들더라도 일을 즐길 수 있다. 내가 좋아서 나 스스로 시작한 일이기에 돈벌이 혹은 의무라는 굴레를 벗어나서 나의 자아실현(?)이라는 거창한 목적까지 달성할 수 있기 때문이다.

하지만 양성형의 경우엔 일을 즐기는 경우가 많지 않다. 프로그래밍이 목적이 아니라 다른 목적을 위한 도구로서만 존재한다. 즉, 일을 하기 위해서 프로그래밍을 배우다보니 일이 많거나 힘들어지게 되면 금방 후회를 하는 경우가 많다. 하지만 양성형의 경우에는 전문가로부터 교육을 받았기 때문에 프로그래밍 공부에 대한 투자시간이 최소화되고, 그로 인해서 다른 공부나 배경을 만들 시간이 훨씬 여유롭다는 점에서는 아주 유리하다.


양성형의 크나큰 단점


사실 필자는 양성형이 되지 못한 것이 그렇게 큰 아쉬움일 수가 없다. 이상하게도 나에게는 선구자 역할을 해주는 사람도 없었고, 도움을 요청할 만한 사람도 없었다.

하지만 내가 부러워하는 양성형 스타일의 프로그래머에게도 크나큰 단점이 있는데, 그것은 바로 "섣부른 지식"이라는 녀석이다. 대부분의 양성형 프로그래머들은 단시간에 과정을 이수하는데 목적이 있으므로, 프로그래밍에 대해서만 교육을 받을 뿐이지 실제로 컴퓨터에 적용하면서 발생할 수 있는 문제들이나 혹은 벤치마킹을 통한 효과적인 문제해결방법을 잘 알지 못한다. 그저 학교, 학원에서 배운 것, 책에 적힌 것만을 생각할 뿐, 그 이외의 것에 대해선 잘 모른다.

그렇다보니 프로그래밍 이론상으로만 맞을 뿐 실제로 이상동작을 일으키거나 혹은 성립불가능한 설계를 하기도 한다. 얘기하고자 하는 내용에 완전히 부합되는 이야기는 아니지만, 필자가 겪었던 경우를 그 예로 들어보겠다.


무식한 시험문제은행


필자가 공군 전산병으로 보직을 받았던 이병시절이었다. 당시 공군에서는 사병선발시험의 문제출제방식을 컴퓨터를 이용한 자동화작업 프로젝트를 시작할 무렵이었다. 정확한 공문서를 보진 못했지만, 넌지시 들은 얘기로는 약 10만 문제 정도를 입력해서 시스템을 구축할 예정이라고 했다.

당시에는 요즘처럼 시험문제 은행이라는 것을 갖춘 곳이라곤 거의 전무했었고, 대부분의 사람이 인터넷의 존재조차도 모르던 시절이다. 그래서 나름대로 컴퓨터좀 한답시고 까불다가 전산병 보직을 받고 들어왔는데, 색다른(이전까지는 학생신분이었으니) 경험을 쌓게 된다고 생각하니 나 스스로가 자랑스럽기도 하고 보직을 잘 받은 것 같아 한참을 좋아했었던 기억이 있다.

그런데 시스템 동작방식을 알고나서는 어이가 없어 웃음도 나질 않았다. 1개 문제당 1개의 HWP 파일로 시험문제를 입력한 후에, 자동출제 프로그램을 돌리면 그 중에 원하는 개수만큼 시험문제 파일을 디스켓으로 복사해주는 방식이라는 것이다. 그게 무슨 자동출제라는 것인가... 그냥 시험문제 모두 입력해놓고 Ctrl-C, Ctrl-V 하는 것이나 다름없지.


3Kbyte * 10만 == 30만KB ??

하지만 더 웃긴 문제가 발생했다. 당시 그 시험문제은행 구축 프로젝트는 1차적으로 10만 문제를 최소목표로 잡혀 있었다. 그리고 그 파일들을 저장하여 시스템을 구축할 목적으로 나온 컴퓨터의 하드디스크는 400 메가 가량이었는데, 당시 HWP 파일 1개가 2~3KB 정도였으니 한개의 하드디스크당 13만개 가량이 저장될 수 있다는 계산이 나온다. 그런데 실은 이게 말이 안되는, 참 바보같은 소리였다.

당시에 사용하던 Windows 95는 FAT16만을 지원했다. 따라서 클러스터의 크기가 32KB 정도나 되었는데, 이것은 1개의 파일이 차지하는 최소크기를 뜻하기도 한다. 즉, 2~3KB짜리 파일 1개를 저장하더라도 32KB를 차지한다는 소리다. 윈도우 탐색기에서 폴더나 파일의 등록정보를 보면, "크기"라는 것이 있고 "디스크할당"이란 것이 있다. 크기는 실제 파일크기이지만, 하드디스크에 차지할 때는 같거나 더 많은 용량을 차지하게 된다. 이 최소단위가 NTFS에서는 최소 512 Byte 즉 0.5KB 정도로 작아질 수 있지만, 옛날의 FAT16 방식의 하드디스크에 저장할 때에는 전체용량이 조금만 커도 저장 최소단위가 32KB가 된다. 1byte만 저장하더라도, 아니 0byte짜리 파일 1개를 만들기만 해도 32KByte를 차지한다는 얘기다.

결국 파일수가 1만개 가까이 되어가자, 400MB 용량중 윈도우와 프로그램 용량을 제외한 250~280MB 정도가 가득차서 더 이상 저장이 불가능하게 된 것이다.

그럴수도 있다라고 대충 넘어가기엔 엄청난 문제였다. 이것을 설계하고 개발한 담당장교는 서울 명문대 컴퓨터전공 출신이었다. 그 사람 외에도 수많은 전산장교들이 있었으며, 수십명의 정예 전산병들도 있었지만, 독단적으로 진행함에 따라 이런 문제를 야기시킨 것이다. 결국 이 전산화사업을 위해 들인 비용은 물론이고 몇달을 고생한 사병들의 수고까지도 물거품이 되었다.

당시 이 문제를 예견한 필자는 이병이었고, 몇 차례나 건의를 했지만 완전히 묵살되었었다. 아마 내 얘기를 듣고 주변에 물어보기라도 했었더라면 괜찮을텐데... 결국 이 프로젝트는 무산될 것이라는 것이 불을 보듯 뻔햇기에, 나의 주도하에 시험문제 입력요원으로 선발된 8명의 동기들 모두가 쉬엄쉬엄 일하는 시늉만 하면서 몇달을 지낸 기억이 있다. 물론 뒤늦게 전산장교와 실력있다는 고참 몇명이 나에게 찾아오고, 결국 이 사업이 무산되어 구성팀이 해체될 때까지었지만 말이다.

사실 필자나 혹은 컴퓨터좀 만져봤다는 사람이라면 웬만한 기본지식인 사항임에도, 명문대 출신의 고급인력이라 자부하던 사람들도 전혀 생각지 못한 부분이다. 컴퓨터를 좀 한다 싶은 사람이라면 콧방귀를 낄만큼 작은 부분임에도 말이다.

이 이야기를 꼭 양성형 스타일의 단점이라고 꼬집긴 힘들지만, 사실 이런 사항들은 학교에서도 학원에서도 가르쳐주지 않는다. 그 이유는 단 하나! 프로그래밍 교육과정에 포함되어 있지 않기 때문이다. 하지만 혼자 공부좀 해본 사람이라면 너무나 기본적인 이야기라서 이걸 아는체 하는 것 조차도 부끄러운 정도의 내용이기에 나름대로 적절한 비유라 생각되어 필자의 경험을 적어보았다.


그러면 자립형 스타일?


회사 입사전에는 자립형 스타일을 참 많이 봤다. 다들 웬만한 프로들보다 실력도 좋고, 대학생이지만 아르바이트로 한달에 수백만원 보수를 받는 실력자들도 적지않게 보아왔다. 그리고 필자가 근무하는 회사에서도 이러한 스타일의 사람들을 아주 우대한다. 웬만한 명문대 출신보다 우대하는 경향이 두드러진다.
한마디로 프로그래밍 실무에 있어서의 실력자들이다. 물론 컴퓨터를 접하는 것이 생활화되어있으며, 한번 프로그래밍에 미치면 폐인모드로 전환될 정도로 매니악하기도 하다.

그러나 그에 못지 않게 부족한 부분이 참 많다. 대부분의 사람들이 학업이나 비전공분야에 대해서는 뒷전이라는 점이다. 그래도 요즘은 학점도 제법 신경을 쓰는 분위기라 덜하긴 하지만, 사실 자신의 실력으로 갈 수 있는 회사의 동등레벨 사원들보다 학점이나 출신학교, 혹은 영어, 제2외국어 등에서 밀리는게 다반사이다.
그토록 원하던 프로그래밍 실력에서는 남보다 앞선다는 점에서 항상 자부심을 갖고 인정도 받지만, 그 실력만으로 다른 모든 부분들을 커버해줘야 하기 때문에 만만한 것은 결코 아니다.


자립형의 단점은 암기를 안한다는 것


모든 사람이 그렇다고 단정지을 순 없다. 하지만 자립형 스타일은 다른 것들보다 감각을 중요시 하는 경향이 두드러진다. 당장 프로젝트를 진행해야하는 일과 관련된 자료들임에도 외우려고 하지 않고, 대충 훑어본 후에 필요할 때마다 자료를 찾는 방식을 택한다.

사실 개발분야는 너무나 방대하기 때문에 그것들을 일일이 외우고 하나하나 확실히 이해가 간 후에 진행하려면 일의 진행이 너무나 늦어진다. 어차피 어떤 프로젝트라도 혼자서 하는 법은 없기 때문에 자신이 프로젝트에서 어떤 일을 맡게 될 지도 모를 상황이다. 그렇기 때문에 지식보다는 감각을 중요시 하고, 필요한 지식은 그때그때의 자료들에 의존하는 스타일이다.

이런 점 때문에 양성형에 비해서 일 적응능력이나 해결능력이 뛰어나다는 평가를 받는다. 이것은 곧 학력은 조금 떨어지더라도 실무에 강한 사람이 더 좋다는 평을 받는 것으로 이어진다.

그러나 이러한 장점이 곧 단점으로도 이어진다. 즉, 프로젝트 진행의 알짜배기 역할이나 핵심역할은 모두 잘 하면서도 혼자서 일을 진행하거나 혹은 전체를 설계하는데 있어서 어려움이 많다는 점이다. 아이디어도 뛰어나고 일 처리능력도 좋지만, 많은 지식이 체계적으로 암기된 상태가 아니기 때문에, 생각은 따라주되 아주 복잡하거나 어려운 접근방법을 동시다발적으로 처리하려 할 때에는 힘이 든다.

예를 든다면 단순한 프로그래밍 알고리즘만 접목된 것이 아니라, 복잡한 수학적 계산방법이나 통계학 및 하드웨어 특성과 아주 밀접한 관련이 있는 프로젝트의 경우 등이다.


또 애매한 말만 하고 있네 ㅇㅅㅇ


일단 간단하게 판단할 수 있는 첫번째 근거는 아무래도 그 사람이 가진 것이라 할 수 있다. 특별한 외부요인이 없는 한, 시간이 부족한 사람이라면 양성형으로, 금전적 여유가 없다면 자립형으로 성장할 수 밖에 없을 것이다. 욕심이 많고 여건도 된다면 양성형으로 기본실력을 다지고, 자립형으로 성장하며 실력을 높이는 쪽으로도 가능하겠지만 말이다.

아무튼 양성형도 좋고 자립형도 좋다. 둘다 나름대로 장단점이 있을 뿐만 아니라, 사람에 따라서는 의지와 상관없이 한쪽 스타일로만 할 수 밖에 없는 경우도 있기에 어느 한쪽이 좋으니 그쪽으로 하는게 훨씬 좋다라고 말할 순 없다. 그렇지만 정말 중요한 것은 양성형으로 성장하든 자립형으로 성장하든지 간에 프로젝트를 보는 시야도 함께 넓혀주어야 한다는 점이다.

내가 아는 것, 혹은 책에 나와 있는 것들이 전부라는 생각을 버리고 여러가지 다양한 경우를 생각해보고 체크해나갈 수 있는 안목이 있어야 한다. 코딩만 잘한다고 모든 것이 해결되진 않는다. 때에 따라서는 몇년간 배운 방법보다 무식해 보이는 코딩 방법이 더 좋을 때도 있다.
또 코딩만 할게 아니라, 현재의 프로젝트 계획이 말처럼 쉽게 진행될 것인지, 혹은 생각하고 있는 코딩방법이 실제로도 효율적인지를 체크해보자. 단지 프로젝트의 원활한 진행을 위해서 뿐만이 아니다. 하나하나 꼼꼼하게 짚고 넘어가면서 여러 경우를 생각하는 습관을 길러야 알짜배기 실력이 쌓일 수 있다.

아무리 스스로를 실무로 단련된 자립형 프로그래머라고 칭하더라도, 생각없이 기계적인 코딩만을 반복하다보면 아무리 세월이 흘러도 이론위주로 배워온 양성형 프로그래머보다 나을 것이 하나도 없다. 오히려 프로그래밍 이외의 다른 면에서도 뒤쳐지므로 결국은 명함도 못내미는 프로그래머로 전락할 것이다.


자신이 부족한 부분을 채우자


자립형 스타일은 뛰어난 감각과 실무능력으로 세월이 흘러도 노하우를 인정받는다. 하지만 자신의 부족한 부분을 채우지 못하면, 평생 실무만을 하다 생을 마감할지도 모른다. 실무라는 것이 일의 보람을 느끼기엔 좋지만, 회사나 기업이라는 조직단체를 기준으로 봤을 때는 말단 실무직원에 지나지 않을 때가 많다.

일에 재미를 느끼는 것도 좋지만, 때로는 PL(Project Leader)의 역할을 할 수 있게 프로젝트를 설계하는 기법이나 조직원들을 관리하는 법도 공부하고, 영어같은 어학공부도 곁들인다면 정말 무시못할 실력자가 될 수 있을 것이다.

양성형 스타일은 이론적인 부분에만 너무 치우치지 말고, 자립형 스타일의 감각을 배우고 받아들이자. 만약 자신이 프로그래밍 서적을 달달달 외울 정도로 열심히 봤다면, 이제 당신은 "프로그래밍 인생"이라는 책에서 머릿말을 훑어본 셈이다. 너무나 방대한 기술, 기법들이 하루가 다르게 새로워지고 상황이 달리지기 때문에 그것들을 모두 책으로 담을 수 조차 없다. 프로그래밍이나 컴퓨터를 일만을 위한 도구로 생각하지 말고 일상 뉴스에 귀를 기울이듯 항상 관심을 가지고, 다른 여러 실무자들에게 항상 배우는 자세를 가지자.

실무보다 관리자나 경영자 쪽으로 진로를 생각하고 있더라도 마찬가지다. 경영공부와 어학공부를 많이 해서 진급이 빨리 될지는 몰라도, 감각없는 사람은 결국엔 프로젝트 팀원들로부터 버림받거나 무시당하는 PL이나 관리자가 될 수 밖에 없다.

정리가 잘 안되는 듯 해서, 이번 편에도 요약정리 ㅎㅎ

 - 독학으로 성장한 자립형은 시간과 노력으로 만들어지며,
 직접 실무를 익히므로 감각이 뛰어나나, 실무이외의 부분에 약하다.
 폐인짓(?) 그만하고 실무 이외의 다방면에도 관심을 가지자

- 강습으로 성장한 양성형은 환경과 노력으로 만들어지며,
 짧은 시간내에 체계적인 습득이 가능하나, 응용능력이 부족하다.
 자신을 자신의 지식속에 가두지 말고, 남의 감각을 배우자


저도 더 열심히 할래요~~ ^ㅇ^


이 글을 적고 있는 필자도 부족한 부분이 너무나 많다. 학교다닐 적 과외한번 받아본 적 없는데다 학교공부보다는 컴퓨터에 매달렸던 필자로서는, 회사에서 명문대 출신의 사람들과 어깨를 나란히 하기가 쉽지 않다. 아직은 실무 실력조차도 부족하다 생각되는 부분들이 많아서 다른 부분들보다는 실무경험을 쌓는데 주력하고는 있지만, 조만간 양성형 스타일의 사람들을 확실히 이기기 위해서 나름대로 또 다른 노력을 시작해야 할 듯 싶다.

필자 본인 조차도 수십년 정도 실무가 쌓인 사람이 아니기에, 여러사람들에게 조언을 한다는게 참 우습기도 하지만, 이제 막 일을 배우기 시작하는 사람들이나 혹은 학생들에게 도움이 되었으면 한다. 홈페이지를 운영하면서 받게 되는 질문 글이나 메일중에는 독학을 해도 될지 학원을 다녀야 할지 묻는 경우가 많다.
독학을 하든지 강습을 받든지 어차피 모든 걸 다 배워야 진정한 실력자가 된다. 일단은 자신의 상황에 맞는 쪽을 택하자. 금전적 여유가 된다면 강습을 받는 걸 추천하지만, 그것은 기초실력 쌓는 정도로만 만족하지 그 이상을 바라진 말 것도 충고하고 싶다. <끝> 

'develop' 카테고리의 다른 글

#include를 조심하라  (0) 2004.07.28
논리적 오류 해결하기  (0) 2004.05.05
for문 날씬하게 사용하자  (2) 2004.04.19
어떤 언어를 선택해야 하나  (2) 2004.01.08
TC, BC, VC의 차이점  (1) 2004.01.08

댓글