3732
2012-11-21 18:49:38
20
프로그래밍을 막 배우기 시작하시는 분들께 팁을 드리자면, 프로그래밍은 번역과도 같아요.
한글로 쓰여진 글을 미국 사람들에게 뜻을 전달하기 위해 영어로 번역해 보여준다거나, 프랑스 사람에게 보여주기 위해 프랑스어로 번역한다거나, 중국 사람에게 보여주기 위해 중국어로 번역을 하듯이 프로그래밍도 콤퓨타가 이해할 수 있는 언어로 우리말을 번역해 적어주는 거라고 생각하시면 됩니다.
사람 말에 여러 언어 종류가 있듯이 콤퓨타 말에도 여러 종류가 있죠. C도 있고 자바도 있고 JSP도 있고 이것저것 상당히 많습니다. 사람 말과 같이 각 프로그래밍 언어들에도 표현의 한계가 있거나 표현법의 차이가 있죠. 같은 말을 표현하는데도 어떤 언어는 무척 효율적으로 적은 단어 수만 활용해 잘 표현하는가 하면 어떤 언어는 간단한거 하나 표현하는 것도 힘이 들어서 온갖 단어를 다 끄집어 내서 장황하게 설명해야만 표현이 가능하기도 하니까요.
어디에 어떻게 사용되느냐에 따라서도 표현법이 많이 달라집니다. 웹개발에 쓰이는 언어만도 서버쪽, 클라이언트쪽에 쓰이는 것에 따라 그 언어가 표현하고자 하는 것들이 바뀌니까요. 사람말로 바꿔 이해해보자면, 태평양 한가운데 작은 섬에 자기네 부족만 모여 살던 작은 부족이 있다고 칩시다. 이 사람들은 평생 자기네끼리만 보고 살아요. 세상에 마치 다른 사람들은 전혀 없다는 것 처럼 믿고 말이죠. 이 사람들의 언어에서는 '부족'이라는 단어가 없어요. 그들의 언어에서 '부족'이라는 단어의 뜻이 우리가 생각하는 '인간'의 뜻이랑 같다는 거죠. 프로그래밍 언어도 이렇습니다. 어떤 언어는 다양한 상황과 사물에 대한 상세한 표현법을 가지고 있는 것에 반해 어떤 언어는 그딴거 없이 간단한 표현 하나에도 무척 단순하고 한정적인 단어로 장황하게 설명을 해야만 합니다.
그래서 프로그래밍을 처음 배울때는 해당 언어의 문법이나 사용가능한 (자주 쓰는) 단어 암기가 주가 되죠. 사실 이건 중 고등학교 영어 배우던 시절의 그것과 다를게 없습니다. 지겹고 힘들죠. 게다가 사람말을 배우는 것도 그렇지만, 언어를 배우는 것은 그 언어를 사용하고 사는 사람들의 사고체계 자체를 이해해야 하는 문제입니다. 위에서 말했듯 우리 언어에서는 없던 표현이나 없는 상황에 대응되는 그들의 언어의 신개념을 이해해야 하는 과정이 필요하죠. 프로그래밍을 배울때도 절차지향이네 객체지향이네 이런 언어의 특성에 따라서 우리가 전혀 몰랐던 개념에 대해 이해하는 지난한 과정을 거쳐야 합니다. 이런거 이해하는 것에도 시간이 걸리죠...ㅠㅠ
하지만 이런 기본적인 것들을 어느정도 갖추고 나면(사실 모든 단어를 다 외우고 시작할 필요는 없습니다. 영어 공부할때도 그렇지만, 현존하는 모든 영단어를 다 외워야 영어가 되는건 아니잖아요? 자주 쓰이는 필수적인 단어들을 외우고 나서 영어를 시작하면, 처음보고 생소하고 잘 안쓰이는 단어를 만나더라도 사전을 살짝 찾아보며 충분히 영어가 가능해지는 것 처럼요) 그 뒤는 정말 말 그대로 번역작업을 하는 느낌이 됩니다.
내가 콤퓨타에게 이러저러한 일을 시키고 싶습니다. '야, 1에서 1000까지 모든 수를 하나씩 다 더해봐라' 이런 명령은 사람한테 시키면 비효율적인 일이지만 콤퓨타는 곧잘하는 내용이죠. 이걸 뜻을 전달하기 위해 콤퓨타의 언어, 그 중에서도 특정 언어 종류로 번역을 해야 하는 겁니다. 사람말을 다른 언어로 번역할때와 마찬가지로, 사람말을 콤퓨타 언어로 번역할때도 정답은 없습니다. 짧고 간단하게 축약해 말을 할 수도 있고, 장황하고 길게 둘러 말할 수도 있습니다. 번역가가 번역 실력이 좋고 나쁨을 따질때는 단순히 영단어 수를 몇개 더 알고 있냐 없냐가 아니라 같은 문장을 옮기더라도 얼마나 더 뜻 전달이 쉽게 되도록 잘 번역하느냐에 달려있듯이 프로그래머의 실력을 따질때도 마찬가지입니다. 같은 말을 콤퓨타 언어로 번역하더라도 얼마나 더 효율적이고 뜻 전달이 쉽게, 오해나 오역의 소지없이 원래의 의도를 그대로 잘 전달시키느냐가 프로그래머의 실력에 달린거죠.
에러는 결국 내가 번역을 이상하게 해서 콤퓨타가 오해를 했을때 벌어지는 겁니다. 뜻 전달이 실패한거죠. 번역작업이랑은 다르게 콤퓨타는 그런 오해가 생기면 바로바로 이야기를 해줍니다. 프로그래머들에게 에러 로그가 '고마운 일'이라 이야기 되는 이유가 바로 여기에 있습니다:)
뭐 어쨌듯, 해당 언어의 기본 문법과 필수 단어들을 외우고 난 뒤에는 번역을 하듯이 내가 콤퓨타에게 전할 말을 더 예쁘고 효율적이고 정확하게 전달을 하기 위해 고민하는 재미난 과정이 펼쳐집니다. 번역은 제 2의 창작이라고 하듯이, 프로그래밍도 해당 콤퓨타 언어에 대한 이해가 높아질 수록 유려한 문장으로 멋지게 번역해내는게 가능해지죠. 프로그래밍이 재미있는 이유가 여기 있습니다. 어떻게 하면 더 잘 번역을 할까 하는 재미있는 고민이 이어지게 되니까요.
프로그래밍이 흔히 수학적인 사고, 이공계적인 마인드로 이뤄진다고들 하지만, 인문계적인 감성 역시 필요한 일입니다. 프로그래밍의 깊이가 깊어질수록, 단순히 수학적이고 효율적인 코딩보다는 철학적인 화두가 던져지거나 토론의 중요성이 커지게 되거든요. (예를 들자면, 무조건 짧고 효율적인 코드만이 좋은 것은 아닙니다. 큰 프로젝트의 경우 혼자서는 할 수 없고, 여러 사람이 함께 작업을 해야 하는데 이때에는 단순히 코드 길이 줄이겠다고 극단적인 축약을 쓰기보다는 좀 장황하더라도 다른 '사람' 작업자가 읽었을때도 쉽고 빠르게 이해 가능하게 길게 쓰는 것이 맞기도 합니다. 서로 코딩 방식에 규칙을 줘서 통일시키기도 하구요)
너무 어렵다 힘들다 외계어 같다고만 생각하지 마시고, 재미난(?) 번역작업을 한다고 생각하고 외국어 배우듯이 도전해보세요. 개발자가 힘들다 죽겠다 치킨집이나 차려야지 뭐 이런 말들을 하면서도 다들 개발을 놓지 못하는 이유는 이게 너무 재미있어서 그런거니까요:)