1D : 雜

0
348

나는 언어처리가 하고 싶어 프로그래밍을 배웠다. 아니, 배울 수 밖에 없었다. 그 당시 번역기가 컴퓨터공학과를 중심으로 개발되고 있었다. 언어학과에서도 이런 움직임이 있었다. 자의와 타의가 뒤섞인 채 동아리에 가입하게 되었다. 프로그래밍을 그렇게 시작하게 되었다.

문과생인 나에게 프로그래밍은 너무도 어려웠다. 프로그래머가 되는 데 인고의 2년의 시간이 필요했다. 그 기간의 90%는 허송세월이었다. 그 당시 개발의 대세언어는 C++이었고, 나는 포인터를 극복하지 못했다. 거의 포기단계에서 프로그래밍을 잘하는 1학년 후배에게 어려움을 토로했고, 무엇인지 알 수도 없는 소스가 프린트된 A4 네 장을 넘겨 받았다.

무작정 필사를 했다. 매번 컴파일에서 에러가 났고, 한글자 한글자 고치고 또 고치며 소스의 구조를 이해해 갔다. 무작정 외웠던 것이 의미를 찾아갔다. 한줄, 한줄이 함수가 되고, 함수 하나, 하나가 클래스가 되어갔다. 결국 일주일만에 필사가 아닌 나의 작문으로 프로그램이 되었다. 이 고난한 과정에서의 느낀 점은 다음 글에서 쓰겠다.

2년의 기간동안 나보다 앞서 있던 동료들을 위해 엄청난 데이터 작업을 했다. 그 당시 언어처리는 규칙기반으로 작성되었다. 요즘 언어처리는 대부분 통계와 기계학습, AI의 산물인데, 그 당시는 컴퓨팅 환경의 한계와 기초 데이터의 부재, 그리고 전산언어학의 사조로 인해 대부분 규칙기반이었다. 규칙기반에서 제일 먼저 필요한 것은 전자사전이었다. 사전의 표제어를 통째로 입력했고, 품사나 형태소정보 등의 부가정보를 추가해 나갔다.

사전의 정보와 질에 따라 언어처리의 결과는 달라졌다. 사전 하나를 입력하는 데 꼬박 두어달이 걸리고, 한국어가 끝나면 영어를 입력하기 시작했다. 언어처리를 하다 모자란 속성정보는 또 다시 두달 목표로 하나씩 입력되었다.

규칙의 지옥에서 언어처리가 결국 표류하기 시작했지만, 기초 데이터, 데이터 구조의 중요성을 손가락 세포의 수고스러움으로부터 그때 알게 되었다. 언어자료는 지금 어떤 자료구조보다 복잡했다. 데이터구조를 설계하기 전에 그 데이터를 관찰하는 데 충분한 시간을 쓰지 않으면, 고치고 또 고치는 시간이 더 많아졌다. 그렇게 머리가 데이터를 이해하게 되었고 마음이 데이터를 품게 되었다.

프로그램은 데이터로 출발해서 데이터로 끝난다. 그것이 기준 데이터이든, 사용자 데이터이든 말이다. 기준 데이터를 입력하고, 결과 데이터의 의미를 찾는 것은 지금도 변함없는 과정이다. 자신에게 딱 맞는 기준 데이터가 없으면 입력해야 한다. 수집된 결과 데이터를 분석하고 가공하는 것도 반복적인 작업이다. 이런 단순하고 반복적인 작업은 AI 시대인 지금에도 변함이 없다.

단순하고 반복적인 작업에는 개선할 지점이 많다. 단축키가 중요해지고, 매크로를 활용한다든지, 입력기를 만든다든지 하는 것은 모두 이 단순하고 반복적인 작업의 지겨움에서 온다. 무언가 의미있고 거대하고 매끈한 프로그램을 만드는 것에서만 개발자의 꿈이 생기는 것은 아니다. 이런 단순하고 반복적인 ‘잡일’의 과정을 개선을 하는 것 역시 개발의 몫이다. 매크로를 잘 쓰는 것도 개발이고, 입력기 옆에 버튼 하나 더 만들어서 클릭 한번, 화면 하나를 줄이는 것도 개발이다.

옆의 데이터 입력자가 일주일 입력해야 될 과업을, 개발자의 한시간 코딩으로 입력과정을 개선한다면 하루에 끝낼 수도 있다. 개발자는 그것을 그냥 넘길 수 없어야 한다. 동료의 지루한 수고스러움을 줄여주고자 하는 마음, 그 공정을 관찰하고 이해하고 개선점을 찾아내는 노력, 그 과정에서 생기는 인간적인 교류와 개선의 목표를 달성하고 느끼는 자긍심이 중요하다. 다시 말하지만, 넓은 의미의 개발은 매우 인간적이다.

단순작업과 반복적인 작업은 프로그램의 크기와 상관없이 대부분 발생한다. 누군가는 그 일을 해야 한다. 생산성은 단지 코딩을 얼마나 빨리 하고 프로그램을 얼머나 빨리 완성하는 데에만 있지 않다. 데이터를 입력하는 것 또한 공정이고 그것의 생산성을 높이는 것도 매니저가 신경써야 할 부분이다. 그래서 매니저는 입력도구에 많은 관심을 가져야 하고 꽤 많은 입력을 해보아야 한다. 개발자도 마찬가지다. 단순하게 입력폼 화면을 그리는 것이 전부가 아니고, 화면대로 구현하는 것만이 끝이 아니다.

개발의 발전은 하늘에서 뚝 떨어진 것이 아니다. 개발은 끊임없는 개선의 과정이다. 누군가는 그것을 반복적이고 단순하다고 판단하고 자신의 재능과 노력을 들여 이를 개선해 온 것이다. 라이브러리, 프레임워크는 개발자가 개발자를 위한 관심과 배려다. 하드웨어든, 소프트웨어이든, 솔루션이든, 서비스든,  상업적이든, 오픈된 것이든 대부분 그러하다. 지루하고 반복적이고 무료한 일은 누군가에게는 새로운 관점을 주고 의미를 부여한다. 이 누군가는 모두 개발자이다.

주위에 지루하고 반복적인 작업을 하는 사람이 있고, 그것을 개선할 수 있다면 키보드에 손을 올리기 바란다. 그것은 손이 아니라 마음일 것이다. 이것이 ‘잡일’에서 배우게 되는 첫번째 D(Detail) 이다.