일상 생활에서 평가라는 낱말은, “시험 평가”, “등급 평가”등 뭔가 절차를 거쳐 가치, 등급을 확인 할 때 써왔습니다. 아주 말이 안되는 건 아니지만, 코드의 “가치를 평가”하다는 말이 낯설지 않으신가요? 전 낯설어서 한 번 정리를 해봤습니다.
Evaluation 뜻:
to judge the value or condition of (someone or something) in a careful and thoughtful way - Merriam Webster
값이 무엇인지 판단judge 하는 걸 Evaluation이라 말합니다. “값을 판단”한다는 말이 있으니, 함수형 코드의 expression과는 그런대로 어울리는 말처럼 보입니다. 수식expression의 값을 구하는 걸 평가라고 생각하면 자연스럽습니다. 하지만, 리턴하는 값이 없는 프로시져는 평가란 말과 어울리지 않아 보입니다.
평가 評價 뜻:
물건값을 헤아려 매김. 또는 그 값
사물의 가치나 수준 따위를 평함. 또는 그 가치나 수준 - 네이버 표준국어대사전
Evalutation과 우리말 평가가 그리 다른 뜻을 가진 부분은 안보입니다.
값을 “결정”한다는 말은, 여러가지 가능한 값들 중에 하나를 고르는 행위입니다. 한 문제에 10점짜리인 문제가 10개가 있습니다. 이 시험을 본 사람의 성적은 “0점, 10점,…,90점, 100점”이 가능한 값이고, 이 중 9개를 맞추면 “90점이라 평가”합니다. 주어진 조건context에 따라 값을 결정합니다. 다시 말해,
여러 값 중에, 어떤 조건을 가지고 계산 또는 실행을 하면 값이 결정되는 걸 말합니다.
※ 그 사람이 얼마나 열심히 준비해서 9개를 맞혔는지는 관심을 가지지 않습니다.
코드 “평가”는 마치 계산식expression을, 프로시저를, 코드를 “실행” 또는 “계산”하는 것으로 바꿔 말하면 더 직관적일 것처럼 보입니다. 하지만, 평가는 어떤 절차를 거치는지는 상관하지 않고, 값을 드러내는 행위를 말합니다. 어떤 물건의 가치를 매길 때, 이 것 저 것 조건을 살펴보고 결정하는 것도 평가고, 남이 가치를 알려줘도 평가입니다. 어떤 식으로든 값이 드러나는 걸 평가라 합니다.
낱말을 좀 더 정확히 쓰면 “계산해서 평가”, “실행해서 평가”한다 입니다.
글 시작 부분에 쓴 “시험 평가”는 “시험으로 평가”한다고 쓰는 게 더 어울립니다.
※ 아래 코드는 의사 코드입니다.
값이 나오기까지의 과정을 분리하면, 수식expression도 프로시저도 어색함이 없어집니다.
= return (x + 1)
func x 1 호출 func
func
함수는 x에 1을 바인딩하는 컨텍스트
를 가지고 “계산” 하면 2
라는 값으로 평가되는 함수입니다.
=
proc x
func1 x
func2 x1 호출 proc
proc
프로시저는, 컨텍스트에 따라 여러 동작을 할 수 있는 코드로 x에 1을 바인딩하는 컨텍스트
를 가지고 “func1 1
을 실행하고, func2 1
을 실행”하는 작업으로 평가되는 프로시저입니다. 이 프로시저가 평가되면 func1
을 실행해서 평가하고, func2
를 실행해서 평가합니다.
“등급 평가”의 뉘앙스와 “코드 실행”의 의미가 연결이 안돼 낯설었던 것으로 보입니다. 코드란 어떤 값을 구하는 절차, 방법을 서술해 놓은 것이고, 그 절차들을 계산 또는 실행해서 값을 구하는 걸(값이 드러나게 하는 걸) 코드를 평가한다 말합니다.
업무량이 많아 하스켈 공부가 더뎌, 잡스런운 것들 올리고 있습니다. T.T