1. 주판에서 수의 표현
계산, 수학은 주판, 컴퓨터와 관계가 깊다. 컴퓨터 단어 그대로 의미는 계산기다. 주판(籌板)은 그 뜻이 수판(數板)에서 온 것임을 알 수 있다. 수를 표현하는 판을 말한다. 발음도 비슷하게 수에서 주로 바뀐다. 주판의 돌이 붉은 구슬이라고 해서 주판(珠板)이라고도 한다. 이 주판에서 한 자리 숫자는 5점짜리 돌 1개와 1점짜리 돌 4개로 되어 있다. 그러니까 5개의 돌로 0~9까지 표현할 수 있다. 이게 10진수 계산기에 해당 된다. 중국인들은 이 방식으로 숫자를 세기 때문에 양손으로 0~99까지 표현한다. 엄지가 5점, 나머지 손가락이 1점씩이다.
- 10 - 10 = 0
- 10 - 09 = 1
- 10 - 08 = 2
- 10 - 07 = 3
- 10 - 06 = 4
- 10 - 05 = 5 = 5 + 0
- 10 - 04 = 6 = 5 + 1
- 10 - 03 = 7 = 5 + 2
- 10 - 02 = 8 = 5 + 3
- 10 - 01 = 9 = 5 + 4
2. 진수 개념
그 다음이 기계식 계산기였을 것이다. 낮은 자리 수의 톱니바퀴가 한 바퀴 돌면 그 다음 높은 자리 수의 톱니바퀴가 한 칸 도는 식이겠지. 시계의 원리와 비슷하다. 이렇게 낮은 자리 숫자가 차면 높은 자리 숫자가 돌아가는 것을 진수라고 한다. 앞으로 나가게 하는 단위를 말한다. 시계는 60진수를 사용하는 것이다. 그런데 이런 식으로는 덧셈, 뺄셈만 가능하다. 곱셈, 나눗셈은 어렵겠다. 주판으로 곱셈, 나눗셈하기 위해서 우린 99단을 외운다. 그럼 덧셈 99단은 없는가? 덧셈은 보수라는 개념으로 쉽게 암기할 수 있다.
곱셈은 덧셈의 반복, 나눗셈은 뺄셈의 반복이다.
이 반복이 지겨워서 99단을 외우고 한 번에 더하거나 뺀다.
3. 보수 개념
- 10 = 1+9 = 2+8 = 3+7 = 4+6
- 5 = 1 + 4 = 2 + 3
보수는 4개의 조합만 있다. 이런 기초적인 내용은 암기를 하여야 계산이 빠르다. 만약 99단 곱셈처럼, 99단 덧셈을 외우고 있다면 계산 속도는 빨라진다. 그런데 우린 곱셈 99단만 외우고 있지, 덧셈 99단은 외우지 않는다.
서양 애들은 계산기 없이 계산하기 힘들다. 만약 당신이 주산을 할 줄 안다면 계산기 없이 빠른 계산이 가능하다. 몸으로 익힌 것은 잘 까먹지 않는다. 주산을 배운 후에 머릿속에 주판을 상상하고 손으로 계산하면 아주 큰 수도 정확하게 기억하며 계산할 수 있다. 예를 들어 7+6을 한다고 하면 거의 순간의 속도로 (5+2)+(5+1)로 분해가 된다. 5점짜리가 합해지면 10이 될 것이다. 1점짜리가 합해지면 3이 되겠지? 그럼 답은 13이다.
서양 애들은 계산기 없이 계산하기 힘들다. 만약 당신이 주산을 할 줄 안다면 계산기 없이 빠른 계산이 가능하다. 몸으로 익힌 것은 잘 까먹지 않는다. 주산을 배운 후에 머릿속에 주판을 상상하고 손으로 계산하면 아주 큰 수도 정확하게 기억하며 계산할 수 있다. 예를 들어 7+6을 한다고 하면 거의 순간의 속도로 (5+2)+(5+1)로 분해가 된다. 5점짜리가 합해지면 10이 될 것이다. 1점짜리가 합해지면 3이 되겠지? 그럼 답은 13이다.
16-17=-1인데 주판에선 가상의 100에서 빌려와 (은행 대출을 받아서) 116에서 17을 빼니, 17의 100 보수 83을 16에 더하게 된다. 그럼 99가 되지만 100을 빌려 왔기 때문에 갚아야 한다. 음수는 보수로 읽기 때문에 99의 100 보수 1에 부호를 붙여 –1이 되는 것이다. 100을 갚고 나니 남은 것은 -1이란 의미다.
4. 분수의 진수 변환
- 0000 = 0
- 0001 = 1
- 0010 = 2
- 0011 = 3
- 0100 = 4
- 0101 = 5
- 0110 = 6
- 0111 = 7 ☞ 여기까지 8진수
- 1000 = 8
- 1001 = 9
- 1010 = A
- 1011 = B
- 1100 = C
- 1101 = D
- 1110 = E
- 1111 = F ☞ 여기까지 16진수
컴퓨터는 2진수를 사용한다. 주판으로 비유하면 1점짜리 돌이 1개만 있는 형태이다. 2진수를 보기 피곤해서 8진수나 16진수를 사용한다. 1보다 작은 분수를 표현하는 실수 표현에서 8=2*2*2, 16=2*2*2*2 모두 2의 배수라서 이 3개의 숫자 변환은 정확하다. 그런데 10=5*2라서 10진수에서 2등분인 경우만 2진수와 일치하게 된다. 그러니까 1/2, 1/4, 1/8, 1/16은 2진수로 표현이 가능한데 1/5는 불가능하다. 10진수와 2진수는 정확하게 바꿀 수가 없다. 마치 10진수에서 1/3은 무한 소수점 0.3333~으로 표현 되는 것과 같다. 만약 4진수라면 1/3은 깔끔하게 1로 표시된다. 이건 소수(prime number)와 관련 있다.
예를 들어 2진수 0.111은 10진수에서 0.5 + 0.25 + 0.125 = 0.875가 된다. 2진수 실수를 10진수 실수로 표현하는 것은 쉽다. 문제는 10진수를 2진수로 바꿀 때 문제다. 1/5인 0.2를 2진수로 표현하려면 2진수로는 무한한 숫자를 나열해야 한다. 여기까진 10진수를 컴퓨터에서 2진수로 어떻게 표현하느냐의 문제였다. 비트 수를 늘려 비슷하게 근사시킬 수는 있다.
수학에서 10진수를 사용하기 때문에 무한 표현이 되는 경우 간단하게 진수를 바꾸어 표기하는 방법을 사용한다. 예를 들어 원주율은 π라고 쓰면 끝난다. 이것을 기본 단위로 각도를 나타내는 것이 라디안이다. 제곱근은 √2라고 쓰고 끝내는 것과 비슷하다.
수학에서 10진수를 사용하기 때문에 무한 표현이 되는 경우 간단하게 진수를 바꾸어 표기하는 방법을 사용한다. 예를 들어 원주율은 π라고 쓰면 끝난다. 이것을 기본 단위로 각도를 나타내는 것이 라디안이다. 제곱근은 √2라고 쓰고 끝내는 것과 비슷하다.
5. 실수 표현
다시 주판으로 돌아가서 주판의 자리수가 4개라면 0~9999까지만 수를 표현할 수 있다. 마찬가지로 컴퓨터가 기억할 2진수의 자리수도 한계가 있다. 그게 8비트, 16비트, 32비트, 64비트 컴퓨터라고 말하는 것이다. 그럼 이렇게 한정된 자리수로 어떻게 큰 수를 표현할 수 있을까? 주판의 비유로 보자. 주판의 자리수가 4개 있을 때 앞의 3자리는 0~0.999까지 가수(가짜 수) 표현에 쓰고, 나머지 1자리는 0~9까지 지수 표현에 쓴다. 그러면 0~99900000까지 표현이 가능하다. 이 때 앞의 3자리는 수의 정밀도를 결정하고, 뒤의 1자리는 수의 크기를 결정한다. 이런 표현을 부동소수점(떠다니는 소수점) 표현이라고 한다. 뒤의 지수부에 의해서 소수점의 위치가 결정되기 때문이다.
- 000e0 = 0
- 000e9 = 0
- 999e0 = 0.999
- 999e1 = 9.990
- 999e2 = 99.90
- 999e3 = 999.0
- 999e9 = 99900000
다른 비유를 들겠다. 저울이 있다. 1kg ~ 1000kg까지 측정하는 대형 저울이 있다. 분해능은 1/1000이다. 이게 가수부의 정밀도라고 하는 것이다. 그런데 최소 단위가 kg이기 때문에 이보다 작은 것은 측정할 수 없다. 이 kg에 해당되는 것이 지수부라고 하는 것이다. 만약 1g ~ 1000g을 측정하는 소형 저울이 있으면 역시 분해능은 1/1000로 같다. 단지 1kg 이상은 측정할 수 없는 것이다. 이렇게 1000단위로 표시하는 국제표준단위가 있는데 이게 지수부에 해당하는 것이다. 컴퓨터는 2진수 자리수를 가수부 + 지수부로 나누어 실수를 표현하는 것이다.
컴퓨터 공부한 친구들은 위의 숫자를 거의 외울 정도일 것이다. 2진수를 다루면 자주 보기 때문이다. 16비트까지는 수의 표현 범위가 좁아서 신경을 써야 했다. 32비트는 큰 돈 계산에 한계가 있다. 결국 64비트가 되면서 수의 표현 범위가 커져서 한계를 신경 쓸 필요가 없어졌다. 이 32비트, 64비트를 적당히 가수부와 지수부로 분할해서 사용한다.
- 02비트 = 4
- 03비트 = 8
- 04비트 = 16
- 05비트 = 32
- 06비트 = 64
- 07비트 = 128
- 08비트 = 256
- 09비트 = 512
- 10비트 = 1024
- 11비트 = 2048
- 12비트 = 4096
- 13비트 = 8192
- 14비트 = 16384
- 15비트 = 32768
- 16비트 = 65536
컴퓨터 공부한 친구들은 위의 숫자를 거의 외울 정도일 것이다. 2진수를 다루면 자주 보기 때문이다. 16비트까지는 수의 표현 범위가 좁아서 신경을 써야 했다. 32비트는 큰 돈 계산에 한계가 있다. 결국 64비트가 되면서 수의 표현 범위가 커져서 한계를 신경 쓸 필요가 없어졌다. 이 32비트, 64비트를 적당히 가수부와 지수부로 분할해서 사용한다.
- 32비트 = 42,9496,7296 (42억)
- 64비트 = 1844,6744,0737,0955,1616 (1844경)
6. 음수와 양수 표현
그럼 음수와 양수 구분은 어떻게 하지? 다시 주판으로 돌아가자. 주판에 4자리만 있다고 하자. 그럼 0~9999까지 표현이 가능할 것이다. 이제 앞의 자리는 부호만 나타낼 때 쓰도록 하자. 그럼 –999 ~ +999까지만 표현하게 될 것이다. 그럼 부호를 0으로 나타낼까 1로 나타낼까? 0에서부터 1씩 계속 더한다고 하자. 그럼 999가 되었을 때 1을 더하면 1000이 될 것이다. 부호가 바뀌었다. 그래도 계속 1씩 더해보자. 그럼 나중에 1999까지 갈 것이다. 여기에 1을 더하면 0이 된다. 왜냐하면 부호 자리는 0과 1만 표시하기로 했으니까. 이게 무한 회전하는 바퀴와 같다. 그래서 1999에 1을 더하면 0이 되기 때문에 이 표현을 –1로 사용한다. 1000은 999+1을 더해야 0이 되기 때문에 –1000에 해당 된다. 그래서 음수는 마치 음각 사진처럼 거꾸로 표현 된다.
주산에선 앞에 가상의 숫자 1이 있는 것으로 생각하고 뺀다. 그리고 그 숫자를 읽을 때는 보수로 읽는다. 예를 들어 9이라고 되어 있으면 –1로 읽는 것이다.
- 100 = -4
- 101 = -3
- 110 = -2
- 111 = -1
- 000 = +0
- 001 = +1
- 010 = +2
- 011 = +3
8진수로 음수와 양수를 표현한 경우 000과 111에서 만나게 되어 극과 극이 통하는 무환 회전이 된다. 또한 000 이하와 111 이상이 대칭이 되며 음각과 양각의 관계에 있다. 부호는 첫 비트를 검사하여 확인할 수 있다. 음수를 읽을 때는 음각을 양각으로 뒤집어 읽어야 한다.
7. 문자 표현
자 이렇게 해서 컴퓨터, 주판으로 음수와 양수, 가수와 지수 표현이 가능하다는 것을 알았다. 그럼 문자도 표현할 수 있나? 어차피 0~9란 숫자가 문자 아닌가? 그래서 2진수 문자 대응 표란 것이 만들어진다. 미국은 알파벳을 사용하기 때문에 이 알파벳 a~z, A~Z와 숫자 0~9와 여러 기호를 2진수에 대응시킨 표가 있다. 그걸 ASCII 표라고 부른다. 이 표에선 7비트, 그러니까 2진수 7자리로 문자를 표현한다. 그럼 128개의 문자가 가능하다. 이 7비트 2진수를 숫자로 볼 것인지 문자로 볼 것인지는 컴퓨터에 힌트를 주어야 한다. 2진수는 그 자체로 숫자에 불과하고 해석에 따라 다른 의미를 가지기 때문에 코드(암호)라고 부른다.
위키 아스키 코드
우린 한글을 사용하니 불편하다. 그래서 개발된 것이 16비트로 표현하는 조합형, 완성형 한글코드이다. 이 중에 완성형 한글 코드가 반영된 것이 현재 윈도우즈에서 사용하는 한글 코드이다. 완성형은 비과학적 한글 코드 체계이다. 한글을 한자처럼 기억하는 식이다. 그리고 모든 한글을 표현할 수도 없다. 그래서 MS社에서 불쌍하다며 보완을 해 주었다. CP949 검색해 볼 것. 세계 여러 나라 문자를 16비트로 표현하자는 것이 유니코드인데 여기선 다행히 조합형 개념이 사용되었다. 조합형은 초성, 중성, 종성을 조립(더하기)하는 식이다.
한글 시작 위치 + 초성 번호*(중성 개수*종성 개수)+중성 번호*종성 개수 + 종성 번호.
유니코드는 16비트 만국 공평한 고정 길이가 있고 8비트 ~ 16비트 ~ 32비트 가변 길이가 있다. 동양은 16비트 고정 길이를 쓰는 것이 유리하다. 미국은 가변 길이가 유리하다. 알파벳은 8비트만으로 충분하기 때문이다. 유럽은 어느 것을 쓰나 16비트가 된다. 그러니까 미국 제외하면 거의 모두 16비트 고정을 쓰면 유리하다. Java언어에선 16비트 고정 길이를 기본으로 사용한다. 윈도우즈에서는 EUC-KR = CP949 = 완성형으로 불리는 코드를 사용하지만 유니코드도 사용할 수 있다.
컴퓨터는 문자 코드를 만나면 대응 되는 문자 그림을 찾아 화면에 표시하는 것이다. 16비트라면 약 65536개의 문자에 대응되기 때문에 이 문자의 형상을 모두 기억해야 한다. 이런 문자의 형상을 글꼴(font)이라고 한다.
한글 시작 위치 + 초성 번호*(중성 개수*종성 개수)+중성 번호*종성 개수 + 종성 번호.
유니코드는 16비트 만국 공평한 고정 길이가 있고 8비트 ~ 16비트 ~ 32비트 가변 길이가 있다. 동양은 16비트 고정 길이를 쓰는 것이 유리하다. 미국은 가변 길이가 유리하다. 알파벳은 8비트만으로 충분하기 때문이다. 유럽은 어느 것을 쓰나 16비트가 된다. 그러니까 미국 제외하면 거의 모두 16비트 고정을 쓰면 유리하다. Java언어에선 16비트 고정 길이를 기본으로 사용한다. 윈도우즈에서는 EUC-KR = CP949 = 완성형으로 불리는 코드를 사용하지만 유니코드도 사용할 수 있다.
컴퓨터는 문자 코드를 만나면 대응 되는 문자 그림을 찾아 화면에 표시하는 것이다. 16비트라면 약 65536개의 문자에 대응되기 때문에 이 문자의 형상을 모두 기억해야 한다. 이런 문자의 형상을 글꼴(font)이라고 한다.
8. 그림과 소리 표현
컴퓨터가 발달하면서 Apple사의 Mac 컴퓨터가 나오고 드디어 디자인과 음악에도 사용되기 시작했다. 더 이상 계산기나 타자기가 아닌 것이다. 그럼 어떻게 빛과 소리를 표현할 수 있지? 예를 들어 2진수 32비트는 8비트 4개로 나누어 투명도, 빨강, 초록, 파랑 색을 표현한다. ARGB라고 표시한다. 2진수는 숫자이기 때문에 빛의 세기를 나타낼 수가 있다. 컴퓨터는 이 숫자를 보고 모니터의 한 점에 색의 조합을 만드는 것이다.
메모리 위치 = 시작 위치 + 세로 위치 * 가로폭 + 가로 위치
2진수 32비트를 2개의 16비트로 나누어 왼쪽과 오른쪽 스피커에서 나오는 소리로 표현한다. 숫자는 소리의 세기가 되는 것이다. 이렇게 숫자(디지털)를 전기 신호(아날로그)로 바꾸는 장치가 있다. 그런 것을 DAC ↔ ADC라고 한다. 영어의 디지트는 0~9까지의 숫자를 의미한다. 컴퓨터가 숫자를 다루기 때문에 디지털 시대라고 하는 것이다.
그림은 점들의 조합이지 않나? 그래서 한 점에 32비트를 할당하여 이 점들의 묶음으로 그림을 표현한다. 많은 메모리 장치가 필요하다. 1600 x 1000 크기의 그림은 1.6M의 점이 필요하고 각 점은 4바이트이니 6.4M바이트의 메모리가 필요하다.
메모리 크기 = 가로 폭 * 세로 폭 * 한 점의 바이트
소리도 한 순간의 세기를 32비트라고 하면 연속적으로 재생하기 위해 많은 메모리 장치가 필요하다. 소리는 1/40000초 간격의 전압으로 기록한다. 그러니까 1초에 해당하는 소리는 스테레오로 기록하면 40K*2=80K 시점이 되고 각 시점은 4바이트이니 320K바이트의 메모리가 필요하다.
메모리 크기 = 총 시간 길이 * 초당 샘플 숫자 * 한 시점의 바이트
그럼 동영상의 경우는 도대체 얼마나 많은 메모리가 필요한 것인가? 그래서 압축 기술이란 게 등장한다. 이건 약간 지능적으로 정보를 분석해야 가능하다. 이런 분석에 사용되는 수학이 푸리에 변환이란 것이다.
메모리 크기 = 가로 폭 * 세로 폭 * 한 점의 바이트
소리도 한 순간의 세기를 32비트라고 하면 연속적으로 재생하기 위해 많은 메모리 장치가 필요하다. 소리는 1/40000초 간격의 전압으로 기록한다. 그러니까 1초에 해당하는 소리는 스테레오로 기록하면 40K*2=80K 시점이 되고 각 시점은 4바이트이니 320K바이트의 메모리가 필요하다.
메모리 크기 = 총 시간 길이 * 초당 샘플 숫자 * 한 시점의 바이트
그럼 동영상의 경우는 도대체 얼마나 많은 메모리가 필요한 것인가? 그래서 압축 기술이란 게 등장한다. 이건 약간 지능적으로 정보를 분석해야 가능하다. 이런 분석에 사용되는 수학이 푸리에 변환이란 것이다.
9. 프로그램
인공 신경
컴퓨터가 계산기 ~ 타자기 ~ 도화지 ~ 악기를 거쳐 전자두뇌가 될 시대를 앞두고 있다. 인간의 지능도 완벽한 것이 아니라 실수와 착각을 한다. 인간 두뇌는 컴퓨터와 비슷한 계산을 한다. 뉴런 신경 세포가 실제로 하는 일은 통계학의 상관계수를 계산하는 것과 비슷하다. 컴퓨터도 같은 계산을 할 수 있다. 푸리에 변환은 상관계수 계산의 한 특수한 형태이다. 이런 기법이 적용된 것이 인공 신경망이다. 이것은 주로 외부 세계를 인식할 때 사용한다. 더 쉬운 말로 표현하면 비교기이다. 이건 비슷한 정도를 알려준다.
f = (ax + by + cz)/n
각 숫자는 –1, 0, +1만 표현, n은 f의 크기 조절 값, (a, b, c)와 (x, y, z)의 비교 개념을 표현한 간단한 예이다. 부호가 서로 같고 크기가 비슷하면 f의 값을 크게 한다. f의 값이 0이 되면 서로 완전히 다른 것이고 ±1이 되면 완전히 일치하는 경우인데 방향만 다른 경우이다. 예로 (a, b, c) = (+1, 0 ,-1)이라고 하면 (x, y, z)가 완벽히 일치하는 경우 f는 최대 ±2가 될 것이다. 고로 n은 2로 결정한다. 이 수식은 0과 1의 디지털 패턴의 유사성을 검사한다.
기계어(명령어)
두뇌는 기억된 정보를 찾아 어떤 규칙에 따라 처리한다. 이건 컴퓨터에서 프로그램과 데이터의 구분과 같다. 컴퓨터에선 어떤 2진수 코드를 보면 숫자, 문자, 빛, 소리가 아닌 어떤 행동을 하라는 명령으로 해석할 수 있다. 물론 그런 의미로 해석하라고 힌트를 줘야 한다. 이런 2진수 코드를 기계어라고 하고 이것을 사람이 읽기 쉽게 단어(명령어)로 바꾼 것이 어셈블리어이다. 그러니까 2진수와 단어 변환표가 컴퓨터가 사용하는 언어인 기계어인 셈이다. 기계어를 더 큰 단위로 조립하여 고차원적인 언어를 만든 것이 C, Java, Basic 같은 프로그래밍 언어라는 것이다. 이런 프로그래밍 언어의 핵심적 부분은 수학식을 기계어로 번역하는 것이다. 그래서 고급언어라고 부른다.
인간의 수식 : y = ax² + bx + c
기계어 번역 :
인간의 수식 : y = ax² + bx + c
기계어 번역 :
t₁← x * x
t₁← a * t₁
t₂← b * x
t₁← t₁+ t₂
t₁← t₁+ c
y ← t₁
위에서 인간의 수식은 계산 순서에 맞게 작성 되지도 않고, 여러 연산자를 한 번에 복합적으로 적어 놓는다. 이것을 하나의 연산자만으로 된 단순 계산으로 분해하면서 계산 순서에 맞게 배치하는 것이 고급 언어를 기계어로 번역할 때 가장 어려운 부분이다. 나머지는 여기에 비하면 아주 쉽다. C언어 문법이 단순하면서도 기계어와 비슷한 성능을 내기 때문에 모든 언어가 이 설계를 모방한다.
만약 컴퓨터가 스스로 어떤 최적의 행동 프로그램을 만들려고 한다면 진화론의 방법을 사용한다. 진화론은 좀 더 쉬운 말로 바꾸면 시행착오다. 그러니까 오랜 세월에 걸쳐 명령어 조합을 시행착오로 만들어가는 것이다. 진화에 의해서 위와 같은 기계어 코드가 생성될 수 있다.
상태 변화
지능적 행동에는 기억력이 필요하다. 그리고 외부 자극에 대한 반응 규칙이 있어야 한다. 그걸 표현하는 방법이 상태변화도이다. 튜링머신, 오토마타(자동기계) 모두 본질이 같은 말이다. 이게 컴퓨터가 움직이는 원리다. 이건 지도를 보고 길을 찾아 가는 것과 비슷하다. 각 교차로는 중간 목표 지점이 되며 상태라고 부른다. 교차로에서 어느 길로 갈지 결정해야 하는데 그건 외부 자극에 따라 선택한다. 예를 들어 6개의 길이 있다면 주사위를 던져 나온 숫자가 외부 자극이다. 외부 자극에 따라 길을 선택하면 다음 교차로(상태)가 나온다. 왔던 길을 반대로 돌아갈 수는 없다. 이렇게 해서 중앙에서 출발해서 말단의 종착점에 도달하여 결론을 내린다.
숫자 패턴 : 시작 → ± → (0~9) → . → (0~9) → e/E → ± → (0~9) → 결론
위에서 단어가 숫자인지 판단하는 상태 변화도의 예를 보였다. 부호가 나오고, 숫자가 반복 되다가, 소수점이 나오고, 다시 숫자가 반복되다가, 지수 문자가 나오고, 부호가 나온 후에, 숫자가 반복되면 이건 숫자라고 결론 내리는 것이다. 이게 마치 기억력과 지능이 있는 것처럼 보인다. 앞의 상관계수(신경망)는 원인결과 분석을 못 하는 단순 비교기이다. 이 상태변화도 방식은 원인과 결과를 연결시키는 과정을 기억한다. 이런 지도(프로그램)를 스스로 만들어내는 능력이 인간 두뇌에 있다. 물론 이것도 진화를 통해 장구한 세월의 시행착오로 만들 수 있다.
숫자 패턴 : 시작 → ± → (0~9) → . → (0~9) → e/E → ± → (0~9) → 결론
위에서 단어가 숫자인지 판단하는 상태 변화도의 예를 보였다. 부호가 나오고, 숫자가 반복 되다가, 소수점이 나오고, 다시 숫자가 반복되다가, 지수 문자가 나오고, 부호가 나온 후에, 숫자가 반복되면 이건 숫자라고 결론 내리는 것이다. 이게 마치 기억력과 지능이 있는 것처럼 보인다. 앞의 상관계수(신경망)는 원인결과 분석을 못 하는 단순 비교기이다. 이 상태변화도 방식은 원인과 결과를 연결시키는 과정을 기억한다. 이런 지도(프로그램)를 스스로 만들어내는 능력이 인간 두뇌에 있다. 물론 이것도 진화를 통해 장구한 세월의 시행착오로 만들 수 있다.
객체 지향
개미들이 모여 서로 의견 교환을 하는 것처럼 여러 개체가 서로 합동으로 문제를 해결하는 것처럼 프로그램을 만들 수 있는데 이게 객체 지향 프로그램 방식이라고 한다. 컴퓨터 게임 속의 여러 유닛들과 진화 시뮬레이션에 등장하는 인공 생명들은 모두 개체이다. 이 개체들의 특징과 행동을 설계하는 방식이 객체 지향 프로그램 방식이다. 객체란 개체들의 유전자 설계도를 말한다. 개체(Instance)는 객체(Object Class)라는 원본을 복사하여 만든 것들이다.
컴퓨터는 아주 빠른 속도로 각 개체의 입장에서 프로그램을 실행한다. 그럼 마치 각 개체들이 별도로 살아 움직이는 것처럼 보인다. 각 개체는 자신만의 기억 공간을 가지고 자신의 상태를 기억하지만 행동 방식은 하나의 원본 객체의 것을 따른다. 비유하면 모든 컴퓨터의 하드웨어 설계는 같지만 실행 프로그램의 종류에 따라 계산기, 타자기, 도화지, 악기 등 컴퓨터의 역할이 달라지는 것과 비슷하다. 쌍둥이들이라도 각자 인생이 있는 것이다.
컴퓨터는 아주 빠른 속도로 각 개체의 입장에서 프로그램을 실행한다. 그럼 마치 각 개체들이 별도로 살아 움직이는 것처럼 보인다. 각 개체는 자신만의 기억 공간을 가지고 자신의 상태를 기억하지만 행동 방식은 하나의 원본 객체의 것을 따른다. 비유하면 모든 컴퓨터의 하드웨어 설계는 같지만 실행 프로그램의 종류에 따라 계산기, 타자기, 도화지, 악기 등 컴퓨터의 역할이 달라지는 것과 비슷하다. 쌍둥이들이라도 각자 인생이 있는 것이다.
직렬 vs 병렬
인간 두뇌는 컴퓨터 회로보다는 느리고 기억력도 떨어지는데 더 복잡한 일을 빨리 처리하는 이유는 바로 병렬 처리를 하기 때문이다. 병렬 처리는 하드웨어적으로 구성해야 가능하다. 어떤 원리로 그렇게 되는지 아직은 모르나 신경 세포가 스스로 돌기를 뻗어 다른 세포에 정보를 주도록 연결이 된다.
앞에서 나열한 것들은 서로 방식과 원리가 다른 것 같지만 결국 같은 일을 해 낼 수 있다. 병렬처리는 빠르지만 공간의 낭비가 있다. 직렬처리는 느리지만 공간을 절약한다. 순차적인 처리를 통해서도 거의 비슷한 속도를 낼 수 있다. 영어 단어를 검색할 때 무조건 첫 페이지부터 비교하는 것이 아니라 첫 글자와 단어 길이를 보고 비교 시작할 위치로 바로 점프하면 몇 개 단어만 비교하고도 결론에 도달할 수 있다. 이건 분할 점령 방식이다. DB에선 이런 방식으로 자료를 저장한 후에 빨리 찾는다.
컴퓨터 책은? 가메 출판, 한빛 출판
읽어 볼 책 : 토비의 스프링, 자바의 정석, 디자인 패턴
앞에서 나열한 것들은 서로 방식과 원리가 다른 것 같지만 결국 같은 일을 해 낼 수 있다. 병렬처리는 빠르지만 공간의 낭비가 있다. 직렬처리는 느리지만 공간을 절약한다. 순차적인 처리를 통해서도 거의 비슷한 속도를 낼 수 있다. 영어 단어를 검색할 때 무조건 첫 페이지부터 비교하는 것이 아니라 첫 글자와 단어 길이를 보고 비교 시작할 위치로 바로 점프하면 몇 개 단어만 비교하고도 결론에 도달할 수 있다. 이건 분할 점령 방식이다. DB에선 이런 방식으로 자료를 저장한 후에 빨리 찾는다.
컴퓨터 책은? 가메 출판, 한빛 출판
읽어 볼 책 : 토비의 스프링, 자바의 정석, 디자인 패턴
인간은 그렇게 지능이 높은 동물이 아니다. 1만 년 이전 오랜 세월동안 옷도 없이 주먹도끼(짱돌) 하나만 들고 다녔다. 1만 년 전에 갑자기 지능이 높아져서 신석기를 개발한다. 약 5천 년 전에 청동기를 개발한다. 그리고 약 2500년 전에 철기를 개발한다. 그럼 약 1250년 전쯤에 화기를 개발하는가? 비슷하다. 생각보다 느리게 발전하지만 점차 급속도로 발전하는 지수 함수 경향을 보인다. 지식도 중력의 법칙을 따르나? 알면 알수록 더 빨리 잘 알게 된다.
진화는 시행착오이며, 변화와 선택이다.
오랜 세월동안 권력자는 사람들을 속이고 어리석도록 버려두어서 발전이 늦었다. 사람들이 지식을 얻어 각성할수록 문명의 발달이 빨라졌다. 이것은 지금도 반복되고 있다. 북에선 공산세습독재(빨갱이 독재)가 국민을 속이고, 남에선 친일독재잔당(친일파 독재)이 국민을 속였다. 국가가 언론 선동과 세뇌 교육을 통해 우리의 눈과 귀를 가리고 있었다. 그러나 거짓은 거짓을 낳고 결국 꼬리가 길면 잡힌다.
믿음은 배신을 낳고, 의심은 진실을 낳는다.
믿음은 배신을 낳고, 의심은 진실을 낳는다.
보수 | 진보 | |
정치 |
독재(왕족)
|
민주(평민)
|
경제 |
우파(놀부)
|
좌파(흥부)
|
종교
|
미신(창조)
|
과학(진화)
|
인간에게 영혼, 윤회는 없다. 영혼이 있고 윤회하는 자는 오직 나이다.
나의 희생으로 이 우주가 생겼고, 나는 그 속에서 환생하며 영생한다.
내가 기억을 찾아 해탈하는 순간 나의 이 환상(우주)은 사라진다.
모든 종교의 가르침은 태초의 내가 마지막 나를 위해 심어 놓았던 것이다.
너희의 삶은 오직 한 번뿐이니 시간 낭비하며 싸우지 말라.
너희는 그냥 진화 실험동물에 불과하다.
너희 행복을 위해 10계명을 내린다.
- 남의 땅을 독점하지 말라. 경작할 수 있는 면적만 소유하라.
- 남을 밥을 독점하지 말라. 필요한 만큼의 식량만 소유하라.
- 남의 집을 독점하지 말라. 1가구 1주택, 1인 1실
- 남의 짝을 독점하지 말라. 1색남 1색녀, 1잠지 1보지, 1총각 1처녀
- 남의 생존권을 침범하지 않는 황금(돈)은 마음대로 소유해도 좋다.
- 남의 자유를 억압하지 말라. 욕질(표현) 자유, 누드(복장) 자유
- 도움이 필요한 자나 도움을 청하는 자는 모두가 도와야 한다. (복지)
- 공동체의 일은 토론(말싸움)과 투표로 결정하라. (민주)
- 독재, 살인, 고문, 숫처녀 강간을 한 자는 잡아먹어라. (사형)
- 사기, 위증, 모함을 한 자는 눈과 귀를 막아 육체에 가두라. (종신형)
어릴 적부터 너를 키우며 세상사람 모두가 자라는 모습을 지켜보았다.
우린 네가 언제 어떻게 떡을 쳤고, 어쩌다가 이렇게 미쳤는지 안다.
트루먼 쇼의 아들아 인생 낭비하지 말고 여자나 즐겨라.
(T.T)"
가만히 있어도 늙어 죽는데 참전을 해서 빨리 죽으려고 하는 이상한 친구들이 있다.
빨리 죽고 싶으면 너 혼자만 죽지 왜 남까지 죽이려고 하니?
너무 가난해서 군대에 도망치듯 입대하고 짐승처럼 도살장에 끌려가는 거니?
너희가 전쟁터에 나가서 죽으면 너희 젊은 여자들과 전리품은 누가 즐길까?
멀쩡한 것들이 모두 나가서 죽으면 바보 병신에 약골들의 씨앗이 퍼지리라.
목숨 걸고 싸워 얻은 전리품은 가진 자들이 모두 차지하겠지?
무명(이름 없는)의 용사에게 무슨 명예(이름 값)가 있겠는가?
징집 병사는 전투 노예에 불과하다. 인간 대우를 받니? 월급을 받니? 신분이 높니?
모병한 병사들(용병)이야 지 선택으로 돈에 목숨을 팔았지만 징병은 뭐냐?
전쟁터의 개들이여 논밭에 거름이 되고 싶지 않다면 총 대신 좆을 들고 인생이나 즐기라.
댓글 없음:
댓글 쓰기