컴퓨터로 철학하기

   
대니얼 림 (지은이), 변정수 (옮긴이)
ǻ
이상북스
   
29000
2025�� 06��



■ 책 소개


디지털 시대의 철학적 사유
컴퓨터과학 개념과 도구를 통해 철학적 질문들을 풀어가다!

이 책은 철학의 오래된 질문들을 현대 기술의 도구로 다시 사유한다. 철학과 컴퓨터과학이라는 이질적 영역을 유기적으로 연결해, 인간의 사유와 기술적 사고를 통합하여 훈련하도록 돕는다. 고대부터 논의되어온 철학적 질문들, 예컨대 “우리는 무엇을 알 수 있는가?” “자유의지는 존재하는가?” “마음은 무엇인가?” 등에 대해 단순히 이론적으로 설명하는 데 그치지 않고, 파이썬이라는 현대 프로그래밍 언어를 활용해 직접 구현하고 실험하도록 이끈다.

이 책은 단순한 융합 교재를 넘어, 철학의 사유력과 컴퓨터과학의 실행력을 통합하여 ‘생각하는 법’과 ‘작동시키는 법’을 함께 훈련하도록 안내한다. 인간의 사고, 언어, 윤리, 존재론 같은 문제를 기술과 연계해 다룰 수 있다는 점에서, 21세기를 살아가는 시민 모두에게 의미 있는 사고의 틀을 제공하는 책이다. 

■ 저자 대니얼 림
저자 대니얼 림은 듀크 쿤산대학교 철학 부교수이자 중국 인민대학교 철학 및 인지과학센터 연구원이다. 마음의 철학, 종교 철학, 실험 철학, 그리고 철학과 컴퓨터과학의 교차점을 연구한다. 저서로는 ‘신과 정신적 인과관계(God and Mental Causation, 2015)’가 있다.

■ 역자 변정수
역자 변정수는 학부에서 수학과 전산학을 전공했고, 정보보안과 암호학으로 프랑스 마르세이유 2대학과 툴롱에듀바 대학에서 석사와 박사 학위를 받았다. 삼성SDS, 경찰청, 김앤장 법률사무소, 개인정보보호위원회 등에서 정보보안, 해킹, 개인정보 유출 등 사이버범죄 수사 및 자문하는 일을 했고, 현재 광운대학교에서 정보보안학, 디지털포렌식, 암호학 등을 강의하고 있다. 또 ‘수유너머 파랑’ 연구원으로 활동하며, 해외에서 주목받고 있는 기술철학 관련 서적을 번역하고 있다. 저서로는 ‘알고리즘으로 철학하기(이상북스, 2025)’가 있다.
  
■ 차례
저자 서문
역자 서문

1장 철학과 컴퓨터과학
2장 파이썬
3장 알고리즘
4장 논리
5장 반복
6장 이미지 조작
7장 회의론
8장 함수
9장 마음
10장 라이프 게임
11장 자유의지
12장 재귀
13장 신
14장 데이터
15장 기계 학습
16장 귀납
17장 AI 윤리
18장 연습문제 해답

부록
참고문헌

 




컴퓨터로 철학하기


철학과 컴퓨터과학

철학적 사고

철학이 보통 사람이라면 굳이 생각하지 않는 질문에 몰두한 것은 사실이지만, 철학이 쓸모없는 기교만을 포함한다고 말할 수는 없다. 이를 이해하기 위해 고전적인 철학적 질문 하나를 생각해보자. ‘우리는 세상에 대해 무언가를 알 수 있는가?’ 이 질문에 많은 사람은 이렇게 즉각적이면서 현실적으로 반응할 것이다. ‘당연히 알 수 있지!’


그렇다면 철학자들은 이런 질문과 답변을 어떻게 다룰까? 이에 대해 도움을 줄 만한 문장이 ‘노턴 철학 입문’에 나온다.


“철학에서는 이런 답변을 멈추고 이를 철저한 성찰과 엄밀한 검토 대상으로 삼는다. 이 과정은 익숙했던 것들을 낯설고도 난해하게 만들며, 확신에 찼던 이해를 혼란으로 바꾼다. 이 혼란이 초래하는 질문들을 외면하고 싶은 유혹은 강렬하지만, 철학은 바로 이 혼란에 정면으로 맞서 본질을 탐구한다. 우리가 지식, 존재, 도덕에 대한 근본적 전제를 옹호할 수 있는지, 그리고 방법은 무엇인지를 끊임없이 질문한다.”

- 로젠, 번, 코언, 하먼, 시프린(2018)


이 문장에서 다루는 몇 가지 사항에 대해 조금 더 언급해보자. 여기에서 말하는 ‘엄밀한 검토’란 무엇을 의미할까? 저자들은 이 문구에 많은 것을 담았다. 철학자들이 말을 매우 신중하게 한다는 것을 뜻하기도 하고, 또 단어의 의미를 가장 명확하게 파악하여 다양한 주장을 정확하게 평가하고 싶어 한다는 것을 의미하기도 한다. 사례를 들면 철학자들이 우리가 세상에 대해 알 수 있는지를 묻는다면, 이 질문의 많은 부분은 ‘앎/지식’이라는 단어의 의미에 달려 있다. 우리는 답이 분명하다고 생각할 수 있지만, 자세히 보면 그렇지 않음을 알 수 있다. ‘앎’의 정확한 정의는 무엇인가? 철학자들은 이 단어를 조심스럽게 다루어 왔다. 실제로 인식론으로 알려진 철학의 한 분야는 ‘앎’이라는 단어와 그 유사 어족을 이해하는 데 집중한다. 이러한 단어에 대한 관심을 개념 분석이라 한다.


앞의 인용문은 ‘기본 가정’에 대한 질문도 언급하는데, 이는 철학자로서 개발해야 할 중요한 역량이다. 앞서 인용한 인문학의 가치에 대한 BBC 기사는 공감을 중요한 직무 능력으로 크게 강조한 바 있다. 사람을 공감하게 만드는 요소 중 하나는 자신의 가정에 대한 믿음을 버릴 수 있는 능력이다. 의견 불일치와 분열은 종종 다른 사람의 관점에서 사물을 보지 못하기 때문에 발생한다. 많은 사람이 민감한 주제를 놓고 격렬하게 논쟁할 때 다른 사람들이 어째서 사물을 ‘올바르게’ 보지 못하는지를 이해하지 못한다. 즉 사람들이 왜 나와 같은 방식으로 사물을 보지 않는지 이해하지 못하는 것이다. 기본 전제를 의문시하는 과정을 하나의 숙련된 기술로 연마한다면, 철학적 사고는 공감을 형성하는 데 필수적인 요소가 된다.


마지막으로, 이 인용구는 가정이 어떻게 ‘옹호’될 수 있는지에 대한 언급으로 마무리된다. 여기에는 다양한 주장을 지지하거나 반대하는 증거를 수집하는 것을 포함한다. 주장에 대한 증거를 제시하려는 시도에 대한 비판적 평가는 논리라는 철학 영역에 속한다. 많은 사람이 이를 보통 ‘비판적 사고’라고 부르지만 철학자는 이를 논리 분석이라고 말한다. 다시 말해 철학을 잘 배우면 비판적이면서 공감 능력이 풍부한 사람이 되는 데 도움이 된다. 본서는 철학의 고전적인 문제들을 살펴봄으로써 이러한 기술을 개발하고자 한다.


컴퓨팅 사고력

컴퓨팅 사고는 분해, 패턴 인식, 데이터 표현, 알고리즘 정형화라는 네 가지 범주로 나뉜다.


분해는 복잡한 문제를 더 단순하고 관리하기 쉬운 하위 문제로 나누는 것이다. 이 과정에서 하위 문제들을 해결하면 그 해결책들을 모아 원래의 복잡한 문제를 해결할 수 있게 된다. 예컨대 에세이 작성은 분해가 유용한 작업 중 하나이다. 에세이를 쓸 때는 개요를 먼저 작성하는 것이 가장 효율적이다. 이러면 에세이를 한 번에 쓰는 대신 서론, 본론, 결론 등 각 부분에 집중할 수 있어 더 쉽게 관리할 수 있다. 각 부분이 완성되면 그것들을 모아 한 편의 에세이로 완성하면 되는 것이다.


패턴 인식은 다양한 문제 사이에서 공통된 유사성을 찾는 것이다. 유사성이 발견되면 약간의 변형만으로 모든 문제를 해결할 수 있는 하나의 방법을 사용할 수 있다. 가령 자동차를 제조하는 작업을 생각해보자. 우리는 모든 자동차에는 엔진, 차체, 바퀴 같은 공통요소가 있음을 알고 있으므로 각 부품만 제조하면 된다. 즉 자동차를 제조하는 데는 하나의 일반적인 방법이 존재한다. 각 자동차가 엔진 종류나 차체 디자인, 바퀴 크기 등에서 차이가 있더라도 전체 제조 과정은 일정하게 유지된다.


데이터 표현은 일종의 추상화로 중요한 정보에만 집중하고 불필요한 정보는 걸러내는 것이다. 지도는 이러한 추상화의 좋은 예이다. 모든 지도는 어떤 정보를 포함하고 어떤 정보를 제외할지 선택해야 한다. 이를테면 태양계 지도에는 태양과 행성들 사이의 실제 거리가 거의 표시되지 않다. 실제 거리를 표시하려면 너무 많은 공간이 있어야 하기 때문이다. 즉 지구의 반경이 1인치이면, 태양과의 거리는 약 2,000피트가 되어야 한다. 따라서 이 정보는 종종 제외된다. 많은 경우 중요한 것은 태양으로부터 상대적인 거리 순서대로의 나열이다. 지도는 단지 수성은 지구보다 태양에 더 가깝다는 사실만 나타내면 된다. 수성과 태양 사이의 실제 거리는 중요하지 않기 때문이다.


알고리즘 정형화는 문제를 해결하기 위한 단계별 절차를 만드는 것이다. 사실 우리는 알고리즘을 인식하지 못할 수도 있다. 하지만 운전 중 차선을 변경할 때 우리는 암묵적으로 알고리즘을 따른다. 먼저 진입하려는 차선이 비어 있는지 확인하고 신호를 켜서 다른 운전자들에게 의도를 알린다. 그런 다음 거울과 사각지대를 확인한 후 안전하면 부드럽게 차선으로 진입한다. 차선 변경을 완료하면 신호를 끄고 주행을 계속한다. 이렇게 명확한 단계를 설정하면 작업을 수행하는 데 도움이 될 뿐 아니라, 다른 사람에게 그 과정을 가르치기도 쉽다.



알고리즘

위조 동전 문제

동전 3개가 있다. 3개 중 하나가 위조일 가능성이 있다. 진짜 동전은 무게가 동일하지만 위조 동전은 진짜 동전보다 약간 무겁거나 가볍다. 이 미세한 차이는 인간의 감각으로는 감지할 수 없다. 이를 알아내는 유일한 방법은 고감도의 균형 저울을 사용하는 것이다. 균형 저울은 받침점을 기준으로 동일한 거리에 매달린 2개의 접시로 구성되며 물체의 절대 무게 대신에 비교하는 물체의 상대적 무게 정보만 제공한다.


3개의 동전을 coin1, coin2, coin3이라고 하자. 저울을 사용해 위조 동전을 알아내는 방법으로 어떤 것을 생각할 수 있을까? 물론 그 방법은 둘 중 어떤 동전이 위조이고, 위조 동전이 진짜보다 무거운지 가벼운지도 확인할 수 있어야 한다.


앞에서 소개한 컴퓨팅 사고 기법 중에서 어떤 것을 적용할 수 있을까? 가장 먼저 떠오르는 기법은 분해일 것이다. 이 문제를 어떻게 더 작고 다루기 쉬운 하위 문제로 나눌 수 있을까?


우리는 저울을 사용할 때 세 가지 가능한 결과를 먼저 생각할 수 있다. (1) 양쪽 물체의 무게가 정확히 같거나 (2) 오른쪽 물체가 왼쪽보다 무겁거나 (3) 왼쪽 물체가 오른쪽보다 무거운 경우다. 이를 바탕으로 먼저 coin1과 coin2를 비교할 수 있다. 어떤 동전을 선택해도 상관없다. 문제를 한 번에 모두 해결하려 하기보다는 세 가지 가능한 결과 중 하나에 집중하는 것이 좋다. 각각의 결과를 처리하면 전체 문제도 해결될 것이다.


아래의 해결책으로 넘어가기 전에 각각의 결과가 무엇을 의미하는지 먼저 생각해보자. 3개의 동전 중 2개를 저울에 올렸을 때, 두 동전의 무게가 같다면 이는 무엇을 뜻할까? 반대로 두 동전의 무게가 다르다면 그것은 무엇을 의미할까?


coin1과 coin2의 무게가 같다면 둘은 모두 진짜 동전이란 뜻이다. 따라서 coin3이 위조 동전일 가능성이 크다. 이를 확인하려면 coin1이나 coin2 중 하나를 coin3과 비교하면 된다. 두 동전 모두 진짜이므로 어느 쪽이든 상관없다. 여기서도 세 가지 결과가 나올 수 있다. 무게가 같다면 위조 동전이 아닌 것이다. 하지만 저울이 불균형하다면 coin3이 위조 동전임을 알 수 있고, 저울이 어느 쪽으로 기우느냐에 따라 coin3이 더 무거운지 더 가벼운지도 알 수 있다. 저울이 coin1이나 coin2 쪽으로 기울면 coin3이 더 가벼운 것이고, coin3 쪽으로 기울면 coin3이 더 무거운 것이다.


coin1이 coin2보다 무겁다면 둘 중 하나가 위조 동전이라는 뜻이다. 따라서 coin3은 진짜 동전임을 알 수 있다. 이때 coin1이나 coin2 중 하나를 coin3과 비교할 수 있다. coin1을 coin3과 비교했을 때 저울이 균형을 이루면 coin2가 위조 동전이며 더 가볍다는 것을 알 수 있다. 반대로 coin1을 coin3과 비교했을 때 저울이 균형을 이루지 않으면, 저울은 반드시 coin1 쪽으로 기울게 된다. 이 경우 저울이 coin3 쪽으로 기울 수 없다는 점을 생각하면, coin1이 위조 동전이며 더 무겁다는 것을 알 수 있다.


coin1이 coin2보다 가볍다면 둘 중 하나가 위조 동전이고, coin3은 진짜 동전임을 알 수 있다. coin1이나 coin2를 coin3과 비교할 수도 있다. coin1을 coin3과 비교했을 때 저울이 균형을 이루면, coin2가 위조 동전이며 더 무겁다는 것을 알 수 있다. 반대로 저울이 균형을 이루지 않으면 반드시 coin3 쪽으로 기울게 되는데 이는 coin1이 위조 동전이며 더 가볍다는 뜻이다.


방금 설명한 것은 알고리즘, 즉 명확하게 정의된 문제를 해결하는 단계별 절차이다. 모두 이 단계를 쉽게 따라 할 수 있다. 문제를 이해하지 못했더라도 그냥 ‘지시대로’만 하면 된다. 앞에서 보았듯이 coin1과 coin2를 저울에 올리고 그 결과에 따라 행동하면 된다. 지시를 그대로 따르면 결국 올바른 해결책에 도달하게 된다.


조건문

조건문은 특정 조건에 따라 어떤 명령문을 실행할지 제어할 수 있게 해준다. 기본 구조는 if 뒤에 표현식이 들어간다.


if 뒤에 첫 번째 빈칸에는 조건, 즉 bool 객체나 bool 객체로 평가되는 표현식이 들어간다. 이 조건이 True로 평가되면 if 절에 있는 코드 블록이 실행된다. ‘코드 블록’은 최소 한 줄 이상의 코드로 여러 개의 명령문을 포함할 수도 있다. 조건이 False로 평가되면 해당 코드 블록은 건너뛰고 파이썬은 if 문 이후의 코드를 계속 실행하게 된다.


코드 블록이 들여쓰기 되어 있다는 점을 주목해야 한다. 파이썬이 if 절 안에 포함되는 코드와 그렇지 않은 코드를 구분한다는 것을 말해주기에 매우 중요하다. 조건문의 첫 줄이 반드시 콜론(:)으로 끝나야 한다는 것도 잊지 말자.


이것이 어떻게 작동하는지 알아보기 위해 예를 살펴보자.


if x 10:

print(‘small’)


조건은 x 10이라는 부울 표현식이다. x 10이 True로 평가 되면 print(‘small’)이 실행된다. 반대로 x 10이 False이면 print(‘small’)은 건너뛰게 된다. 즉 x가 10보다 작으면 ‘small’이라는 문자열이 화면에 표시되고, 10보다 크면 print(‘small’)이 실행되지 않아 아무 일도 일어나지 않는다.


if 절 안에는 여러 줄의 코드 블록을 넣을 수 있기 때문에 포함할 수 있는 명령문 수에는 제한이 없다. 위 예시에서는 if 절에 print(‘small’) 이라는 한 줄만 들어가 있을 수도 있지만 여러 개의 명령문을 추가할 수도 있다. 아래 코드를 참고해보자.


if x 10:

print(‘small’)

print(x)

print(x == 10)


조건이 True이면 3개의 print 문이 모두 실행된다. 하지만 조건이 False이면 아무것도 출력되지 않고, if 절에 있는 코드 블록은 건너뛰게 된다. 이제 들여쓰기가 얼마나 중요한지 알기 위해 다음 코드를 살펴보자. 같은 명령문으로 구성되어 있지만, 작동은 완전히 달라진다.


if x 10:

print(‘small’)

print(x)

print(x == 10)


두 번째와 세 번째 print 문은 if 조건과 상관없이 항상 실행된다. 첫 번째 print 문만 if 절에 포함되기 때문에 x가 10보다 작은지 여부에 따라 실행될지 결정된다.



논리

진리와 타당성

앞 장에서 위조 동전 문제를 해결하는 알고리즘을 개발한 후 이를 조건문을 사용해 파이썬으로 구현했다. 이러한 개념은 철학의 기초 영역인 논리와 자연스럽게 연결된다. 논리의 범위에 무엇을 포함해야 하는지에 대한 의견은 다양하지만, 이 책에서는 논리를 논증 분석과 평가로 제한할 것이다. 이번 장에서는 논리 분석을 통해 철학적 사고 능력을 발전시키는 데 집중할 것이다.


‘논증’은 논리에서의 기술적인 정의로 서로 다른 의견이나 관점을 두고 벌어지는 격렬한 논쟁과는 다르다. 논증은 전제라 불리는 일련의 진술이 결론이라 불리는 또 다른 진술의 진실성을 입증하기 위해 증거나 이유를 제공하는 구조를 말한다. 명제는 참이거나 거짓인 진술을 뜻한다. 모든 진술이 명제는 아니므로 논증에는 명제만 사용해야 한다. 가령 필자가 우리 아이들에게 자주 하는 “잠자러 가”라는 진술은 명제가 아니다. 이 진술을 참이나 거짓으로 말하는 것은 자연스럽지 않다.


다음 논증을 생각해보자.


논증 A1

1. 오바마가 미국인이라면 오바마는 인간이다.

2. 오바마는 미국인이다.

3. 그러므로 오바마는 인간이다.


전제는 1번과 2번 진술이고, 결론은 3번 진술이다. 이 논증의 각 진술은 참이거나 거짓일 수 있다는 점에 주목하자. 이 경우 두 전제는 모두 참이며 결론도 참이다. 이것은 훌륭한 논증이다. 전제가 참일 뿐 아니라 전제가 결론의 진실을 보장하기 때문이다. 따라서 전제가 참이라면 결론도 반드시 참이 된다.


이 논증을 이전 장에서 다뤘던 if 조건문과 연결해보자. 먼저 “오바마는 미국인이다”와 “오바마는 인간이다”라는 진술을 각각 obama_american과 obama_human이라는 변수로 표현할 수 있다.


obama_human에는 None을 할당할 수 있다.


이는 “오바마는 인간이다”라는 진술이 참인지 여부가 확정되지 않았음을 뜻한다. 이 진술은 결론이므로 논증이 우리를 설득하려는 부분이다. 2번 전제는 다음과 같이 코드로 표현할 수 있다.


obama_american = True


이는 “오바마는 미국인이다”라는 진술이 참이라는 것을 나타낸다. 이제 전제1을 코드로 다음과 같이 표현할 수 있다.


if obama_american = True:

obama_human = True


이는 “오바마는 미국인이다”라는 명제가 참이라면 “오바마는 인간이다”라는 명제도 반드시 참이어야 한다고 주장하는 것과 같다. 여기서 if 조건문에 사용된 동등 연산자(==)와 if 조건문 내부에서 사용된 할당 연산자(=)의 차이를 주의 깊게 살펴보자. 이 부분이 헷갈리면 3장의 조건문 설명을 다시 참고하라. 이 논증을 종합하면 전체를 다음과 같이 파이썬 코드로 표현할 수 있다.


obama_human = None

obama_american = True

if obama_american = True:

obama_human = True


따라서 논증 A1은 if 조건문과 몇 가지 할당문으로 자연스럽게 표현할 수 있다. 이는 한 진술에서 다른 진술로 논리적으로 전개되는 방식으로 볼 수 있다. 또 논증을 특정 결론에 도달하기 위한 알고리즘으로 생각할 수도 있다. 앞으로 진행하면서 논증을 코드로 바꿀 수 있는 가능성을 염두에 두고 기회가 될 때 직접 변환해보길 바란다.



* * *


본 정보는 도서의 일부 내용으로만 구성되어 있으며, 보다 많은 정보와 지식은 반드시 책을 참조하셔야 합니다.