학습 결과: 짧은 프로그램을 읽고, 각 줄이 눈에 보이는 결과에 무엇을 보탰는지 평범한 말로 설명합니다.
선행 학습: 없습니다. 프로그램을 한 번도 써 본 적 없다고 가정하고 씁니다. 이미 프로그래밍을 아신다면 첫 프로그램으로 건너뛰세요.
프로그램은 명령이 아니라 설명입니다
프로그래밍이라고 하면 컴퓨터에게 명령을 내리는 장면을 떠올리기 쉽습니다. 실제로는 설명을 적는 일에 훨씬 가깝습니다. 해석의 여지가 없을 만큼 정확한 설명이요. 무엇이 무엇인지, 결과가 어떻게 나오는지를 적어 두면 기계가 그 설명을 그대로 따릅니다. 잘못 적은 부분까지 그대로 따릅니다.
마지막 문장이 이 일의 전부입니다. 기계는 여러분이 무엇을 의도했는지 짐작하지 못합니다. 언어를 배우면서 익히는 것은 결국 빈틈을 남기지 않고 뜻을 적는 방법입니다.
네 가지 개념이면 거의 다 덮습니다
앞으로 읽게 될 거의 모든 프로그램이 네 가지로 지어져 있습니다.
값은 데이터 한 조각입니다. 숫자 45, 글자 "공부 계획", 참과 거짓 같은 것들이요.
이름은 나중에 다시 부르려고 값에 붙여 두는 것입니다. let total = 45이라고 쓰면 값 45에 total이라는 이름이 붙습니다.
함수는 이름을 붙인 계산입니다. 값을 건네주면 값을 돌려줍니다. 계산을 한 번만 적어 두고 여러 곳에서 쓰려고 존재합니다.
실행은 적어 둔 설명을 실제로 따라가서 눈에 보이는 무언가가 나오는 순간입니다.
네 가지가 한 파일에 다 들어 있습니다.
function minutesLeft(total: int, spent: int) -> int {
total - spent
}
let plan = "study plan"
let total = 45
let spent = 20
print("{plan}: {minutesLeft(total, spent)} minutes left")토파즈가 이미 설치되어 있다면 what-a-program-is.tpz로 저장한 뒤 아래 명령으로 검사하고 실행하세요. 아직 설치하지 않았다면 지금은 읽기만 해도 됩니다. 다음 첫 프로그램에서 직접 파일을 쓰기 전에 도구부터 설치합니다.
topaz check what-a-program-is.tpz
topaz run what-a-program-is.tpz
관찰되는 결과는 이렇습니다.
study plan: 25 minutes left결과에서 거꾸로 코드를 읽어 봅니다
출력에서 시작해 거슬러 올라가 보세요. study plan이라는 글자는 이름 plan에서 왔고, 그 이름은 값 "study plan"을 가리킵니다. 숫자 25는 어디에도 적혀 있지 않습니다. minutesLeft가 45와 20으로 계산해 낸 값입니다.
함수를 한 번 더 보세요. 첫 줄이 계약을 적어 둡니다. 정수 두 개를 받고 이름은 total과 spent이며, 정수 하나를 돌려주겠다고 약속합니다. 본문은 식 하나뿐이고 그 식 total - spent가 그대로 답이 됩니다. 파일의 다른 어떤 부분도 이 함수가 하는 일을 바꿀 수 없습니다. 필요한 것이 전부 매개변수 두 개로 들어오기 때문입니다.
이 성질에는 이름을 붙여 둘 만합니다. 건네준 것에만 의존하는 계산은 프로그램 전체를 머릿속에 담지 않고도 그것만 따로 놓고 따져볼 수 있습니다.
검사 단계가 따로 있는 이유
명령을 하나가 아니라 둘 실행했습니다. 검사는 실행 전에 설명을 읽고 빈틈을 찾습니다. minutesLeft(total)이라고 쓰면서 두 번째 값을 빠뜨렸다면 검사가 그 자리를 짚어 말해 줍니다. 실행은 시작조차 하지 않습니다.
어떤 실행 환경은 그 호출이 실제로 실행될 때에야 빠진 인자를 발견하지만, 정적 검사를 하는 언어는 더 일찍 잡을 수 있습니다. 토파즈는 실행 전에 그 답을 명시적으로 요청하는 명령을 제공하므로, 여기 나오는 모든 예제에서는 check가 먼저 옵니다.
직접 해 보기
spent를 50으로 바꾸고 나머지는 그대로 두세요. 실행하기 전에 출력을 예상해 보세요.
정답
study plan: -5 minutes left가 됩니다. 뺄셈은 적힌 대로 수행되고, 결과가 양수여야 한다는 말은 설명 어디에도 없습니다. 음수 분이 목적에 맞지 않는다면 그 규칙도 적어 두어야 합니다. 이 한 줄에 오늘의 교훈이 다 들어 있습니다. 기계는 여러분이 의도한 것이 아니라 적은 것을 따릅니다.
이어갈 준비가 된 시점
값 하나, 이름 하나, 함수의 서명, 결과를 만드는 식을 각각 짚을 수 있고, 검사 명령이 실행 명령과 무엇이 다른지 말할 수 있으면 됩니다.
첫 프로그램에서 도구를 설치하고 직접 첫 파일을 써 보세요. 다른 언어를 이미 아신다면 다른 언어에서 오셨다면이 아는 것과 방금 읽은 것을 이어 줍니다.