컴퓨터에 대하여
컴퓨터는 영어로 computer이에요, 계산(compute)에서 나왔죠.
뭐.. 과거에는 그냥 계산만 해주긴 했지만, 현대적인 의미에서의 컴퓨터는 프로그램의 요청에 따라 데이터를 처리해 주는 기계인 바이죠.
일단, 기계와 컴퓨터의 차이를 좀 알아볼까요
일반적으로, 기계란것들은 대부분 한 가지 일만 처리할 수 있습니다.
세탁기는 세탁만 하고, 건조기는 건조만 하고, 전자레인지는 요리만 해주고 말이죠..
하지만 컴퓨터는 조금 달라요. 이건 범용적인 기계입니다. 여러분이 어떻게 수정하거나 바꾸어서 많은 작업을 할 수 있죠.
왜냐? 컴퓨터는 그 자체로는 기계가 맞지만, 실제로는 그 위에 존재하는 프로그램이 컴퓨터를 구성하기 때문이에요.
만약 프로그램이 없다면 컴퓨터는 그저 약간의 열과 소음을 발생하는 기계에 불과하겠죠.
여러분이 지금 보시는 티스토리도, 윈도우즈 운영 체제와 추가로 설치된 크롬, 네이버, 다음과 같은 응용 프로그램의 도움이 있어서 볼 수 있지요.

그런데 말이죠, 왜 귀찮게 프로그램을 설치하도록 했을까요?
그냥 미리 다 깔아두면 되지 않나요?
어.. 답을 하자면, 무엇보다도 저장공간이 모자란.. 아니 이게 아니라 범용적인 기계를 만들기 위해서입니다.
여러분이 롤을 하다 질리면 유튜브를 깔아서 영상을 보면 되고, 이게 질리면 인터넷을 보고 즐기면 되고... 프로그램만 바꿔 주면 여러 가지 작업을 해 줄 수 있어요.
프로그램
좋아요, 이제 컴퓨터가 뭐하는건지는 알겠네요.
근데 그래서 프로그램은 뭔가요?
프로그램은 작업을 위한 지시서에요. 프로그램 내부에는 수많은 코드(code)가 존재하고, 이 코드들이 모여서 명령어(instruction)를 구성하고, 이 나열된 명령어들이 프로그램을 구동시키죠.
간단하게 예시를 짚어 볼까요?
프로그램 하나를 예시로 볼게요.
1. 첫 번째 숫자를 a에 저장합니다.
2. 두 번째 숫자를 b에 저장합니다.
3. a와 b를 더하여 c에 저장합니다.
4. c의 값을 화면에 출력합니다.
좋아요, 뭔가 누락된 부분도 많고 하자도 많긴 하지만, 일단 이건 프로그램이에요.
두 가지 숫자를 합쳐서 알려주는 프로그램이죠. 컴퓨터의 프로그램들도 결국 이것과 크게 다르지 않아요... 다른가?
프로그램과 컴퓨터의 역사
그렇다면 여기서 또 다시 의문.
프로그램은 언제부터 구동될수 있을까요? 최초의 컴퓨터는 무엇일까요?
최초의 컴퓨터는 유명한 애니악이지만.. 이건 프로그래밍이 가능한 최초의 기계는 아니죠.
가장 먼저 프로그래밍이 가능한 기계는 바로 해석기관이에요.
어.. 못만들어졌다고요? 이론상은 가능했어요.
가볍게 해석기관에 대해서 짚고 넘어가죠.
해석기관은 차분기관의 확장 부분이니 차분기관에 대해 먼저 알아봅시다.
차분기관은 영국의 수학자 찰스 배비지가 설계했지만 완성은 못한 기계식 계산기예요.
역시 흉악한 것들은 다 영국에서 나오는.. 아니 차분기관은
톱니바퀴와 기어를 이용하여 데이터를 저장하고 계산을 수행하며, 핸들을 돌려... 에너지를 공급해요.
여러 가지 수학적 계산을 할 수 있었고 정부의 지원도 받았지만 결과는 시궁창이었죠.
배비지는 이 실패에 굴하지 않고 해석기관 제작에 도전했고, 차분기관도 못 만들었는데 훨씬 더 크고 복잡한 해석기관을 어떻게 만들겠어요. 결국 망했어요.
심지어 이건 현재에도 못 만들었어요. 차분기관은 현대에 실제로 제작되기는 했지만 말이에요.
차분기관이 미리 만들어졌으면 증기심 같은 게 나왔을지도요... 아니 지구온난화가 빨리 와서 프로스트펑크가 도래했을지도..
원리는 알아서 찾아보세요. 여기선 간단히 짚고 넘어가지요.
자, 차분기관에 대해 간단히 알아봤으니 이제 해석기관에 대해 알아보지요.
해석기관은 증기기관을 동력 삼아(인력을 에너지원으로 사용했던 이전에 비해서는 비약적인 발전이로군요) CPU와 기억장치를 기계적으로 구현했는데, 어... 결국 못 만들었어요. 예산과 시간의 부족으로 말이죠.
심지어 이건 현재에도 못 만들었습니다. 어.. 영국에서(젠장 또 영국이야) 제작 프로젝트를 시행 중이기는 한데, 소식이야 들리는데 완성은 못했나 봅니다.
다만 이런 쓸모없는... 기계라도 나름 컴퓨터와 프로그래밍의 역사에 깊은 영향을 미쳤는데, 바로 에이다 러브레이스가 이 컴퓨터를 이용해 프로그래밍의 기초를 닦아 놓았기 때문이에요. 와 천재!
대표적으로는 서브루틴(subroutine)과 루프(loop), 점프(jump) 등의 프로그래밍 기본 원리를 고안하셨죠.
여담으로 찰스 배비지가 이분을 숫자의 마술사(Enchantress of Number)라고 부르셨지요.
자.. 쓸모없... 아니 야심 찬 해석기관에 대해 알아봤으니 이제 유명하신 최초의 컴퓨터!
바로 에니악(ENIAC)님을 모시겠습니다!!

와! 에니악님입니다.
정말 정말 거대하고 육중한 컴퓨터입니다. 겉보기에는 현대 서버실 같은데..
아무튼 에니악은 높이 2.5m, 길이 25m이고, 무게는 무려 32t였어요.
제작비용도 그 당시 달러로 50만 달러, 현재 우리 돈 가치로는 대력 100억 정도죠.
그럼 이건 어디다가 사용했을까요?
군용 목적으로 사용되었는데, 원래는 탄도만 계산하려다가 난수 연구, 우주선, 일기 예보 등 각종 과학 분야에 굴려졌어요.
요약하자면 32톤짜리 공학용 계산기였죠.
데이터 입출력 및 처리에는 천공 카드와 진공관... 을 사용했는데, 진짜 문제는 프로그래밍을 위해 사람이 직접 저 많은 전선을 뽑았다 끼웠다... 하면서 프로그래밍을 했기 때문이에요.
그래도 이 애니악의 등장으로 컴퓨터의 골조가 잡혔고, 넓게 보면 현대사회와 정보기술의 발달에도 기여했다고 볼 수 있어요.
여담으로 세계 최초의 컴퓨터라고는 볼 수 없긴 하지만 정말 유명하고, 위의 해석기관에는 에이다 러브레이스의 사례가 있다면 이 애니악에는 폰 노이만의 '폰노이만 구조' 구축에 끼친 지대한 영향이 있기도 합니다.
자, 폰노이만 구조는 중앙처리장치(CPU)와 메모리, 프로그램의 3가지 구성이 존재하는데, 프로그램을 쉽게 변경하기 위해 프로그램을 메인 메모리에 저장하고, 이를 다시 중앙처리장치(CPU)로 끌고 와서 하나씩 실행시키는 거예요.
그리고 여기서 버그를 버그(bug)라고 부르는 이유가 나왔는데, 에니악의 고장을 조사하다가 컴퓨터 안에서 타 죽은 벌레 때문에 고장이 나서... 버그의 어원이 되었답니다.
컴퓨터에게 일 시키기
자, 여러분은 배고파요. 컴퓨터에게 요리 좀 해달라고 합시다.
"사과를 깎은 다음, 잘라서 내와 줘"
라고 말하면 해줄까요? 안 해줍니다.
컴퓨터는 멍청해요. 사과가 뭔지는 알고, 깎는 단어에 대해서도 알지만...
문제는 어떻게 깎을지, 어떻게 자를지, 어떻게 내올 지에 대해 모른다는 겁니다.
멍청한 컴퓨터에게 일 시키기 위해, 저걸 좀 쪼개줍시다.
가장 좋은 것은 순차적으로 쪼개는 거예요. 일단 잘라봅시다.
1. 사과를 깎아
2. 잘라서
3. 내와
여기서 각자 부족한 법을 보충해 보죠.
1. 사과의 표면을 2mm 정도 깎아서 속살이 드러나게 해, 이때 도구는 칼을 이용해
2. 이 사과를 중심 부분을 지나는 선분으로 자르되, 각 선분은 30도 각도를 유지해, 이때 도구는 칼을 이용하고 사과는 도마 위에 올려놔
3. 이렇게 잘린 사과를 2열 횡대로 접시에 배치해서 가져와, 접시는 부엌 서랍 2층에 있어.
자, 복잡하죠?
여러분 부모님이 먹으라고 깎아오는 사과에도 이런 고생이 있다는 사실, 부모님께 감사하세요.
아무튼 본론으로 들어가서, 이렇게 상세하게 설명을 해줘야 컴퓨터가 이해를 한다는 겁니다.
이렇게 보면 컴퓨터는 단점만 있는 거 같지만, 장점도 많습니다.
여러분이 부모님에게 "사과 200개만 깎아 주세요"라고 하면 부모님에게 사과로 맞겠지만, 컴퓨터에게 "사과 200개 깎아 와" 하면 그대로 다 수행해 줍니다. 같은 작업을 무지막지하게 반복시켜도 불만이 없죠.
컴퓨터의 언어
자, 그럼 컴퓨터에게 저대로 말하면 일해줄까요?
그럴 리가, 컴퓨터는 오직 기계어(machine language)만 알아듣습니다. 거참 바라는 게 많아요.
기계어는 오직 0과 1로만 구성되어 있는 2진수로, 컴퓨터는 오직 전기가 흐름, 안흐름의 2개의 상태만 존재하기에 2진수를 사용하는 겁니다. 기계어는 하드웨어에 종속적이에요.
예시를 들자면...
10010101 00010010 10100101 01001010 10010101 11011011 01101011 10101111...입니다.
이해가 안 되신다고요? 저도 안 돼요. 저걸 이해하라고 하지는 않을 겁니다.
물론 기계어 가지고 프로그래밍을 하는 용자들도 있는데, 아주아주아주아주 불편하죠.
그래서 등장한 것이 프로그래밍 언어입니다. 자연어는 아니지만 그래도 알아먹을 수 있죠. 저 기계어를 보세요. 사람 알아듣나
이 프로그래밍 언어는 고급언어라고도 부르는데, 유명한 프로그래밍 언어들(C, JAVA, PYTHON, R, COBOL, C++..)등등이 해당합니다.
저 프로그래밍 언어(이를 테면 C 같은)를 짜고, 이를 기계어로 바꿔주는 것이 컴파일러(compiler)입니다. 과정은 컴파일(compile)라고 하죠.
물론 여기서 안 나온 어셈블리어(assembly) 같은 저급 언어(아, 급 나누는 건 아니고 저급 언어는 기계어에 가깝고, 고급 언어는 자연어(우리가 사용하는 언어)에 해당합니다.)도 있습니다.
이진수 말고 영어 약자 기호로 표시하고, 그리고.. 이 기호와 기계어 한 부분이 각각 대응합니다.
당연하게도 이걸 그대로 컴퓨터에 때려박을 수 없으니 어셈블러(assembler)를 사용해야겠죠.
여담으로 롤러코스터 타이쿤 시리즈의 개발자 "크리스 소이어"가 이 어셈블리어를 사용해 롤코타 시리즈를 만들었습니다....???.. 세상에는 참 천재가 많군요..
HTML은요?
아, 그건 마크업 언어라는 다른 건데..

아, 저기 보시면 고급 언어도 인터프리터 계열과 컴파일러 계열로 쪼갤 수 있는데, 컴파일러는 고급 언어의 문장을 기계어로 변환하고 저장해서 실행 파일로 바꿔주는 거고, 인터프리터는 고급 언어의 문장들을 필요할때마다 한줄한줄 해석해주는거에요.
당연히 컴파일러가 더 빠르겠지만.. 컴파일러는 나중에 코드가 두꺼워지면 자그마한 오류 수정하는데도 컴파일이 한세월이라는 단점이..
그리고 저급 언어는 당연하게도 기계어가 어셈블리어보다 더 저급입니다. 참조해 주세요.
자! 마지막으로 프로그래밍 언어의 발전사에 대해 알아봅시다.

당연하게도 여기 안나온 프로그래밍 언어들도 많아요. 스위프트나 스칼라, 자바스크립트 같은거 말이죠..
지금은 C가 밀려나고 있기는 한데, 저 50년도 넘어가는 구식언어가 아직도 순위권에 들었다는게 C의 놀라운 점이죠.
자! 개관은 이쯤 하고, 각 언어에 대해 알아봅시다.