이번 글에서 제가 하는 말은 그냥 무시해버리면 아무짝에 쓸모없는 멍멍  이 될지도 모르지만 잘만 쓰면 여러분이 매일 매일 생노가다하며 보내는 시간을 꽤나 줄여줄 수 있는 보물이 될 수도 있습니다.

왕도는 없어도 비법은 있다

사람들은 어떤 식으로건 일을 하고 삽니다. 돈벌이를 못하는 백수라도 손가락 까딱 안하고 누워있지만은 않으니까요.


사람들에게 똑같은 일을 시켜보면 출발점과 결과물은 같더라도 어떤 사람은 10분안에 끝날 일도 어떤 사람은 일주일이 걸리기도 합니다. 우린 이걸 능력, 또는 실력이라고 하지요.
 

누군 10분에 하는 일을 1주일 걸려 하는 사람은 다른 일거리를 줘도 역시 대부분 1주일에 하게 됩니다. 이보다 빨리 일처리를 하는 사람에겐 언제나 경쟁에서 뒤쳐지게 되지요. 
 

사람은 귀찮은걸 가장 싫어하는 동물입니다. 그래서 도구를 만들어냈지요.
 

언어만 해도 그렇습니다. 글쓰는게 귀찮아서 타자기가 만들어졌고, 급기야 두들기기만 하면 되는 컴퓨터 워드프로세서가 만들어지기도 했습니다.
인간은 도구를 사용할 줄 아는 동물입니다. 도구를 얼마나 잘 사용할 것인가... 역시 인간이 언제나 고민하는 일이기도 합니다.
살면서 뭔가 인간이라면 하지 않을 짓을 단순무식과격하게 반복하고 있다는 생각이 들때... 과거 누군가 똑같은 고민을 했을 지도 모른다는 뜻입니다.
 

그래서 또 도구를 만들고, 그 도구를 갈고 닦고, 그 도구를 100% 활용할 수 있는 비법을 만들어놓았을 수도 있다는 거지요.
이번 글에서 제가 하는 말은 그냥 무시해버리면 아무짝에 쓸모없는 멍멍  이 될지도 모르지만 잘만 쓰면 여러분이 매일 매일 생노가다하며 보내는 시간을 꽤나 줄여줄 수 있는 보물이 될 수도 있습니다.
 

수많은 골수 컴쟁이들이 (컴쟁이치고 귀찮은거 좋아하는 사람없고, 단순 노가다 좋아하는 사람이 없습니다) 만들어놓은 정규식(regular expression; 줄여서 regex)이라는 비법입니다.


컴퓨터로 노가다를 한다?

컴퓨터가 가장 잘하는 짓이 두가지가 있는데요. 하나가 숫자 놀음이고 또 다른 하나가 문자 놀음입니다. 사실 컴퓨터 내부적으로는 모두 숫자 놀음이기 때문에 문자 놀음 역시 숫자 놀음이긴 하지만...
 

숫자 놀음이야 계산기 두드리는 수준 이상의 고급 작업을 하는 경우라면 어차피 분야별로 공부를 하셔야 할테니 (예: Excel 같은 spreadsheet ) 누구나 늘상 접하는 문자 놀음에 대해서만 생각해 봅시다.
 

사실 여러분이 컴퓨터로 하는 일의 절반 이상이 문자 가지고 하는 일입니다. 그런데 편집기(editor)를 쓰건 워드(word processor)를 쓰건 알게 모르게 맨땅에 헤딩하는 경우가 수없이 많습니다. 그 맨땅에 헤딩하는 정도와 회수를 줄이자는게 이번 주제입니다.

컴퓨터 노가다의 전형적인 예

무슨 소린지 감이 잘 안오시나요? 간단하게 실험을 해보겠습니다. 여러분이 어떤 출판사에서 일을 한다고 가정해 보세요. 네오 출판사에서는 금번에 미국 대통령 연설만 몽땅 모아서 거기 나오는 어휘들로 바퀴벌레 책을 내기로 했습니다. 직원들에게 다음처럼 이런 일을 시킵니다.


  • 미국 대통령 연설문은 모조리 모아라.
  • 연설문에 나오는 모든 단어를 추출해 a,b,c 순으로 정렬해라.
  • 이렇게 만든 단어 목록을 가지고 3자리 이상되는 단어만 다시 뽑아 단어집을 만들어라. ( 세자리 미만은 큰 의미가 없으니까 )

예를 들어, 미국 대통령 연설문이 딱 100개 된다고 해보지요. 더 되겠지만 그정도만 된다고 칩시다. 네오퀘스트 특강(실전 독해)에 사용된 클린턴 연설문에 나오는 단어가 중복을 허용한 상태로 8,000개쯤 됩니다.
 

이게 100개면 800,000개란 얘기지요? 800,000 단어를 손으로 추려서 중복된거 골라내고... 이걸 다시 3자리 이상만 골라내고...
내가 그런 과격한 노가다를 할 가능성이 있을까?
 

이렇게 생각하실 지 모르지만 그냥 한가지 예일 뿐입니다. 규모는 작아도 하루에도 몇번씩 우리는 이런 일을 하고 삽니다.
 

짧은 문서의 찾고 바꾸기(search and replace)일 수도 있고, 여기 나온 예처럼 몇달이 걸리는 수작업일 수도 있습니다. HTML 문서 소스를 뽑아 태그만 몽땅 없애고 본문만 남기는 작업일 수도 있고, 스팸 회사에서 게시판 뒤져가며 이메일만 추출해내는 일일 수도 있습니다.
 

그래도 무슨 소린지 와닿지 않는다면 생활속에서 흔히 볼 수 있는 예를 하나 들어볼까요?
 

여러분이 웬 긴~~~ 문서를 읽다가 몇년도인가 재밌는 일이 일어났다고 하는 걸 봤다고 칩시다. 한 일주일쯤 지나고 나서 친구에게 그 얘기를 하다 다시 해당 부분을 찾아보려니 그 긴~~~ 문서에서 어느 부분이었는지 또는 몇년도였는지조차 기억이 안나는 겁니다. 이 문서가 또 100페이지쯤 되고 대충 어느 위치였는지도 모른다면 해당 부분을 찾는데 시간이 얼마나 걸릴까요?
 

실제로 이런 일을 종이책 뒤지듯 하루 종일 뒤지는 분들도 있습니다. 그나마 편집기나 워드의 찾기(find) 기능을 활용하는 분이라면 형편이 좀 나은 거지요.
 

앞에 나온 단어찾기 노다가... 여러분이 회사에서 살아남으려면 죽어도 해야 하는 일이라면, 며칠, 아니 몇달 걸리면 끝날까요?


아마 이글을 읽는 분의 컴퓨터 숙련도에 따라 답이 달라질 겁니다. 10초를 외치신분 혹시 있나요? ;-)
 

이런게 바로 사람이 해야할 일이 아니라 컴퓨터가 해야할 일입니다. 컴퓨터란 놈이 제일 잘하는 짓이니까요. 그럼 컴퓨터 숙련도에 따른 시간을 재 볼까요?


  • 프로그래밍이 가능한 엔지니어 - 사용하는 컴퓨터의 처리속도에 따라 다르지만 대충 10초 내에 저 일 끝날 수 있습니다. 또, 프로그램으로 만들어 놓을 것이기 때문에 다른 어떤 문서를 가져다 줘도 저 기능은 10초내에 모든 문서를 해결할 수 있습니다. 스스로 도구를 창조하고, 동일한 종류의 일에 대해서는 언제나 이 도구를 사용합니다.
  • 정규식 표현을 알고 있는 파워 유저 - 앞에서 이름만 소개한 regular expression 이라는 겁니다. 사실 배우기가 무지 까다로워서, 아니 제대로 가르쳐주는 사람이 없어서, 그만큼 알기도 어려워서, 이 빈곤의 악순환으로 극소수 컴쟁이들만이 향유하는 그야말로 인간이 만들어낸 최고의 논리 장난감입니다. 이걸 아는 사람이면 10초는 아니더라도 저 일 1시간내에 끝납니다.
  • 프로그램도 정규식도 모르는 그냥 유저 - 역시 숙련도에 따라 다르지만 길게는 며칠, 심하게는 1년이 걸릴 지도 모르지요. 또 정확성을 기대할 수도 없습니다. 손으로 하는거라 빼먹을 수도 있고, 짜증나서 안할 수도(눈가리고 아웅) 있으니...

한때 Python이란 언어를 만든 그 이름도 야시꾸리한 Guido Van Rossum 이란 천재 컴쟁이가 Computer Programming for Everyone이란 프로젝트를 진행한적이 있습니다. 이거 조금만 하면 저 사람들 뺑이치는걸 백분의 1, 아니 백만분의 1로 줄일 수 있을텐데... 하는 안타까움에 시작한 자선 사업이었데요. 근데 자금 부족, 중생들의 참여가 형편없어 실패했다는군요. 선각자의 뜻이 그대로 실현이 될 수는 없는 노릇이듯이... 
 

여기서 제가 하고자 하는 얘기는 거기까지 가지도 않습니다. 물론 프로그래밍의 아주 기본적인 것만 배워도 여러분 삶이 얼마나 윤택해질 지 마구 설파하고 싶지만 모든 이에게 프로그래밍이 좋고 즐거운일은 될 수 없을테니까요.

하지만, 정규 표현식(regular expression) 정도라면 충분히 가능성이 있다고 생각합니다. 그 정도만 되도 여러분 삶이 윤택을 넘어 젖과 꿀이 흐르는 가나안이 될 수도 있다고 믿거든요. 10초면 끝날 수 있는 일을 1주일 걸려 해야만 한다면, 비극이 아닐까요? 


차리리 하루 정도 걸린다고 구라치고 잽싸게 끝낸다음 나머지 시간에 땡땡이를 칠 수 있는 여유를 갖는 것... 그게 진정한 호모 사피엔스, 인간의 모습이 아닐까요?
 

비법 전수 2부에 이어집니다.


+ Recent posts