본문 바로가기

blah/Mini-Journal

(Semi-)Completeness of Tools

수학에는 완비성(completeness)이라는 개념이 있다. 대상이 빈틈없이 메워져 있는지의 여부를 논하는 개념인데, 선형대수학의 맥락에서는 '주어진 벡터들로 주어진 공간을 모두 메울 수 있는가'의 여부를 가리킨다. 뒤집어 말하자면 주어진 공간에서 임의의 벡터를 주어진 벡터들로 표현할 수 있느냐.

 

그러니까 이런 것이다. 친구 집을 찾아가려고 한다. 지도를 보면 전후로 얼마나 걸어야 하는지 좌우로 얼마나 걸어야 하는지를 알 수 있다. 그러나 도착한 곳이 아파트라면 전후/좌우 2가지의 정보만으로는 부족하다. 몇 층에 사는지인 상하의 정보 또한 필요한 것이다. 이렇게 상하/전후/좌우 3가지의 정보가 전부 있어야만 친구의 집을 특정할 수 있고, 이것이 일종의 완비성이 된다 - 상하/전후/좌우 3가지 정보로 (우리가 살고 있는) 어떤 공간의 위치든 표현할 수 있다.

 

물리적인 공간이 아니라도 이 접근은 가능하다. 예를 들어 범인을 특정해야 하는 상황이라고 하자. 성별이라는 정보 하나만으로는 불충분하다. 많은 사람들이 그 정보가 겹치기 때문이다. 나이 정보를 알아도 마찬가지다. 특정 성별에 특정 나이를 가지는 사람이 많기 때문이다. 거기에 이름까지 정해진다면? 많이 왔지만 부족하다. 세상엔 동명이인이라는 게 있어서 같은 성별에 같은 나이지만 이름까지 같을 가능성도 있기 때문이다.

 

그렇게 수많은 정보를 쌓다 보면 범인은 유일하게 특정된다. 다른 방법도 있다. 우리는 두 명 이상의 사람이 주민등록번호까지 같을 수는 없음을 안다. 어떠한 주민등록번호는 유일하므로. (주민등록번호에 연결된 성별과 이름이 잘 매칭된다면) 범인을 특정하는 데에 성공할 수 있다. 이렇듯 대상을 명확하게 지정할 수 있는 일종의 "primary key"가 있다. 주민등록번호/이름, 성문, 지문 등등.

 

그런데 그렇게 완벽하게 특정해낼 만큼의 정보나 primary key가 없다면 추리는 불가능할까? 그렇지는 않다. 보다 사소한 다른 정보들을 통해 범인을 특정해낼 수 있다. 키의 범위, 몸무게의 범위, 얼굴 모양, 동선……. 이렇게 여러 정보들을 취합하여 일종의 "semi-completeness"를 달성할 수 있다. 완전하다거나 완벽하다고는 못하지만, "아주 높은 확률로" 특정 대상을 잘 표현할 수 있는 것이다.

 

전문성에서도 비슷한 논의가 가능하다고 본다. 예를 들어 Java로 메모장을 만들어야 한다고 하자. 저장과 불러오기가 가능해야 한다, 텍스트 수정이 가능해야 한다, 해당 기능들이 UI로 제공되어야 한다, 폰트나 글자 크기도 바꿀 수 있으면 좋겠지 등등. 이러한 요구사항은 '파일 입출력에 대한 이해' 따위의 문구로 표현될 수 있다.

 

프로그래밍의 세계에서는(사실 어떤 분야에서든) 그러한 숙련도가 수많이 존재하며 특정한 카테고리로 묶이는 숙련도 그룹이 있다. 심지어 어떤 숙련도는 추상적이다. '이거 이런 식으로 구현하면 문제가 되겠는데?' 같은 것들. 보다 자세히 쓰자면 내면의 블랙박스가 소규모 시뮬레이션을 돌려서 '이거 이런 식으로 구현하면 (이 부분과 연결된 b라는 파트에 이런저런 영향을 미치니까) 문제가 되겠는데?'라는 의문을 도출해내는 것. 하여간 그런 아주 구체적인 지점부터 추상적인 부분까지 숙련도는 수없이 존재한다.

 

어떠한 프로젝트가 주어졌다고 하자. 명세서가 딸려왔다. 우리는 그 명세서의 내용을 보다 기술적인 영역으로 재정의하여 해당 내용을 하나씩 구현해나간다. 그 과정에서 숙련된 사람은 그러한 재정의와 구현에 있어서 어떤 능력이 필요한지, 뭘 해야 하는지, 어떤 명령어가 쓰이는지, 무엇과 연결시켜야 하는지 등을 안다. 반복 작업을 예측하여 처음부터 간결한 코드를 짤 수도 있다. 머릿속의 "버퍼"에 다음에는 무엇을 해야 할지가 잘 정돈되어 있어서 버벅임 없이 진행이 빠르다.

 

나는 위와 같은 상황에서 그 프로그래머가 '해당 프로젝트에 대해 필요한 도구의 semi-completeness를 갖췄다'고 표현한다. 사실 프로그래밍 분야에 대해서 이 표현을 써본 적은 없긴 한데ㅋㅋ

 

학습자 입장에서 목표는 특정 목표에 대하여 semi-completeness를 갖추는 것이라고 본다. MMORPG에서 특정 레이드 보스의 패턴과 그에 대한 대응을 전부 암기하겠다거나, 면접에서 나올 수 있는 질문과 답변을 모조리 준비한다거나. 어떤 사람들은 그보다 추상적인 층위에서의 능력이 있어서(반사적인 반응이 빠르고 정확하다거나, 경험이 풍부하고 언변이 좋아서 따로 면접 준비를 하지 않는다거나) 그러한 semi-completeness를 달성할 수도 있다. 이는 사람에 따라 다르다.

 

중요한 것은 자신의 상황에 맞춰 자신이 도달할 semi-completeness를 설정하는 것이다. 말이 쉽지 실행은 어렵다. 나도 못하는 일이다. 일종의 메타-목표로써 마음 한구석에 두고 있을 뿐.

 

학습은, 더 러프하게 묶을 수도 있고 세분할 수도 있겠지만, 도구 하나하나를 들여다보는 과정, 각각의 도구를 통합하는 과정, 많은 도구를 자유롭게 다뤄나가는 과정 정도가 있다. 나는 아직도 도구를 들여다보고 있다. 이 부분이 어렵다. 시간은 없고, 갈 길은 멀고. 길을 걷는 와중에는 나름 즐겁지만, 멈춰서서 어디로 가야 하는지를 생각하다 보면 그 길의 길이에 질리곤 한다. 처음부터 모든 도구를 들여다볼 필요는 없지만, 도구의 목록들에 대해 생각하는 순간 나는 어지러워진다. …추상성에 압도 당해서는 안 된다는 것을 안다. 언제나 실제는 구체적인 것이고, 우리가 하는 것 또한 구체적일 수밖에 없다는 사실에 집중해야 한다는 점도. 하지만 다시금 흰 곰에 대해 생각하게 된다.

 

원래는 이러한 semi-completeness를 갖추게 하기 위한 환경과 게이미피케이션 등에 대해 논하려고 했는데 이야기가 이상한 방향으로 흘렀다. 글쓰기의 전문성에 대해서 semi-completeness를 갖추지 못한 거지. 하여간, 혼자서 별다른 과제 없이 공부를 하다 보면 난감할 때가 많다. 내게 있어 앎은 잘 선언된 게임 속에서 특정한 목표를 향해 나아가며 부딪히고 구르는 과정을 통해 남는 것이었지 망망대해에서 별빛에 의지하여 나아가는 여정에서 얻는 것은 아니었으므로.

 

길은 두 가지다. 주어진 세계를 게임화하든지, 거친 여정에 익숙해지든지. 둘 다일 수도 있다. 여전히 고민 중이다. 우습게도.

'blah > Mini-Journal' 카테고리의 다른 글

땜빵의 문제  (0) 2024.05.01
예측의 문제  (0) 2024.04.16
씨앗에 물을 주고 있어요  (0) 2024.04.02
언어의 사양과 구현  (0) 2024.03.28
거인의 어깨 위에 올라서기  (0) 2024.03.24