[만화] 4. 처음에는 어떻게 프로그래밍을 했을까?

joone의 이미지
안녕하세요. http://joone.net에서 연재 중인 제 만화를
소개합니다.

컴퓨터가 처음 만들어졌을 때, 사람들은 어떻게 프로그래밍을 했을까? 사실, 처음에는 하나의 프로그램을 회로로 구성해서 컴퓨터를 만들었기 때문에 다시 프로그래밍을 할 수 없었다. 초기 컴퓨터는 마치 탁상용 전자계산기와 같았다. 에니악(Eniac)도 배선판을 교체해야 다른 프로그램을 실행할 수 있었는데, 천공카드를 기억장치로 사용했다[1].
실제 프로그래밍은 1949년에 에드박/에드삭과 같은 프로그램 내장형 컴퓨터가 만들어진 이후 가능했다. 프로그램은 기계가 이해할 수 있는 명령어로 구성되어 있는데, 이를 기계어라고 한다. 실제 기계어는 0과 1을 구분할 수 있는 이진수로만 이루어져 사람이 이해하기 어렵다.
그래서 생겨난 것이 어셈블리어(Assembly Language)다. 특히, 에드삭도 이미 오늘날도 같이 initial orders라는 어셈블리어를 사용해서 실행 코드를 작성했다. 실제 에드삭에서 사용한 어셈블리어 언어 예이다[2].
에드삭에서 사용하는 기계어 명령어는 모두 17비트로 이루어져있다. 첫번째 열이 동작코드(Operation code) 이고, 두번째 열인 1비트는 사용하지 않는다. 세번째, 열은 피연산자(operand)인데, 주소를 나타낸다. 마지막 비트는 현재 명령어가 17비트인지 또는 35 비트를 사용하는지 여부를 표시한다.

첫번째 명령어는 T라는 명령코드를 사용했는데, A를 의미하는 누산기(accumulator)에 있는 데이터를 메모리에 입력하고 누산기 데이터를 초기화하는 명령어이다. 두번째 명령어는 H라는 명령코드를 사용했는데, 메모리에서 데이터를 가져와 곱산 레지스터 R에 입력한다.

이와 같이, 기계어는 명령어 자체가 이진수에 불과하기 때문에 사람이 기억하고 바로 코드를 이해하기가 어렵다. 그래서 각각의 명령어를 상징적 기호(mnemonics)로 표현하여 어셈블리(assembly) 언어를 만들었다. 이렇게 표현된 코드를 CPU가 이해할 수 있는 기계어 코드로 변환하는 것으로 어셈블링(assembling)이라고 한다.

초기에는 이를 일일히 손으로 했기 때문에 핸드 어셈블링이라는 말을 사용했다. 물론, 어셈블링 도구가 없으면 지금도 니모닉 변환표를 보고 손으로 직접 어셈블링을 해야 한다. 이처럼 이미 1950년대 부터, 프로그래머들은 어셈블리어를 사용할 줄 알았다.
그런데, 1960년대까지 키보드와 모니터가 상용화되지 않았다. 최초로 모니터와 키보드가 달린 컴퓨터는 1964년 벨연구소와 MIT대학이 함께 개발한 멀틱스(Multics)였고[3], 1970년대 와서 대부분 컴퓨터가 모니터와 키보드가 결합된 터미널을 갖게 되었다. 그렇다면 그 전에는 프로그래머들은 어떻게 코딩을 하고 결과를 확인할 수 있었을까?


멀틱스 컴퓨터(모니터와 키보드를 처음으로 함께 사용했다)

초기 프로그래머들은 천공카드를 사용해서 코딩을 했다. 천공카드는 원래 19세기 말에 데이터를 입력하고 저장하는 용도로 사용되었는데, 미국 통계청에서 인구조사를 위해 사용하였다. 지금의 OMR 답안지를 생각하면 이해가 쉽다. IBM은 당시 천공카드 시스템을 개발하여 세계적으로 시스템을 공급하고 있었다. 이 천공카드가 초기 컴퓨터 사용에 큰 역할을 했다.

실제 사용은 이렇다. 우선 프로그래머는 종이에 어셈블리어로 코딩을 했다. 머리속에서 코드를 실행시켜 디버깅을 하고, 그 코드를 명령어 하나 하나 천공 카드에 기입하였다.

이렇게 준비된 천공 카드를 operator에게 전달하면 대신 컴퓨터에 입력해주고 실행 결과를 종이로 출력해서 전달했다. 물론, 현실은 operator에게 천공카드를 전달하려고 줄을 서야 했고, 실행 결과를 받을 때까지 많은 시간을 기다려야 했다. 물론, 결과가 제대로 안나오면 다시 천공카드를 만들고 실행하는 과정을 반복해야했다.

img_0677
재미있는 것은 천공카드만 복사하면 프로그램을 복사하는셈이여서, 그 때까지만 해도 프로그램 복사는 그저 손으로도 가능했다.

[1] http://www.seas.upenn.edu/about-seas/eniac/operation.php
[2] http://www.cl.cam.ac.uk/~mr10/edsacposter.pdf
[3] http://theinventors.org/library/inventors/blcomputer_keyboard.htm

댓글

황병희의 이미지

음 위에 안경 쓴 여자분 아폴로11호 작동체계 맨든 분 맞나요?

흥미로운 주제입니다 감사합니다^^^

[우분투 18.04 파여폭스 나비에서 적었어요~]

--
^고맙습니다 감사합니다_^))//

joone의 이미지

익명 사용자의 이미지

코어 덤프가 자기 코어 메모리에서 유래되었다고 하죠.
그리고 80컬럼은 천공카드에서 유래되었고요..재밌게 잘 봤습니다.

joone의 이미지

천공카드 80컬럼은 처음 알았네요. 전 그저 옛날 터미널이 80컬럼을 지원해서 그런줄 알았습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.