"코끼리"
내가 이 단어를 말했을 때, 당신도 나와 같은 동물을 머릿속에 떠올려야 대화가 가능해진다. 만약 내가 '코끼리'를 떠올리며 말했는데, 당신은 그 단어를 처음 듣거나, 엉뚱한 것을 떠올린다면 어떻게 될까? 대화는 단절되고, 소통은 이루어지지 않는다.
이것이 바로 언어가 '약속'인 이유다.
'코끼리'라는 말과 '동물 코끼리'라는 이미지를 연결 짓기로 한 약속.
영어도 마찬가지이다.
내가 "코끼리"라고 했을 때, 상대가 떠 올리는 이미지가 '동물 코끼리'를 떠 올려야 하는데, 상대는 이미 'Elephant'라는 단어와 '동물 코끼리'를 연결하여 인식하고 있다면, 내가 아무리 "코끼리"라고 말을 한들 상대는 '동물 코끼리'를 떠 올리지 못한다. 'Elephant'라는 단어를 보고 '동물 코끼리'를 떠올리는 건 영어권 사람들의 약속이다. 누군가가 "코끼리는 Elephant를 뜻해요"라고 알려주지 않는다면, 우리는 서로 통하지 않게 된다.
이 모든 것들은 특정 물체를 임의의 단어로 연결하여 소통하기로 한 해당 공동체의 약속을 모르거나 학습을 통해서 알게 되지 못한다면 상호간의 의사 소통은 힘들어지게 된다라는 것을 의미한다. 그리고 우리는 이 '약속들의 체계'를 바로 언어(言語)라고 부른다. 이러한 이유로 언어는 그 공동체의 생활, 생각, 관습, 문화 등을 소통하고 표현하기 위한 수단과 도구가 된다.
우리는 흔히 언어 자체에 집중한다. 시험을 위해 단어를 외우고, 문법을 익힌다. 하지만 언어는 그 자체가 목적이 아니다. 언어는 의사(意思)를 소통하기 위한 수단이다. 의사 소통(意思疏通)은 뜻과 생각이 서로 통하여 알게 됨을 의미한다. 언어는 의사 소통을 위한 한낱 수단이고 도구에 불과하다. 내 머리 속에 있는 생각과 내 마음 속에 있는 뜻을 다른 사람에게 전하기 위해서 우리는 언어라는 도구를 사용하는 것이다.
흥미로운 점은, 이 언어라는 도구는 타인과의 소통에만 쓰이는 것이 아니라는 점이다. 우리는 스스로 생각할 때조차, 익숙한 언어를 통해 머릿속에서 상상하고 논리를 구성한다. 즉, 언어는 나 자신과의 대화에서도 사용되는 핵심 도구다.
그렇다면 다시 물어야 한다.
우리는 왜 영어를 배우는가?
우리는 왜 언어를 공부하는가?
단지 단어를 외우기 위해서? 문장을 해석하기 위해서? 아니면 누군가와 뜻을 나누기 위해서? 만약 후자라면, 단순히 언어만 익히는 것으로는 부족하다. 전달할 만한 생각과 뜻이 내 안에 있는가를 먼저 물어야 한다.
우리 교육은 혹여 영어를 암기 과목으로 착각하고 있지는 않은가? 언어 학습의 주된 목적은 상대와의 의사 소통이 아닌가? 만약에 의사 소통이 목적이라면, 나의 뜻과 생각을 가지고는 있는가? 또한, 내가 가진 무엇을 상대와 소통의 수단인 언어를 통해서 나누려고 하는가? 목적은 없고, 수단만 익히는 꼴이다.
오늘날, 국제회의에서는 '동시 통역'이 보편화되어 있다. 누군가는 한국어로 말하고, 누군가는 영어로 듣는다. 동시 통역이라 함은 결국 '코끼리'를 'Elephant'로, 'Elephant'를 '코끼리'로 빠르게 바꾸어 줌으로써 상호 간의 의사가 잘 소통될 수 있도록 도움을 주는 도구이며, 수단이다. 만약 이 도구와 수단을 덜어낸다면 결국 상호간의 의사(意思)만이 남게 된다. 나의 뜻과 생각을 소통을 통해서 나눈다는 것은 그것이 작은 의미이건 큰 의미이건 '설득'을 목적으로 할 것이다.
지금 우리는, 통역보다 더 빠른 기술의 세상에 살고 있다. 여러분과 미국 사람이 서로 에어팟을 착용하고 있고, 에어팟이 '동시 통역'을 해 주는 상황에서 여러분은 한국어로, 상대는 영어로 대화하는 상상을 해 본다면, 이 상상은 상당히 현실 가능하다 느껴지지 않는가? 수단과 도구로써의 언어를 더 이상 지식으로 익히지 않더라도 의사(意思)를 소통하는데 어려움이 없을 수도 있다는 상상이 이제 SF 소설에서의 허무맹랑한 소리로는 들리지 않을 것이다. 손에 닿을 곳에 이미 와 있다.
그렇다면 질문은 다시, 이렇게 바뀐다.
언어라는 도구가 필요없어진 세상에서
당신은 왜 언어를 배우고 익히려 하는가?
당신은 어떤 생각을 가지고 있는가?
당신은 당신의 생각을 가지고는 있는가?
그래서, 무엇을 나누고 설득하여 공감과 공유를 하려 하는가?
이제 시선을 컴퓨터로 돌려보자. 컴퓨터의 언어도 이와 전혀 다르지 않다.
컴퓨터는 컴퓨트(compute, 계산)를 하는 기계이다. 다시말해서, 덩치 큰 계산기다.
많은 이들이 Python, Java, C 등을 '컴퓨터의 언어'라고 착각한다. 하지만, 정확히 말하면, 이 덩치 큰 계산기의 언어는 그냥 숫자다. 그것도 오직 0과 1로만 이루어진 이진법에 기반한 이진수(이진 신호)가 컴퓨터의 언어다. 그래서, 컴퓨터의 언어는 이진수 형태의 명령어(기계어)이다.
컴퓨터라는 계산기는 계산만을 위한 기계이기 때문에 인간이 컴퓨터에게 시켜야 하는 명령도 결국 컴퓨터의 언어인 숫자를 기반으로 한 '계산'이어야 한다. 컴퓨터와의 소통은 단방향이다. 보다 정확히 이야기하자면, 컴퓨터는 자율적으로 생각하지 않기 때문에, 인간이 내리는 명령에 따라 반응할 뿐이며, 그 소통은 본질적으로 일방향적이다. 그래서, 컴퓨터와의 소통은 결국 일방적인 명령이다. 그리고 컴퓨터는 주어진 명령만을 수행할 뿐이다. 그런데, 컴퓨터의 언어는 숫자다. 이 말은 인간이 컴퓨터에게 명령을 내리는 행위도 숫자만을 사용해야 함을 의미한다. 이러한 이유로 인간은 컴퓨터에게 명령을 내리기 위해서 숫자로 구성된 저급 언어(Low Level Language, Machine Language)로의 변환을 위해서 Python, Java, C와 같은 고급 언어(High Level Language)를 개발한 것이다. 컴퓨터와의 단방향 소통을 위해서 저급 언어를 익히는 것이 어려워서 컴파일러(Compiler), 인터프리터(Interpreter) 라는 통역기를 만들고 인간들을 위해서 고급 언어를 개발한 것이다.
이러한 고급 언어를, 컴퓨터에게 내리는 명령(code)을 작성하는 언어라고 해서 '코딩 언어', 혹은 이 코딩 언어를 통해서 최종적으로는 명령의 순서를 작성하는 언어라고 해서 '프로그래밍 언어'라고 부른다.
프로그램은 '일의 순서'를 의미한다. 컴퓨터 프로그램은 컴퓨터가 수행해야 할, 코드로 구성된 명령을 순차적으로 구성해 놓은 것을 의미한다. 그래서, 컴퓨터에게 계산을 시키는 명령을 순서대로 구성하는 행위를 ‘컴퓨터 프로그래밍’이라고 한다. 정확한 명령에, 정확한 수행이 필요하기 때문에 상호간의 약속이 필요하고, 이러한 '약속들의 체계'가 컴퓨터 프로그래밍 언어가 되는 것이다. C, Java, Python은 인간이 만든 프로그래밍 언어로, 우리가 우리의 생각을 좀 더 쉽게 컴퓨터에게 전달하기 위한 번역 도구에 불과하다. 우리가 원하는 결과를 만들기 위해 컴퓨터에게 "이렇게 해 줘"라고 명령을 내리는 도구일 뿐이다.
다시 요약하면, 컴퓨터에게 계산을 시킬 명령을 코드(code)라고 하고, 이 명령을 작성하는 행위가 "코딩(coding)"이다. 정확한 계산을 위해서 약속된 명령을 작성해야 하기에 문법이 필요하다. 그래서, 코딩은 컴퓨터에게 명령을 내리기 위한 도구에 불과하다는 얘기다. 그런데, 우리는 너무 자주 도구에 집착한다. 문법을 외우고, 문장을 암기하고, 함수의 사용법을 익힌다. 도구의 사용은 목적을 필요로 한다. 목적이 있고, 목적을 보다 손쉽게 달성하기 위해서 도구를 물색하거나 개발하게 된다. 목적없는 도구는 무용지물(無用之物)이다. 무슨 목적으로 컴퓨터에게 계산을 시킬려고 하는 것이며, 그 계산을 시킴에 있어서 어떤 도구가 유용한지에 대한 생각, C, Java, Python 이라는 도구 중에서 무엇이 효율적인가에 대한 생각. 다시 말해서, 언어라는 도구를 선택함에 있어서 목적에 부합되는 전략이 선행되어야 한다는 얘기다.
이러한 이유로 목적을 위한 도구는 언제든 바뀔 수 있다. 현재 현존하는 프로그래밍 언어는 700여종이 넘으며, 이 중에서 실무에서 널리 사용되는 언어도 Python을 포함해서 20종이 넘는다. 이 언어들은 언제나 사라지고, 또 언제나 새로이 등장할 수도 있는 도구일 뿐이다. 정말 중요한 건, 도구가 아니라 도구를 이용해 전하고자 했던, 명령하고자 했던 생각이다.
영어를 잘 한다는 것은 발음이 원어민에 가깝거나, 문법적 구조를 정확하게 구성하는 것이 아니라, 해당 공동체의 문화, 가치관, 관습에 맞게 효과적으로 나의 의사(意思)를 조리있게 잘 구성하여 소통을 잘 하는 것을 의미하는 것이 아닐까?
결국, 코딩을 잘 한다는 것은 문법을 잘 아는 것을 의미하는 것이 아니라, 문제를 정의하고, 해결 방법을 논리적으로 구성하고, 목적에 부합되게 컴퓨터에게 무엇을, 어떻게 순차적으로 계산해야 할지를 설계하는 것을 의미한다. '코딩'보다는 '프로그래밍'이 중요하며, '프로그래밍'을 위해서는 논리적 생각 흐름인 컴퓨팅 사고력이 훨씬 더 중요하다.
언어는 약속이고, 도구이며, 수단이다. 그것이 영어이든, 한국어이든, Python이든 중요하지 않다. 중요한 건 당신의 생각과 뜻, 그리고 그것을 어떻게, 그리고 왜 전달할 것인가이다.
컴퓨터는 계산기다.
무엇을, 왜 계산을 시키려고 하는가? 컴퓨터가 계산을 한 그 결과를 무엇에 사용하려 하는가? 여러분의 생각을 컴퓨터의 언어인 숫자로, 결국 0과 1로 치환시킬 수는 있는가? 그렇게 해서 얻게된 또 다른 0과 1로 당신은 연결해서 무엇을 하려 하는가? 컴퓨터는 계산기이기 때문에 계산기가 우리에게 돌려주는 건 그냥 숫자일 뿐이다. 결국, 그 숫자에 의미를 부여하는 것은 우리들의 몫이다.
그냥 막무가내로 나무를 자를 것이 아니라, 숲을 보고 꿈꾸는 아름다운 숲을 위해서, 어떤 나무를 어떻게, 왜, 어느 정도 자르려고 하는지 결정해서 최종적으로 명령을 하고 실행에 옮기도록 해야 한다. 수단은 목적을 위해서 있는 것이다. 목적이 없는 수단은, 혹은 수단만이 목적이 된다면 인공지능이 모든 것을 대체할 수도 있다.
우리들의 아이를 코딩 잘 하는 아이로 키우고 싶은가? 그러면, 책을 읽도록 가르쳐야 한다. 논리적 생각을 키우는 가장 좋은 방법은 독서이다. 오늘날 모든 학문의 토양이라는 거대한 족적을 남긴 고대 그리스의 아리스토텔레스 처럼, 인류 지성의 정점에 도달했다고 평가받는 중세 시대 레오나르도 다빈치 처럼, 애플의 초기 지향점이기도 했었던 영국의 천재 과학자 아이작 뉴턴 처럼, 생각의 한계를 두지 않도록, 상상의 나래를 마음껏 펼칠 수 있도록 가르치고 지켜보아야 한다. 아이들이 살아갈 세상은 우리가 무엇을 상상하든 그 이상 일테니 말이다.