반도체
프로그래밍 언어의 가장 깊숙한 곳의 선조는 기계어이다
기계어는 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진수짜리랑 비교가 안될 것이 아닌가..
하지만 하나의 소재가 여러표현을 할 경우 그것이 무슨 표현을 하고 있는지를
알아보기가 점점 힘들어지며 특히나 작고 작게 만드는 와중에는
두가지의 표현을 확실하게 하는 놈을 왕창 때려박는 것이
여러표현을 하되 불확실한 놈을 몇개 박는 것보다 훨씬 나은 것이다
그러한 예로써 아날로그와 디지털의 장단점을 볼 수가 있다
아날로그는 현실의 현상을 아주 스무스하게 표현한다
손을 내렸다 올렸다 이게 아니라 손이 어디까지 올라갔다 어디까지 내려갔다를
디즈니 애니처럼 부드럽게 표현하기 위해 선연결처럼 끊김없이 표현한다
예를들면
전기가 0.01볼트 일때 0.01
전기가 0.02볼트 일때 0.02
...
전기가 1.15볼트 일때 1.15
전기가 1.16볼트 일때 1.16
이런식으로 디테일하게 표현할 수 있다
하지만 비가 와서 전압이 눈꼽만큼 상승하거나 하강하면 데이터가 오는 도중
변질된다. 그래서 잘못된 데이터들의 향연인 노이즈가 자주 발생한다
하지만 디지털의 경우 두가지 수로 표현하는 대신
미세하게 깎이거나 더해지는 잘못된 오류를 쿨하게 무시할 수 있어
완벽하게 맛탱이 간 데이터가 아닌담에야 거의 100%에 달하는 정확도를 자랑한다
전기가 0.01볼트 일때 0
전기가 0.02볼트 일때 0
...
전기가 1.15볼트 일때 1
전기가 1.16볼트 일때 1
또한 처음부터 데이터를 보낼때
0.15를 보내서 받는 쪽이 0.15를 받는 것과
01010 이런 데이터를 보내서 01010을 받는 쪽은 난이도가 다르다
예를들면
적당히 숙성된 빵을 보내달라해서 보냈는데 먼거리 후 도착했을때 고객이 보기에
그게 너무 숙성된 빵이 되었을 수가 있다
한편 밀가루를 보내거나 빵을 보내거나 둘중 하나로 하기로 하고 먼거리 후 도착했을때
빵이 좀 변하거나 하는 건 문제가 아니다 밀가루만 아니면 약속이 지켜지는 것이다
대신 디지털은 확실히 데이터간의 명확한 단절이 있는 만큼 연결되고 세밀한 표현에선
아날로그가 앞선다. 예를들면 음질 같은 것에 대해 많은 이들이 아날로그를 선호하는 것은 그러한 이유다
프로그래밍은..
컴퓨터는 저런식의 두가지 단순표현 소자를 그럭저럭 모아서 더 많은 걸 할 수 있는
애들로 만든 회로를 다시 더 모으고 모아서 집적시키고 거기서 더 모으고 모아서
완전 필살 압축한 칩들을 다시 몇개 더 모아서 CPU, 메인보드, 그래픽 카드를 만든 것을
다시 조립한 것이다
프로그래밍 언어도 01
=go 이런걸 모으고 모으고 모으고 또 모으다보니
0101010010101010010101
이렇게 되어버렸던 것이다.
근데 이짓하기 귀찮으니까 이것을 다시 0101000101010101
= go home 으로 압축했고
이 go home go back gogogo igo yougo nago
= fly 같이 더 압축되어
고급언어가 된것이다.
이제 이 fly를 번역기(컴파일러 compilor)를 통해서 압축풀어서 원래대로 무수한 0101 같은
걸로 이뤄진 exe 파일 같은 걸로 만드는 것을 프로그램을 컴파일 한다고 하는 것이다
그리고 exe를 실행시 거기에 적힌 기계어의 0과 1을 따라서 전자들이 반도체의 신호등 아래 여기저기
길을 돌아댕기는 것이 컴퓨터와 프로그래밍 언어의 실체라고 할 수 있다
요 길을 논리적으로 잘 만드는 것을 논리회로라 하며
그러한 길을 다니는 녀석들.. 즉 전기알갱이인 전자들을 잘 드라이빙하게
특성과 미끼들을 공부하는 것이 전자공학이며 걔네들이 돌아댕기면서 내뿜는 자기장도
곁들이면 전자기학이 된다
그리고 얘네들이 어디서 얼만큼 가고 어디서 넘어지고 하는걸 수치로 계산하는 것이
공학수학이고..
전공한 사람들은 아주 저수준부터(컴터관련에서 저수준은 더욱 깊다는 뜻이다)
이해하고 있으니 나처럼 학원에서 코딩만 배웠던 사람과는 차이가 많이 난다..;ㅁ;
하지만 그래도 요정도 개념만 알고 있어도 안드로메다에서 맨땅에 헤딩하는 것과는
시작부터 좀더 저수준(...)으로 잘 할 수 있을 것이다
잘 읽었습니다. 하나씩 이해해 가는게 재미있네요^^
언제나 감사합니다^^ 한동안 안보이셔서 우울했어요ㅠㅠ;
저도 감사합니다^^
코딩따라가는거 한꺼번에 하면 벅차서 힘들어질것 같아
최대한 그 다음날까지는 해보려고 합니다 ㅎ . 이번에는 밀려서 잠시 위기가 왔습니다^^
정말 유익한 글이네요. 많이 배웠습니다!
감사합니다. 저도 컴퓨터와 프로그래밍을 전혀 연관시키지 못했던 때가 있었는데
연결시키고 나니 실력이 일취월장... 은 아니고 뭔가 이해력이 상승된듯한 느낌을 받았죠
적어도 '아 그런거구나' 하는 느낌을 받았다면 뭔가를 배움에 있어서 차원이 틀려진다고 생각합니다
20년도 훌쩍 지난...그 예전...'전산학개론' 수업을 듣던 때가 떠올랐습니다.ㅎㅎㅎ
덕분에 까맣게 잊고 지내 던 기억을 꺼내보게 되었네요.^^ 감사합니다.