2015년 5월 29일 금요일

대한민국 프로그래머 초안

들어가는 말(案)

IT 분야에서 일한 지 꽤 오래되었습니다. 8비트 컴퓨터, GW-BASIC, Q-BASIC, 파스칼, QUICK-BASIC, 2400 bps 모뎀, 하늘소, 새롬 데이터맨, 사운드 블라스터, CYRIX, 옥소리, 완성형/조합형, 허큘리스 카드, K-DOS, 씨앗 등의 단어들을 아는 사람들은 이제 저처럼 아저씨가 되어 결혼도 하고 아이도 키우고 있을 것입니다. 혹은 시대가 바뀌어 독신주의자도 많아졌으니 개인 취미 생활을 즐기면서 살고 계실지도 모르겠습니다. 부모님께서 컴퓨터 학원을 운영하셨던 것을 계기로 5년 간 컴퓨터 학원 강사 생활을 했었습니다. 최근 5년 간은 일과 함께 멘토링을 진행하며 현재는 소프트웨어 인력 양성 프로그램의 담당자로 일하고 있습니다. 9년 동안 월급 받는 프로그래머로 지냈던 날들을 뒤돌아 보면 가장 먼저 생각나는 것이 야근, 특근입니다. 가르쳤던 아이들이 명문대에 진학하거나 스타트 업, 대/중소기업에 취직하고, 또 성공적으로 이직하는 모습들을 봅니다. 이제 나침반 역할에 대한 확신이 들어 집필을 하게 되었습니다. 프로그래머가 되기 위해 필요한 과외(?) 시간은 10시간 이면 충분하다고 생각합니다. 다른 사람의 말을 듣는 것은 나침반을 가지게 되는 것입니다. 단, 나침반만 있다고 목적지까지 갈 수 있는 것은 아닙니다. 훌륭한 나침반을 손에 쥐었다면 목적지를 향해 가야 합니다. 성공적인 나침반 역할을 했던 10시간의 멘토링을 책으로 녹여내었습니다. 이론과 현실은 많이 다르기에 나침반을 만들 때 흔히 할 수 없는 경험들을 많이 적으려고 노력했습니다. 진실을 가려낼 수 있는 안경 역할도 합니다. 기술적 내용과 더불어 독자가 스스로 올바른 방향을 찾을 수 있는데 노력을 기울였습니다. 나침반과 안경을 이용하시어 주변 상황들을 명확히 보시고 올바른 방향으로 원하는 목적지까지 빨리 가셨으면 합니다.
 IT 전공자면서도 다른 직종의 일을 하지만 꿈에 미련이 있으신 분, 환갑을 바라보지만 가족 생계를 위해 일하시며 희망을 꿈꾸시는 분. 미래에 대한 불안감으로 안개 속을 걷는 대학생,  IT 비 전공자이면서 프로그래머에 관심을 가지게 된 분 등 프로그래머가 궁금한 독자를 위하여 썼습니다. 진로를 바꾸는 것은 가볍거나 쉬운 변화가 아닙니다. '인생'을 걸어야 하는 모험일 수 있습니다. 이에, 말 한마디에도 강한 무게감을 느낍니다. 제 경력을 모두 걸고 IT 비화도 썼습니다. 아무쪼록 경험에서 우러나온 진실이 이론으로만 헤쳐나가기는 어려운 현실을 마주한 분들께 작은 도움이 되길 바랍니다.

안전 설명서

상품을 사면 설명서가 따라옵니다. 설명서에는 으레 ‘주의 사항’이라는 이름이 붙은 안전 수칙이 포함되어 있습니다. 자동차를 살 땐 면허 시험을 통해 안전 교육을 받습니다. 컴퓨터를 켤 땐 백신이라는 안전장치를 설치합니다. 프로그래머를 이야기하는 이 책을 읽기 전에도 안전에 관한 내용은 필요합니다. 책을 읽기 전에 고려해야 할 사안을 정하는 것, 자신에게 도움을 주는 이를 판별하는 것이 곧 책을 읽을 자신을 위한 안전입니다.

책으로 전달하는 것의 한계

책을 여는 제목이 <책의 한계>라는 것은 아이러니한 일입니다. 공구 세트를 열기 전이든, 주방용 칼을 쓰기 전이든 가장 먼저 염두에 둬야 할 점은 안전일 것입니다. 그래서 여러분이 책을 읽기 전에, 주의해야 할 부분을 일러두어야겠다고 생각했습니다.
대학생 멘토링을 진행하는 동안 문자나 메일의 교환으로 100% 궁금증을 해결하는 경우는 없었습니다. 서면은 대면보다 효율성이 지극히 떨어지기 때문입니다. 정기적으로 만나서 질문을 주고받는 멘티들은 무엇을, 어떻게 질문할지 정확하게 알고 있습니다. 백 번 듣는 것이 한 번 보는 것만 못하다지만 백 번 읽는 것도 한 번 듣는 것만 못합니다. 그뿐만 아니라 IT 전공과 비전공 불문, 프로그래머로 살아가기 위해 고려해야 할 문제들은 모두 인터넷에서 찾을 수 있습니다. 다만 이 정보들을 어떻게 검색하는지, 어떻게 활용해야 하는지 모르는 사람들 역시 있습니다. 한계를 알고 있음에도 책을 내야겠다는 결심이 선 이유입니다.

장자의 <천도 편>에는 다음과 같은 이야기가 나옵니다.
제나라 환공이 대청 위에서 책을 읽고 있었다. 윤편(수레바퀴 깎는 것을 직업으로 하는 사람)이 대청 아래에서 수레바퀴를 깎고 있다가 망치와 끌을 놓고 대청 위를 쳐다보며 환공에게 물었다.
“대왕께서 읽고 계신 것이 무슨 책입니까?”
“성인의 말씀이니라.”
“그 성인은 지금 살아계십니까?”
“벌써 돌아가셨느니라.”
“그렇다면 대왕께서 지금 읽고 계신 책은 옛사람의 찌꺼기입니다.”
환공이 벌컥 화를 내면서 말했다.
"과인이 책을 읽고 있는데 수레바퀴나 만드는 네놈이 감히 시비를 건단 말이냐. 합당한 설명을 한다면 괜찮겠지만 그렇지 못하다면 죽음을 면치 못할 것이다."
"저의 경험에 비추어 본 바를 말씀드리겠습니다. 수레바퀴를 깎을 때 많이 깎으면 굴대가 헐거워서 튼튼하지 못하고, 덜 깎으면 빡빡하여 굴대가 들어가지 않습니다. 더도 덜도 아니게 정확하게 깎는 것은 손짐작으로 터득하고 마음으로 느낄 수 있을 뿐, 입으로 말할 수는 없습니다. 물론 더 깎고 덜 깎는 그 어름에 정확한 치수가 있을 것입니다만 제가 제 자식을 깨우쳐 줄 수 없고 제 자식 역시 저로부터 그 정교함까지 배울 수가 없습니다. 그래서 나이 칠십에도 불구하고 손수 수레바퀴를 깎고 있는 것입니다. 옛날의 성인도 그와 마찬가지로 가장 핵심적인 깨달음은 책에 전하지 못하고 세상을 떠났을 것입니다. 그러니 대왕께서 읽고 계신 것이 옛사람의 찌꺼기일 뿐이라고 말씀드린 것입니다."  
책으로 사람이 말하고자 하는 모든 것을 전달할 수는 없습니다. 성공한 사람의 말을 듣고 그대로 따라 해도 대다수가 실패하는 이유가 이와 같습니다. 시대 상황이 변화함에 따라 사람이 취하는 태도도 달라져야 합니다. 그러므로 저는 ‘이렇게 하면 성공합니다!’라는 공식은 아예 꺼내지 않기로 하고, 다른 사람들의 PLAY와 경험들을 공유하는 것에 집중하기로 했습니다. IT Field에서 있었던 기간 중 최근 10년의 기록들을 적었습니다. 이 경험들을 10시간 만에 습득할 수 있다면 분명 큰 도움이 되리라 생각합니다.

시간 인식의 중요성

필자가 글을 쓰고 있는 해는 2016년입니다. 모든 사건에는 시간적 배경이 깔려 있습니다. 누군가를 뜨겁게 사랑했으나 지금은 사랑하지 않는다고 할 때, 결과만 보고 “사랑한 적 없다”는 표현을 쓰는 것은 옳지 않습니다. “그 시간에는 세상 누구보다 그 사람을 사랑했다”는 표현이 맞습니다. 여러분은 책이 쓰이는 시기가 2016년임을 분명히 알고 글을 읽어나가야 합니다.
먼 훗날, 남북이 통일된다면 “남북통일은 이루어져야 한다”는 내용의 책은 더 필요하지 않게 될 것입니다. 책이 시대상을 반영(하지) 못 하기 때문입니다. IT 트렌드는 급변하는 분야 중 하나에 속합니다. 애플 사의 스티브 잡스도 5년 이후의 일은 예상하지 않는다고 합니다. 하지만 감히 예측해 보건대, C와 JAVA 프로그래머는 5년 뒤에도 녹을 먹고 살 수 있을 것입니다. 최소한 프로그래머의 영역에서는 Visual Studio 2015로 10년은 돈을 벌 수 있다는 것도요. 10년도 더 된 Visual Studio 버전으로 회사 녹을 먹으니, 기술이 아무리 급변한다고 해도 앞으로의 10년은 충분히 예상할 수 있습니다.
우리는 시간 개념을 직시해야 합니다. ‘이 세상에 변하지 않는 것은 변하지 않는다는 말  뿐이다’라는 문장을 이해해야 하는 것입니다. 앞서 언급한 최근 10년 이전의 경험조차 불필요합니다. AUTOEXEC.BAT, CONFIG.SYS은 20년 전 재미있는 게임을 하기 위해서는 꼭 알아야 할 파일이었습니다. 그리고 지금은 그러한 파일이 있었는지 알 필요도 없는 시대입니다. 10년 뒤에 이 책을 읽은 여러분이 왜 Visual Studio 2015를 다룰 줄 아는데도 취업이 되지 않느냐고 묻는 일은 없어야 할 것입니다. ‘향후 십 년은 Visual Studio 2015로 벌어먹을 수 있을 것이다!’는 2016년에 글을 쓰는 제 의견이기 때문입니다. 여러분은 〈대한민국 프로그래머〉가 2016년에 쓰였고 2017년에 발간되었다는 점을 유념해야 합니다.

젊은이들이 헬조선을 외치는 이유

대한민국 프로그래머를 말하기 전엔 ‘대한민국’부터 짚어봐야 합니다. 더 나아가 대한민국이 왜 청년들에게 ‘헬조선’으로 불리는지도 알아야 합니다. 그래야 우리는 헬조선에서 프로그래머로 살아가는 방법을 찾을 수 있습니다. 2년 전, 멘토링을 받던 한 학생이 4학년이 되어 무보수라도 좋으니 제 밑에서 배우고 싶다는 연락을 해왔습니다. (앞으로도 등장할 인물이므로 이 학생을 R이라고 하겠습니다. 이것을 R 변수에 대입했다고 합니다) 당연히 열정 페이를 주진 않았고 계약직으로 채용해 같이 일을 했습니다. R의 스펙은 인 서울 대학교, 학점은 4.3 근처에 토익은 950선이었습니다. 자격증까지 포함해 R은 입사 시 필요한 스펙은 갖출 대로 갖춘 ‘난 놈’이었습니다. 너무 아까운 인재라 계약 기간이 끝날 때 즈음에는 서울대 지인과 술자리를 마련하여 대학원의 꿈을 키워주었습니다. 그러던 와중 가족이 아니면 해결해 줄 수 없는 문제가 발생했고, R 군은 진학을 포기했습니다. 비단 R뿐만이 아닙니다. 다른 청년들에게도 R 군과 같이 꿈을 포기하는 경우가 비일비재합니다.
또 다른 멘티를 보도록 하겠습니다. 간단히 1이라고 부를 이 멘티는 R과 비슷한 수준의 학생이었으며, 공부를 더 하기 위해 소프트웨어 인력 양성 과정에 들어갔습니다. 1의 목표는 기술을 조금 더 익혀 대기업에 입사하는 것이었습니다. 1에게 문제가 되었던 것은 인력 양성의 과정과 강사 사의의 괴리였습니다. 소프트웨어 인력 양성 과정은 국가에서 취업률 상승을 목적으로 진행하는 프로그램입니다. 그러나 고용된 강사는 수강자의 실력 향상을 중요시하는 쪽에 서 있기 마련입니다. 자신이 처음 원했던 커리큘럼에서 벗어나는 차츰 수업에 1은 강사에게 불만을 토로했습니다. 1에게 돌아오는 것은 배우는 자세가 잘못되었다는 핀잔뿐이었다고 합니다.
동떨어진 것으로 보이는 두 멘티의 이야기는 사실 하나의 문제점을 가리키고 있습니다. 대학생들을 대하는 멘토(이때의 멘토는 대학생들에게 조언을 해주는 모든 사회인을 말합니다)의 태도 말입니다. 제 멘티들과 저의 나이 차는 띠동갑이 훌쩍 넘습니다. 하지만 대학생은 어린아이들이 아닙니다. 학생들은 이미 여러 매체와 경험을 통해 사회의 단면을 잘 알고 있습니다. 초등학교, 중학교, 고등학교를 거치면서 꿈에 대해 진지하게 고민도 해 보았을 것입니다. 학생들을 어리게만 보아서는 안 됩니다. 배우는 자세와 태도에 대해서는 짧게 이야기해야 합니다. 간과하는 순간, 자신이 멘토보다는 꼰대에 가까워진다는 것을 잊어서는 안됩니다. 성인에게 멘토링을 해주면서 마치 멘토가 멘티의 인생을 책임져 줄 것처럼 이야기하는 것은 이치에 맞지 않는다고 생각합니다. 청년들이 믿고 있는 어른들은 세월호 사건 때처럼 ‘가만히 있으라’, ‘시키는 대로 하라’는 말을 해선 안 됩니다. 어른들은 젊은이들이 스스로 문제를 해결할 방법을 찾을 수 있기를 도와야 합니다. 대한민국이 동방예의지국이라고 하지만, 깡패나 양아치가 나이 먹는다고 정신적인 부분에서까지 성인이 되지는 않습니다. 산타클로스 할아버지 이야기를 믿을 나이는 지난 청춘들에게 올바른 것을 가르쳐 줘야 합니다.
현대 사회에는 IT 분야에 관해 이야기하는 채널들이 많이 있습니다. 잡지, 방송 매체 할 것 없이 모든 미디어에서 성공을 말하고 있습니다. 과연 그들이 제시한 ‘성공의 길’을 따라가면 청년들은 확실히 성공할 수 있을까요? 이 사회가 청년의 미래를 보장해 줄 수 있는 계약서를 써 줄 자신이 있는지, 젊은이들이 잘못되었을 때 책임을 져 줄 수 있겠냐는 말입니다. “내가 시키는 대로만 하면 성공할 거야”라는 식으로 홍보를 하는 어느 매거진도 “그게 아니라면 내가 책임을 질게”라고 말하지 않습니다. 더불어 잡지의 기고가나 방송의 PD는 ‘청년들이 생각하는 성공’에는 관심이 없습니다.
조금 더 현실적인 이야기를 해봅시다. IT 분야 저자들은 그들이 만든 프로그램이 무엇인지, 책으로 벌어들인 수입이 얼마인지를 공개해야 합니다. 그래야 청년이 미래에 대한 지표를 잡을 수 있기 때문입니다. 돈은 성공의 척도가 아니지만, 어른들은 솔직하고 진정성 있어야 합니다. 세계적인 석학이지만 가르치는 학생들이 밥도 제대로 먹지 못하는 궁핍한 환경에 처해 있다면 그는 성공한 교수라고 할 수 없습니다. 책 한 권으로 부자가 되었다가 파산한 “부자 아빠 가난한 아빠”의 저자 로버트 기요사키처럼 사기꾼으로 남지는 않아야 합니다. 가설에 대해서는 실험을 해보고 다른 사람에게 가르쳐 주어야 하는 것이 당연한 이치입니다. 그러나 안타깝게도 이런 식의 사기는 대한민국 IT를 시나브로 썩게 하고, 사실을 판단하기 힘든 대학생들은 의심 없이 그 길에 발을 들이게 됩니다. 기대하지 않았다면 어떤 결과가 나오든 수긍하기 마련입니다. 다만 우리 사회는 어른들이 말했던 결괏값과 자신이 겪는 결괏값이 너무나 다르기에 헬조선이라고 불리게 된 것입니다. 대한민국을 헬조선으로 만든 것은 우리 기성세대의 문제이며, 이러한 세태를 제대로 알려주지 않는 것은 다음 세대에게도 실패를 전하는 것과 같습니다. 자신이 아는 것들을 가르쳐 주고, 그들의 미래에 관해선 결정을 못 내리겠으니 “스스로 알아서 하세요”라고 조언해주는 것이 진정 청년들을 생각하는 것이라고 봅니다.

진실의 부재

대한민국은 정말로 모든 청년에게 헬조선일까요? 병특으로 회사에 들어가 연봉을 1억 넘게 받는 대학생에게도 우리나라가 헬조선일까요? 왜 회사는 연봉 정보를 공유하지 말라는 것일까요? 외국계 기업 중에는 분명 연봉 정보를 공유하는 회사들이 있습니다. 개인 직급과 능력도 고려하지만, 지역 물가에 맞게끔 가중치를 두어 전체 공개를 하는 것입니다. 공개되는 정보는 오류가 있더라도 고쳐질 여지가 있습니다. 그러나 공개조차 되지 않는 것에는 문제의 소지가 있다는 뜻입니다. 공동체 생활을 할 때 필요한 정보들은 공개가 되어야 합니다. 정보화 사회라는 단어가 등장한 이후 ‘정보를 돈을 주고 살 수 있다’는 개념은 이해하게 되었지만, 정작 대학생들이 돈을 주고서 라도 살 수 있는 제대로 된 정보는 없는 것입니다.
정보를 얻을 수단인 돈조차 둘째 치더라도, IT 업계에 관한 진실을 가르쳐 주기 힘든 이유는 크게 두 가지가 있습니다. 첫 번째는 지금까지 누구도 이 현상에 대해 관심을 두지 않았거나 현황을 공개하려는 시도조차 하지 않은 경우입니다. 프리랜서, 스타트 업, 대•중•소 기업을 두루 경험해 보았고 창업도 해 보았습니다. 겪어보지 못한 정부 및 기관계 사람들의 이야기까지 듣고 도출한 것은 그들의 시각에 ‘한국 IT는 힘들지 않으며’, ‘사회는 이미 완벽하다’는 점입니다. 그런 사회에 사는 사람들에게 한국이 어떻다, IT가 힘들다는 이야기를 해 봤자 논리적이라는 말을 들을 수는 없습니다. 시스템의 상위 계층으로 갈수록 사람은 진실을 밝히려는 시도하지 않게 됩니다.
필자의 경우, 기업 간의 문제를 해결하면 (저희 쪽으로 유리하게 흐름을 바꾸면) 건당 천만 원 이상의 보너스를 받았습니다. 연말에 받는 2~3천만 원의 보너스가 더해지면 외벌이만으로도 사회 시스템에서 문제를 찾으려는 생각은 덜하게 됩니다. 충분히 노력만 한다면 다른 사람들이 힘들게 취득하는 학위나 MBA 문제도 회사에서 해결할 수 있었습니다. 노력으로 얻어낸 자리에서 얻어낼 수 있는 또 다른 기회가 존재하는 것입니다. 사법고시 합격도, 검사 경력도 쉬이 아무나 쌓을 수 있는 것이 아닙니다. 국내 1위의 기업에서 막강한 권력을 가지고 있다면 수십억은 물론 수백억의 부도 몇 년 안에 쌓는 것이 가능합니다. 그들에게 굳이 진실을 밝혀야 할 이유는 없습니다.
두 번째 이유로는 서포터의 부족, 또는 해결사의 부족을 들 수 있습니다. 문제를 제기하기 위해서는 진실을 말하는 많은 서포터가 필요합니다. 프로그래머는 해답을 제시할 수 없다면 그를 요구하는 문제를 제기하는 행동 자체를 싫어하기 때문입니다. 또한 제기된 문제를 해결하기 위해서는 생각이 비슷한 사람들이 필요합니다. 프로그래머가 되고자 한다면 설사 해결 못 하는 문제가 발생하더라도 WBS(Work Breakdown structure)를 작성하듯 문제를 세분화하여 하나씩 해결할 마음 자세를 가져야 함은 물론입니다. IT 업계의 변화를 위해서는 일정 수준 이상의 실력을 갖추고, 자존심이 아닌 자존감을 충분히 가지고 있는 사람들의 외침이 필요합니다.

숨은 진실 찾기

사람은 행복한 삶을 추구하는 계획을 세우기 위해 진실을 알아야 합니다. 범위를 학생들로 좁히자면, 청년들에게는 논리적인 판단을 통한 빠른 직업 설계로 자신과 부모님 모두를 안심시킬 수 있는 기술이 필요합니다. 청소년기까지의 학생들이 듣게 되는 거짓은 인류의 존속과 평안을 위한 선의의 의도를 갖는 경우가 많습니다. 그러나 대학생이 되면서 젊은이들은 세상 사람들의 이야기에 귀를 기울이게 되고, 긍정적이지 못한 수많은 거짓말을 마주하게 됩니다. 그 속에서 진실을 찾는 가장 쉬운 방법은 진실을 추구하는 사람들의 이야기를 듣는 것입니다. 문제는 그 ‘사람들’을 찾는 것에 있습니다.
사람의 배경, 즉 백 그라운드를 묻는 이유는 잘 모르는 대상을 배경을 통해 추측하고 싶기 때문입니다. 가령 앞에 있는 사람이 미국에서 10년간 재학 생활을 했다면 그가 영어를 잘할 것이라고 예상할 수 있습니다. 서울대나 카이스트를 졸업한 사람이라면 그의 고교 시절 성적이 좋았음을 알 수 있습니다. 일반적인 아이들이 초등학교에 다닐 때 NASA(미국 항공 우주국)에서 일한 배경이 있는 김웅용 씨는 그 영역에서 남다른 재능을 보인다고 할 수 있습니다.
이처럼 파악이 용이한 배경이 있는 반면, 표면적인 정보만으로 실제를 파악할 수 없는 경우도 분명히 존재합니다. “빨간 줄”을 예로 들어봅시다. 소위 범죄를 저지른 사람에게 우리는 ‘빨간 줄이 그어졌다’는 표현을 쓰곤 합니다. 이는 죄를 지었다는 부끄러운 표식이기도 합니다. 하지만 범죄자라는 사실만으로 그의 배경을 반사회적이고 도덕적이지 못하다고 할 수 있을까요? 안중근 의사는 단편적으로 보면 살인자입니다. 안중근 의사가 사람을 죽인 것은 불변하는 사실입니다. 그 사실에도 불구하고 안중근이 ‘의사’로 추앙받는 이유는, 안중근 의사의 살해가 조국 독립을 희망하는 투쟁심에 기반을 두었기 때문입니다. 백 그라운드를 직시하기 위해서는 다음과 같은 내용을 주의 깊게 보아야 합니다.
선택의 순간에 무엇을 포기하는지 보라. 
이야기의 방식이 감성적인지, 논리적인지 보라. 
대화에서 돈이 제외되었는지, 투명하게 다루어졌는지를 보라.

이 세 가지만 눈여겨보면 청자가 꼭 알아야 할 진실을 말하는 사람을 찾을 수 있습니다. 노무현 전 대통령과 유시민 전 장관, 김용철 변호사 같은 인물들은 감성적 이해관계보다 원칙과 상식을 따른 인물들입니다. 돈에 대해서도 진실 되었던 사람들이니 세 가지 이유에 해당하는 예로 적절할 것입니다. 이들은 캐면 캘수록 금 같은 진실만 나오는 사람들입니다. IT 분야의 진실 또한 마찬가지로, 앞으로 할 이야기들을 읽으면 찾아낼 수 있습니다.
해외에서 학위를 따 오는 석학들은 크게 두 부류로 나뉩니다. 학위를 취득하고 자국에 남아 박사 활동을 할 사람과, 본국으로 돌아갈 외국인을 위한 학위. 이 두 경우에게는 요구되는 학비에도 차이가 있습니다. 이런 커리큘럼이 생겨난 이유에 대해 알아볼까 합니다.
대한민국에서는 영어를 구사하지 못하는 것이 큰 단점으로 여겨집니다. 토익 학원의 광고는 학업의 목적도 없이 ‘쉬운 토익’만을 강조하고, 전공을 불문하고 대학교에서 실용 영어나 전공 영어를 교양 필수 과목으로 이수해야 합니다. 대한민국에 한국어를 쓰는 우리가 살고 있는데 영어를 못한다는 것이 부끄러운 일이 되고 맙니다. 알 수 없는 일입니다.
미국이나 일본에서 native 수준의 언어를 구사하는 사람들이 IT 분야에서 일하기 위해 진로 상담을 받으러 오는 경우가 있습니다. 저는 그들이 언어 문제에서 자유로운 것에 많이 부러워 했는데, 정작 상담자가 돌려준 이야기는 달랐습니다. 일본에서 일하는 사람은 당연히 일본어를, 미국에서 일하는 개발자는 당연히 영어를 써야 하며, 결국 승부는 프로그래밍 실력이 가른다는 것입니다.
Q : 영어(일본어) 전공인데 일자리가 많다는 IT 쪽에 취업하고 싶어요.
A : 부럽습니다. 영어(일본어)가 네이티브 수준이시네요. 전공을 살리시는 것도 좋지 않을까요? 번역가나 교사 같은…….
Q : 일자리가 많이 없어요. 돈도 많이 벌고 싶고요. 한국에 살면 외국어가 장점이 되지만 이 땅(일본, 미국)에서 살아가는 데에는 아무 강점이 되지 않습니다. 한국인이 한국어를 하는 것은 당연한 일인 것처럼요.
A : 이해합니다. 제가 대기업에 있을 때도 영어와 중국어는 지원자들의 평가 기준 중 하나였습니다. 하지만 중소기업으로 이직하고 보니 중국어를 잘하는 한국인보다는 한국말을 잘 하는 중국인을 뽑고, 미국 대학교에서 영문과를 나온 친구들이 낮은 연봉을 받으며 일을 하더군요. 업무에서 경쟁력이 없었던 것은 확실합니다.
Q : 기술 수준은 일본(미국)이 높은 것 같은데 무엇부터 공부해야 할지 모르겠습니다. 언어를 창시했다는 사람들의 책들도 어렵습니다.
A : 새로운 것을 배우는 과정에는 당연히 시간이 필요합니다. 제가 자전거 타는 방법을 이론으로 설명해드릴 수 없듯 우선 자전거를 타셔야 합니다. 프로그래밍 언어 책들에는 많은 예제가 있습니다. 한 달 동안 매일 타이핑을 해서 저에게 보내주시겠어요? 컨트롤(혹은 커맨드) C, V 하시면 안 됩니다.
Q : 소스만 타이핑하면 되나요?
A : 네. 그 이후 기본적인 것들을 가르쳐 드리겠습니다. 복면가왕이라는 가요 프로그램 이야기를 해 드릴게요. 출연자들의 실력이 상당하지요. 재야의 실력자가 나온다는 프로그램 취지만으로 모든 사람이 전화 한 통만을 이용해 복면가왕에 출연할 수 있을까요? 모든 특정 필드에는 그들이 요구하는 최소 기준이 있습니다. 복면가왕의 경우 ‘사람들이 인정할 만한 노래 실력’을 갖추어야 참가 자격이 부여되겠지요. 어떠한 필드든지 최소한의 요구 사항을 충족한다면 발을 들일 기회를 잡을 수 있습니다. IT 업계의 최소 요구 사항을 채우려면 우선 지루한 타이핑부터 시작하셔야 합니다. 자전거를 배우려면 자전거를 직접 타는 방법 외에는 없듯이 말이죠.

프로그래밍 서적은 이미 많이 나와 있습니다. 이 때문에 굳이 하나 더 집필할 간절한 필요는 없었습니다. 그뿐만 아니라 프로그래머는 코드로 이야기하는 직업이며, 코드는 인터넷에서 충분히 찾을 수도 있습니다. 그러나 프로그래머 중 C&JAVA를 동시에 이야기한 책을 출간한 이는 없었습니다. 그래서 해당 기술 서적을 내기 전, 제가 알고 있는 것들을 독자도 아는지 확인을 받고 싶었습니다. IT 분야로 전향하는 분들께 말해주었던 것들을 싣지 않고 글을 쓰는 것은 독자를 상대로 실험을 하는 것과 같기 때문입니다. 서툴렀을지 모를 출발부터 일련의 과정들과 시행착오에 관한 내용을 담은 책이 필요했습니다. 자전거를 잘 탄다는 기초 능력의 전제하에 곡예를 넘어 보이는 것은 초심자가 자전거를 타며 경험할 수 있는 소소한 행복과 기술을 원천 차단할 수 있습니다. 그들만의 리그에서만 통용될 수 있는 책이 아닌, 새로운 세계로 발을 들이려는 사람들에게 지침서와 같은 역할을 〈대한민국 프로그래머〉와 〈C&JAVA〉가 할 수 있었으면 합니다. 덧붙여 서두긴 하지만 명확한 진리를 하나 말해드릴까 합니다.
프로그래머는 코딩이 재미없으면 그만두는 게 맞습니다.

자신감을 가져보자

신입 사원이 되든, 학교나 학원에서 배우든, 지인을 통해 코딩을 배우든 시작 이후 6개월 내내 코딩에 재미를 붙이지 못한다면 그것은 가르치는 사람의 문제입니다. 왜 지식은 책을 통하면 잘 전달되지 않는 것일까요?
우선 용어가 걸림돌 입니다. 일상에서 접할 수 없었던 언어의 홍수가 입문자를 당황하게 합니다. 자전거를 타는 방법을 책으로만 배우는 것은 어렵습니다. 커브 길에선 핸들을 얼마나 꺾어야 할지, 발은 초 당 얼마나 굴려야 하는지 등, 자전거 운전 책을 수백 권 읽는다고 해도 직접 타면서 배우는 것이 더 빠른 법입니다. 마찬가지로 모르는 용어는 한 번 보고 또 보고, 다음에 다시 보고, 도저히 이해가 되지 않으면 ‘이 상황에서 이렇게 쓰는 말인가 보다’ 하고 넘어가는 것으로 충분합니다. 코딩을 직접 다루어 보면서 배우는 것이 훨씬 익히기 쉬울 테니 말입니다. 자전거를 타는데 자전거의 모든 명칭을 알 필요는 없는 것과 같습니다. 이 책에서도 모르는 단어가 등장한다면 한 번 검색을 해보고 넘어가길 바랍니다.
코딩 실력의 향상을 위해서는 백문이 불여일타 입니다. 가르치는 사람은 이론이 아닌 코드로 설명해 주어야 합니다. 아키텍트도 후배가 모르는 것을 묻는다면 코드로 가르쳐 줄 수 있어야 합니다.
코드가 무엇인지 간단히 맛을 봅시다. 먼저 ‘코드’라는 개념이 머릿속에 정리가 되어 있어야겠지요. 프로그램을 짜기 위한 프로그래밍 언어를 코드라고 하며, 코드를 키보드로 타이핑 하는 것을 코딩이라고 합니다. 다시 말해 ‘컴퓨터에 말을 하는 것’이라고도 볼 수 있습니다. 시장 점유율이 높은 Windows 운영체제를 중심으로 코드에 관해 설명해 보겠습니다.

셸(Shell) 프로그래밍

명령어를 입력하기 위해서는 명령 창을 띄워야 합니다. 키보드의 윈도우 키와 R을 동시에 누르면 실행 창이 뜨는 것을 볼 수 있습니다.
실행창에 cmd(command의 준말)를 입력하면
cmd.exe 창이 뜹니다. 이 창을 명령 프롬프트, 또는 도스창이라고 부릅니다. 여기에 기본 명령어를 코딩(타이핑) 해보겠습니다.
Dir 을 입력하면 현재 디렉토리의 정보를 알 수 있습니다.
같은 방식으로 explorer. ← 점을 콕 찍어서 코딩하면 익스플로러(탐색기) 창이 나타납니다.

Windows, Linux, MAC의 모든 GUI(graphical user interface)가 있기 전에는 Command 창, 또는 Shell이 먼저 개발되어 있었습니다. 운영체제에서 가장 중요한 역할을 담당하는 '커널' 개발 후 flashing(탑재) 해야 할 것은 shell(셸 또는 쉘)입니다. 더불어 셸을 올려야 GUI 개발이 가능해 집니다. 컴퓨터에 심각한 문제가 생겼을 때, 프로그래머는 command 창에서 코딩을 이용해 문제를 해결해야 합니다. 코딩 없는 프로그래머란 있을 수 없는 것입니다. Command 창 명령어 몇 개를 지루하지 않을 정도로만 보도록 합시다.                    
cls 화면 지우기
dir 디렉토리 보기
cd 디렉토리 바꾸기
md 디렉토리 생성
rd 디렉토리 지우기
explorer .  현재 디렉토리 기준으로 탐색기 실행

셸에서 명령어를 타이핑 하는 것도 코딩입니다. 앞으로는 멀티 플랫폼의 적응을 위해 커맨드 창도 셸이라는 용어로 통일하겠습니다. 기본적인 명령어와 입력 방법을 익혔으니 다음 명령을 코딩해 봅시다. 코딩에서 띄워쓰기는 매우 중요한 부분이니 주의하시기 바랍니다.

for %i in (1, 2, 3, 4, 5, 6, 7, 8) do md 새폴더%i
User 폴더에 새폴더1 부터 새폴더8 까지 8개의 폴더가 생성되었습니다. 직접 폴더에 가셔서 확인하셔도 되고 dir, explorer. 으로 확인하셔도 됩니다. 이 때의 for을 반복문, %i를 변수라고 합니다. 이제 조금 다른 코딩으로 9에서 20 까지의 새 폴더를 만들어 보겠습니다.

for /L %i in (9,1,20) do md 새폴더%i
반복문과 변수의 입력은 그대로 하되 /L이 처음 등장했습니다. 소괄호 안에 입력한 값도 이전의 코딩과는 다른 구조로 이루어져 있습니다. 방금 전의 코드와 무엇이 다른지 파악한다면 코딩에 의해 나온 값을 이해하기도 쉬워집니다. /L 옵션을 이용하여 (시작값, 증가치, 종단값) 으로 FOR LOOP 문 인자를 바꾸었습니다. 옵션을 이용해 반복되는 값을 입력하는 수고를 줄인 것입니다. 인자는 파라미터와 같은 의미로 쓰이며, 파라미터는 “들어가는 값”이라는 뜻을 가지고 있습니다. '디렉토리'와 '폴더'가 같은 의미로 쓰이는 것과 유사합니다.

이것으로 아주 기초적인 코딩을 마쳤습니다. 이렇게 셸에서 코딩을 해 프로그래밍 하는 것을 셸 프로그래밍이라고 합니다. explorer. 로 간단히 실행할 수 있었던 탐색기의 모든 기능을 만들기 위해서는 고급 개발자가 한 달 이상 투자를 해야 합니다. 그리고 버그를 잡기 위해 한 달 이상을 다시 투자해야 합니다. 사용자에게 베타 테스팅을 하고 시장에서 검증 받으려면 추가로 많은 돈과 시간이 들어갑니다. 그렇지 않았다면 누구나 TOTAL COMMAND와 같이 수십 억(76억 추정)의 수익을 올리는 탐색기를 만들 수 있었겠지요.

상황에 따라 최적의 솔루션을 만드는 데에는 셸 프로그래밍 만한 것이 없습니다. 가령 
shutdown -s -t 3600
을 입력하면 여러분은 1시간(3600초) 뒤에 컴퓨터가 자동으로 꺼지도록 할 수 있습니다. 물론 shutdown -a로 명령을 취소하는 것도 가능합니다.

지금까지 해온 일련의 과정이 바로 Shell programming 입니다. 혹은 Shell script coding 이라고 하는 경우도 있습니다. 이런 작업들을 “프로그래밍 하다”, “코딩을 하다”로 표현하며 작업을 이루어 내는 사람을 “프로그래머”, “코더”라고 부르는 것입니다.

추상화와 API

코딩을 한번 해 보았으니 이제는 프로그래밍에서 가장 중요한 개념인 추상화에 대해 이야기해 볼까 합니다. 추상화(抽象化)는 뽑을 추, 꼴 또는 모양 상, 되게 할 화 세 한자로 이루어져 있습니다. 대상에서 모양이나 구조를 뽑아내어 새로이 되게 하는 것을 말합니다.
추상화(抽象化)가 잘 된 추상화(抽象畵)입니다. 누가 보아도 그려진 것은 사람이지만, 사실적 표현 양식과는 또 다르게 인간의 내면에 대한 작가의 시선도 표현하였습니다.
발전 설비, 전기 설비, 집으로 오기까지의 변압 과정들, 전등과의 배선 등 전체를 모르더라도 우리는 스위치를 켜면 불이 켜지고, 끄면 불이 꺼진다는 것을 알고 있습니다. 스위치를 고안한 사람 또한 ON/OFF의 기능적인 면에서 스위치라는 도구를 고안해 냈을 것입니다. 첫 번째 예시의 그림과 두 번째 예시의 스위치. 모두 추상화 과정을 거쳐서 나온 결과물입니다. 추상화 과정을 거쳐 나온 결과물을 API라고 합니다.
CBD, 모듈, 프레임웍, SOA, EAI, PaaS, SaaS, DBaaS, IaaS 등도 추상화 과정을 거쳐 나온 API의 일종입니다. System.out.println(“HELLO WORLD”):를 쓸 때 화면에 점을 찍는 방법인 ASCII CODE나 UNICODE, JVM 프레임웍을 거쳐 RAM에 저장된 내용이 CPU를 거치고 메인보드의 노스브릿지를 거치쳐 그래픽 카드로 가는 과정. GPU 연산과 HDMI, D-Sub 을 통해 모니터로 가고 모든 색의 주사선을 담을 수 없어서 RGB로 표현해야 하는 등의 내용은 알지 못해도 됩니다. 그저 System.out.print가 화면에 찍는 API라는 것만 알면 되지요. 이것을 추상화된 API, 또는 간단히 API라고 부릅니다. 우선 ‘추상화’와 ‘API’를 짚은 뒤 이해하기 시작하면 많은 용어에 끼어있던 안개가 걷히게 됩니다. 깊이 들어갈수록 여러 가지 해석들로 개념이 나누어 지지만 뿌리는 이렇습니다.

뿌리 용어를 알면 스스로가 새로운 용어를 만들어 낼 수 있습니다. 운영체제의 역할을 이해한 사람이라면 System Control Program, Communication Interface between human and machine 을 줄여 각각 SCP, CIHM 라는 용어로 만들어도 될 것입니다.

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...