\"알루미늄 팬\" 한마디에 생략된 것들
한 문장을 끝까지 분해하기
앞 편에서 사람 말에는 상식이 생략된다고 했다. 이 편에서는 그 규모를 실제로 세어본다. 문장 하나를 끝까지 분해해서, 계산기가 요구하는 값이 몇 개인지 확인해 보자.
대상은 계속 써온 이 문장이다.
“알루미늄 팬인데 손잡이는 플라스틱이고, 바닥에서 200도로 가열될 때 손잡이 끝이 몇 도까지 오르는지”
사람이 읽으면 무슨 문제인지 곧바로 이해한다. 이제 계산기의 입장에서 읽어보자.
1단계: 무엇을 계산하는 문제인가
문장에 “열”이라는 단어는 없다. “가열”과 “도”가 있으니 열 문제라고 짐작할 수 있다.
그런데 열 문제에도 종류가 있다.
- 정상 상태 — 시간이 충분히 지나 온도가 더 이상 변하지 않는 상태
- 과도 상태 — 시간에 따라 온도가 변하는 과정
“몇 도까지 오르는지”는 어느 쪽인가. “까지”라는 말은 최종 도달점을 암시하니 정상 상태로 읽을 수 있다. 하지만 “3분 요리하는 동안”이 맥락이라면 과도 상태여야 한다.
해석이 갈린다. 그리고 이 선택에 따라 답이 완전히 달라진다.
2단계: 형상
“팬”과 “손잡이”라는 두 부분이 있다는 것은 알 수 있다. 그런데 계산에 필요한 것은 이름이 아니라 치수다.
없는 값들: - 팬 지름 - 팬 바닥 두께 - 팬 측벽 높이와 두께 - 손잡이 길이 - 손잡이 단면 크기 - 팬과 손잡이의 연결 방식 — 면으로 붙었는가, 리벳 몇 개인가 - 연결 면적
마지막 항목이 특히 중요하다. 열은 접촉 면적을 통해 흐른다. 연결 면적이 절반이면 전달되는 열도 대략 절반이다. 그런데 문장에는 흔적조차 없다.
3단계: 재료
“알루미늄”과 “플라스틱”이 있다. 열 계산에 필요한 물성은 세 가지다.
- 열전도율 — 열을 얼마나 잘 통과시키는가
- 밀도
- 비열 — 온도를 올리는 데 필요한 열량
알루미늄은 그래도 사정이 낫다. 합금 종류에 따라 값이 다르지만 대략의 범위가 있다.
“플라스틱”은 곤란하다. 플라스틱은 수백 가지가 있고 열전도율이 종류마다 크게 다르다. 프라이팬 손잡이에 쓰이는 것들로 범위를 좁힐 수 있지만, 그것도 하나로 특정되지 않는다.
여기서 중요한 판단이 필요하다. “플라스틱”이라는 애매한 입력에 대해 시스템은 무엇을 해야 하나?
세 가지 선택이 있다. 1. 대표값을 골라 쓰고 조용히 넘어간다 2. 사용자에게 되묻는다 3. 대표값을 쓰되 그 값을 명시하고 고칠 수 있게 한다
1번은 위험하다. 사용자는 시스템이 어떤 값을 썼는지 모르고, 결과가 틀렸는지도 모른다. 2번은 안전하지만 다시 문답이 시작되고, 우리가 없애려던 마찰이 돌아온다.
3번이 답이다. 그리고 이게 중간 형식이 “사람이 읽을 수 있어야” 하는 이유다.
4단계: 경계조건
여기가 가장 많이 생략된다.
“바닥에서 200도로 가열”은 바닥면 조건이다. 그런데 이것도 두 가지로 읽힌다. 바닥 온도가 200도로 유지되는 것인가, 아니면 200도인 열원에서 열이 들어오는 것인가. 물리적으로 다른 조건이고 결과도 다르다.
그리고 나머지 모든 면에 대한 언급이 전혀 없다.
- 팬 측면은 공기와 접촉 — 그럼 주변 온도는? 대류 조건은?
- 손잡이 표면도 공기와 접촉 — 같은 조건인가?
- 손잡이 끝면은?
- 복사에 의한 열손실은 고려하는가?
경계조건이 정해지지 않으면 계산은 시작조차 안 된다. “나머지는 알아서”라는 말이 통하지 않는다.
그런데 사람은 이걸 당연히 실온의 공기라고 생각한다. 적을 필요를 못 느낀다.
5단계: 계산 설정
물리와 무관하지만 결과를 좌우하는 값들이다.
- 격자를 얼마나 잘게 나눌 것인가
- 시간 간격은
- 2차원으로 근사할 것인가 3차원으로 할 것인가
- 수렴 판정 기준은
사용자는 이런 것을 생각조차 하지 않는다. 생각해야 한다면 이미 실패한 설계다. 이건 전부 시스템이 정해야 한다.
세어보면
한 문장에서 시스템이 결정해야 할 항목을 모으면 이렇게 된다.
| 범주 | 결정할 항목 수 |
|---|---|
| 문제 종류 | 1~2 |
| 형상 | 7 이상 |
| 재료 물성 | 6 (재료 2종 × 3) |
| 경계조건 | 5 이상 |
| 계산 설정 | 4 이상 |
스물다섯 개 안팎이다. 사용자가 준 것은 한 문장이고, 그 안에 명시된 값은 넷쯤 된다. 알루미늄, 플라스틱, 200도, 그리고 “손잡이 끝”이라는 관심 지점.
나머지 스물은 시스템이 정한다.
이것이 진짜 문제였다
이 숫자를 처음 세어봤을 때, 문제의 성격이 다르게 보였다.
우리는 “자연어를 파싱하는 문제”라고 생각했다. 문장에서 값을 뽑아내는 일. 그런데 실제로는 문장에 없는 스무 개의 값을 결정하는 문제였다.
파싱은 부수적이다. 핵심은 기본값 설계다.
그리고 기본값을 잘 정하려면 조건이 있다. 다룰 수 있는 문제의 범위가 좁아야 한다. “모든 물리 문제”를 다루려 하면 합리적인 기본값이란 게 존재하지 않는다. 프라이팬과 반도체 소자와 교량은 기본값이 전혀 다르다.
범위를 좁히면 기본값이 정해진다. 조리기구 열전달로 한정하면 주변 온도는 실온이고 크기는 수십 센티미터 단위다. 이 좁힘이 곧 애매함의 해소다.
그러니 우리가 만들 언어는 의도적으로 좁아야 했다. 무엇이든 표현할 수 있는 언어가 아니라, 정해진 영역만 표현하되 그 안에서는 빈틈없이 채워지는 언어.
그런 언어에는 이름이 있다. 다음 편에서 그 이야기를 한다.
다음 편 예고 — DSL이란 무엇인가 — 좁은 언어의 힘. 범용 언어와 특화 언어의 차이를 짚고, 좁음이 왜 약점이 아니라 무기인지 설명한다.