스킬캠퍼스
16 · 초기 프로그래밍 언어
강의

오늘 끝나면

초기 프로그래밍 언어

  • 기계어·어셈블리·고급 언어가 어떻게 다른지 한 줄로 설명함
  • 포트란·코볼이 왜 고급 언어인지, 컴파일러가 무슨 일을 하는지 말함
  • 추상화 사다리를 올라갈 때 얻는 것(속도·가독성)과 양보하는 것(세부 제어)을 한 가지씩 댐

실습 미션

오른쪽 사다리에서 기계어부터 파이썬까지 같은 작업을 레벨별로 올려보며, 위로 갈수록 줄 수가 줄고 추상도가 오르는 걸 직접 확인함.

성공 조건

  • 기계어부터 파이썬까지 같은 작업을 레벨별로 다 봤음
  • 위로 오를수록 줄 수가 줄어드는 걸 게이지로 확인했음
  • 짧아지는 대신 세부 제어를 양보한다는 걸 말할 수 있음

어셈블리 · 포트란 · 코볼 · 컴파일러 · 추상화

초기 프로그래밍 언어

하드웨어를 손으로 만지던 코딩을, 풀 문제를 사람 말로 쓰면 기계가 기계어로 번역해주는 일로 바꿈. 그 사다리 위에 지금의 모든 언어가 서 있음.

IBMMicrosoftOracle
P.0116 · 초기 프로그래밍 언어

어셈블리의 고통 — 하드웨어를 손으로 만진다

초기 코딩은 기계를 직접 만지는 일이었음.

기계어는 CPU가 알아듣는 0과 1의 명령임. 사람이 읽기 거의 불가능함. 어셈블리는 그 명령에 mov·add 같은 기호를 붙인 것 / 그래도 한 줄=한 동작임.

그래서 레지스터·메모리 주소·점프를 사람이 다 챙겨야 했음. 1부터 10까지 더하는 간단한 일도 일고여덟 줄이 듦.

오른쪽 패널에서 어셈블리를 한 줄씩 실행해보면, 사람이 챙겨야 할 게 얼마나 많은지 손에 잡힘.

어셈블리를 한 줄씩 밟으면 레지스터가 바뀐다
어셈블리 한 줄씩 · 1~10 합 구하기
한 줄 = 한 동작 · 화살표가 다음 실행할 줄
mov eax, 0
mov ecx, 1
loop: add eax, ecx
inc ecx
cmp ecx, 10
jle loop

합 레지스터를 0으로

eax (합)
0
ecx (카운터)
0
밟은 줄 0
P.0216 · 초기 프로그래밍 언어

문제를 말하는 언어 — 포트란·코볼

1957년, IBM의 존 배커스 팀이 포트란을 냄. 과학·수식 계산용임.

기계 동작 대신 풀 문제를 사람 말로 쓰게 함 — SUM = SUM + I 처럼. 이렇게 사람 말에 가까운 언어를 고급 언어라 부름.

1959년엔 코볼이 나옴. 그레이스 호퍼의 영향으로 영어 문장에 가깝게, 은행·사무·회계용으로 만듦.

덕분에 하드웨어를 몰라도 풀 문제만 알면 코드를 쓸 수 있게 됨. 같은 일을 두 언어로 나란히 보면 결이 다름.

어셈블리 vs 고급 언어 — 같은 일을 나란히
같은 일(1~10 합) · 세 언어로
고급 언어IBM · 존 배커스 — 수식 계산용
      SUM = 0
      DO 10 I = 1, 10
        SUM = SUM + I
   10 CONTINUE
      PRINT *, SUM

더할 값과 범위를 적음 — 풀 문제를 수식으로.

고급 = 기계 동작 말고 풀 문제를 사람 말로 적음

P.0316 · 초기 프로그래밍 언어

컴파일러 — 사람 말을 기계어로 번역

그럼 사람 말로 쓴 코드를 CPU는 어떻게 알아듣나?

컴파일러가 고급 언어 한 줄을 기계어 여러 줄로 번역해줌. 사람은 문제를 쓰고, 번역은 기계가 함. 1952년 그레이스 호퍼가 이 번역기 개념(A-0)을 처음 만듦.

그래서 한 줄이 실제론 여러 동작으로 펼쳐짐 — SUM = SUM + I 한 줄이 불러오기·더하기·저장하기로 풀림.

오른쪽에서 고급 코드 한 줄을 누르면, 컴파일러가 그 줄을 기계어 몇 줄로 펼치는지 직접 보면 됨.

고급 한 줄을 누르면 기계어로 펼쳐진다
컴파일러 · 고급 한 줄 → 기계어 여러 줄
고급 언어 — 한 줄 눌러보셈
컴파일러가 펼친 기계어
mov eax, [SUM]
add eax, [I]
mov [SUM], eax
사람이 적은 줄 vs 기계가 받는 줄1줄 → 3

사람은 문제만 한 줄로 적고, 번역(펼치기)은 컴파일러가 함.

P.0416 · 초기 프로그래밍 언어

추상화 사다리 — 위로 갈수록 짧고 쉽다

기계어·어셈블리·포트란·파이썬을 한 줄에 세우면 사다리가 됨.

아래는 하드웨어에 가깝고 길고 어려움. 위로 갈수록 사람 말에 가깝고 짧고 읽기 쉬워짐 / 파이썬 한 줄이 기계어 수십 줄과 같은 일을 함.

대신 위로 갈수록 레지스터·메모리 같은 세부 제어는 컴파일러에 양보함. 얻는 건 속도와 가독성, 잃는 건 손제어임.

이 사다리 위에 지금의 모든 언어가 서 있음. 어디에 서느냐를 고르는 게 곧 추상화의 선택임.

한 사다리 위 네 단계 — 줄 수와 가독성 대비
추상화 사다리 · 같은 일(1~10 합)
줄 수 (짧을수록 좋음)사람 말에 가까움 ↑기계어12어셈블리7포트란5파이썬1위로 갈수록 짧고 쉬움 · 대신 세부 제어는 양보함
P.0516 · 초기 프로그래밍 언어

직접 사다리 올라보기

오른쪽 사다리에서 같은 일(1~10 합)을 레벨별로 직접 올려볼 것.

슬라이더를 기계어→어셈블리→포트란→파이썬으로 올리면, 같은 작업의 코드가 줄어드는 게 게이지로 보임.

줄 수 게이지는 내려가고 추상도 게이지는 올라감. 짧아지는 만큼 세부 제어는 양보한다는 걸 한 화면에서 확인하면 됨.

외우지 말고 슬라이더를 움직여 볼 것. 추상화가 무엇을 주고 무엇을 가져가는지 손에 잡힘.

레벨 슬라이더로 같은 일(1~10 합)을 기계어→어셈블리→포트란→파이썬으로 올리면, 줄 수는 줄고 추상도는 오르는 걸 게이지로 봄.
추상화 사다리 · 같은 일(1~10 합), 다른 언어
레벨 — 슬라이더로 사다리 오르기ASSEMBLY

아래 = 하드웨어 가까움 · 위 = 사람 말 가까움

같은 작업 · 어셈블리로 적으면7
    mov eax, 0
    mov ecx, 1
loop:
    add eax, ecx
    inc ecx
    cmp ecx, 10
    jle loop
줄 수7줄

레지스터·점프를 손으로 챙김.

추상도50%

기호로 바뀜. 그래도 한 줄=한 명령.

위로 오를수록 짧고 읽기 쉬워짐. 대신 세부 제어는 컴파일러에 양보함.

3줄 요약

  1. 1어셈블리는 하드웨어를 손으로 만져서 느리고 어려웠음 — 한 줄=한 동작.
  2. 2포트란·코볼이 문제를 말로 쓰게 했고, 컴파일러가 그 한 줄을 기계어 여러 줄로 번역함.
  3. 3추상화 사다리를 올라갈수록 짧고 읽기 쉬워짐 — 대신 세부 제어는 양보함.

완료 전 점검

복습 카드

기계어

CPU가 직접 읽는 0과 1의 명령

어셈블리

기계어 명령에 mov·add 기호를 붙인 저수준 언어

고급 언어

포트란·코볼처럼 사람 말에 가까운 언어