프로그래머는 외국어 번역가라 생각합니다.


물론 영어로 작성하긴 합니다만 -_-ㅋ 그 뜻이 아니고 한글로 작성된 문장을 외국사람이 이해할 수 있도록 해주는 번역가와 클라이언트의 언어를 컴퓨터가 알아듣는 언어로 번역해 주는 사람이란 점에서 비슷하다고 생각합니다.


좀 더 자세히 풀어 보겠습니다.


한글을 영문으로 번역하는 사람


한글을 영어로 번역 하는 작업은 크게 어렵지는 않습니다. 우리에겐 인터넷이 있으니까요.^^; 중학교 고등학교 6년간의 수업에서 어느정도 주워들은 정도의 기본만 있다면 google신의 힘을 빌어 누구든지 할 수 있습니다. 좀 막히는 부분들은 숙어, 속담, 숨은뜻, 관용어 등이 있겠지요? 하지만 이것도 검색하다 운이 좋다면 얻어 걸릴수도 있겠죠. 못찾을수도 있구요. 그보다는 번역가의 영어실력에 따라 얼마나 세련된 번역이 가능한지 정도의 차이가 있겠죠.


예를 들어 "숨기고 싶은 비밀" 이라는 말을 번역해야 합니다. 구글번역기로 돌려 봅니다.

You want to hide a secret


이게 외국의 정치계에서 사용하는 관용어구로는 다음과 같은 말을 사용한다고 합니다.(물론 검색해서 나온겁니다. 예로 들자고 쓴거고 틀릴 수도 있습니다. 저두 영어는 잘 모르거든요 ㅠㅠ)

skeleton in the closet


그냥 뜻만 보자면 벽장속의 해골입니다. 숨기고 싶은 비밀인거죠.


흑인영어도 예를 들어 보겠습니다.


"오랜만에 만나네요" 를 영어로 번역하는데 오리지널로 하면

It's been a while since I've been you


흑인영어로 하면

I haven't seen you in a minute


이라고 합니다. 미국인들에게 뭐로 해도 뜻은 통하겠죠? 미국에선 백인영어가 세련된 영어라고 하지요.


사투리도 있습니다.


한글을 "너랑 나랑" 으로 하든 "니캉 내캉" 으로 하든 영어로 번역할때 "You and Me" 라고 해주면 번역된 글을 보는사람에게 큰 문제가 없습니다. 하지만 번역을 사투리로 한다면 힘들어 지겠죠. 다음의 예를 들어 보겠습니다.


출처: http://puwazaza.com/300


미국의 남부지방에서는 about to 대신 fixing to 를 사용한다고 합니다. 한술더떠 want to를 wanna 로 줄여서 사용하듯 fixna 로 줄여서 사용한다고 합니다. i'm fixna see my mama 는 곧 엄마를 만날거라는 뜻이라고 합니다. ..이게 뭥미.@_@.


남부지방 사람이 아닌 미국인중에도 알아듣는사람도 있겠고 못알아듣는 사람도 있겠죠. 식당아주머니에게 된장찌개뚝배기를 넘기며 "이거좀 뜨사주세요" 혹은 "데파주세요" 하면 눈치로 알아듣고 다시 데워 주시는 분도 있을거고 "네?..." 라고 못알아 듣는 분도 있는 것처럼요.


프로그래머


위에 적은 이야기가 그대로 반복됩니다.


학원이 됬든 독학이 됬든 기본기만 배운사람이든, 대학4년 전공으로 배운사람이든 프로그램은 누구나 짤 수 있습니다. 구글신이 계시니까요. 검색하면 다 나옵니다. 운좋게 얻어걸리면 남들이 다 짜놓은 소스를 그대로 퍼다 쓸수도 있습니다. 우왕ㅋ굳ㅋ 손안대고 코풀었네요. 혹은 숙어나 관용어구와 비교할 수 있는 라이브러리의 사용법을 배울수도 있습니다. 저의 경우 String.replaceAll() 을 사용할때 검색변수가 regex 여서 자꾸 정규식으로 적용되어 불편함을 느낀적이 있었습니다. 그래도 다른방도가 없는줄 알고 그냥 불편한대로 쓰다가 나중엔 직접 작성해서 쓰고 있었는데 우연히 어떤 소스를 보고 아파치에서 제공하는 StringUtil 라이브러리를 알게 되었습니다. 하나 얻어 걸린거죠.


어쨌거나 뭐가 됐든 번역은 됩니다. 컴퓨터가 알아듣는다는 이야기지요. 프로그램은 돌아갑니다. 


바디랭귀지건 흑인영어건 사투리건 초등학생 수준의 영어건 뜻은 통하고 알아들어먹으면 장땡인거죠.


정말 그럴까요? 뭐.. 그렇긴 하죠.. 어쨌거나.


번역가와 비교해 봤을때 프로그래머의 기본 소양은 두가지라고 생각합니다.


첫번째는 한글로 문장을 만드는 일입니다. 번역가는 다른 문장가가 쓴 글을 번역하면 되지만 프로그래머는 스스로 글도 작성하고 번역도 해야되지요. 클라이언트(또는 본인)의 요구사항을 먼저 잘 만들어진 문장으로 만들어야만 합니다. 로직을 짜고 설계를 하는 능력과 같다고 생각합니다.


아직도 잘 믿겨 지진 않지만 저보다 경력이 많은 한 친구는 회사에서 면접을 담당하는데요. 면접자들중에는 4년제 전공을 하고도 정말 간단한 로직을 짜보도록 요청하면 30분이 넘도록 작성을 못하는 사람들이 종종 있다고 하더군요. 물론 보면 어떻게 돌아가는지는 이해한다고 하네요. 문장을 못 만들지만 독해는 가능한 케이스네요.


두번째는 점점 세련된 영문으로 번역할 수 있도록 노력하는겁니다. 사람도 보는것만으로 해석이 가능한 프로그램을 짜는 겁니다. 컴퓨터만 알아먹게 만들면 된다고 하시면 뭐 할말 없습니다.ㅋ


Calendar.DAY_OF_WEEK == 6 이라고 하면 컴퓨터가 알아듣는데 문제는 없습니다. 하지만,

Calendar.DAY_OF_WEEK == Calendar.FRIDAY 라고 적는다면.. 금요일인지 알아보는거구나..라고 사람도 알아보는데 어려움이 없겠죠. (예제의 허접함을 손가락질 하지 말아주셈..)


MailSender.sendMail(a1, a2, a3, a4);


이런 코드.. 짜증나죠 ㅋ 앞뒤로 한참을 추적하면서 분석해야 뭔지 찾을 수 있는.. 다음처럼 읽기 쉬운코드로 만들면 좋을텐데 말이죠. 그렇게 어려운 작업도 아닌데.


MailSender.sendMail(mailFrom, mailTo, subject, content);


헌데, 캬~ 정말 예제 더럽게 못만드네요. 책쓰는분들이 존경스러운 순간입니다. --a


조금씩 더 나은 번역을 위해 조금더 나은 코드를 위해 생각하고, 고민하고 개선하는 시간이 필요합니다. 영어의 기초를 더 쌓고 숙어, 관용어구를 익히고 점점 더 세련된 문장을 완성해 가듯이, 프로그래밍의 기초를 더 쌓고 리팩토링 기법을 익히고 라이브러리, 프레임워크등의 사용법을 배워나가면서 점점 더 좋은 코드를 작성할 수 있게 되겠지요. 언제까지 복사&붙이기를 할 수는 없겠죠 ^^


이런점들이 프로그래머는 번역가와 같다고 생각하게 하는 부분들입니다.


항상 세련된 영문을 작성할 수 있도록 노력을 멈추지 말아야 겠습니다.

Posted by KENSIN
,