이런저런 시스템 세팅 같은 걸 건드리면서 많은 문제를 해결하는데 그 개고생의 과정을 누군가 알아주면 좋겠다는 생각을 했다. 하물며 미래의 나라도 알았으면 하는 생각이 들어서 써보기로 했다.
시간의 문제
그러려면 시간이 많이 들텐데, 그 시간은 어디서 나오는가...? 이에 나는 신묘한 원리를 발견하고 말았다. 인생을 두 배로 알차게 살고 싶다면, 인생의 길이를 두 배로 늘리면 된다. 어차피 언제 끝나는지 모르는 삶이라면 삶의 길이는 무한대로 상정할 수 있고, 그 두 배의 시간이 필요하다면 놀랍게도 이미 필요한 두 배의 시간이 갖춰져있는 것이다.
구체적으로 말하면 이런 것이다. 푸는 데에 일주일이 걸리는 문제가 있다고 치자. 예를 들면 운영체제를 새로 설치한 컴퓨터에 쾌적하게 넷플릭스를 볼 수 있는 환경을 설정하는 문제다. 하던 대로 일지 같은 것 쓰지 않고 문제만 열심히 풀면 일주일 정도 걸렸을 것이다. 그런데 일지를 쓰고 싶다면? 문제를 푸는 데 이주일이 걸리면 된다. 하루 고생하고 하루 일지로 정리하고 한다든지 하는 방식이다. 넷플릭스를 보는 데에 급할 게 없다면 그렇게 할 수 있는 것이다.
NixOS 설치기(記)
실제로 이번에 설치한 NixOS에 대해서는 설치과정을 소상히 밝혀보고자 하고 있다. 이런 기록들이 모이면 분명 유용한 티스토리 블로그 같은 게 될 수 있을 것이다. 설치한 과정을 정리하고 글로 쓰는 데에는 많은 시간이 걸릴 것이다. 그러나 급할 게 없다. 중요한 일은 일단 노트북으로 할 수 있으니까. 그리고 나중에 또 읽으면 참고가 될 것이다.
매뉴얼 텍스트의 구조
이상한 자료구조도 구상해보고 있다. 매뉴얼에는 일반적으로 조건 구조(X하고 싶다면 A를 해라), 반복 구조(모든 X(i)에 대해 A를 해라), 이전에 이행한 지시 결과에 대한 참조(A해서 나온 것을 B해라) 등이 등장한다. 이처럼 매뉴얼의 언어는 일종의 실행의미를 갖는 언어다. 실행은 사람이 한다. 사람이 필요한 조건과 현 상황에 따라 매뉴얼을 해석하여 실행한다.
그러니까 내가 구상하고 있는 것은 자료구조라기보다는 일종의 언어 의미구조에 가깝다. 파라미터를 넣어서 다음에 할 행동을 순차적으로 알아낼 수 있는 실행기를 가진 언어다. 그리고 부가적으로 그 행동이 무엇을 하는 행동인지도 분석한다. 이를테면 mount /dev/sda1 /mnt
라는 명령이 있으면, 그것의 어떻게-의미는 명령어를 그대로 셸에서 실행하는 것이고, 무엇-의미는 "/dev/sda1
를 /mnt
에 마운트한다"이다. 아마 셸 명령어를 무엇-의미로 해석하거나, 반대로 자연어적 표현에서 어떻게-의미를 알아내는 것이 가능할 것이다. 무엇-의미와 어떻게-의미는 서로의 역연산으로 볼 수도 있겠다.
그리고 이 언어의 무엇-의미 계산기는 부분 계산(partial evaluation)을 한다. 이를테면 "/dev/sda1
를 /mnt
에 마운트한다"라는 설명에서 /dev/sda1
가 무엇인지, "마운트"가 무엇인지 알고 싶을 수 있다. 각 단어에 대한 설명을 찾아보거나, 어떤 단어 자리에 그 설명을 그대로 넣을 수도 있을 것이다. 전자는 이미 하이퍼링크로 구현된 발상이고, 후자는 아마 자연어 문서를 대상으로는 구현된 바를 본 적이 없다.
이건 일지보다는 특히 매뉴얼에 대한 상상이다. 이 상상은 잘 접어두었다가 아지트에 서로 연결된 개발 일지가 너무 많아질 때쯤 구현해보아야겠다.