오늘 끝나면
초기 프로그래밍 언어
- ✓기계어·어셈블리·고급 언어가 어떻게 다른지 한 줄로 설명한다
- ✓포트란·코볼이 왜 고급 언어인지, 컴파일러가 무슨 일을 하는지 말한다
- ✓추상화 사다리를 올라갈 때 얻는 것(속도·가독성)과 양보하는 것(세부 제어)을 한 가지씩 댄다
실습 미션
오른쪽 사다리에서 기계어부터 파이썬까지 같은 작업을 레벨별로 올려보며, 위로 갈수록 줄 수가 줄고 추상도가 오르는 것을 직접 확인한다.
성공 조건
- □기계어부터 파이썬까지 같은 작업을 레벨별로 다 봤다
- □위로 오를수록 줄 수가 줄어드는 것을 게이지로 확인했다
- □짧아지는 대신 세부 제어를 양보한다는 것을 말할 수 있다
어셈블리 · 포트란 · 코볼 · 컴파일러 · 추상화
초기 프로그래밍 언어
하드웨어를 손으로 만지던 코딩을, 풀 문제를 사람 말로 쓰면 기계가 기계어로 번역해주는 일로 바꿨다. 그 사다리 위에 지금의 모든 언어가 서 있다.
어셈블리의 고통, 하드웨어를 손으로 만진다
초기 코딩은 기계를 직접 만지는 일이었다.
기계어는 CPU가 알아듣는 0과 1의 명령이다. 사람이 읽기는 거의 불가능하다. 어셈블리는 그 명령에 mov·add 같은 기호를 붙인 것이고, 그래도 한 줄이 한 동작이다.
그래서 레지스터·메모리 주소·점프를 사람이 다 챙겨야 했다. 1부터 10까지 더하는 간단한 일도 일고여덟 줄이 든다.
오른쪽 패널에서 어셈블리를 한 줄씩 실행해보면, 사람이 챙겨야 할 것이 얼마나 많은지 손에 잡힌다.
합 레지스터를 0으로
문제를 말하는 언어, 포트란·코볼
1957년, IBM의 존 배커스 팀이 포트란을 냈다. 과학·수식 계산용이다.
기계 동작 대신 풀 문제를 SUM = SUM + I 처럼 사람 말로 쓰게 했다. 이렇게 사람 말에 가까운 언어를 고급 언어라 부른다.
1959년에는 코볼이 나왔다. 그레이스 호퍼의 영향으로 영어 문장에 가깝게, 은행·사무·회계용으로 만들었다.
덕분에 하드웨어를 몰라도 풀 문제만 알면 코드를 쓸 수 있게 됐다. 같은 일을 두 언어로 나란히 보면 결이 다르다.
SUM = 0
DO 10 I = 1, 10
SUM = SUM + I
10 CONTINUE
PRINT *, SUM더할 값과 범위를 적음, 풀 문제를 수식으로.
고급 = 기계 동작 말고 풀 문제를 사람 말로 적음
컴파일러, 사람 말을 기계어로 번역
그럼 사람 말로 쓴 코드를 CPU는 어떻게 알아듣는가?
컴파일러가 고급 언어 한 줄을 기계어 여러 줄로 번역한다. 사람은 문제를 쓰고, 번역은 기계가 한다. 1952년 그레이스 호퍼가 이 번역기 개념(A-0)을 처음 만들었다.
그래서 한 줄이 실제로는 여러 동작으로 펼쳐진다. SUM = SUM + I 한 줄이 불러오기·더하기·저장하기로 풀린다.
오른쪽에서 고급 코드 한 줄을 누르면, 컴파일러가 그 줄을 기계어 몇 줄로 펼치는지 직접 보면 된다.
사람은 문제만 한 줄로 적고, 번역(펼치기)은 컴파일러가 함.
추상화 사다리, 위로 갈수록 짧고 쉽다
기계어·어셈블리·포트란·파이썬을 한 줄에 세우면 사다리가 된다.
아래는 하드웨어에 가깝고 길고 어렵다. 위로 갈수록 사람 말에 가깝고 짧고 읽기 쉬워진다. 파이썬 한 줄이 기계어 수십 줄과 같은 일을 한다.
대신 위로 갈수록 레지스터·메모리 같은 세부 제어는 컴파일러에 양보한다. 얻는 것은 속도와 가독성이고, 잃는 것은 손제어다.
이 사다리 위에 지금의 모든 언어가 서 있다. 어디에 서느냐를 고르는 것이 곧 추상화의 선택이다.
직접 사다리 올라보기
오른쪽 사다리에서 같은 일(1~10 합)을 레벨별로 직접 올려본다.
슬라이더를 기계어에서 어셈블리, 포트란, 파이썬으로 올리면, 같은 작업의 코드가 줄어드는 것이 게이지로 보인다.
줄 수 게이지는 내려가고 추상도 게이지는 올라간다. 짧아지는 만큼 세부 제어는 양보한다는 것을 한 화면에서 확인하면 된다.
외우지 말고 슬라이더를 움직여 본다. 추상화가 무엇을 주고 무엇을 가져가는지 손에 잡힌다.
아래 = 하드웨어 가까움 · 위 = 사람 말 가까움
mov eax, 0
mov ecx, 1
loop:
add eax, ecx
inc ecx
cmp ecx, 10
jle loop레지스터·점프를 손으로 챙김.
기호로 바뀜. 그래도 한 줄=한 명령.
위로 오를수록 짧고 읽기 쉬워짐. 대신 세부 제어는 컴파일러에 양보함.