표현의 중요성
요약
마음을 전달할 때처럼 지식을 전달할 때도 표현하는 방식이 중요하다. 컴퓨터 프로그램도 일종의 지식으로 그 의미를 전달하는 다양한 방법이 있다. 코드 그 자체도, 사람이 작성한 설명도, 모두 프로그램의 의미를 표현하는 방법이다. 이 때, 두 표현 방식이 전달하는 의미의 수준이 비슷하다면 쉽게 상호변환이 가능하다. 따라서 모든 프로그램 표현 방식을 의미 수준에 따라 연결한다면, 코드에서 사람이 작성한 것 같은 설명으로의 전이적 변환도 가능할 것이다.
본문
무엇이든 잘 표현하는 것이 중요하다. 가족이나 연인 관계에서 자신의 마음을 잘 표현하는 것이 중요하듯이 연구에서도 표현은 중요한 문제다. 지식을 더 잘 전달하고 설명하기 위해서이다. 잘 그린 그림이나 공식으로 수십페이지의 글을 설명할 수 있고, 간결하게 개념을 전달할 수 있다.
컴퓨터 프로그램을 표현하는 것도 굉장히 중요한 문제이다. 적절한 프로그램 표현 방식은 자동으로 프로그램을 수정/생성하는 연구, 자동으로 결함의 위치를 찾는 연구, 또는 퍼징이나 정적분석 등 많은 연구 분야에서 중요한 요소이기 때문이다. 이때, 적절하다는 것은 각 연구의 필요에 따라 다양한 의미를 지니게 된다. 따라서 어떤 경우에는 코드의 있는 그대로, 어떤 경우에는 추상구문트리나 유한상태오토마타가, 또는 단순한 문자열 토큰의 나열이 사용된다.
이처럼 다양한 프로그램 표현 방식들이 사용되지만 대부분이 공통적으로 표현하고자 하는 것은 프로그램의 의미다. 이 때, 주석 하나 없는 코드에서부터 사람의 언어로 구구절절 풀어쓴 설명까지의 범위를 의미 표현의 스펙트럼이라고 한다면, 대부분의 프로그램 표현 방식들은 이 안에 들어갈 것이다. 넓게 보면 코드 그 자체로도, 추상구문트리 등의 프로그램 구조를 통해서도, 프로그램 상태의 집합을 통해서도 프로그램의 의미를 표현할 수 있지만 사람이 직관적으로 이해할 수 있는 정도는 다르기 떼문이다.
이러한 의미 표현 스펙트럼이 잘 정리된다면 코드에서 사람이 작성한 것 같은 설명으로, 혹은 그 반대로의 변환도 수월할 것으로 예상된다. 코드로부터 풀어쓴 설명은 도출하기 어려워도, 추상구문트리는 쉽게 만들 수 있기 때문이다. 이처럼 보다 수월한 작은 단계의 변환이 연쇄적으로 이루어진다면 스펙트럼의 끝에서 끝으로의 변환도 가능할 것이다.