컴퓨터 프로그래밍의 역사 1 - kuimoani/dev-cheatsheet GitHub Wiki

개인적으로 소프트웨어 엔지니어로서의 공부 및 흥미를 위해 프로그래밍의 역사를 정리해 본다. 프로그래밍의 본질을 좀 더 깊이 파악하고 무심코 넘어갔던 것들의 유래를 좀 더 잘 알게되면 컴퓨터 프로그래밍이 앞으로 가야 할 방향도 어느정도 알게 되지 않을까.

가급적 시간순서로 정리하겠지만 설명 편의를 위해 꼬일 수도 있다. 또한 이 글은 역사적 사실이나 인물보다는 기술이나 동작방식에 대해 더 집중할 것이기 때문에 원조 논란, 최초 논란에 관련해서는 부족할 수 있다.

일단은 그때 그때 호기심으로 찾아본 것을 나열하고 점진적으로 시간순으로 정리할 예정.

Computer 라는 말의 유래

컴퓨터의 기원은 계산기(Calculator)이다. 그런대 왜 오늘 날은 컴퓨터(Computer)라고 부르는 것일까? 지금에야 계산기와 컴퓨터를 떠올릴 때 정확히 구별할 수 있지만, 과거에 컴퓨터는 순수 계산을 위한 목적으로 탄생하기도 했고, 이후에 다양한 기능이 추가되면서 기능도 모호해지고 이를 지칭하는 이름도 모호해 지기 시작했다.

1652년에 파스칼이 만든 계산기(파스칼의 계산기로 불리다가 파스칼린(Pascaline) 으로 불림)
1887년에 Arithmometer 라는 이름으로 불린 계산기
  • 1897년에 컴퓨터(Computer)라는 단어가 기계적 계산을 수행하는 기계를 뜻하는데 사용되었다.
  • 1946년에 계산 기계의 종류에 따라 제품명 또는 다양한 이름으로 불리웠다.
  • 1950년대 초에 컴퓨팅 머신(Computing machine)이 전자식 계산기계들을 통칭하는 용어로 쓰였다.
  • 이후 Computing machine 이 Computer 로 더 간단한 용어로 쓰여졌다.

Computer 라는 용어가 자리를 잡으면서 계산기(Calculator)라는 단어와도 구분이 더 명확해 지기 시작했다. 지금은 계산기는 크게 산술(Arithmetic)에 전문적인 기계, 컴퓨터는 산술(Arithmetic), 논리(Logic), 제어(Control)를 포괄하는 기계로 구분된다.

참고

계산도구의 탄생

현대의 주판

주판은 기원전 2700~2300년 메소포타미아에서 시작 되었다고 한다. 산술에서 오름과 내림의 개념을 도구를 사용해 계산했다는 것에 의미가 있다. 주판은 꿰어넣은 구슬의 숫자에 때라 5진법이나 6진법으로 다양하게 응용되었다는 것도 흥미롭다. 전후로 "산가지"나 "네이피어 막대" 같은 계산에 도움을 주는 도구가 여러 문명에서 다양하게 있지만 현대의 컴퓨터와의 관련성을 찾기엔 너무 먼 것 같다.

톱니바퀴(Gears)의 탄생

톱니바퀴의 기원은 너무 오래되어 정확히 알기 어렵지만 기원전 2700년경 중국에서 쓰였다는 기록도 있고, 기원전 400년경 아리스토텔레스의 책에서도 기록이 있다고 한다. 1300년대 초에는 예배시간을 알리기 위해 톱니바퀴의 원리가 적용된 대형시계가 성당이나 광장에 설치되기 시작했다. 1500년대에는 태엽(mainspring)을 동력원으로 사용하는 소형시계를 만들기 시작하면서 태엽, 톱니바퀴 등의 부품들도 소형화 되기 시작했다. 1600년대 부터는 과학자들이 기어에 수학적 개념을 동원하여 보다 정밀해지기 시작한 시기였다.

안티키테라 메커니즘(Antikythera mechanism)

안티키테라 메커니즘의 일부인 톱니바퀴

기원전 100~200년경 고대 그리스에서는 천문학 계산을 통해 일식이나 윤달을 수십년 전에 예측하거나 4년 주기의 고대올림픽 시기를 맞추기 위한 용도로 이 장치를 만들었다. 안티키테라 메커니즘이라는 이름은 이 장치의 잔해가 1901년 그리스 안티키테라 섬의 난파선에서 발견되어서 붙여진 것이다. 정확한 구조는 알 수 없지만 약 30개의 기어를 사용하여 천체를 예측하는 용도였기 때문에 최초의 아날로그 컴퓨터라는 수식어가 붙었다.

발견된 자료를 토대로 복원한 2007년의 안티키테라 메커니즘

참고

최초의 기계식 계산기의 탄생

1642년 프랑스에서 18세의 파스칼은 지방의 세금관련 관리직이었던 아버지의 일을 돕기 위해 최초의 기계식 계산기인 파스칼린(Pascaline)을 발명한다. 여섯 자리수 (0 ~ 999,999)의 숫자를 계산(아마도 당시의 화폐단위와 관련이 있을 듯)하기 위해 6개의 톱니를 맞물리게 했고, 1의 자릿수 톱니바퀴를 한 바퀴 돌리면 10의 자릿수 톱니바퀴가 1/10 만큼 맞물려 돌아간. 태엽시계에서 분침을 돌리면 시침도 함께 돌아가는 것과 같은 방식이다.

레고로 만든 파스칼린

https://www.edumedia-sciences.com/en/media/333-pascaline 에 가면 시뮬레이션 된 파스칼린을 직접 사용해 볼 수 있다. 내부 구조를 깊이 알고 싶다면 Blaise Pascal’s Mechanical Calculator: Geometric Modelling and Virtual Reconstruction

파스칼린은 덧셈과 뺄셈만 가능했기 때문에 지금 시각으로 본다면 그냥 직접 계산하는게 훨씬 낫지 않냐 하겠지만, 1600년대의 프랑스 문맹률을 생각한다면 덧셈 뺄셈만 하는 사람도 구하기 쉽지 않았을 것이다. 특히 세금관련 정부기관이라면 계산 속도보다는 정확성이 더욱 중요했을 것이라서 사람이 아닌 기계로 검증하는 것은 수요가 있었을 것이다.

현대의 컴퓨터에 끼친 영향도 꽤 있어 보인다.

  • 숫자를 보여주는 기계식 디스플레이가 있다. 이 원리는 자동차의 누적주행거리 계기판 등에 쓰일 정도로 최근까지 쓰이는 기술이다.
  • 바(Bar)를 올리거나 내리면 덧셈용 디스플레이와 뺄셈용 디스플레이 각각 보이게 해놨다. 덧셈 할때는 뺄셈 디스플레이의 태엽이 움직이지 않고, 뺄셈 할때는 덧셈의 디스플레이 태엽이 움직이지 않는다. 즉, 이전에 계산한 결과를 남겨 둘 수 있는데, 이는 CPU Register의 개념이라고 할 수 있다.
  • 태엽을 돌리기 위해 스타일러스 펜을 도입했다.

사실 동시대에 계산기계가 여러 곳에서 아이디어가 나오거나 발명되었다는 이야기가도 많고 여러 발명품들의 조합일 뿐이라는 이야기도 많지만 확실한 것은 파스칼린이 최초의 상용화 되어 판매까지 된 계산기계라는 것이다. 파스칼은 루이14세 왕에게 요청하여 본인만 생산, 판매할 수 있는 특허권을 얻었다.

파스칼이 루이14세에게 파스칼린의 특허를 요청한 편지

겉으로는 제품생산 직원들이 본인이 설계한 파스칼린을 제대로 못 만들어 본인의 명성에 금이 가는것을 막기 위해 했다고 알려져 있지만, 실상은 원리만 알면 복제하기 쉬운 본인 기계의 지적재산권을 지키기 위한 것이었을 것이다. 파스칼 사망 이후에 파스칼린을 기반으로 다양한 기계식 계산기가 연구, 발명된 것을 보면 현대의 상용vs오픈소스, 기업vs집단지성 대립은 16세기부터 있었나 보다.

참고

라이프니츠의 계산기

독일의 고트프리트 빌헬름 라이프니츠 (Gottfried Wilhelm von Leibniz)는 파스칼린에 곱셈과 나눗셈 기능을 추가하여 1694년에 Stepped Reckoner(단계적 계산기)를 출시했다.

라이프니츠의 계산기

사실 라이프니츠의 계산기는 당시의 제작기술 수준으로 인해 고장이 잦아서 큰 인기를 끌지는 못했다고 한다. 하지만 그는 1679년에 고대 중국의 음양(陰陽)에서 아이디어를 얻어 2진수를 사용한 산술법과 그 효율성에 관해 연구하기 시작했고 이 연구는 오늘날 2진수를 사용하는 컴퓨터의 발전에 기초가 된다. 그가 1703년에 발표한 "Explication de l'arithmétique binaire (이진 산술의 설명)" 논문을 보면 10진수 0~32 숫자를 2진수로 변환한 표를 볼 수 있고 10진수의 덧셈,뺄셈,곱셈,나눗셈을 2진수로 계산하는 방법을 설명하는 표도 볼 수 있다.

라이프니츠의 2진수 산술에 관한 논문 일부

또한 이러한 2진수의 효율성을 활용하여 계산기계를 만드는 것을 언급한 적도 있다. 예를 들어 위에 구슬이 여러개 있고 아래에는 숫자만큼의 구멍이 있는데 0일 경우 구멍이 막혀 있고, 1일 경우 구멍이 열려서 구슬이 떨어지는 식이다.

라이프니츠의 2진 계산기 상상도

이 아이디어는 당시엔 실제로 구현되지는 못했지만 한참 이후 천공카드(Punch card)를 사용하는 IBM 컴퓨터의 기반이 된다. 또, 그가 개발한 계산기(Stepped Reckoner)도 2진수 체계로 만들지는 않았다. 아마도 당시 계산기계는 연구목적 보다는 10진수를 사용한 돈 계산에 더 많이 쓰여서 수요가 없었던 것이 아닐까.

참고

이후 약 100년의 시간이 흐르고...

1700년대는 전기에 대한 연구가 시작된 때였다.

  • 1729년 영국의 그레이는 도체 부도체를 발견했다.
  • 1752년 미국의 프랭클린이 피뢰침을 발명했다.
  • 1800년 이탈리아의 볼타는 전류와 볼타전지를 발명했다. 그리고..

자카드 직기(Jacquard loom)의 탄생

1804년에는 프랑스의 직공이자 상인인 조셉 마리 자카드(Joseph Marie Jacquard)는 당시에 발명 되었던 천공카드와 다른 여러가지 발명품을 조합하여 비단무늬를 만드는 직조기계인 자카드 직기(Jacquard loom)를 개발한다.

자카드 직기(Jacquard loom)

이 천공카드를 활용한 입력과 비단에 출력되는 입출력 방식은 이후 찰스 배비지의 분석기관에 영향을 주게 된다. 여담으로 이 직조 기계의 성능이 너무 우수해서 직장을 잃게 된 당시 직조공들의 반발이 심했다고 한다.

참고

당시에...

  • 1821년 미국의 마이클 패러데이는 전자기유도실험을 통해 최초의 전기모터를 발명했다.

차분기관(Different Engine)의 탄생

1822년 영국의 수학자인 찰스 배비지(Charles Babbage)는 차분기관(Different Engine)이라고 불리는 다항식 계산기를 만들기 위한 연구를 시작했다. 당시 영국의 항해 기술은 삼각법 등 수학기법을 활용했는데 계산 편의를 위해 수학 테이블(Mathematical table)이라는 책을 계산기 처럼 두고 사용했다.

삼각함수 값을 표시한 1619년의 수학 테이블 책

영국정부는 이 수학 테이블 책을 상업적 군사적 목적으로 출판해왔는데 비용문제, 시간문제, 그리고 계산 정확도 문제가 있어서 배비지의 차분기관에 큰 돈을 투자하여 연구를 진행시킨다.

배비지의 차분기관을 돌려보지만...

차분기관의 차분은 유한차분법(Finite Difference Method)을 의미하며 덧셈만으로도 다항식을 계산할 수 있도록 설계했다. 기본 원리는 파스칼의 계산기 처럼 톱니바퀴가 맞물려 돌아가는 방식인데, 당시의 금속 기술로는 그만한 정밀도로 제작과 수급이 어렵고 수학 테이블 책 대비 가성비가 떨어져서 제품 생산은 실패로 끝난다.

참고

분석엔진(Analytical engine)의 탄생

비록 실패했지만 배비지는 포기하지 않고 후속 모델을 연구하는데 1837년에 분석엔진(Analytical engine)의 아이디어를 발표한다.
2탄에.... https://github.com/kuimoani/dev-cheatsheet/wiki/컴퓨터-프로그래밍의-역사-2