- 목차
컴퓨터와 프로그래밍은 긴밀하게 묶여있지만 그것이 어떻게 묶여있는지는
잘모르는 사람이 많다. 원래부터 흥미가 있었던 사람이나 전공에서 일정부분 진행하지 않는 이상 그 실체가 드러나지않기 때문이기도 하지만 근본적으론 한국교육 방식이 글러먹었기 때문이다
왜 그런가로 흥미 유발을 하고 그것을 해결해나가게 한후 그 이후에 더 쉽게 해결할 수 있는 도구의 존재를 가르쳐줘야지 도구먼저 주고 사용법만 주구장창 가르키니 뭘 해결해야되는지도 모르고 도구 메뉴얼만 달달 외우는 것이다.
그래서 초보자도 그럭저럭 이해가 갈 수 있도록 컴퓨터가 프로그래밍에 어떤 개념과 원리로 묶여있는지 한번 살펴보겠다
반도체
프로그래밍 언어의 가장 깊숙한 곳의 선조는 기계어이다
기계어는
0101010100001010100
정말 이런식으로 이진수 구성이다 그렇다고 암호 같은건 아니다 다만
001 은 go, 010은 back, 011은 stop, 100은...
이런식의 의미를 담고 있는 것이다. 왜 두가지 숫자로만 표현했냐면
컴퓨터의 기본 구성부품인 반도체가 표현 가능한게
전기가 통함, 전기가 안통함 요 두가지 이기 때문이다
저걸 저런식으로 길게 써주기보다 숫자로 표현하자..
전기가 통하면 1 안통하면 0
이렇게 해서 컴퓨터의 기계어는 이진수가 되었다
이러한 이진수는 얼핏보면 별 쓸모없는 것 같다. 그러나
한자리로는 0 1 두 수밖에 표현못하지만
두자리가 되면 01 10 11 10 이렇게 네가지나 표현 가능하고
세자리면 2의 3승인 8가지 표현이 가능하다
그래서 전기가 통하고 안통하고를 제어할 수 있는 소자가 한개면 꼴랑 두개 표현이지만
수백개쯤 되면 표현력이 폭발한다. 그리고 표현력이 늘어나면 속도도 빨라진다.
손가락 10개인 사람이 10을 표현하는데는 손가락 10개를 쫙펴면 되지만
1개인 사람은 10번 접었다폈다해야 되고 그동안 시간 손실이 발생하는 것처럼 말이다
최초의 컴퓨터라고 알려져있는 에니악(패소해서 딴 컴한테 최초를 줬지만..)에서 당시
그런 1과 0을 표현할 수 있는 소자가 진공관 이었다
18000개의 달하는 진공관이 장착되어 엄청난 표현력과 속도를 가지게 되었고
이것을 이용해 계산식, 숫자등을 대입해 강력한 연산을 할 수 있게되었다
하지만 저 댑따만한 것을 18000개나 달려니 당연히
컴퓨터의 크기도 커지게 되었고 진공관의 소음 발열 전력등이 감당이 안되었다
그러던 도중 나온것이 바로 반도체이다. 진공관 같은 기능을 하는 것을 아주 작은 소체
에서 재현해낸 것이다. 이어서 그것들을 연결해서 돌고 돌게 만드는 길을
회로(回路, Circuit)라고 이름 지었으며 전자가 다니는 길이라해서 전자회로가 되었다
그리고 그러한 회로와 반도체, 그리고 여러부품들을 결합해서
전기만 요기 조기 잘 넣으면 기능하게 되었으며 이것들이 보니까
해당하는 기능을 가진 소자랑 길을 작게 만들어도 연산자체는 똑같이 나왔다
그래서 더 작게 만들자해서 나온것이 바로 회로모음집인
집적회로(集積回路, Integrated Circuit)
이며 이걸 기술의 발전에 따라 먼지 한올 올라가면 망하는 정도로 작게작게 만들어
조그마한 조각(Chip)에 올려놓은 것이 바로
마이크로 칩 (microchip) 이시다
아날로그와 디지털
왜 그럼 0과 1만 표현하는 놈으로 만들었을까.
0부터 10까지 있는 놈으로 많이 배치하면 2진수짜리랑 비교가 안될 것이 아닌가..
하지만 하나의 소재가 여러표현을 하는 것도 찾기 힘들며 그것이 무슨 표현을 하고 있는지를
파악하고 표준화 하는 것은 더더욱 힘들다. 사람들 끼리도 ‘니가 말한게 그런뜻인줄 몰랐다’
라며 엇나가기 일쑤인데 하물며 소재가 10가지 표현을 가지며 그 크기가 나노 단위라면 표현을 잘못 해석하는
일이 빈번할 것이며 그 결과는 블루스크린의 향연일 것이다
즉, 두가지의 표현을 확실하게 하는 놈을 왕창 때려박는 것이
여러표현을 하되 불확실한 놈을 몇개 박는 것보다 훨씬 나은 것이다
그러한 예로써 아날로그와 디지털의 장단점을 볼 수가 있다
아날로그는 현실의 현상을 아주 스무스하게 표현한다
손을 내렸다 올렸다 이게 아니라 손이 어디까지 올라갔다 어디까지 내려갔다를
디즈니 애니처럼 부드럽게 표현하기 위해 선연결처럼 끊김없이 표현한다
아날로그와 디지털
예를들면
전기가 0.01볼트 일때 0.01
전기가 0.02볼트 일때 0.02
...
전기가 1.15볼트 일때 1.15
전기가 1.16볼트 일때 1.16
이런식으로 디테일하게 표현할 수 있다
하지만 비가 온다던지해서 전송도중의 전압이 눈꼽만큼 상승하거나 하강해도
그 잘못된 데이터가 바로바로 반영된다 그리고 그 결과로 노이즈가 자주 발생한다
아날로그TV에서의 노이즈
하지만 디지털의 경우 두가지 수로 표현하는 대신
미세하게 깎이거나 더해지는 잘못된 오류를 쿨하게 무시할 수 있어
완벽하게 맛탱이 간 데이터가 아닌담에야 거의 100%에 달하는 정확도를 자랑한다
전기가 0.01볼트 일때 0
전기가 0.02볼트 일때 0
...
전기가 1.15볼트 일때 1
전기가 1.16볼트 일때 1
또한 처음부터 데이터를 보낼때
0.15를 그대로 보내서 0.15을 온전히 받는 것과
0 1 0 1 0 이렇게 순서대로 따로따로 0과 1을 끊어보내서 그것을 01010으로 합치는 것과
는 난이도 자체가 다르다
예를들면
적당히 숙성된 빵(1.4)을 보내달라해서 보냈는데 먼거리 후 도착했을때 고객이 보기에
그게 너무 숙성된 빵(1.6)이 되었을 수가 있다. 즉 요구했던거랑 다른 데이터가 왔으므로 실패인것이다
반면 밀가루(0)를 보내거나 빵(1)을 보내거나 둘중 하나로 하기로 하고 먼거리 후 도착했을때
빵이 좀 변하거나(1.6) 하는 건 문제가 아니다 밀가루(0)만 아니면 약속이 지켜지는 것이다
대신 디지털은 확실히 데이터간의 명확한 단절이 있는 만큼 연결되고 세밀한 표현에선
아날로그가 앞선다. 예를들면 음질 같은 것에 대해 많은 이들이 아날로그를 선호하는 것은 그러한 이유다
매니아들은 디지털 싫어하는 사람이 많다
프로그래밍 개념
컴퓨터는 저런식의 두가지 단순표현 소자를 그럭저럭 모아서 더 많은 걸 할 수 있는
애들로 만든 회로를 다시 더 모으고 모아서 집적시키고 거기서 더 모으고 모아서
완전 필살 압축한 칩들을 다시 몇개 더 모아서 CPU, 메인보드, 그래픽 카드를 만든 것을
다시 조립한 것이다
프로그래밍 언어도 01 = go
이런걸 모으고 모으고 모으고 또 모으다보니
0101010010101010010101
이렇게 되어버렸던 것이다.
근데 이짓하기 귀찮으니까 이것을 다시 0101000101010101 = go home
으로 압축했고
이런식으로 압축한 여러문장들을 섞어서 새로운 명령을 만들었는데 그마저도 귀찮다고
go home and see tv and wash and sleep
= rest 같이 더 압축되어 고급언어가 된것이다.
이제 이 rest를 번역기(컴파일러 compilor)를 통해서 압축풀면 차례대로 복원하여 결국 무수한 0101 같은 걸로 이뤄진 exe 파일 같은 걸로 만들어진다. 이걸 컴파일 과정이라고 한다
그리고 exe를 실행시 거기에 적힌 기계어의 0과 1을 따라서 전자들이 반도체의 신호등 아래 여기저기 엔지니어들이 설계한 길을 돌아댕기는 것이 컴퓨터와 프로그래밍 언어의 실체라고 할 수 있다
요 길을 논리적으로 잘 만드는 것을 논리회로라 하며
그러한 길을 다니는 녀석들.. 즉 전기알갱이인 전자들을 잘 드라이빙하게 특성과 미끼들을 공부하는 것이 전자공학이며 걔네들이 돌아댕기면서 내뿜는 자기장도 곁들이면 전자기학이 된다. 그리고 얘네들이 어디서 얼만큼 가고 어디서 넘어지고 하는걸 수치로 계산하는 것이
공학수학이다
공책이 종이로 만들어졌다는 걸 알고 책을 사용하는 사람과 공책을 이루는 것이 종이란 것을 모르고 사용하는 사람은 차원이 다른 사용을 보여준다. 전자는 찢어지지 않게 힘조절도 하고 혹은 한페이지는 찢어서 알림메모용으로 쓸수도 있을 것이다 하지만 후자는 쓰다가 공책이 찢어지면 그 원인이 뭔지 몰라서 헤멜것이고 페이지를 찢어 알림메모용으로 쓴다거나 하는 응용은 상상도 못할 것이다.
프로그래밍 역시 마찬가지인데 더 깊게 알면 좋겠지만 이런식으로 어느정도의 개념만 잡아도 이해의 향상은 실력의 향상과 직결될 수 있을 것이고 무엇보다 훨씬 재미가 있을 거라 믿는다
Written with StackEdit.
0 개의 댓글 :
댓글 쓰기