최근들어 갑자기 화두로 떠오른 SW 위기론과 함께 요즘 관련된 이야기가 많은듯 합니다. 지금은 개발에서 손뗀지 까마득히 예전이지만, 개인적인 경험과 느낌을 한번 정리해봅니다. 특별히 직종간의 편가르기 하자는것도 아니고, 그렇다고 대안을 제대로 제시하는것도 아닌 그냥 주관적인 글이라고 생각하시길..
1. 제가 프로그래밍을 시작하게 된 계기
요즘 아이들은 아마 많이 다르겠지만, 제가 어릴때 남자아이들의 미래의 꿈 하면 흔히 이야기하는것이 “대통령”, “의사”, “과학자”, “운동선수”등 이었던것 같습니다. 저도 어릴때는 그냥 막연하게 과학이 좋아서 “과학자” 였다가, 중학교때 컴퓨터를 접하면서 “프로그래머”로 바뀌게 되었구요. 아마 그때 컴퓨터를 접하고 그렇게 빠지지 않았다면 그당시 그다음으로 빠졌던 물리나 비행기 덕택에 아마 “물리학자” 또는 “항공공학자”가 되었을지도 모르겠습니다.
개인적으로 컴퓨터에 대해 관심을 가지게 된 것은 중학교때였죠. 우연히 교보문고에서 접했던 그 당시 컴퓨터잡지였던 “컴퓨터학습”의 “제비우스 1000만점 돌파!” 특집기사에 혹해서 잡지를 샀다가 컴퓨터에 급격히 관심을 가지게 되었습니다. 그리고 집에서 열심히 조른 덕택에(?) 컴퓨터를 중3때에 결국 가지게 되었고, 고2때 가정방문오신 담임선생님의 지적으로 압수를 당해서 골방에 들어갔다는; 사실, 그당시에 독학으로 프로그래밍의 세계에 빠져들게 된 것이 “SW란것이 HW와 달리 비교적 쉽게 나만의 아이디어를 직접 구현해 볼수 있다는 것”이 크게 매력적으로 느껴졌기 때문이었던것 같습니다. 그리고 솔직히 이야기하면 초기엔 게임과 3D 그래픽/시뮬레이션의 세계가 참으로 끌렸었구요. 🙂
대학진학은 의대를 가라는 집안의 압력도 은근히 있었지만, 외우는 공부 정말 싫어하고 피보기 싫어하는 제 성격상, 그리고 이미 누나가 의대생이라 의대의 실체를 잘아는 저로서는 좋아하는 컴퓨터를 버리고 의대를 갈리가 만무했죠. 결국 진학은 그당시 공대도 아닌 이과대 소속의 전산과학과로 하게되었습니다. (보통 이과대 소속의 전산과학과 경우 공대 소속의 전산공학과에 비해 HW는 디지털레벨 수준으로만 진행하지 아날로그 레벨로 내려가지는 않는 경향이 있었음)
진학관련해서 그때 7~8년 선배님을 한번 뵌적이 있었는데, 그분의 충고가 아직도 기억에 남네요. “유행따라 인기학과에 진학하지 마라. 나는 예전에 조선업이 활황일때 조선학과에 진학했는데, 요즘은 그렇지가 못하다”
– 최근에 국내 조선업이 다시 잘나가는것을 보면 인생사 새옹지마일수도 있다는 생각이 들고,
– 대학 졸업하고 사회에 나가서 자리잡기까지 10년가까이 걸리는데, 요즘같이 미래에 무엇이 뜨게될지 제대로 예측하기 힘든사회에서 그럴바엔 내가 잘할수있는것을 하자는 생각도 들고 (어쩌면 요즘 잘나가는 공무원이 10년뒤에 재정적자로 정리해고당하고, 의사와 변호사는 시장과열로 치열한 경쟁이 될지도 모르지 않을런지? 어느분야가 잘뜰지 눈치보는것도 필요하지만, 어느분야든 잘하는게 바로 본질적인 경쟁력이 아닐런지?)
– 그리고 본인이 잘할수있는것이 무엇인지 모르는 학창시절에는 그나마 적성에 맞는것 (좋아하는것/동경하는것과 적성과는 별개로 보임) 이 가능성이 크지 않을까?
저는 그래서 세번째 적성에 맞는과로 갔습니다. 요즘은 다시 세상이 돌고돌아 의대가 인기 만빵이긴 하지만요.
2. 대학에서의 전산학과 프로그래밍
대학교를 들어간뒤에는 초기엔 물만난 고기처럼 지냈던것 같습니다. 압수당한 PC를 돌려받는것 외에도 대학학업을 위한다는 명분으로 각종 PC주변기기를 구입하는것은 합법(?)이었으니깐요 🙂 전공과 취미가 거의 겹쳤던 시절이라고 불수 있겠죠.
대학이나 대학원에서 느낀 프로그래밍과 전산학은 일부는 중첩되지만 일부는 좀 다르다고 생각합니다. 지금은 대학에서 어떤 과목들을 배우는지 잘 모르겠지만, 옛날에 제가 학교를 다녔을땐 들었던 고전적인 과목들은 다음과 같았죠. (요즘은 Java나 주로 실전위주가 과목들이 많다고도 들음) 프로그래밍이란 단어의 정의에 따라 달라지겠지만, 프로그래밍의 경우 좁게는 코딩을 의미하고 전산학은 보다 넓은 범위를 커버한다고 보는데, 그당시 이론보단 실제 프로그래밍으로 구현해보는것을 좋아했던 저로서는 상대적으로 이론에 가까운 이산구조론이나 통계, 확률론등은 사실 좀 따분하게 느껴졌던 측면도 있었죠. 반면에 전산학과 프로그래밍 모두의 꽃이라고 볼수있는 “Data Structure” 같은 과목은 실제 프로그래밍을 할때 보다 논리적인 사고를 가능하게 해주는 아주 유용하게 느껴졌던 과목이었구요.
“Algorithms + Data Structures = Programs” 란 Niklaus Wirth가 쓴 고전책의 제목만 봐도 그 관계를 명확하게 알수 있죠. (요즘 Data Structure 과목 대학교에서 안배운다는 소리도 있던데, 그 이야기 듣고 사실 좀 충격적이었음)
그 당시 프로그래밍언어를 따로 배우는 과목은 거의 없었습니다. 단지 “Data Structure” 과목하면서 PASCAL 과제들이, “화일구조론”인가 배울때 C 과제들이, “Computer Architecture” 배울때 Assembly 과제가, “Artificial Intelligence” 배울때 PROLOG 과제들, “Programming Language” 배울때 LISP 과제등이 나오면서 자연스럽게 각자 알아서들 공부하게 되는 그런 구조였습니다. “Programming Language” 과목이 있긴 했지만, 특정 언어을 배운다기 보다는 FORTRAN, ADA까지 실제 프로그랭 언어들의 문법을 총괄적으로 분류하고 분석하고 또한 설계할수 있는 과목이라고 봐야할테구요. “Compiler”는 그렇게 문법 설계된 언어를 구현하는 방법을 배우는 과목이었고. C++와 Smalltalk 같은 객체지향언어(C++는 엄밀히는 아니긴 하지만)는 대학원때가 마침 그 시기라 공부했던것 같구요. Java야 다음에 있을때 나왔기에 그때서야 공부했었었습니다.
사실, 알고리즘이라는 본질은 크게 다르지 않고 언어는 그것을 구현하는 방법론만의 차이가 있을 뿐이기에, 지금도 엄청나게 많은 종류의 언어 (특히 스크립트까지 포함하면) 들이 나와있는고, 또 앞으로도 계속 나오는데 모두를 하나하나씩 일일히 다 배운다는것은 비효율적일수도 있다고 봅니다. 기본적인 알고리즘과 공통되는 프로그래밍 언어의 속성들을 이해한다면 그때그때 대응해 나가는게 더 효과적인 방법이겠죠.
그외 유용했던 과목들은 모두다 대학원입학시험 필수과목들이었던 덕택에, 그래도 지금도 간간히 기초과목들은 기억에 남는것 같습니다. ^^ Data Strucutre, Programming Language, Operationg System, Computer Architecture, Database, Computer Network, Numerical Analysis등으로 기억되네요. 마치 기초과학이 튼튼해야 응용공학이 잘 발달할수 있듯이, 일반적인 프로그래밍외에도 이런 기초이론들도 중요하다는것이 개인적인 생각입니다. 물론, 꼭 이런 기초없이도 프로그래밍의 귀재들은 존재하기 마련이고, 개인적으로도 대학교 1~2학년때는 이런 이론보다는 다양한 실전 프로그래밍에 더욱 끌렸고 또한 시간을 쏟았던 기억이 나지만요. 그리고, 이런 이론의 장점은 디테일한 프로그래밍과 달리 시간이 흘러도 크게 바뀌지 않는다는 점이죠. 아마 웬만한 전산학의 기초이론은 인공지능같은 몇몇분야를 제외하고는 70~80년대에 웬만큼 완성되었을 겁니다.
그외 개인적으로는 이때도 참으로 게임이나 그래픽을 좋아해서 고등학교때 만들었던 “너구리”게임도 다시 만들어보는 등 과전시회에도 주로 게임이나 그래픽관련 위주로 출품했던 추억이 나네요. 그당시에 선배들이 “게임 너무 좋아하지 마라. 밥먹고 살기 힘들다”는 충고를 받아들여 그다음부턴 잘 만들지 않았지만.. (이젠 돌고돌아 다시 게임이 문화의 축이자 거대 산업이 되는 시대가 다시 돌아오긴 했지만… 이런식으로 세상은 돌고돌기에 10년뒤엔 다시 HW 위기론이 나올지도 모르죠.)
2편에 계속…
글 : 이택경 (@kyung88)
출처 : http://bit.ly/nHoyEv
You must be logged in to post a comment.