오늘 끝나면
초기 프로그래밍 언어
- ✓기계어·어셈블리·고급 언어가 어떻게 다른지 한 줄로 설명함
- ✓포트란·코볼이 왜 고급 언어인지, 컴파일러가 무슨 일을 하는지 말함
- ✓추상화 사다리를 올라갈 때 얻는 것(속도·가독성)과 양보하는 것(세부 제어)을 한 가지씩 댐
실습 미션
오른쪽 사다리에서 기계어부터 파이썬까지 같은 작업을 레벨별로 올려보며, 위로 갈수록 줄 수가 줄고 추상도가 오르는 걸 직접 확인함.
성공 조건
- □기계어부터 파이썬까지 같은 작업을 레벨별로 다 봤음
- □위로 오를수록 줄 수가 줄어드는 걸 게이지로 확인했음
- □짧아지는 대신 세부 제어를 양보한다는 걸 말할 수 있음
어셈블리 · 포트란 · 코볼 · 컴파일러 · 추상화
초기 프로그래밍 언어
하드웨어를 손으로 만지던 코딩을, 풀 문제를 사람 말로 쓰면 기계가 기계어로 번역해주는 일로 바꿈. 그 사다리 위에 지금의 모든 언어가 서 있음.
어셈블리의 고통 — 하드웨어를 손으로 만진다
초기 코딩은 기계를 직접 만지는 일이었음.
기계어는 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레지스터·점프를 손으로 챙김.
기호로 바뀜. 그래도 한 줄=한 명령.
위로 오를수록 짧고 읽기 쉬워짐. 대신 세부 제어는 컴파일러에 양보함.