문서 읽는 데 39분 · A2

A-2: 프로그램과 프로그래밍 언어

목차 27
전체 7강 중 2강 · 개발 입문
난이도 · 입문

ℹ️코딩이 처음인 비전공자를 위한 첫 과목 — 컴퓨터의 원리와 “프로그래밍적 사고”를 먼저 잡아요. 선수 지식 없이 시작할 수 있어요.

안녕하세요, 홍순구 튜터입니다. 두 번째 시간에 다시 만났네요. 첫 시간을 무사히 넘기셨다는 것만으로도 이미 큰 한 걸음을 떼신 거예요.

지난 시간을 잠깐 떠올려 볼게요. 우리는 컴퓨터의 정체를 들여다봤습니다. 컴퓨터는 똑똑한 게 아니라 아주 빠른 계산기였고, 모든 것을 0과 1로 다뤘고, 명령을 위에서부터 한 줄씩 순서대로 실행했죠. 그리고 마지막에 의문 하나를 남겨 뒀어요 — 컴퓨터가 0과 1만 알아듣는다면, 우리는 그 0과 1을 일일이 적어서 명령해야 할까?

다행히 아닙니다. 오늘은 바로 그 사이를 잇는 이야기예요. 우선 "프로그램"이라는 말이 정확히 무슨 뜻인지 잡고, 0과 1만 아는 컴퓨터에게 어떻게 사람의 말에 가까운 언어로 일을 시키는지, 그리고 그 사람의 말을 컴퓨터의 말로 바꿔주는 번역의 비밀까지 풀어봅니다. 오늘도 코드는 한 줄도 치지 않아요. 큰 그림을 잡는 시간입니다.

텍스트
   오늘의 여정 — 프로그램과 프로그래밍 언어

    프로그램은 결국 '명령을 순서대로 적은 것'
    기계어 — 컴퓨터가 진짜 알아듣는 단 하나의 말
    사람 쪽으로 한 계단씩 — 언어의 계층
    번역 방식  컴파일러 = 번역서
    번역 방식  인터프리터 = 통역사
    언어는 왜 이렇게 많을까 — 용도별 지도
    '언어 중립' — 왜 문법보다 사고가 먼저인가

①②에서 "프로그램이란 무엇이고, 컴퓨터가 진짜 아는 말은 무엇인가"를 잡습니다. ③에서 사람의 말과 기계의 말 사이를 잇는 언어의 계단을 보고, ④⑤에서 그 사이를 번역하는 두 방식을 비교합니다. ⑥⑦에서는 언어가 왜 이렇게 많은지, 그리고 이 과목이 왜 특정 문법 대신 "사고"를 먼저 가르치는지를 매듭짓습니다.

💡 오늘 수업의 핵심 — "프로그램은 컴퓨터에게 시킬 명령을 순서대로 적어 둔 것이고, 컴퓨터가 진짜 아는 말은 0과 1(기계어)뿐이라, 사람은 읽기 쉬운 고급 언어로 적은 뒤 번역기(통째로 미리 바꾸는 컴파일러·한 줄씩 실시간으로 바꾸는 인터프리터)를 거쳐 기계어로 옮긴다. 언어는 용도별로 많지만 그 바탕의 사고는 하나라서, 우리는 문법보다 사고를 먼저 배운다"

🎯 학습 목표

  • 프로그램이 "명령의 순서"라는 뜻을 요리 레시피에 빗대 설명하고, 순서가 왜 결정적인지 이해합니다.
  • 기계어→어셈블리→고급 언어로 이어지는 언어의 계층을 이해하고, 컴파일러(번역서)와 인터프리터(통역사)의 차이를 비유로 설명합니다.
  • 프로그래밍 언어가 왜 여러 개인지(용도별)와, 이 과목이 특정 문법 대신 언어 중립 사고를 먼저 가르치는 이유를 자기 말로 정리합니다.

Step 1: "프로그램은 명령을 순서대로 적어 둔 것"

지난 시간 마지막에, 프로그램을 "컴퓨터에게 시킬 명령들을 순서대로 적어 둔 것"이라고 한 줄로만 짚고 넘어갔어요. 오늘 그 한 줄을 제대로 풀어볼게요. 사실 이 말 안에 프로그래밍의 절반이 들어 있습니다.

가장 가까운 비유는 요리 레시피예요. 라면 봉지 뒤의 조리법을 떠올려 보세요.

텍스트
   라면 끓이기 — 레시피 한 장

   ① 물 550ml 를 끓인다
   ② 면과 분말 스프를 넣는다
   ③ 4분 30초 더 끓인다
   ④ 불을 끄고 그릇에 담는다

   레시피 = 할 일을 '순서대로' 적어 둔 것
   프로그램도 똑같다 = 컴퓨터가 할 일을 순서대로 적어 둔 것

레시피가 하는 일이 뭐죠? "무엇을, 어떤 순서로 해야 하는지"를 빠짐없이 적어 두는 거예요. 그걸 그대로 따라 하면 누구든 라면을 끓일 수 있습니다. 프로그램도 똑같아요. 컴퓨터에게 "이걸 하고, 그다음 이걸 하고, 그다음 이걸 해라"를 순서대로 적어 둔 게 프로그램입니다.

여기서 지난 시간의 핵심 하나가 다시 나와요 — 컴퓨터는 시킨 것만 합니다. 알아서 눈치껏 해주는 게 없죠. 레시피에 "물을 끓인다"를 안 적으면, 요리사는 찬물에 면을 넣어 버려요. 컴퓨터도 똑같이 우리가 적은 명령만, 적은 순서대로, 하나도 건너뛰지 않고 따라갑니다. 그래서 프로그램을 짤 때는 "내가 당연하다고 여긴 단계"까지 전부 적어 줘야 해요.

그리고 또 하나, 순서가 결정적입니다. 같은 명령이라도 순서가 바뀌면 결과가 완전히 달라져요.

텍스트
   같은 두 명령, 순서만 바꿔도 결과가 다르다

   순서 A
   ① 컵에 물을 붓는다
   ② 컵 뚜껑을 닫는다
   결과  물이 잘 담긴 컵

   순서 B
   ① 컵 뚜껑을 닫는다
   ② 컵에 물을 붓는다
   결과  물이 밖으로 쏟아진다

명령은 똑같이 "물 붓기"와 "뚜껑 닫기" 둘뿐이에요. 그런데 순서만 뒤집었더니 한쪽은 멀쩡하고 한쪽은 엉망이 됐죠. 컴퓨터에게도 이게 그대로 적용됩니다. 지난 시간에 "프로그래밍에서는 순서가 정말 중요하다"고 했던 게 바로 이 이야기예요. 자판기를 떠올려도 좋아요 — 동전을 먼저 넣고 버튼을 눌러야 음료가 나오지, 버튼부터 누르면 아무 일도 안 일어나잖아요. 동작에는 지켜야 할 순서가 있습니다.

💡 한 줄 정리

프로그램은 컴퓨터에게 시킬 명령을 순서대로 적어 둔 것(요리 레시피 같은)이고, 컴퓨터는 시킨 것만 그 순서대로 따르기 때문에 "순서"가 결과를 좌우한다.

🙋 학생 질문 — "튜터님, 그럼 프로그램이랑 앱이랑 소프트웨어는 다 같은 말인가요?"

거의 같은 말이라고 생각하셔도 됩니다. 셋 다 "명령을 순서대로 모아 둔 것"이라는 본질은 똑같아요. 다만 부르는 상황이 조금씩 달라요.

프로그램이 가장 기본이 되는 말이에요. 소프트웨어는 그 프로그램들을 묶어서 부르는 좀 더 넓은 말이고요(눈에 보이는 하드웨어 부품과 대비되는, 눈에 안 보이는 명령 덩어리 전체를 가리켜요). (애플리케이션)은 그중에서도 우리가 직접 켜서 쓰는 프로그램을 친근하게 줄여 부르는 말입니다. 스마트폰 화면의 아이콘 하나하나가 앱이죠.

그러니 "카카오톡은 앱이자 프로그램이자 소프트웨어다"라고 말해도 다 맞아요. 지금 단계에서는 셋을 굳이 엄격히 구분할 필요 없이, "전부 명령을 모아 둔 것"이라는 큰 그림만 가져가면 충분합니다.


Step 2: "기계어 — 컴퓨터가 진짜 알아듣는 단 하나의 말"

프로그램이 "명령의 순서"라는 건 알았어요. 그런데 그 명령을 무슨 말로 적어야 컴퓨터가 알아들을까요? 여기서 지난 시간의 가장 중요한 사실 하나가 발목을 잡습니다 — 컴퓨터는 0과 1만 알아들어요.

컴퓨터가 곧장 알아듣는 이 0과 1로 된 명령을 기계어(machine code, 기계의 말)라고 불러요. 컴퓨터의 모국어인 셈이죠. 우리가 "3과 5를 더해라" 같은 간단한 일을 시키려 해도, 컴퓨터에게 곧장 전하려면 이런 모습이 됩니다.

텍스트
   기계어 — 컴퓨터의 모국어 (0 과 1 로 된 명령)

   사람이 시키고 싶은 것
   "3 과 5 를 더해라"
        │   컴퓨터가 곧장 아는 형태로는…
        
   10110000 00000011
   00000100 00000101
        │
        
   0 과 1 의 나열. 컴퓨터는 오직 이것만 곧장 알아듣는다.

보기만 해도 머리가 어질하죠. 그런데 컴퓨터 입장에서는 이게 가장 또렷하고 빠른 말이에요. 지난 시간에 배웠듯 0과 1은 전기의 꺼짐·켜짐이라 절대 안 헷갈리니까요. 컴퓨터에게는 더없이 편한 말입니다.

문제는 사람이에요. 사람이 이 0과 1로 프로그램을 직접 짠다고 상상해 보세요. 명령 하나가 0과 1 수십 개의 나열인데, 그게 수천, 수만 줄이 됩니다. 게다가 그중 0 하나를 1로 잘못 적으면? 전혀 다른 명령이 돼서 프로그램이 엉뚱하게 동작하거나 아예 멈춰요. 어디서 틀렸는지 0과 1의 바다에서 찾아내는 건 거의 불가능에 가깝습니다.

그래서 사람에게는 0과 1보다 읽고 쓰기 쉬운 말이 필요했어요. "10110000 00000011" 대신 "3과 5를 더해라"에 가깝게 적고 싶은 거죠. 바로 여기서 프로그래밍 언어의 역사가 시작됩니다. 컴퓨터가 편한 말(기계어)과 사람이 편한 말 사이의 거리를, 한 걸음씩 사람 쪽으로 좁혀 온 거예요. 그 계단을 다음 Step에서 봅니다.

💡 한 줄 정리

컴퓨터가 곧장 알아듣는 유일한 말은 0과 1로 된 기계어인데, 사람이 그걸로 직접 짜기엔 너무 읽기 어렵고 실수하기 쉬워서, 더 사람에 가까운 언어가 필요해졌다.

🙋 학생 질문 — "튜터님, 그럼 아주 옛날 사람들은 진짜로 0과 1을 적어서 프로그램을 짰나요?"

놀랍게도 정말 그랬어요. 컴퓨터가 막 나온 초창기에는, 사람이 직접 0과 1에 해당하는 신호를 하나하나 넣어 줬습니다.

스위치를 켜고 끄는 방식으로 0과 1을 입력하기도 했고, 종이 카드에 구멍을 뚫어서(구멍이 있으면 1, 없으면 0인 식으로) 컴퓨터에 먹이는 방식도 있었어요. 프로그램 하나를 짜려면 카드를 수백, 수천 장 뚫어야 했고, 그 카드 한 장 순서가 뒤섞이면 처음부터 다시 해야 했죠. 정말 고된 일이었습니다.

이게 얼마나 비효율적이었으면, 사람들이 곧바로 "이건 사람이 할 짓이 아니다"라고 느꼈겠어요. 그래서 0과 1을 사람이 외우기 쉬운 짧은 단어로 바꿔 적는 방법, 더 나아가 사람의 말에 가까운 언어를 만드는 길로 빠르게 나아갔습니다. 오늘 배우는 "언어의 계층"이 바로 그 노력의 결과물이에요.


Step 3: "사람 쪽으로 한 계단씩 — 언어의 계층"

사람이 기계어로 직접 짜는 건 너무 힘들다는 걸 봤어요. 그래서 사람들은 컴퓨터의 말(0과 1)과 사람의 말 사이에 계단을 놓았습니다. 한 번에 멀리 가는 대신, 사람 쪽으로 한 계단씩 올라온 거예요. 그 계단을 그림으로 보면 이렇습니다.

텍스트
   언어의 계층 — 위로 갈수록 사람 친화, 아래로 갈수록 기계 친화

    사람이 읽기 쉬움
   │
   │   고급 언어     "3 과 5 를 더해서 결과를 보여줘" 에 가까운 말
   │                 우리가 배우는 거의 모든 언어가 여기에 속한다
   │
   │   어셈블리      기계어에 사람이 외우기 쉬운 별명을 붙인 단계
   │                 (더하라 = ADD 처럼 짧은 약속어)
   │
   │   기계어        0 과 1 그 자체. 컴퓨터가 곧장 아는 유일한 말
   │
    기계가 읽기 쉬움

맨 아래가 기계어예요. Step 2에서 본 그 0과 1이죠. 컴퓨터에게는 가장 편하지만 사람에게는 가장 불편한 말입니다.

한 계단 올라오면 어셈블리(assembly)예요. 어셈블리는 기계어에 사람이 외우기 쉬운 별명을 붙인 거예요. 예를 들어 "더하라"라는 기계어 명령(0과 1 덩어리)에 "ADD"라는 짧은 영어 별명을 붙이는 식이죠(이 "ADD"도 고급 언어의 단어가 아니라 기계어에 붙인 별명일 뿐이에요). 0과 1을 외우는 것보다는 훨씬 낫지만, 여전히 컴퓨터의 동작 하나하나에 딱 붙어 있어서 사람이 쓰기엔 까다롭습니다.

그리고 맨 위가 고급 언어(high-level language)예요. 여기까지 오면 꽤 사람의 말에 가까워집니다. "3과 5를 더해서 결과를 보여줘"라는 우리 생각을, 거의 그 느낌 그대로 적을 수 있어요. "높을 고(高)"를 써서 고급 언어라고 부르는데, 비싸거나 어렵다는 뜻이 아니라 사람에게 더 가깝게(추상의 수준이 높게) 올라왔다는 뜻이에요. 우리가 앞으로 배울 언어들(자바·파이썬 같은)은 전부 이 고급 언어에 속합니다.

핵심은 이 방향이에요. 위로 갈수록 사람이 읽고 쓰기 편하고, 아래로 갈수록 기계에 가깝습니다. 우리는 거의 항상 맨 위 고급 언어로 코드를 적어요. 그럼 한 가지 의문이 남죠 — 사람 편한 고급 언어로 적으면, 컴퓨터는 그걸 못 알아들을 텐데? 맞아요. 그래서 그 사이에 번역이 필요합니다. 그게 다음 두 Step의 주제예요.

💡 한 줄 정리

프로그래밍 언어는 기계어(0과 1)→어셈블리(별명)→고급 언어(사람 말에 가까움)의 계층을 이루며, 위로 갈수록 사람이 읽기 쉽고 우리가 배우는 건 대부분 맨 위의 고급 언어다.

🙋 학생 질문 — "튜터님, 고급 언어가 사람한테 편하면, 어셈블리나 기계어는 이제 안 쓰나요? 왜 아직도 있나요?"

좋은 질문이에요. 결론부터 말하면, 대부분의 사람은 고급 언어만 쓰지만 기계에 가까운 말이 여전히 필요한 곳이 있어요.

기계에 가까울수록(아래 계단일수록) 컴퓨터의 동작을 아주 세밀하게, 그리고 빠르게 통제할 수 있거든요. 그래서 1초가 아쉬운 곳, 메모리 한 칸까지 아껴야 하는 곳에서는 지금도 낮은 계단의 언어가 쓰입니다. 예를 들어 컴퓨터를 켜면 가장 먼저 도는 핵심 프로그램이나, 아주 작은 기계(세탁기·자동차 안의 작은 컴퓨터 같은) 속 프로그램이 그래요.

하지만 그런 특수한 곳을 빼면, 우리가 만드는 대부분의 프로그램은 고급 언어로 충분히, 그리고 훨씬 편하게 만들 수 있어요. "세밀한 통제 vs 편하게 빨리 만들기"라는 장단점이 있는 거죠. 이 깊은 이야기(왜 낮은 계단이 빠른가)는 컴퓨터 구조를 다루는 cs-fundamentals 과목에서 더 만날 수 있어요. 지금은 "사람은 주로 맨 윗계단을 쓴다"만 알면 충분합니다.


Step 4: "번역의 첫 번째 방식 — 컴파일러는 번역서다"

우리는 고급 언어로 코드를 적어요. 그런데 컴퓨터는 기계어(0과 1)만 안다고 했죠. 그러면 둘 사이에 번역이 꼭 필요합니다. 사람이 적은 고급 언어를, 컴퓨터가 아는 기계어로 옮겨 주는 거예요. 이 번역을 해주는 도구를 번역기라고 부르는데, 번역하는 방식이 크게 두 가지예요. 오늘 그 둘을 하나씩 만나봅니다. 첫 번째는 컴파일러(compiler)예요.

컴파일러를 가장 잘 보여주는 비유는 번역서입니다. 외국 소설을 한국어로 옮긴 번역서를 떠올려 보세요. 누군가 그 소설을 통째로, 미리 번역해서 한 권의 책으로 만들어 둔 거잖아요. 일단 번역서가 나오면, 독자들은 번역가 없이도 언제든 그 책을 읽을 수 있죠.

텍스트
   컴파일러 = 번역서 만들기 (통째로 미리 번역)

   내가 쓴 고급 언어 코드
        │   컴파일러가 통째로 한 번에 번역
        
   기계어로 된 '완성된 책' (실행 파일)
        │   번역은 이걸로 끝. 실행할 때마다
        
   컴퓨터가 곧장 빠르게 실행 (다시 번역하지 않는다)

컴파일러도 똑같이 일해요. 내가 고급 언어로 다 적어 두면, 컴파일러가 그걸 통째로 한 번에 기계어로 번역해서 "완성된 책" 한 권을 만들어 줍니다. 이 책을 실행 파일이라고 불러요. 이미 기계어로 다 옮겨졌으니, 컴퓨터는 이 파일을 군말 없이 곧장 빠르게 실행합니다. 한 번 번역해 두면 몇 번을 실행하든 다시 번역할 필요가 없어요.

대신 치러야 할 것도 있어요. 번역서를 만들려면 처음에 통째로 번역하는 시간이 걸리죠. 그리고 원작자가 소설을 조금이라도 고치면? 번역서를 처음부터 다시 찍어야 합니다. 컴파일러도 똑같아서, 코드를 조금 고칠 때마다 전체를 다시 번역(흔히 "빌드"라고 불러요)해야 새 실행 파일이 나와요. "한 번 번역해 두면 빠르게 여러 번 실행, 단 고칠 때마다 다시 번역"이 컴파일 방식의 성격입니다.

💡 한 줄 정리

컴파일러는 고급 언어 코드를 통째로 미리 기계어로 번역해 실행 파일을 만들어 두는 방식(번역서)이라, 한 번 번역하면 실행이 빠르지만 코드를 고칠 때마다 전체를 다시 번역해야 한다.

🙋 학생 질문 — "튜터님, 그럼 우리가 평소에 설치해서 쓰는 앱들이 이 '완성된 책'인가요?"

많은 경우 그렇다고 보시면 돼요. 우리가 컴퓨터나 스마트폰에 설치해서 쓰는 프로그램들은, 상당수가 이미 기계어로 번역이 끝난 "완성된 책"(실행 파일) 상태로 우리에게 옵니다.

그래서 흥미로운 점이 하나 있어요. 우리는 그 앱을 만든 사람이 어떤 고급 언어로 어떻게 적었는지(원본 코드)를 보지 못하고도, 앱을 멀쩡히 쓸 수 있죠. 번역이 끝난 책만 받았으니까요. 회사들이 자기 프로그램의 원본 코드는 공개하지 않고 실행 파일만 배포할 수 있는 것도 이 덕분이에요.

물론 모든 프로그램이 이런 건 아니에요. 다음 Step에서 볼 또 다른 번역 방식(통역사 방식)으로 도는 프로그램도 많습니다. 두 방식이 어떻게 다른지 보고 나면, "왜 어떤 건 설치하고 어떤 건 그때그때 도는지"가 한결 또렷해질 거예요.


Step 5: "번역의 두 번째 방식 — 인터프리터는 통역사다"

두 번째 번역 방식은 인터프리터(interpreter)예요. 이름에서 눈치채셨을 수도 있는데, 인터프리터는 통역사입니다. 컴파일러가 "번역서"였다면, 이쪽은 "실시간 통역사"예요.

외국인 손님과 대화하는 자리에 통역사가 있다고 생각해 보세요. 통역사는 미리 책을 만들어 두지 않아요. 손님이 한 문장 말하면 그 자리에서 바로 옮기고, 또 한 문장 말하면 또 옮기고… 이렇게 한 줄씩, 그때그때 통역합니다.

텍스트
   인터프리터 = 통역사 (한 줄씩 그 자리에서 번역)

   내가 쓴 고급 언어 코드
        │   인터프리터가 첫 줄을 읽고
        
   그 한 줄을 즉시 번역해서 실행
        │   바로 다음 줄로
        
   또 한 줄 읽고  번역  실행  (줄마다 이걸 반복)

인터프리터도 똑같이 일해요. 내 코드를 미리 통째로 번역해 두는 게 아니라, 실행하는 순간에 한 줄을 읽어 번역하고 곧장 실행합니다. 그리고 다음 줄로 넘어가 또 읽고, 번역하고, 실행하고… 이걸 끝까지 반복해요. 통역사가 대화 내내 곁에 붙어 있듯, 인터프리터는 프로그램이 도는 내내 함께 일합니다.

이 방식의 장점은 바로 시작할 수 있다는 거예요. 통째로 번역하는 시간을 기다릴 필요 없이, 코드를 적자마자 실행해 결과를 볼 수 있죠. 코드를 고쳐도 다시 통째로 번역(빌드)할 필요 없이 곧장 다시 돌려 보면 됩니다. 대신 아쉬운 점도 있어요 — 실행할 때마다 한 줄씩 번역을 새로 하니, 미리 다 번역해 둔 컴파일 방식보다 속도가 느릴 수 있습니다.

이제 두 방식을 나란히 비교해 볼게요.

구분 컴파일러 (번역서) 인터프리터 (통역사)
언제 번역하나 실행 전에 통째로 미리 실행하면서 한 줄씩 그때그때
실행 속도 빠름 (이미 다 번역돼 있음) 상대적으로 느릴 수 있음
고치고 바로 보기 전체를 다시 번역(빌드)해야 고치고 곧장 다시 실행
번역 결과물 기계어 실행 파일이 따로 남음 따로 안 남고 그때그때 실행

⚠️ 참고: "이 언어는 컴파일, 저 언어는 인터프리터"라고 칼같이 나뉘는 건 아니에요. 요즘 언어들은 두 방식을 영리하게 섞어 쓰기도 합니다. 지금은 "번역에는 미리 통째로 하는 방식과 그때그때 한 줄씩 하는 방식이 있다"는 큰 그림만 잡으면 충분해요. 더 정확한 구분은 후속 언어 과목에서 각 언어를 직접 배우며 만나게 됩니다.

💡 한 줄 정리

인터프리터는 코드를 한 줄씩 그 자리에서 번역해 실행하는 방식(통역사)이라, 바로 실행하고 고친 걸 즉시 볼 수 있지만 매번 번역하므로 속도는 더 느릴 수 있다.

🙋 학생 질문 — "튜터님, 그럼 컴파일러와 인터프리터 중에 어느 쪽이 더 좋은 건가요?"

이 질문에는 정답이 없어요. "더 좋은 쪽"이 아니라 "이 일에 더 맞는 쪽"이 있을 뿐이에요.

속도가 생명인 곳을 떠올려 보세요. 화려한 화면을 1초에 수십 번 그려야 하는 게임이라면, 미리 통째로 번역해 두고 빠르게 실행하는 컴파일 방식이 잘 맞아요. 반대로 데이터를 이리저리 바꿔 보며 결과를 빠르게 확인하고 싶은 작업(데이터 분석이나 간단한 자동화 같은)이라면, 고치고 바로 돌려 볼 수 있는 인터프리터 방식이 훨씬 편하죠.

그래서 "무조건 빠른 게 최고"가 아니라, 만들려는 것의 성격에 따라 맞는 방식을 고르는 거예요. 이건 다음 Step에서 볼 "언어가 왜 이렇게 많은가"와도 곧장 이어집니다 — 용도가 다르면 잘 맞는 도구도 다르거든요.


Step 6: "언어가 왜 이렇게 많을까 — 용도별 지도"

프로그래밍을 시작하려는 분들이 꼭 놀라는 게 있어요. "언어가 왜 이렇게 많아?" 자바, 파이썬, 자바스크립트, C, 코틀린… 검색해 보면 끝이 없죠. 도대체 왜 하나로 통일하지 않고 이렇게 많은 걸까요?

답은 의외로 우리 일상에 있어요. 세상에 사람의 언어(자연어)도 수천 개잖아요. 한국어·영어·일본어… 각자 다른 역사와 쓰임 속에서 생겨났죠. 프로그래밍 언어도 마찬가지예요. 저마다 다른 용도에 잘 맞도록 만들어졌습니다. 어떤 언어는 웹 화면을 다루는 데 강하고, 어떤 언어는 데이터를 주무르는 데 강하고, 어떤 언어는 1초가 아쉬운 빠른 처리에 강해요.

대략 어떤 일에 어떤 언어가 자주 쓰이는지, 가벼운 지도를 그려 볼게요. (어디까지나 예시이고, 한 언어가 여러 곳에 쓰이기도 해요.)

이런 걸 만들 때 자주 쓰이는 언어의 예
웹 화면(브라우저에서 보이는 것) 자바스크립트
서버·백엔드(화면 뒤에서 일하는 부분) 자바 · 파이썬
데이터 분석·AI 파이썬
스마트폰 앱 코틀린 · 스위프트
아주 빠른 처리·게임 엔진 C · 러스트

이 표에서 가장 중요한 메시지는 이거예요 — "최고의 언어"는 없고, "이 일에 맞는 언어"가 있을 뿐이다. 망치가 못 박기에 좋고 드라이버가 나사 돌리기에 좋듯, 언어도 각자 잘하는 일이 달라요. 그러니 "어떤 언어가 제일 좋아요?"라는 질문보다 "나는 무엇을 만들고 싶은가?"를 먼저 묻는 게 순서예요.

좋은 소식도 하나 있어요. 언어가 아무리 많아도, 그 바탕에 깔린 사고는 거의 똑같습니다. 어느 언어든 "순서대로 시키고, 조건을 따지고, 반복하고, 값을 담는" 그 생각의 모양은 공유해요. 그래서 한 언어를 제대로 배우면 두 번째, 세 번째 언어는 훨씬 빠르게 익힐 수 있습니다. 우리 백과사전도 자바와 파이썬, 두 갈래의 입구를 모두 열어 둔 이유가 여기 있어요. 어느 쪽으로 들어가든 그 바탕 사고는 같으니까요. 그 "바탕 사고"가 바로 다음 Step의 주제, 언어 중립입니다.

💡 한 줄 정리

프로그래밍 언어가 많은 건 용도마다 잘 맞는 도구가 다르기 때문이라, "최고의 언어"가 아니라 "이 일에 맞는 언어"를 고르는 것이고, 그 바탕 사고는 언어가 달라도 거의 같다.

🙋 학생 질문 — "튜터님, 그래서 저는 결국 무슨 언어부터 배워야 하나요? 너무 많아서 고르기가 무서워요."

그 마음 정말 잘 알아요. 시작하기도 전에 "잘못 고르면 어쩌지" 하는 두려움이 가장 큰 벽이죠. 그런데 안심하세요. 입문에서는 어느 쪽을 골라도 크게 틀리지 않습니다.

대부분의 입문자에게는 자바파이썬이 무난한 출발점이에요. 둘 다 자료가 많고, 배우기 좋고, 실무에서도 널리 쓰이거든요. 우리 백과사전도 이 두 언어로 언어 기초 과목을 준비해 뒀어요. 정적 타입의 단단함(자바)이냐, 동적 타입의 가벼움(파이썬)이냐 하는 선택 가이드는 A-7에서 좀 더 다룰게요.

그리고 무엇보다, 지금 우리가 사고를 먼저 익히고 있잖아요. 사고가 잡혀 있으면 어떤 언어로 가든 "아, 이게 그 개념이구나" 하고 따라가게 돼요. 그래서 첫 언어 선택에 너무 무게를 두지 마세요. 하나를 진득하게 배우면, 나중에 다른 언어로 갈아타는 건 생각보다 훨씬 쉽습니다.


Step 7: "'언어 중립' — 왜 문법보다 사고가 먼저인가"

드디어 이 과목의 정체를 밝힐 시간이에요. 우리는 지금 프로그래밍을 배우러 왔는데, 정작 자바도 파이썬도 안 배우고 있죠. 왜 그럴까요? 이 과목이 언어 중립(language-neutral)으로 가기 때문이에요. 이게 무슨 뜻인지, 그리고 왜 그게 더 빠른 길인지 풀어볼게요.

언어 중립이란, 특정 언어의 문법에 묶이지 않은 "생각의 모양"을 먼저 익히는 것이에요. 예를 들어 "좋아요가 100을 넘으면 인기글이라고 표시하라"는 일을 생각해 봅시다. 이 일의 핵심은 "어떤 조건을 따져서 갈라지는 판단"이에요. 이 판단의 모양은 자바로 옮기든 파이썬으로 옮기든 똑같습니다. 단지 적는 문법만 다를 뿐이죠.

텍스트
   하나의 사고, 여러 언어로 번역된다

   생각의 모양 (언어 중립)
   "좋아요가 100 을 넘으면 인기글이라고 표시한다"
        │
        ├─  자바로 옮기면      자바 문법으로
        ├─  파이썬으로 옮기면  파이썬 문법으로
        └─  자바스크립트로     그 언어 문법으로

   언어가 바뀌어도 '순서·조건·반복' 이라는 사고는 그대로 재사용된다

그래서 우리는 문법을 외우는 대신, 이 생각의 모양 자체를 먼저 익힙니다. 문법은 언어마다 새로 외워야 하지만(언어가 다르면 다르니까), 사고는 한 번 익히면 어느 언어로 가든 그대로 써먹어요. 그래서 사고를 먼저 잡은 사람은 "문법은 새로 외워도, 사고는 이미 안다"는 든든한 출발점에 서게 됩니다. 집을 지을 때 인테리어(문법)보다 골조(사고)를 먼저 세우는 것과 같아요.

그럼 이 생각의 모양을 어떻게 적느냐? 두 가지 도구를 씁니다. 하나는 흐름을 그림으로 그리는 순서도, 또 하나는 사람이 읽는 평범한 말로 절차를 적는 의사코드예요. 둘 다 특정 언어 문법이 아니라서, 나중에 자바로 가든 파이썬으로 가든 그대로 번역만 하면 됩니다. 다음 시간(A-3)부터 우리는 바로 이 의사코드로, 진짜 사고를 적기 시작할 거예요.

💡 한 줄 정리

언어 중립이란 특정 문법에 묶이지 않은 생각의 모양(순서·조건·반복)을 먼저 익히는 것이고, 그 사고는 어느 언어로 가든 그대로 재사용되기에 이 과목은 문법보다 사고를 먼저 배운다.

🙋 학생 질문 — "튜터님, 그래도 빨리 진짜 코드를 쳐보고 싶어요. 사고만 배우면 답답하지 않을까요?"

그 마음, 너무나 자연스럽고 또 좋은 신호예요. 빨리 손을 움직여 결과를 보고 싶다는 건 배우려는 의욕이 살아 있다는 뜻이니까요.

그 답답함을 풀어 드리려고, 이 과목 안에도 진짜 코드를 만나는 시간을 마련해 뒀어요. A-6에서 설치 같은 거 하나 없이, 브라우저에서 진짜 코드 한 줄을 직접 실행해 화면에 글자가 뜨는 걸 눈으로 확인할 거예요. 그 한 줄의 짜릿함이 꽤 큽니다.

다만 그 전까지는 일부러 사고에 집중해요. 처음부터 문법·환경·개념을 한꺼번에 떠안으면 비전공자 대부분이 거기서 지치거든요. 그래서 "한 번에 하나씩" 가는 거예요. 지금 잡아 두는 사고가 탄탄할수록, 나중에 진짜 언어를 만났을 때 문법을 훨씬 빨리 익히게 됩니다. 조금만 더 천천히 가요. 답답함은 A-6에서 시원하게 풀어 드릴게요.


마무리

두 번째 시간도 잘 따라오셨어요. 오늘 우리는 "사람의 생각"과 "컴퓨터의 0과 1" 사이에 놓인 다리를 전부 건너봤습니다. 프로그램이 무엇인지부터, 그 명령을 어떤 언어로 적고 어떻게 번역하는지, 그리고 왜 우리가 문법보다 사고를 먼저 배우는지까지요.

오늘 배운 핵심 세 가지

  1. 💡 프로그램은 명령을 순서대로 적어 둔 것이다(요리 레시피 같은). 컴퓨터는 시킨 것만 그 순서대로 따르므로, 순서가 결과를 좌우한다.
  2. 💡 컴퓨터는 기계어(0과 1)만 안다. 그래서 사람은 읽기 쉬운 고급 언어로 적고 번역기를 거친다. 컴파일러는 통째로 미리 번역하는 번역서, 인터프리터는 한 줄씩 그때그때 옮기는 통역사다.
  3. 💡 언어는 용도별로 많지만 바탕 사고는 하나다. 그래서 이 과목은 특정 문법 대신 언어 중립 사고(순서·조건·반복)를 순서도와 의사코드로 먼저 익힌다.

다음 시간 예고

오늘 "언어 중립으로 사고를 먼저 배운다"고 했죠. 다음 시간(A-3)부터는 그 사고를 직접 적기 시작합니다. 첫 도구는 의사코드예요. 그리고 모든 프로그램의 기본 뼈대인 입력 → 처리 → 출력(값을 받아, 계산하고, 결과를 낸다)을 보고, 값을 담아 두는 변수를 배웁니다. 변수는 첫 시간에 본 "번호 붙은 사물함"에 이름표를 붙이는 거라고 살짝 예고했었죠 — 다음 시간에 그 이름표를 직접 붙여 봅니다. 오늘 잡은 "사고를 먼저"가 다음 시간 의사코드로 자연스럽게 이어질 거예요.


과제

오늘도 코드 없이, 종이와 머리로 하는 연습이에요. 개념을 내 말과 손으로 옮겨 보는 게 목적이니 부담 없이 해보세요.

[기초] 일상 행동을 '프로그램'으로 적어보기

매일 하는 일상 행동 하나를 고르세요(라면 끓이기·세수하기·커피 내리기·등교 준비 등). 그걸 컴퓨터에게 시키듯 명령의 순서로 5~7단계 적어 보세요. 다 적은 뒤, 그중 "순서를 바꾸면 안 되는 단계" 하나를 골라 표시하고, 왜 그 순서가 중요한지 한 줄로 적어 보세요. Step 1의 "물 붓기 vs 뚜껑 닫기"처럼, 순서가 결과를 바꾸는 지점을 직접 찾아보는 게 핵심입니다.

[응용] 컴파일러와 인터프리터를 내 비유로 다시 설명하기

오늘은 컴파일러를 "번역서", 인터프리터를 "통역사"에 빗댔어요. 이번엔 이 비유 말고 자기만의 비유를 하나씩 만들어 보세요. 일상에서 "미리 통째로 준비해 두는 것"과 "그때그때 즉석에서 처리하는 것"의 예를 떠올리면 좋아요(예: 도시락을 미리 싸 두기 vs 주문 즉시 요리하기). 두 방식의 장단점이 내 비유에서도 드러나는지 확인해 보세요.

[심화] 내 관심 분야의 언어 찾아보고 "언어 중립" 설명하기

평소 만들어 보고 싶었던 것을 하나 떠올려 보세요(간단한 웹사이트·게임·데이터 분석 등). Step 6의 지도를 참고하거나 가볍게 검색해서, 그걸 만들 때 어떤 언어가 자주 쓰이는지 찾아 적어 보세요. 그리고 한 걸음 더 나아가, "왜 이 과목은 그 언어 문법을 바로 안 가르치고 사고를 먼저 가르칠까?"를 오늘 배운 언어 중립 개념으로 자기 말로 설명해 보세요. 정답은 없습니다 — 스스로 납득되는 설명이면 충분해요.


생각해볼 주제

정답이 하나로 떨어지지 않는 질문들이에요. 혼자 곰곰이 생각해도 좋고, 같이 공부하는 사람과 이야기 나눠도 좋습니다.

1. 컴퓨터가 "시킨 것만" 하는 건 축복일까, 불편일까?

컴퓨터는 알아서 눈치껏 해주는 게 없어요. 하나부터 열까지 정확히 시켜야 그대로 합니다. 처음엔 이게 답답하게 느껴질 수 있어요 — "좀 알아서 해주면 안 되나?" 그런데 만약 컴퓨터가 정말로 "알아서, 제멋대로" 행동한다면 어떨까요? 그게 더 편할까요, 아니면 더 무서울까요? "시킨 것만 정확히 한다"는 성질이 왜 사실은 좋은 소식인지, 자기 생각을 정리해 보세요.

2. 만약 당신이 새 프로그래밍 언어를 만든다면, 번역은 어느 방식으로?

당신이 새로운 프로그래밍 언어를 하나 설계한다고 상상해 보세요. 컴파일러 방식(통째로 미리 번역)과 인터프리터 방식(한 줄씩 그때그때) 중 어느 쪽을 택하겠어요? 그 언어로 사람들이 주로 무엇을 만들길 바라는지(빠른 게임? 빠르게 실험하는 데이터 분석?)에 따라 답이 달라질 거예요. 용도를 하나 정하고, 거기에 맞는 번역 방식을 골라 그 이유를 설명해 보세요.

3. 프로그래밍 언어가 이렇게 많은 게 좋은 일일까, 하나로 통일됐으면 더 좋았을까?

세상에는 수많은 프로그래밍 언어가 있고, 지금도 새 언어가 만들어집니다. 만약 전 세계가 "이제부터 언어는 딱 하나만 쓰자"고 통일한다면 어떨까요? 배우기는 쉬워지겠지만, 잃는 것도 있을 거예요. 사람의 언어(한국어·영어…)가 여러 개인 것과 견주어, 언어가 다양한 게 가져다주는 장점과 단점을 함께 떠올려 보세요.

✅ 예시 답안정답 보기

이 문서는 A-2 「프로그램과 프로그래밍 언어」의 과제와 생각해볼 주제에 대한 예시답안입니다. 정답을 외우는 용도가 아니라, 개념을 어떻게 내 말로 풀어내는지 흐름을 참고하는 용도로 보세요. 이 과목은 "정답"보다 "스스로 설명해 보는 것"이 더 중요합니다.


과제 예시답안

🎯 [과제 1 예시답안] 일상 행동을 '프로그램'으로 적어보기

채점 포인트

항목 배점 기준
명령의 순서화 40% 행동을 5~7개의 순서 있는 단계로 빠짐없이 나눴는가
순서 의존 단계 식별 35% 순서를 바꾸면 안 되는 단계를 골라 표시했는가
이유 설명 25% 왜 그 순서가 중요한지 한 줄로 설명했는가

풀이 예시

"핸드드립 커피 내리기"를 골랐습니다.

텍스트
    컵 위에 드리퍼를 올린다
    드리퍼에 종이 필터를 넣는다
    갈아 둔 원두를 필터 안에 담는다
    물을 끓인다
    끓인 물을 원두 위에 천천히 붓는다
    다 내려지면 드리퍼를 치우고 마신다

   순서를 바꾸면 안 되는 단계  (필터)는 반드시 (원두)보다 먼저

왜 그 순서가 중요한가: ②(필터 넣기)를 ③(원두 담기)보다 먼저 해야 합니다. 만약 순서를 뒤집어 원두부터 드리퍼에 붓고 나중에 필터를 넣으려 하면, 원두 가루가 그대로 컵에 쏟아져 버려요. 필터가 먼저 자리를 잡아야 그 안에 원두를 담을 수 있죠. ④(물 끓이기)와 ⑤(붓기)도 마찬가지예요 — 끓이지 않은 물을 부으면 커피가 제대로 우러나지 않습니다.

💡 튜터의 한마디 — 이 과제의 핵심은 "내가 평소 당연하게 여기던 행동에도, 사실은 지켜야 할 순서가 촘촘히 숨어 있다"를 느끼는 거예요. 우리는 머릿속으로 "필터부터 넣어야지"를 당연히 알지만, 컴퓨터는 그 당연함을 모릅니다. 그래서 프로그래밍에서는 사람이 건너뛰는 단계까지 전부, 정확한 순서로 적어 줘야 해요. 그 감각을 손으로 한 번 적어 본 것만으로 충분합니다.

🎯 [과제 2 예시답안] 컴파일러와 인터프리터를 내 비유로 다시 설명하기

채점 포인트

항목 배점 기준
두 방식 모두 비유 40% 컴파일러·인터프리터 각각에 자기만의 비유를 만들었는가
장단점 반영 35% "미리 통째로 vs 그때그때"의 장단점이 비유에 드러나는가
개념 정확성 25% 두 방식의 핵심(번역 시점)을 오해 없이 담았는가

풀이 예시

제 비유: 컴파일러는 "도시락 미리 싸기", 인터프리터는 "주문 즉석 요리"입니다.

방식 내 비유 어떻게 닮았나
컴파일러 도시락을 미리 싸 두기 아침에 통째로 다 만들어 두면, 점심엔 꺼내 바로 먹는다(빠르다). 대신 반찬을 바꾸려면 도시락을 새로 싸야 한다
인터프리터 주문 즉석 요리 주문이 들어올 때마다 그 자리에서 한 접시씩 만든다. 메뉴를 바로 바꿀 수 있지만(유연), 매번 새로 만드니 시간이 더 걸린다

장단점이 어떻게 드러나나: 도시락(컴파일)은 "미리 다 만들어 둬서 먹을 때 빠르지만, 바꾸려면 다시 만들어야 함"이 그대로 보여요. 즉석 요리(인터프리터)는 "그때그때 만들어 유연하지만, 매번 만드느라 더 느림"이 드러나고요. 두 비유 모두 핵심인 "언제 만드(번역하)느냐"의 차이를 담고 있습니다.

💡 튜터의 한마디 — 비유를 직접 만들어 본 게 정말 중요해요. 남이 만든 비유(번역서·통역사)를 외우는 것과, 내가 아는 일상에서 닮은 짝을 찾아내는 건 이해의 깊이가 다르거든요. 어떤 비유든 "미리 통째로"와 "그때그때"의 대비만 살아 있으면 훌륭한 답입니다. 앞으로 새 개념을 만날 때마다 "이거 내 일상에서 뭐랑 닮았지?"를 묻는 습관을 들이면, 어려운 개념도 한결 쉽게 잡혀요.

🎯 [과제 3 예시답안] 내 관심 분야의 언어 찾아보고 "언어 중립" 설명하기

채점 포인트

항목 배점 기준
언어 찾기 30% 관심 분야에 자주 쓰이는 언어를 찾아 적었는가
언어 중립 설명 45% "왜 문법보다 사고를 먼저 배우는가"를 자기 말로 풀었는가
자기 논리 25% 스스로 납득되는 설명을 세웠는가 (정답 없음)

풀이 예시

관심 분야: "간단한 웹사이트를 만들어 보고 싶다."

Step 6의 지도를 보니, 웹 화면을 만들 때는 자바스크립트가 자주 쓰인다고 합니다. 가볍게 검색해 보니 실제로 웹 브라우저에서 보이는 동작은 대부분 자바스크립트가 맡고 있었어요.

"왜 이 과목은 자바스크립트 문법을 바로 안 가르치고 사고를 먼저 가르칠까?"

제 나름의 설명은 이렇습니다. 웹사이트를 만들든 게임을 만들든, 그 안에는 결국 "어떤 조건이면 이렇게, 아니면 저렇게"(조건)나 "목록 끝까지 반복"(반복) 같은 생각의 모양이 깔려 있어요. 이 생각의 모양은 자바스크립트로 적든 다른 언어로 적든 똑같습니다. 그래서 이 사고를 먼저 잡아 두면, 나중에 자바스크립트 문법을 배울 때 "아, 이 문법이 내가 아는 그 조건 판단이구나" 하고 빠르게 연결돼요.

반대로 사고 없이 문법부터 외우면, 문법은 익혀도 "그래서 이걸 언제 어떻게 조합해 문제를 푸는가"를 모르는 상태가 됩니다. 그래서 문법(자바스크립트)은 잠깐 뒤로 미루고, 어느 언어로 가든 통하는 사고를 먼저 깔아 두는 거라고 이해했습니다.

💡 튜터의 한마디 — 마지막 논리가 정확해요. "문법은 사고를 적는 도구일 뿐, 무엇을 적을지(사고)가 먼저"라는 게 이 과목의 전부입니다. 관심 분야를 직접 찾아본 것도 좋아요 — 목표가 있으면 학습에 힘이 붙거든요. 그 자바스크립트는 나중에 웹 과목에서 진짜 문법으로 만나게 되니, 지금은 "사고를 먼저"라는 든든한 출발점만 챙겨 두면 됩니다.


생각해볼 주제 예시답안

🤔 [생각해볼 주제 1] 컴퓨터가 "시킨 것만" 하는 건 축복일까, 불편일까

문제 상황 요약

컴퓨터는 알아서 눈치껏 해주는 게 없고, 하나부터 열까지 정확히 시켜야 그대로 한다. 처음엔 답답하게 느껴질 수 있다. 그렇다면 만약 컴퓨터가 "알아서, 제멋대로" 행동한다면 더 편할까, 더 무서울까? "시킨 것만 정확히 한다"는 성질이 왜 사실은 좋은 소식인지 정리해 보는 주제다.

튜터의 가이드 및 해설

먼저 "불편한 쪽"부터 솔직히 인정하자. 컴퓨터가 시킨 것만 하니, 우리는 당연해 보이는 단계까지 하나하나 다 적어 줘야 한다. 사람이라면 "알아서 좀 해주지" 싶은 순간이 분명 있다. 입문자가 처음 답답함을 느끼는 지점도 대개 여기다.

그런데 반대 상황을 상상해 보면 이야기가 달라진다. 만약 컴퓨터가 매번 "알아서, 기분 내키는 대로" 조금씩 다르게 행동한다면? 같은 버튼을 눌러도 어떤 날은 이렇게, 어떤 날은 저렇게 동작할 것이다. 계산기가 2 더하기 2에 어떤 날은 4, 어떤 날은 5를 내놓는다면 아무도 그걸 믿고 쓰지 못한다. 무엇보다, 결과가 이상할 때 원인을 찾을 수가 없다. 컴퓨터가 제멋대로라면 "왜 이렇게 됐지?"의 답이 매번 달라지니까.

바로 여기에 "시킨 것만 한다"의 진짜 가치가 있다. 컴퓨터가 정확히 시킨 대로만 움직이기 때문에, 결과가 이상하면 컴퓨터를 의심할 게 아니라 내 명령을 의심하면 된다. 거의 항상 "내가 뭔가를 정확히 안 시켰구나"가 정답이다. 이 예측 가능성 덕분에 우리는 잘못된 곳을 차근차근 되짚어 고칠 수 있고, 한 번 제대로 짜 둔 프로그램은 몇 번을 돌려도 똑같이 동작한다고 믿을 수 있다.

그래서 "시킨 것만 한다"는 답답함이 아니라 신뢰의 토대다. 고지식할 만큼 정직한 상대이기에, 우리가 시키는 법만 제대로 익히면 컴퓨터는 배신하지 않고 정확히 따라 준다.

💡 핵심을 한마디로

컴퓨터가 시킨 것만 하기에, 결과가 이상하면 컴퓨터가 아니라 내 명령을 의심하면 된다. 그 예측 가능성이 답답함이 아니라, 우리가 컴퓨터를 믿고 부릴 수 있는 토대다.

🤔 [생각해볼 주제 2] 새 프로그래밍 언어를 만든다면, 번역은 어느 방식으로

문제 상황 요약

내가 새 프로그래밍 언어를 하나 설계한다고 상상해 보자. 컴파일러 방식(통째로 미리 번역)과 인터프리터 방식(한 줄씩 그때그때) 중 어느 쪽을 택할까? 그 언어로 사람들이 주로 무엇을 만들길 바라는지에 따라 답이 달라진다. 용도를 하나 정하고, 거기에 맞는 번역 방식을 골라 이유를 설명해 보는 주제다.

튜터의 가이드 및 해설

이 주제의 핵심은 "어느 방식이 더 좋은가"가 아니라 "무엇을 위한 언어인가를 먼저 정하는 것"이다. 용도가 정해지면 번역 방식은 거기서 자연스럽게 따라 나온다.

예를 들어 내가 "아주 빠른 게임을 만들기 위한 언어"를 설계한다고 하자. 게임은 화면을 1초에 수십 번 새로 그려야 해서 속도가 생명이다. 그렇다면 실행할 때마다 한 줄씩 번역하느라 느려지는 인터프리터보다, 미리 통째로 기계어로 번역해 두고 빠르게 실행하는 컴파일러 방식이 맞다. 게이머에게 매끄러운 화면을 주는 게 우선이니, 처음에 번역 시간이 좀 걸리더라도 실행 속도를 택하는 것이다.

반대로 내가 "데이터를 이리저리 바꿔 보며 실험하는 언어"를 설계한다면 이야기가 다르다. 이런 작업은 코드를 조금 고치고 바로 결과를 확인하는 일을 수백 번 반복한다. 매번 통째로 다시 번역(빌드)하느라 기다리면 흐름이 끊긴다. 그래서 고치고 곧장 돌려 볼 수 있는 인터프리터 방식이 훨씬 어울린다. 실행 속도가 조금 느려도, 실험의 리듬을 살리는 게 더 중요하기 때문이다.

여기서 보이는 큰 교훈은, 기술의 선택이 "무조건 빠른 것" 같은 단일 기준으로 정해지지 않는다는 점이다. 무엇을 위한 도구인가가 먼저고, 그 목적이 방식을 고른다. 실제로 세상의 언어들도 저마다 이런 판단 위에서 한쪽을 택하거나 둘을 영리하게 섞었다.

💡 핵심을 한마디로

번역 방식에 정답은 없다. "이 언어로 무엇을 만들 것인가"를 먼저 정하면, 속도가 생명인 일엔 컴파일러, 빠른 실험이 생명인 일엔 인터프리터가 자연스럽게 따라온다. 목적이 방식을 고른다.

🤔 [생각해볼 주제 3] 언어가 이렇게 많은 게 좋을까, 하나로 통일됐으면 더 좋았을까

문제 상황 요약

세상에는 수많은 프로그래밍 언어가 있고 지금도 새 언어가 만들어진다. 만약 전 세계가 "이제부터 언어는 딱 하나만 쓰자"고 통일한다면 어떨까? 배우기는 쉬워지겠지만 잃는 것도 있을 것이다. 사람의 언어가 여러 개인 것과 견주어, 언어가 다양한 게 주는 장점과 단점을 함께 떠올려 보는 주제다.

튜터의 가이드 및 해설

먼저 "하나로 통일하면 좋은 점"부터 보자. 가장 큰 장점은 배우기 쉬워진다는 것이다. 언어가 하나뿐이라면 무엇부터 배울지 고민할 필요도 없고, 다른 사람이 짠 코드를 읽기도 수월하고, 자료도 한곳에 모인다. 입문자에게는 분명 덜 막막할 것이다.

그런데 잃는 것이 만만치 않다. 언어가 여럿인 진짜 이유는 Step 6에서 봤듯 용도마다 잘 맞는 도구가 다르기 때문이다. 망치 하나로 못도 박고 나사도 박고 유리도 자르라고 하면, 어느 것 하나 제대로 못 한다. 모든 일에 두루 쓰는 단 하나의 언어는, 바꿔 말하면 어떤 일에도 딱 맞지는 않는 어중간한 도구가 되기 쉽다. 빠른 게임에도, 데이터 분석에도, 작은 기계 제어에도 똑같은 언어를 억지로 쓰면 비효율이 생긴다.

또 하나, 언어가 여럿이면 서로 경쟁하고 자극하며 발전한다. 한 언어가 좋은 아이디어를 내면 다른 언어가 그걸 받아들여 더 나아진다. 만약 하나로 굳어 버리면 이런 발전의 동력이 약해질 수 있다.

사람의 언어에 견줘 보면 감이 더 온다. 세상 모두가 한 가지 말만 쓴다면 소통은 편하겠지만, 각 언어에 담긴 고유한 표현과 문화는 사라질 것이다. 프로그래밍 언어의 다양성도 비슷하다 — 불편을 감수하는 대신, 각 분야가 자기에게 가장 잘 맞는 도구를 갖는 것이다.

물론 이건 정답이 갈리는 문제다. "통일의 편리함"에 더 무게를 두는 사람도 있을 수 있다. 다만 적어도 "언어가 많은 건 혼란이 아니라, 용도가 다양하다는 사실의 자연스러운 결과"라는 관점은 꼭 챙겨 두면 좋다.

💡 핵심을 한마디로

언어가 많은 건 혼란이 아니라 "용도마다 최적의 도구"라는 다양성의 표현이다. 하나로 통일하면 배우긴 쉬워도, 모든 일에 어중간한 도구 하나만 남고 서로 발전시키는 경쟁도 사라진다.

전체 목록 개발 입문