스킬캠퍼스

오늘 끝나면

초기 프로그래밍 언어

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

실습 미션

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

성공 조건

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

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

초기 프로그래밍 언어

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

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 기호를 붙인 저수준 언어

고급 언어

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