외국어를 배워 보면 수에 따른 변화, 성에 따른 제약, 격에 따른 변화 등이 무척이나 어렵게 느껴진다. '그'면 '그'지 무슨 'it, its, they, their, them'과 같은 변화가 필요한가 싶다. 그래도 'it, they'를 단/복수 정도만 구별하지 실체가 인간인지 동물인지 사물인지까지 구별하지 않는 게 어디인가? 아마도 어떤 언어는 이런 것까지도 구별하고 있을지도 모른다.
문법의 까다로움이라는 건 그만큼의 유연성을 제약한다. 우주의 삼라만상을 구별할 수 있는 언어가 존재할까와 같은 철학적인 담론은 러셀이나 비트겐슈타인같은 철학자들의 골치아픈 이야기를 언급하게 하니까 덮어 두자. 아무튼 문법이 복잡하면 그만큼 익히기 까다로울 것은 틀림없어 보인다.
그러면 인간의 언어(즉 자연언어)는 까다롭기만 할까? 아니다. 사실 인간의 언어는 매우 유연하다. '1'을 '일'이라고 하든 '하나'라고 하든 'one'이라고 하든 더하거나 빼는 등의 연산에 어떤 어려움도 겪지 않는다. 그런데 컴퓨터는 아니다. 수를 저장하고 있는 변수의 속성에 따라서도 연산이 가능할 때도 있고 아닐 때도 있는 것 같다.
한 가지 예를 보자.
왼쪽 그림에서 [31]은 어떤 수들을 입력하면 그 수들의 합을 구해 주는 함수를 정의하는 파이썬 코딩이다. [32]는 1~6까지의 합을 구하도록 정의한 함수 'tatal_sum'을 실행하고 결과값으로 '21'을 얻은 것을 보여 준다. 입력한 수들 'X1 ~ Xn'을 순차적으로 'i'로 받아서 'total'이라는 변수에 더하는 함수를 정의했고, 잘 작동했다.
위 코드에서 'total += i'부분의 'i' 대신 'X'를 사용하면 어떨까? 변수 'i'는 'X1 ~ Xn'를 순차적으로 받은 값이니까 논리적으로는 'X'와 같은 값이다. for 문에서 순서대로 다루게 되는 X의 값은 'X1=1, X2=2, X3=3, X4=4, X5=5, X6=6'이다. 각각의 차순에서 이들 값은 i값이므로 결국 for 구문 내에서 각 차순별로 i=X인 셈이다. 그러니까 'total += i'부분의 'i' 대신 'X'를 사용해도 논리적으로는 아무런 문제가 없을 것 같다.
그런데 실제로 'total += i'부분의 'i' 대신 'X'를 사용한 코드를 실행해 보면 에러가 발생한다.
에러 내용인즉슨 'X'는 상수이면서 튜플 객체이기 때문에 '+=' 연산을 수행할 수 없다는 것. 이게 무슨 말인고 하니 애초에 'i'는 'X'에 할당된 값에만 해당하는 단일 상수(int) 객체이지만 'X'는 태생이 함수에서 요구하는 '(X1, X2, ~ , Xn)' 형태의 튜플값이기 때문에 단순 수치 계산에 사용할 수 없다는 뜻인 것 같다.
자연언어와 달리 프로그래밍 언어는 매우 까다로운 규칙에 의해 작동한다. 일견 아무런 문제도 없어 보이는 코딩 내용인데도 컴퓨터는 오류로 인식한다. 어쩌면 이런 까탈스러움(?)이 프로그래밍 언어를 익히기가 까다롭고 어렵게 느껴지게 하는 요인인지도.
인간의 언어는 아무리 까다롭더라도 이런 정도는 아닌 것 같다. 보다 정확하게 표현하자면 컴퓨터는 문법의 까다로움을 벗어나지 못하지만 인간은 유연한 사고를 바탕으로 문법의 까다로움을 파괴하는 능력이 있다!