
나는 비트겐슈타인을 매우 좋아한다. 《논리철학 논고》와 《철학적 탐구》를 통해, 내가 사고하는 것들이 어느 정도 정리가 되기 때문이다.
프로그래밍을 배우면서 철학가를 떠올릴 줄은 몰랐다. 하지만 최근 Java를 공부하면서 비트겐슈타인의 언어철학이 자연스럽게 생각났다.
나는 처음에 JavaScript(JS)를 배우고, 이후 Java를 공부하기 시작했다. JS를 배울 때는 모든 개념이 새로운 것이었기에, 그냥 하나하나 받아들이는 과정이었다. 하지만 Java를 공부하면서 JS의 개념을 계속 떠올리게 되었고, 그와 비교하며 배우는 방식으로 자연스럽게 전환되었다. 새로운 개념을 접할 때마다 JS 속에서 확장하거나 축소하면서 이해하는 느낌이 들었다.
특히, 변수, 사칙연산, 연산자 우선순위 같은 단순한 개념에서는 이러한 느낌이 크지 않았다. 하지만 배열과 그 메서드들을 배우면서는 JS와 Java의 차이를 비교하며 배울 수밖에 없었다. 같은 개념이라도 두 언어에서 표현 방식이 다르거나, 사용 방식이 달라지는 순간마다, 나는 자연스럽게 JS의 문법을 참고하며 Java의 개념을 정리하고 있었다.
이런 경험이 비트겐슈타인의 철학과 닮아 있다고 느꼈다.
비트겐슈타인은 초기 철학에서 언어가 세계를 반영하는 논리적 체계라고 보았지만, 후기에 와서는 언어의 의미는 사용되는 맥락에 따라 결정된다고 주장했다. 즉, 우리는 하나의 "언어 게임(language game)" 속에서 의미를 배우며, 새로운 언어를 익힐 때 기존 언어를 기반으로 해석하고 확장하게 된다.
더 풀어서 설명하면, 언어는 단순히 사물을 묘사하는 것이 아니라, 다양한 '언어 게임' 속에서 사용되는 것이라고 주장한다. 예를 들어, 법정에서의 언어, 과학자의 언어, 일상 대화의 언어는 각각 다른 규칙을 따르게 되는 것이다. 이 부분이 프로그래밍 언어에도 똑같이 적용되는 점이 너무나 재미있다.
나는 JavaScript라는 첫 번째 "언어 게임"을 배웠다. 그때는 이 언어가 내가 이해할 수 있는 유일한 프로그래밍 체계였다. 하지만 Java를 배우면서, 나는 JS 속에서 Java의 개념을 해석하고 조정하며 배우고 있었다. 이 과정에서 자연스럽게 비교, 변형, 확장이 이루어졌다.
이것이 바로 비트겐슈타인의 후기 철학에서 말하는 언어의 의미는 사용 속에서 형성된다는 개념과 맞닿아 있다. 처음 JS를 배울 때는 개념을 하나씩 흡수하는 과정이었지만, Java를 배우면서는 이미 익숙한 개념을 기반으로 새로운 개념을 이해하는 방식으로 사고가 변화했다.
프로그래밍을 배우면서 철학적인 깨달음을 얻을 줄은 몰랐다. 하지만 이번 경험을 통해 언어(프로그래밍 언어든, 자연어든)는 절대적인 것이 아니라 우리가 익숙한 문맥 속에서 의미를 형성한다는 점을 깊이 체감했다.
이제 나는 새로운 언어를 배울 때, 단순히 "기존 언어와 다르다"고 느끼는 것이 아니라, 내가 알고 있는 언어의 틀 속에서 확장할 것인지, 혹은 재구성할 것인지 고민하며 배워야 한다는 점을 배웠다. 프로그래밍 언어뿐만 아니라, 우리가 새로운 지식을 배울 때도 마찬가지 아닐까?
비트겐슈타인의 언어철학이 내 개발 공부에 도움을 줄 줄은 몰랐지만, 생각해보면 학습이라는 것은 결국 언어 속에서 이루어진다. 그러니 프로그래밍도 하나의 "언어 게임"이며, 그 속에서 우리는 끊임없이 의미를 조정하고 확장하며 배워나가는 것이다.