Eve는 사람 중심의 프로그래밍 플랫폼을 목표로 한 연구를 바탕으로 만들어진 프로그래밍 언어이자 IDE입니다. 문서에 코드를 담고, 순서에 얽매이지 않는 언어로, 기계가 아닌 사람을 중심에 둔 새로운 프로그래밍 방식을 제시합니다.
Eve는 사람 중심의 프로그래밍 플랫폼을 구축하기 위한 수년간의 연구를 바탕으로 한 프로그래밍 언어이자 IDE입니다. 문서에 코드를 담는 방식부터 순서가 없는 언어까지, 기계가 아닌 우리에게 초점을 맞춘 프로그래밍의 또 다른 가능성을 제시합니다. 이것이 Eve입니다:
Eve는 컴퓨터가 아니라 인간을 위한 것입니다우리는 프로그래밍 초창기 이후 엄청난 발전을 이루었지만, 현대의 형태는 여전히 우리를 비트를 옮기는 기계의 역할에 가둡니다. 프로그래밍은 항상 우리, 즉 키보드를 두드리는 사람들을 위한 것이었습니다. 컴퓨터는 우리가 어떤 문법이나 의미를 쓰는지, 오류 메시지가 어떻게 표현되는지에 관심이 없습니다. 그것들은 당신과 나를 위한 것입니다. 그리고 우리는 스스로를 이렇게 대하고 있습니다...
기계에 초점을 맞추고 소프트웨어 공학의 인간적 요소를 무시한 결과, 우리는 험난한 길로 들어섰습니다. 난해한 오류 메시지에서 이해하려면 수년의 학습이 필요한 의미론에 이르기까지, 우리는 사용 가능하고 견고한 소프트웨어를 만들려는 우리의 목표에 적극적으로 적대적인 프로그래밍 버전에 안착해 버렸습니다. 설상가상으로, 우리는 도구가 개발되던 1970년대의 컴퓨터를 여전히 쓰고 있는 것처럼 프로그래밍하고 있습니다. 놀랍지 않게도 우리는 고전하고 있습니다. 많이요.
하지만 가라앉는 토대 위에 꼭 머물 필요는 없습니다. 만약 처음으로 돌아가 원칙을 재정립하고 인간을 먼저 둔다면 어떨까요? 그건 어떤 모습일까요?
지난 몇 년에 걸쳐, 우리는 다른 미래가 어떤 모습일지 탐구해 왔고 그 연구를 Eve라 부르는 플랫폼으로 응축했습니다. 맛보기로, Eve로 프로그래밍하는 누군가의 하루를 살펴볼까요:
헤드폰 끼기 싫으신가요? 자막을 추가했습니다! CC 버튼을 누르세요.
첫 번째로 눈에 띄는 차이점은 프로그램이 코드 파일이라기보다 워드 문서에 가깝게 보인다는 것입니다. Eve는 "리터러트 프로그래밍"을 위해 설계되었습니다. 코드에 주석을 넣는 대신, 문서에 코드를 삽입합니다.
이는 코드가 어떻게 컴파일될지에 따라가 아니라 우리가 실제로 생각하는 방식에 따라 프로그램을 구성할 자유를 줍니다. 기능, 유사성, 소유자 등 우리가 떠올릴 수 있는 어떤 기준으로든 블록을 묶을 수 있습니다.
더 중요하게는, 프로그램이 무엇을 하는지뿐 아니라 왜 그렇게 하는지에 대한 이야기를 엮어낼 수 있게 해 줍니다. 명세를 작성하고 그것을 실현하는 코드 블록을 문서에 삽입할 수 있습니다. 프로젝트에 새로 합류한 사람은 목차를 보고 어떤 일이 벌어지는지 감을 잡은 뒤, 한 섹션을 파고들어 무언가를 추가할 수 있습니다. 매번 버그를 고칠 때마다 서사를 다시 맞춰보려 애쓰는 대신, 애초에 그 서사를 프로그래밍의 산물로 만들 수 있습니다.

이 맥락에서 우리가 원하는 환경은 클래스 계층 구조보다 서사적 창작에 더 가깝습니다. 우리는 프로그램을 의미 있게 배치하고 탐색할 수 있게 해 주는 읽기 및 쓰기 환경을 원합니다. 그 첫걸음이 목차입니다. 목차는 개요를 제공함과 동시에 편리한 내비게이션 수단이 됩니다.
하지만 프로그램이 선형적으로 표현된다고 해서 다른 방식으로 똑같이 쉽게 볼 수 없다는 뜻은 아닙니다. 수많은 탭과 복잡한 내비게이션 기능 대신, 우리는 필요에 맞춰 스스로 형태를 바꾸는 문서를 갖습니다. 그리고 가능한 한 모든 것을 맥락 속에 배치해 서사를 중심에 두고 유지합니다.


Eve는 하나의 통합 원칙에 기반합니다: 모든 것은 레코드입니다 — ID에 연결된 속성/값 쌍의 집합이죠. 이 일관성 덕분에, Eve는 레코드를 질의하고 조작하기 위한 소수의 연산만 필요로 합니다. 이메일을 보내고 싶나요? 이메일 레코드를 만드세요. Slack으로 전송된 메시지를 보고 싶나요? Slack 데이터베이스에서 메시지 레코드를 질의하세요. 할 일 앱을 만들고 싶나요? todo를 질의하고 브라우저 데이터베이스에 div 레코드를 만드세요.

블록은 Eve에서 반응형입니다. 블록은 선언적으로 "이러한 패턴을 보면, 이러한 일을 하라"고 지정합니다. 업데이트 방식, 캐시 방식, 저장 방식 등을 지정할 필요가 없습니다. 새로운 todo를 추가하면, 새로운 div가 자동으로 나타납니다.
단 9개의 연산만으로 플래피 버드 클론부터 Eve의 코드 분석기까지 무엇이든 작성할 수 있습니다.
말 그대로 모든 것이 레코드이기 때문에, 우리는 시스템을 완전히 투명하게 들여다볼 수 있습니다. 지금 열려 있는 http 요청이 몇 개인지 알고 싶다고 해 봅시다. JavaScript 앱에서는 그 정보를 명시적으로 수집하지 않는 한 알 방법이 없습니다. Eve에서는 그냥 이렇게 물어봅니다:
메모리는 어떨까요? Eve에서는 다른 것과 마찬가지로, 원하는 것을 검색한 다음 언어의 모든 능력을 활용해 반응할 수 있습니다. 이 머신의 사용 가능한 메모리가 200MB 아래로 떨어지면 우리에게 Slack 메시지를 보내봅시다.
그보다 더 잘할 수도 있습니다. 시간에 따른 사용 가능한 메모리를 시각화해 봅시다:
이것이 프로그램을 이해하는 우리의 능력에 무엇을 의미하는지 생각해 보세요 — 시스템의 어떤 것도 손쉽게 시각화하고 반응할 수 있습니다. 사용자가 가입하는 실시간 시각화를 보고 싶나요? 블록 하나만 작성하면 됩니다:

시각화는 이야기의 한 부분일 뿐입니다. 때로는 그냥 파고들어 무슨 일이 일어나고 있는지 조사해야 합니다. 무언가가 제대로 동작하지 않을 때, Inspect 버튼을 누르면 Eve가 원인을 찾도록 도와줍니다.
인스펙터는 전통적인 언어로는 할 수 없는 것의 한 예입니다. 사물이 어디에서 왔는지, 그리고 프로그램이 어떻게 맞물려 있는지 알아야 가능하기 때문입니다. 디버깅에서 우리의 압도적인 시간은 오류가 어디 있는지조차 파악하는 데 쓰이지만, Eve는 우리를 그 지점으로 바로 데려갑니다. 더 나아가, 왜 처음부터 문제가 생겼는지 방향을 제시합니다. 이는 자동차 정비사에게 "교류발전기 선이 바로 여기서 느슨합니다!"라고 알려주는 커다란 빨간 화살표 장치를 쥐여주는 것과 같습니다.
우리가 대부분의 시간을 오류를 찾아 고치는 데 보낸다는 점을 고려하면, 이 버튼의 함의는 분명합니다: 우리는 훨씬 더 많은 자유 시간을 갖게 됩니다.
Eve를 개발하며, 겉보기에는 단순한 이러한 선택들이 프로그래밍의 의미 전반에 놀라울 정도로 광범위한 영향을 미친다는 것을 알게 되었습니다. 그중 몇 가지를 살펴봅시다.
코드는 자산이 아니라 부채입니다. 한 줄이 추가될 때마다 잠재적 버그의 표면적이 넓어지고, 이해하고 유지해야 할 것들의 무더기가 늘어납니다. 의도를 흐리지 않는 한, 우리의 목표는 코드의 양을 줄이는 데 있어야 합니다. Eve 프로그램은 대체로 매우 작을 뿐 아니라, 무엇보다 개별 블록이 짧고 단일 목적을 유지합니다. 리터러트 프로그래밍에 초점을 맞추기 때문에, 블록은 맥락을 제공하는 서사에 잘 맞물립니다. 코드는 작고 소화하기 쉬운 조각으로 제시되며, 설명이 내장되어 있고 더 큰 그림 속에서 제자리를 찾습니다. 이것이 유지보수, 탐색, 협업에 미치는 영향은 과소평가할 수 없습니다.
레코드라는 공통 인터페이스 덕분에 Eve 블록은 기본적으로 합성 가능합니다. 그리고 블록에 고유한 순서가 없기 때문에, 우리는 원하는 대로 조직할 자유가 있습니다. 변화를 다루기 위해 끊임없이 재아키텍처링을 하거나, 진화를 감당하기 위한 복잡한 인프라를 구축하는 대신, Eve 프로그램은 유기적으로 성장합니다. 기능, 수정, 심지어 시각화까지 기존 코드를 변경하지 않고 모두 추가할 수 있고, 순서가 없으니 가장 합리적인 위치에 배치할 수 있습니다.
코드 전반에 null 검사와 assert를 흩뿌리는 대신, 에러 레코드를 생성해 불변식을 전역적으로 강제할 수 있습니다. 이를 일반적인 Eve 블록으로 수행하므로, 임의로 복잡한 불변식도 언어의 모든 표현력을 활용해 기술할 수 있습니다.
제약을 블록 합성을 통해 전역적으로 표현할 수 있다는 사실은 흥미로운 함의를 낳습니다. 첫째, 올바름은 필요할 때마다 점진적으로 도입할 수 있습니다. 무엇을 만들려는지 제대로 알기도 전에 수많은 타입이나 스키마를 깔아둘 필요가 없습니다. 우리는 프로그램을 작업하면서, 적절해 보일 때 불변식을 덧입혀 갈 수 있습니다.
둘째, 이러한 무결성 제약은 레코드가 나쁜 상태에 들어가도록 결코 허용하지 않습니다. 따라서 우리는 지금 작업 중인 블록에만 집중해도 안전합니다. 매 줄마다 불변식을 점검하거나, 모두에게 급여를 10배 지급하는 코드를 추가할까 봐 걱정할 필요가 없습니다. 지역적 사고에 전역적 강제가 결합됩니다.
가장 좋은 점은, 다른 모든 것과 마찬가지로 오류도 레코드라는 것입니다. 에러 처리는 그저 또 하나의 블록일 뿐입니다.
"Zoom and enhance(확대하고 선명하게)"는 공상과학에서 흔한 클리셰지만, 우리는 왜 실제로 그걸 갖지 못할까요? 이미지의 경우에는 실제로 데이터가 부족하지만, 소프트웨어에서는 우리가 그냥 버려 버리는 정보가 믿기 어려울 만큼 많습니다. 그렇지 않았다면 어떨까요?
지금 우리가 가진 것 중 가장 가까운 것은 브라우저의 웹 인스펙터지만, 여전히 많은 정보가 빠져 있습니다. Eve는 가능한 모든 것을 캡처하므로, 매우 유용한 방식으로 점들을 연결할 수 있습니다.

우리의 시스템은 무너지고 있을 때 그것을 이해할 수 있는 능력으로 평가되어야 합니다. 왜 스타 트렉에서처럼 "컴퓨터, 왜 이게 고장났지?"라고 물을 수 없을까요?
인스펙터는 24/7 우리 곁에 있는 또 한 명의 프로그래머와 같습니다. 막히면 버튼을 누르고, Eve는 무슨 문제가 있는지 찾고 고치는 길로 우리를 이끕니다 — "컴퓨터, 왜 이게 느리지?"
프로그래밍에서 우리가 할 수 있는 가장 큰 변화 중 하나는 스스로 질문할 수 있는 능력을 갖추는 것입니다. 왜 작동하지 않는가, 왜 느린가뿐 아니라, 사용자가 이 버튼을 평균 몇 번 클릭하는지, 이번 주에 몇 명에게 급여를 지급했는지 같은 질문도요. Eve의 전체 모델은 우리가 떠올리는 어떤 질문이든 할 수 있게 하는 데 기반합니다. 이것은 우리를 "undefined of undefined"의 굴레에서 해방시키고, 시스템의 깊은 내부를 들여다보게 해 줍니다.
단순함안타깝게도 단순한 해결책은 복잡한 것보다 훨씬 찾기 어렵습니다. 이는 우리가 당연한 진리라고 여기는 많은 것들을 의심하고, 의식적으로 선택해야 함을 의미합니다. 결국 Eve의 설계는 철저한 단순함에 대한 집중에서 비롯됩니다. Eclipse 대신, 펜과 종이에 더 가까운 무언가에서 작업해 봅시다. 복잡한 의미론 대신, 모든 것을 레코드로 둡시다. 수천 가지 디버거 옵션 대신, 문제가 생긴 곳을 클릭하면 되는 마법 같은 도구를 둡시다. Eve는 문제를 해결하는 사람들, 즉 우리를 위해 사물을 더 단순하게 만드는 것입니다.
더 깊이 파고들 주제가 많습니다. Eve가 어떻게 프로그래밍의 종 모양 곡선을 이동시킬 수 있는지부터, 이 미친 듯한 언어를 어떻게 빠르게 만들 수 있는지까지요. 하지만 이것은 우리의 로드맵에 있는 세 가지 이정표 중 첫 번째에 불과합니다:
첫 단계는 단순하고 사람 중심적인 형태의 프로그래밍을 구축하는 것이었습니다. 여기에서 보여드린 것은 단지 데모가 아니라, 아직 이르긴 하지만 실제 소프트웨어입니다. 여기에서 직접 사용해 보세요.
다음 단계는 Eve가 1970년대식 컴퓨터 개념을 벗어나 분산된 세계를 포용하도록 어떻게 해 주는지 보여주는 것입니다. 그 과정에서, 사람들에게 Paxos를 이해하도록 강요하지 않고도 무어의 법칙과 같은 것을 되찾을 수 있을지도 모릅니다.
마지막 단계는 이 모든 것이 보다 강력한 최종 사용자 컴퓨팅의 토대를 어떻게 마련하는지 보여주는 것입니다. 모든 사람이 소프트웨어를 쓰고 싶어 하는 것은 아니지만, 우리 모두는 해야 할 일이 있고, 아마 컴퓨터가 그것을 도와줄 수 있을 것입니다.
우리의 모든 연구를 통해 우리는 지향해야 할 계산의 미래를 조금씩 맞춰 왔습니다 — 인간적인 도구와 기계에 대한 다른 개념에서부터, 지구상의 모두에게 초능력을 부여하는 것까지요. 해야 할 일이 너무나 많습니다. Eve가 그 해답이라고 믿든 아니든, 이런 미래를 현실로 만드는 일은 우리 모두에게 달려 있습니다. 그렇게 하지 못하면 우리 업계만 뒤처지는 것이 아닙니다. 더 나은 형태의 계산으로 이끌리길 기다리는 모든 인류의 활동이 함께 발목을 잡힙니다. 컴퓨터는 아마도 인류가 개발한 가장 강력한 도구일 것입니다. 이제 우리가 진정으로 그것을 휘두를 때입니다.
우리가 더 큰 관심을 보여줄수록, 이 일을 계속하기가 더 쉬워집니다. 가장 좋은 도움은 소식을 널리 알리고 우리와 소통하는 것입니다. 안타깝게도 지금은 채용 중이 아니지만, 멀지 않은 미래에 바뀌길 바랍니다.
아래에 몇 가지 후속 페이지를 모았습니다. 앞으로 몇 주에 걸쳐 심층 글도 추가할 예정입니다. Eve가 어떻게 탄생했는지, 그 기반이 된 연구, 더 깊은 함의가 궁금하다면 살펴보세요: