메아리 저널

운영체제 - 사용자 인터페이스 - 프로그래밍 언어

...는 서로를 고려하여 함께 개발되거나, 아니면 적어도 각각의 컴포넌트가 뜯어 고치지 않아도 adapt해서 쓸 수 있을 정도로 잘 설계되어야 한다. 소프트웨어의 삼위일체라고 해 둘까.

세 개가 아귀가 맞아야 하는 이유는 좋은 컴퓨터 시스템이 갖춰야 할 (또는 갖춰야 한다고 생각하는) 세 가지 조건 때문이다.

  • 사용성 -- 좋은 컴퓨터 시스템은 최소한의 습득으로 기본적인 기능을 수행할 수 있어야 하며, 더 복잡한 기능을 수행하는 데 드는 노력이 선형적이어야 한다. 예를 들어 만약 사용자 인터페이스가 운영체제가 제공하는 모든 기능을 반영하지 못 한다면, 반영되지 못 한 기능을 다루기 위해서 필요한 노력은 급격히 증가한다.
  • 투명성 -- 좋은 컴퓨터 시스템은 속에서 무슨 일이 일어나고 있는지 필요하면 알 수 있어야 한다. (다만 이게 선택이 아니라 필수가 되면 사용성이 급격히 떨어짐을 주의할 것.) 투명성은 소프트웨어와 그 개발 과정에 모두 적용되어야 하며, 전자는 소프트웨어의 검증에 필수적이고 후자는... 설명 안 해도 여기 올 만한 사람들이라면 알리라 생각한다. 잘 설계된 프로그래밍 언어는 운영체제와 사용자 인터페이스의 투명성을 자연스럽게 보장할 수 있을 것이다.
  • 확장성 -- 좋은 컴퓨터 시스템은 추후의 확장, 이를테면 새로운 기능 등에 열려 있어야 한다. 이 확장성은 소프트웨어 개발자 뿐만 아니라 일반 사용자에게도 열려 있어야 한다. 즉, 이미 있는 기능을 조합하여 새로운 기능을 만들어 내는 것이 직관적이어야 한다. 이는 사용성과 (소프트웨어의) 투명성이 동시에 보장되지 않으면 불가능할 것이다.

물론 이거 말고도 여러 가지 조건이 있겠지만 -- 범용성, 효율성, 정확성 따위 -- 이건 이미 일반적인 컴퓨터 시스템들이 어느 정도 다 달성하기도 했으며 위의 세 가지는 수많은 삽질이 있었음에도 아직도 제대로 실현이 안 되었다고 생각하기 때문에 세 개를 골랐다. 마침 숫자도 세 개로 컴포넌트 수랑 맞아 떨어진다. 이런 생각을 한 게 나뿐인 건 당연히 아니고, 이를테면 TUNES project 같은 건 시작할 때의 상황을 생각하면 정말 혁신적인 (그러나 지금은 반쯤 망한) 프로젝트였다. TUNES project는 반쯤 망하긴 했어도 읽어 볼 자료는 매우 많으므로 이 쪽에 관심 있는 사람이라면 전체 사이트 일독을 권한다.

하여튼 원래 주제로 돌아 가면, 나는 만약 내가 그만한 능력과 재력과 시간이 있다면 위의 세 개를 모조리 뜯어 고칠 의향이 있다. (다만 나한테는 그런 능력도 재력도 시간도 없는/없을 것 같다는 게 문제지만...) 평생의 목표라고 해도 과언이 아닐 것이다. 특히 OS/UI와는 달리 프로그래밍 언어는 바꾸기 훨씬 어렵다고 생각하고 -- OS야 요즘은 심심하면 바꾸는 거고, UI도 생각보다 빨리 적응되는 컴포넌트지만, 언어는 레거시 때문에 바꾸기 매우 힘드므로 -- 따라서 OS/UI와 무관하게 쓰기 좋고 확장성 좋고 충분히 효율적이면서도 널리 퍼진 프로그래밍 언어를 만드는 것이 첫 단계라고 생각한다. 이제 내가 왜 나루 프로그래밍 언어를 만들고 있는 건지 알겠는가?


이 글은 본래 텀블러 쪽에 올린 글의 복사판이다. 이 글을 이글루에도 올리는 이유는 내가 언제고 여기에 관련된 훨씬 자세한 글을 쓸 경우 참조하기 편하게 하기 위해서이므로 당황하지 말자(...)

이 글은 본래 http://arachneng.egloos.com/2087466에 썼던 것을 옮겨 온 것입니다.


(rev 71b35f804c1e)