Today I Learned/개념 정리

직관과 논리

Malachai Lee 2022. 7. 1. 16:37

고등동물인 인간은 논리적으로 매우 복잡한 상황에서도 직관적으로 행동할 수 있다. 이는 매우 빠르고 비교적 정확한 소통을 도출함으로써 인간의 가장 큰 무기가 되었다. 이 작용 얼마나 강력한지, 의식적으로 집중하여 정확한 논리 구조를 간파하려면 많은 시간과 에너지가 든다.

하지만 로우-레벨 논리들로 구성된 프로그래밍에서는 이러한 직관들이 방해될 때가 있다. 간단한 문제를 풀어보자.

 

 

카드 문제

사실: 모든 카드의 한쪽에는 알파벳, 다른 쪽에는 숫자가 적혀있다.

주장: 만약 카드의 한 쪽이 D이면, 다른 한 쪽은 3이다.

여기서, 주장이 사실인지 확인하기 위해 아래 카드 중 반드시 뒤집어 보아야 하는 카드는 몇개이고, 어느것인가?

 

 

 

매우 간단해 보이는 문제지만, 많은 사람들이 이 문제를 틀린다고 한다.

 

 

 

정답은 D와 7 카드이다.

 

F카드 뒷면에 3이 적혀있다고 해도 주장에 어긋나지 않으며, 3 뒤에 D가 아닌 다른 알파벳이 있다 하더라도 주장에 어긋나지 않는다.

7카드 뒤에 D가 있다고 하면, 주장은 거짓이 된다.

 

 

이번엔 다른 문제를 보도록 하자.

 

맥주집 문제

규칙: 20세 이하인 사람은 맥주를 마실 수 없다.

문제: 아래 4명 중 표시되지 않은 나이 혹은 마시고 있는 것을 확인해야 할 사람은 몇 명이고 누구인가?

 

 

이 문제는 쉽게 정답을 맞출 수 있을것이다.

 

 

 

정답은 17세와 맥주이다.

 

31세는 맥주와 콜라 무엇이든 마셔도 되며, 콜라를 마시는 사람은 나이가 어떻게 되든 상관이 없다.

 

첫번째 문제를 풀었더라도, 두번째 문제에 비해 상대적으로 많은 생각이 필요했다는것은 부정할 수 없을것이다.

사실 위의 두 문제는 구성하는 논리와 제시된 보기의 배치, 갯수가 동일하다. 이를 통해 우리가 푼 두번째 문제는 절대로 논리를 통해 풀지 않았음을 알 수 있다. 직관을 통해 빠르게 해결할 수 있는 문제들은 익숙한 논리적 경험에서 만들어진다는 것이다.

 

직관은 문제를 해결하는 데에 매우 빠르고 효율적으로 대처할 수 있는 강한 수단임은 틀림 없지만, 언제나 정확하지는 않다는 단점을 가지고 있으며, 착각을 일으키기도 한다. 그 문제가 우리에게 익숙치 않다면 더더욱 그럴것이다.

 

우리가 사용하는 언어의 모호함 또한 존재한다.

 

“TOEFL 500점 이상 혹은 TOEIC 700점 이상인 사람만이 회사에 지원할 수 있습니다“

“복권에 당첨되면 아반테 혹은 2000만원을 드립니다”

 

위의 두 문장의 “혹은”이라는 단어는 다른 의미로 사용되며, 우리는 이 모호함을 경험을 통해 매우 당연하게 받아들일 수 있다. 하지만 왜, 어떻게 다른 의미로 사용되는가? 라며 작용 원리에 대한 질문을 던진다면 결론을 내기 위해 아주 멀리 돌아가야할 것이다.

 

이렇듯, 일상 생활에서 우리는 그닥 많은 논리의 짜임으로 움직이지는 않는다는 것을 알 수 있다. 이러한 구조를 Soft Logic이라고 하며, 의미를 파악하는 데에 매우 빠르고 민첩하게 행할 수 있다.

프로그래밍 언어들은 더욱 단순하고 미세한 논리의 조합으로 이루어져 있으며, 직관과는 거리가 멀다. 이를 Hard Logic이라고 한다. 매우 정확하지만, 직관으로 파악하기엔 빠르지 않다.

 

코드와 친해야 하는 프로그래머라면, 직관과 논리를 적절하게 구분하여 선택적으로 사용해야 한다. 익숙하지 않은것에 대해 최대한 논리적으로 접근하고 단어 하나하나를 미세하게 쪼개는 연습을 하는것이 코드와 친근해지는 좋은 방법이 될 수도 있겠다.

'Today I Learned > 개념 정리' 카테고리의 다른 글

프로세스 동기화  (1) 2022.09.29
DNS  (1) 2022.09.15
IP, Packet, Port  (0) 2022.06.28
DB Normalization  (0) 2022.06.14
SQL, NoSQL  (0) 2022.06.10