수란 무엇인가? – IT수학기초 1

IT수학

IT수학은 Information Technology Mathmatics 우리말로 정보 기술 수학 입니다. 정보기술하면 컴퓨터 산업이고 컴퓨터의 어원인 compute(계산하다)는 컴퓨터 자체가 수학임을 암시하고 있습니다.

컴퓨터의 중앙처리장치인 CPU는 간단하게 설명하면 계산기입니다. 계산을 위해 존재하는 장치이지요.

사람도 계산을 잘 할 수 있습니다. 2 더하기 3 이라던가 10 곱하기 9 정도의 계산을 1초안에 계산하는 것이 어렵지않죠? 유치하게 느낄지는 모르겠습니다만 지구상에 있는 모든 생명체 중에서 이런 계산을 하여 답을 표현할 수 있는 존재는 인간이 유일합니다. 우리가 사랑하는 강아지와 고양이에게 덧셈을 가르칠 수 있을까요? 3살 어린이에게도 가르칠 수 있는 산수를 동물들에게는 가르칠 수 없습니다. 설령 가르칠 수 있다고 하더라도 의미는 없겠죠. 동물은 인간처럼 수학적 지식을 건축이나 컴퓨터 공학 등에 적용할 수 없을 것이기 때문입니다.

따라서 계산을 할 수 있다는 것은 인간만 가진 특수한 능력이고 이는 수학적 지식을 공학에 응용하여 문명을 발달시키는 핵심요소 중에 하나입니다.

인간은 컴퓨터가 없던 시대에도 수학을 응용하여 위대한 업적을 이룩했습니다. 멀리는 피라미드에 피타고라스의 정리가 들어있다고 하며, 한국의 유적지 불국사의 건축물 중에도 피타고라스의 비율과 일치하는 것이 있다고 하니 동서양을 막론하고 인간은 본능적으로 수학적 영감을 가진 존재라는 것을 알 수 있습니다.

우리가 학창시절 때 수학을 잘 못배우는데 그것은 좀 과도한 입시경쟁 때문입니다. 고교 수학의 후반부는 미적분에 절정을 이루는데 그것은 인류가 수천년에 걸쳐서 도달한 지식입니다. 긴 인생에 있어서 보면 나이가 어린 중학생이나 고등학생이 쉽게 이해할 정도의 레벨이 아닙니다. 때문에 일부 수학적 재능이 특출난 아이들이 우수한 성적을 받고 좋은 학교에 진학하게 되어 있습니다만, 그것은 그 이상의 의미는 없습니다.

인간은 수학적 존재라는 것을 깨닫는 순간부터 과학과 공학에 대한 진정한 영감이 오는 것 입니다.

그래서 수학의 영감은 컴퓨터 프로그래밍 기술을 심화시키기 위해서는 반드시 필요한 것이지요.

이번 포스팅 시리즈에서는 IT수학에 대해서 다루어 보려고 합니다. 한국의 국민들은 대부분 중학교와 고등학교 수학과정을 거치면서 수학에 대한 일종의 편견이 생겼을 가능성이 높습니다. 안타깝게도 많은 경우 수학에 대한 혐오감, 수포자의 좌절감 뭐 그런 것들이 있을 수 있습니다. 그것은 잘못 가르쳤기 때문이죠. 가르친 사람의 잘못이라기 보다는 잘못된 교육 과정의 문제라고 보는게 더 적당합니다.

수학과 수학적사고, 공학에의 응용, 그리고 그것이 우리가 사는 세계에 미치는 영향과 문명의 발전 같은 것들과는 전혀 무관하게 주입식 교육을 하기 때문입니다. 그것은 일부 재능이 있는 사람들을 필터링하고 발탁하기 위한 20세기 식 교육일 뿐 입니다.

위에서 이야기한 것 처럼 인간은 동물과 달리 수학적 영감을 가진 존재입니다. 지금의 교육과정은 그렇게 태어난 인간을 활용하는 측면보다는 국가나 권력기관이 활용하고 싶은 인간을 뽑는 것을 더 강조했기 때문에 많은 사람들의 흥미에서 멀어진 것 입니다.

다시 강조하지만 인간은 수학적 영감을 가진 존재입니다. 개와 고양이 등 반려동물은 그렇지 않습니다. 물론 이 세상의 모든 생명체와 무생물에게도 수학적인 설계도가 존재합니다. 나무가 가지를 뻗쳐 나가는 모양이나 꽃잎이 피는 패턴은 피보나치 수열에 따릅니다. 자연의 원리는 수학적이고 오직 인간만이 그것을 이해하고 사용할 수 있습니다.

이해하는 학문을 순수 수학이라고 한다면 사용하는 학문은 공학이라고 할 수 있습니다.

IT수학은 컴퓨터를 사용하는 컴퓨터 프로그래밍, 소프트웨어 공학을 위한 밑바침입니다. IT수학을 딱히 몰라도 프로그래밍을 할 수 있지만 더 잘하기 위해서는 당연히 수학적 사고를 학습할 필요가 있습니다.

수란 무엇인가?

먼저 공통적인 질문에서 시작해보겠습니다.

수란 무엇인가?

중학교 교과서 방식으로 답을 낸다면 자연수, 정수, 실수 같은 수의 체계라고 이야기할 수도 있는데요. 그런 것은 보통의 사람들에게 와닿지는 않습니다. 수험생도 그게 뭔지 모르는데 일반의 사람들은 이해하기 힘듭니다.

본질적으로 수라는 것은 자연의 법칙을 표현하기 위한 도구입니다. 인간에겐 언어가 있습니다. 동물은 울음소리를 냅니다. 거기에는 어떤 의미가 있습니다. 예를 들어 우리가 목이 마를 때 물을 찾습니다. 물을 달라고 하면 ‘물’ 이란 것은 듣는 사람과 말하는 사람 둘이 똑같은 대상으로 이해할 수 있습니다. 물은 물이다. 물은 목이 마를때 마신다. 물을 마시지 않으면 살 수 없다. 이 정도는 알겠죠.

인간의 언어는 인간만이 알아듣습니다. 나무같은 식물이나 강아지같은 동물은 인간의 언어를 알 수 없습니다(댕댕이는 뭔가 반응은 합니다만;;;)

자연에도 어떤 의사 소통 체계가 있는데 그것이 수학입니다. 수학은 인간의 언어와도 비슷하지만 그보다 훨씬 근본적인 원리에 가깝습니다.

수는 수학에서 사용하는 추상적 개념이자 도구입니다. 수학을 공부하기 이전에 수를 이해하는 것은 쉽지 않은데 우리가 아는 수는 1, 2, 3, 4 … 뭐 이런 자연수나 1.55 같은 실수 등이 있습니다. 그런데 이런 질문을 해본다고 칩니다. 1은 세상에 존재하는 것인가?

1이 있나요? 손가락 하나, 발가락 하나가 1인가요?

그렇지 않습니다. 1은 추상적 개념일 뿐입니다. 정상적으로 태어난 사람은 손가락이 열개 있는데 이 열개의 손가락을 자세히 보면 다 다릅니다. 1이란 개념은 수학에서 보듯이 완전히 같아야 합니다. 그러나 오른쪽 엄지 손가락, 왼쪽 엄지 손가락… 다르게 생겼습니다. 서로 같지 않습니다.

또 다른 예로는 잠자기 전에 양을 세는 아이가 있습니다. 양 하나 양 둘 양 셋… 양 백… 잠이 듭니다… 백마리의 양은 완전히 똑같은 존재일까요? 그렇지 않습니다. 암컷도 있고 수컷도 있고 덩치가 큰 양도 있고 작은 양도 있습니다. 우리의 머리속에서 각각의 양에 대한 개성은 제외하고 100마리의 양을 개념적으로 떠올린 것 입니다.

좀 인생을 복잡하게 사는 것 같이 보일 지는 모르지만 이런 식으로 순수한 수학에 접근하다 보면 수란 무엇인가? 에 대한 답이 좀 더 명확해 집니다.

수는 실제 자연 혹은 관념계에서의 존재를 표현하기 위해 추상적으로 설정하는 단위입니다. 그게 1이건 x 건 혹은 확률을 말하는 가능성이건 모두 가능합니다. 실제 있는 것이건 존재하지 않는 것이건 인간의 머리로 포착할 수 있는 것이면 전부 수가 될 수 있습니다. 최근의 학문은 양자역학에서 처럼 확률을 많이 사용하고 있습니다. 고대인들은 피타고라스 처럼 영원히 불변하는 수의 가치에 무게를 두었다면 현대의 과학에서는 불확정성의 정리 처럼 알 수 없는 대상을 표현하는 확률을 많이 사용하고 있습니다.

전통적인 수학은 불변의 진리를 추구하지만 확률은 미래의 불확실성을 알고 싶어 합니다.

수란 무엇인가? 간단한 질문인 줄 알았는데 막상 파고 들어가면 답이 없는 것 같습니다. 거기서 부터 시작하는 것도 나쁘지 않습니다.

수학을 이해하고 익숙해지기 위해서는 이 세상의 모든 고정관념에서 부터 뇌를 개방시켜야 합니다.

다시 수란 무엇인가? 이 질문을 한개의 인터넷 웹사이트의 포스팅으로 답을 낼 수는 없습니다.

수에 대한 정의는 이 우주처럼 크고 깊은 것 입니다. 우리가 사는 지구라는 환경은 우주에 비하면 심각하게 작고 또 지구에 비해서도 사람 한사람이 평생동안 살아가는 공간은 아주 작을 뿐이라서 이런 것을 이해하기 위해 수가 필요합니다.

이 정도면 수에 대해서 충분히 이야기 한 것 같은데 좋습니다. 이제 방대한 수의 세계에 대해서 하나씩 알아보겠습니다.

자연수

중학교 교과서에 나온 수체계를 이해하기 위해서 집합의 개념을 사용합니다. 이러한 교육 방식은 일부 수학 교사와 강사들이 반대한다고도 합니다.

수학은 닭이 먼저냐 달걀이 먼저냐 같은 문제들이 꼬여 있어서 이런 순서들도 유심히 봐야 합니다.

자연수는 양수이죠. 양수는 정수에 속하고 정수에는 양수, 0, 음수가 있습니다. 뭐 이런 내용이 있는데 문제는 자연수를 잘 알고 있는가 입니다.

보통 입시를 위한 수학 강의에서 정수를 설명할 때에 너무 개념적으로만 설명해서 이해가 안되는 경우가 많은데 이는 자연스러운 현상입니다. 모두가 개념을 좋아하지는 않으니까요.

자연수(Natural Number)는 물건을 세는 수 입니다. 실제 존재하는 것 눈에 보이는 것 이게 자연수입니다. 옛날부터 자연스럽게 생겨난 것도 이해가 되죠? 여기 사과가 5개 있습니다. 이것을 세면 하나, 둘, 셋, 넷, 다섯 5 입니다. 이게 자연수입니다.

눈에 보이는 모든 것을 셀 수 있다는 것은 엄청난 지성의 발전입니다. 사과를 세는 사람은 오이도 세고 배도 셉니다. 움직이는 동물도 셀 수 있고 사람의 인구수, 꽃잎의 갯수도 셀 수 있습니다. 거기서 약간 진보하면 시간 개념을 넣어서 날짜를 셀수도 있죠. 날짜를 세면 시간안에 일어나는 일도 셀 수 있는데 이 중에 가장 유명한것? 속도입니다. 시간당 이동한 거리를 속도라고 합니다. 자연수가 이 모든 것을 처리할 수 있습니다.

자연수는 1, 2, 3, 4, 5 … 이렇게 이어나갈 수 있습니다. 자연수의 중요한 특징 중에 하나는 자연수의 시작은 1이고 끝은 없다는 것 입니다. 즉 자연수는 무한입니다. 무한이란 인간이 셀수가 없는 수이고 결코 도달할 수 없는 수 입니다. 수라기 보다는 일종의 방향성이라고 봐야죠.

자연수는 시작은 있으나 끝은 없습니다. 이러한 사실이 어떤 사람들에게는 불편할 수도 있습니다. 이는 인간이 유한한 존재이기 때문에 본능적으로 나오는 혐오감일 수 있습니다. 인간은 태어나면 1살이 되고 한평생을 잘 살면 대략 70~90살 사이에 인생을 마감합니다(한국 통계 기준) 자연수로 인간의 나이 1세는 표현이 됩니다. 또 마지막이 될 나이인 8~90세 정도는 표현이 되는데 자연수 이놈은 90은 아주 작은 숫자이고 백, 천, 만… 억, 조, 경 같이 무한을 넘어도 끝나지 않는다는 말입니다. 아 나는 기껏해야 백년도 못사는 존재고 자연수는 영원합니다. 질투가 날 수 밖에 없습니다.

자연수가 무한하다는 것은 감춰진 사실은 아니지만 지금의 수학 교육과정을 보면 이렇게 영원하고 위대한 자연수를 막 대하고 있다는 느낌도 듭니다.

자연수를 수학적으로 정의하는 것은 IT수학에서는 별로 필요하지 않습니다. 물론 수체계에 대해서 상세히 알면 더 좋긴합니다. 컴퓨터에는 데이터 타입(type)이란게 있는데 수학에서 수체계 집합과 유사한 부분이 있습니다. 하지만 그것을 몰라도 어플리케이션을 만드는데는 큰 문제가 없으니까요.

자연수는 눈에 보이는 것이기 때문에 모두가 잘 이해하리라 생각합니다. 자연수는 암산 등 훈련을 통해서 수리능력을 강화시킬 수 있습니다. IT수학에서는 이진법과 16진법을 많이 사용하는데 연산이 어려운 경우 연습을 하면 도움이 될 것 입니다. 덧셈같은 것 부터 연습을 하면 좋습니다. 예를 들어 9 + 1 은 10인데 19 + 11 하면 앞의 20과 9+1 해서 30이다. 이런 암산능력 정도는 필요합니다.

이진법은 0000 0001 + 0000 1110 = 0000 1111 -> 십진법으로 15 = 1 + 2 + 4 + 8 입니다. 컴퓨터의 연산장치인 CPU는 0과1밖에 계산하지 못합니다. 물론 프로그래밍에서 대부분 십진법을 사용하긴 하는데 결국 변환되기 때문에 CPU의 내부처리 과정에 대한 이해를 하고 있어야 합니다.

우리는 아스키 코드를 통해서 컴퓨터에서도 십진법을 사용할 수 있지만 내부적으로는 무조건 이진법으로 저장됩니다. 컴퓨터를 작동시키는 코드도 이진법이지요. 0과1은 약간 십진법의 자연수와 다른데 그래서 C언어 등 자료구조에서 배열의 인덱스가 0으로 시작합니다.

정수

정수는 좀더 진보된 수의 개념입니다. 진보되었다는 것은 아주 먼 옛날 인간 사회에서는 자연수를 간신히 사용할 정도 였습니다. 0도 없고 음수도 없었습니다. 음… 지금 보면 이해할 수 없죠? 0은 왜 없고 음수는 왜 없을까? 지금은 은행계좌에도 빵원이 있고 시험점수도 0점이 있고 마이너스 계좌도 있습니다. 이것은 모두 정수가 현대 사람들에게 주는 혜택입니다.

수의 개념이 처음 시작되던 인류에게는 일단 0이 없습니다. 자연수는 양이나 가축등을 세기 위해서인데 양이 없으면 무슨 소용일까요? 그들에게는 그런 개념이 없었던 겁니다. 지금은 양의 수가 0이지만 미래에는 100마리로 번창시킬거야. 그런 미래와 현재를 비교하는 개념이 없었던 것이죠. 생각해 보면 맞는 말입니다. 양이 한마리도 없는 고대시대의 농부가 그것을 0이라고 기록할 이유가 없습니다. 가축이 없는 농부는 양만 0이 아니라 소, 돼지, 낙타도 0마리였을 겁니다. 그런데 그것을 다 기록하는 농부는 없습니다. 평생 가축을 못키우는 가난한 농부일지도 모르니까요. 당시의 농부가 오늘날 처럼 목표 양 100마리 이렇게 적어놓고 살아간다면 그것은 희망고문이 될 겁니다.

기록에 의하면 0이 발견된 것은 인도에서라고 합니다. 인도사람들 수학자와 컴퓨터 엔지니어가 특히 많은 것이 이해가 됩니다.

0이 발견된 이후 음수, 음의 정수도 수학의 체계에 정리되었습니다. 그렇다면 이것은 왜 필요할까요? 가장 쉽게 보면 돈을 빌리는 것에 비유할 수 있습니다. 돈이 없어서 내가 은행에서 생활비로 100만원을 빌렸습니다. (*요즘의 은행은 담보없이 절대 빌려주진 않지만;;;) 그리고 내 돈이 100만원 있습니다. 나는 총 200만원 가지고 있는거죠. 자산적 가치로 보면 이중에 내돈 100만원은 양수이고 빌린돈 100만원은 음수입니다. 빌린돈은 앞으로 갚아야 할 것입니다. 내돈 100만원은 내가 마음대로 처분할 수 있고 누리는 돈입니다.

오늘날 은행에 마이너스 통장을 개설하면 이자를 내고 약정 종료일까지 갚아야 합니다. 보통 직장인 마이너스 통장은 직장이 있는 동안만 유지가 되죠. 이러한 마이너스의 조건들이 다 음수와 관계된 것이라 보면 됩니다.

또 높이에서 보면 지상 10층 지하 3층 건물에서 지상 10층은 +10 지하 3층은 -3층 지상으로 볼 수 있습니다. 0을 중심으로 상대적인 관계에 있습니다.

정수의 사칙연산은 우리가 초등학교 때 배우지만 사실 정수의 사칙연산에는 상당히 심오한 원리가 들어있습니다. 그런 것은 다음 포스팅에서 다루도록 하겠습니다.

실수 등 다른 수

컴퓨터의 수 체계는 실수를 다루는 단계에 들어가면 좀 어려워집니다. 순수한 수학은 관념의 세계라서 무한소수 같은 것을 우리 인간의 인식으로는 쉽게 받아들여지지만 컴퓨터는 무한소수나 순환소수를 표현하는데 매우 큰 한계가 있습니다. 아니 정확히 말하면 아직 그러한 수체계를 능히 다룰만한 IT기술이 안나왔다는 표현이 어울릴 것같습니다.

최근에는 그래도 Lazy 방식을 사용하는 하스켈을 응용하면 무한적인 수에 대해서 좀 사용이 가능하지 않을까 생각도 듭니다만 어쨋든 현재 주류 프로그래밍 언어에서는 무한을 표현하는데 그다지 솔루션이 없는 상황이고 부동소수점 수가 있긴 합니다만 뭔가 정확도가 많이 떨어지죠. 그래서 컴퓨터 소프트웨어 중에는 소수점 수를 사용하는 유한소수를 다룰 때도 페이크로 정수형을 사용하는 경우가 많습니다.

컴퓨터 프로그래밍은 이산수학을 중심으로 하기 때문에 실수적 개념을 사용하는 것은 많지는 않습니다. 필요한 분야가 있다면 스스로 방법을 찾아야 할 것 입니다.

수의 종류

수의 종류를 나눠보면 집합수와 순서수가 있습니다.

집합수는 몇개 있냐 얼마나 있냐의 문제이고 순서수는 몇번째 수이냐? 를 따지는 것 입니다. 학급에 30명이 있다는 것을 인식하는 것은 집합수입니다. 30명 중에 키가 2번째인 학생을 찾는 것은 순서수입니다.

이렇듯 수에는 양(집합)의 속성과 위치(순서)의 속성이 함께 있습니다. 어느 나라나 수를 표현하는 단어에는 일반적인 수와 서수가 있습니다. 한글에서 일반적인 수는 일, 이, 삼, 사 이렇게 가고 서수는 하나, 둘, 셋, 넷(혹은 첫째, 둘째, 셋째…) 이렇게 갑니다. 영어에서는 one two three four 에서 first second third fourth 이렇게 나갑니다. 우리가 영어에서 lady first 이런 표현을 lady one 이렇게 말하지 않습니다. 문명이 발달한 사회일수록 일상생활에도 집합수와 순서수의 개념을 확실히 구분하는 경향이 있습니다.

시간도 수의 하나인데요. 시간에 관련한 수는 조금 다릅니다. 왜냐하면 시간은 한방향으로만 흐르는 4차원에 약간 못미치는 3.5차원이라서 그렇습니다. 때문에 시간과 기간에 대한 수는 별도로 부르는 이름을 만들어서 사용합니다. 우리는 달을 1월 2월 이렇게 좀 무미건조하게 표현하지만 서구권은 January February 이렇게 이름을 붙여서 의미를 부여하죠. 그것은 시간에는 의미가 있기 때문에 그렇습니다.

시간에 관해서는 진법도 달리하는 부분이 흥미로운 부분입니다. 1분은 60초이고 1시간은 60분, 하루는 24시간 1년은 12개월로 이것들은 진법과 같습니다. 60진법, 24진번, 12진법… 12의 2배수가 24이고 12의 5배수가 60입니다. 이러한 시간의 숫자들은 인간의 생활과 자연에 맞추면서 수천년에 걸쳐서 결정된 수 입니다.

수는 이렇게 우리가 살고 있는 차원에 따라서 또는 그 속성에 따라서 다양한 모습을 보여줍니다. 집합수냐 순서수냐 그런 것은 그냥 하나의 분류방식일 뿐으로 너무 집착할 필요는 없습니다. 인간이 편하게 분류하는 수에 대한 개념이 그 정도라는 것을 설명하는 것에 불과합니다.

요약

수학과 수에 대한 개념에 너무 집착할 필요는 없습니다. 설명한 것 처럼 인간은 수학으로 이루어진 자연의 일부분이고 지구상에 존재하는 모든 존재 중에서 수학의 개념을 이해하고 활용할 수 있는 유일한 종족입니다. 누구나 수학의 능력을 이끌어 낼 수 있습니다. 내가 수학에 대한 개념이 별로 없다면 공교육과정이 현시대를 사는 수많은 사람들의 수학적 영감을 망가뜨렸기 때문이라고 생각해도 무방할 것 같습니다.

IT산업에 관련한 모든 일에는 수학적 베이스가 깔려있습니다. 프로그래밍은 뭐 당연히 가장 중요한 부분이구요. IT수학이 중점적으로 다루는 이산수학이라던가 수학의 몇가지 분야가 있는데 그 모든 것의 출발점은 수가 무엇이냐? 에서 시작하기 때문에 이러한 내용을 다루어 봤습니다.

수가 무엇이냐? 수란 도대체 무엇이냐?

이런 질문은 저명한 수학자들 조차 평생에 걸쳐서 질문하지만 완벽한 답을 얻지 못하는 질문입니다. 프로그래밍은 그 자체로 무한한 가능성을 가지고 있습니다. 수학적인 영감을 바탕으로 프로그래밍을 할 수 있다면 좀더 방대하고 깊은 세계를 탐구할 수 있지 않을까 생각을 합니다.

참고 사이트

중학수학 | 0이란 무엇인가? | 0의 리뷰

수란 무엇인가? | 집합수와 순서수

Leave a Comment