정보

프로그래밍과 프로그래밍 언어

「이따가 창문 좀 닫아 줘」는 사람에게만 통합니다.
컴퓨터에게 일을 시키려면 중간에 다른 말이 하나 필요합니다.
그 말을 만든 이유부터 봅니다.

학습 목표

  1. 프로그램과 프로그래밍이 무엇인지 설명하고, 우리 생활에서 프로그램이 하는 일을 찾아 말할 수 있다.
  2. 사람의 말과 기계어 사이에 프로그래밍 언어가 필요한 까닭을 설명할 수 있다.
  3. 블록 기반 언어와 텍스트 기반 언어의 차이를 말하고, 파이썬으로 쓴 짧은 코드가 무슨 일을 하는지 읽어 낼 수 있다.

오늘 아침에도 프로그램을 여러 번 만났다

눈에 보이지 않아서 몰랐을 뿐입니다.

아침에 일어나 학교에 오기까지를 되돌아보세요. 알람이 정해 둔 시각에 울렸고, 버스 도착 안내판이 남은 시간을 계속 고쳐 적었고, 교통카드 단말기가 요금을 깎고 「삑」 소리를 냈습니다. 셋 다 사람이 옆에 붙어서 해 준 일이 아닙니다. 미리 정해 둔 절차를 기계가 그대로 따른 것입니다.

프로그램(program)

컴퓨터가 할 일과 그 차례를 빠짐없이 적어 둔 명령어들입니다.

프로그래밍(programming)

그 프로그램을 만드는 일입니다.


왜 굳이 프로그램으로 만들까

사람이 직접 하면 되는 일을 굳이 프로그램으로 만드는 데에는 이유가 있습니다.

지치지 않는다

같은 일을 만 번 반복해도 마지막 한 번이 첫 번과 똑같습니다. 사람은 지치면 손이 느려지고 실수가 늘어납니다.

흔들리지 않는다

무작위로 뽑으라고 적어 두지 않았다면, 같은 값을 넣었을 때 언제 실행해도 같은 답이 나옵니다. 기분이나 컨디션에 따라 결과가 달라지지 않습니다.

나눠 줄 수 있다

한 번 만들어 두면 여러 사람이 그대로 가져다 씁니다. 머릿속에만 있는 방법은 나눠 줄 수 없습니다.

프로그램은 똑똑해서 일하는 것이 아닙니다

버스 도착 안내판이 「알아서」 시간을 맞추는 것처럼 보이지만, 사실은 사람이 정해 준 절차를 그대로 따르고 있을 뿐입니다. 그래서 절차를 잘못 적으면 프로그램은 그 잘못까지 정확하게 반복합니다. 지치지 않는다는 장점이 여기서는 그대로 단점이 됩니다.

스스로 확인

교실 안에서 프로그램이 들어 있는 물건을 세 가지 찾아보세요. 그중 하나를 골라, 그 프로그램이 어떤 차례로 일하고 있을지 짐작해 말해 보세요.

사람 말로 시키면 왜 안 될까

우리 말은 너무 많은 것을 듣는 사람에게 맡깁니다.

친구에게 「이따가 창문 좀 닫아 줘」라고 하면 대개 뜻이 통합니다. 그런데 이 짧은 문장에는 정해지지 않은 것이 셋이나 있습니다.

「이따가 창문 좀 닫아 줘」

  • 이따가 — 5분 뒤인가, 수업 끝나고인가?
  • 창문 — 교실 창문이 여덟 개인데 어느 것인가?
  • 좀 — 다 닫으라는 것인가, 반쯤 닫으라는 것인가?

사람은 이 빈칸을 상황을 보고 알아서 메웁니다. 더울 때 들으면 반쯤 닫고, 시끄러울 때 들으면 다 닫습니다. 컴퓨터에게는 그 「알아서」가 없습니다. 그래서 사람의 말을 그대로 프로그램으로 쓸 수는 없습니다.


그러면 컴퓨터의 말로 쓰면 되지 않을까

컴퓨터가 바로 알아듣는 말이 하나 있기는 합니다. 0과 1만으로 이루어진 기계어(machine language)입니다. 문제는 사람이 그것으로 쓸 수가 없다는 것입니다. 01001100이 여덟 자리만 되어도 무슨 뜻인지 알아보기 어려운데, 실제 프로그램은 이런 줄이 수만 줄씩 이어집니다. 한 자리만 잘못 쳐도 어디가 틀렸는지 찾기가 매우 어렵습니다.

프로그래밍 언어(programming language)

그래서 사람들은 사람과 컴퓨터 사이에 둘 새로운 말을 만들었습니다. 사람이 읽고 쓸 수 있을 만큼 쉬우면서, 기계어로 옮길 수 있을 만큼 규칙이 빈틈없는 말입니다. 이것이 프로그래밍 언어입니다.

사람의 말 점수가 60점 이상이면 통과라고 알려 줘 사람이 옮겨 적는다 프로그래밍 언어 if score >= 60: print('통과') 번역 프로그램이 옮긴다 기계어 01001100 11010010 00101110 …

가운데 층을 잘 보세요. 프로그래밍 언어도 결국 사람이 읽으라고 만든 말입니다. 컴퓨터가 실제로 읽는 것은 맨 아래 층뿐이고, 가운데에서 아래로 옮기는 일은 번역 프로그램(번역기)이 대신 해 줍니다. 우리가 이 번역을 직접 할 일은 없습니다.

스스로 확인

「청소 좀 도와줘」라는 말에서 정해지지 않은 것을 두 가지 찾아보고, 컴퓨터가 알아들을 수 있도록 빈칸을 메워 다시 말해 보세요.

프로그래밍 언어가 하나가 아닌 까닭

쓰는 곳이 다르면 필요한 말도 달라집니다.

프로그래밍 언어는 사람이 만든 말입니다. 그래서 필요할 때마다 새로 만들어졌고, 지금도 여러 개가 함께 쓰입니다. 크게 보면 코드를 어떻게 적어 넣느냐에 따라 두 가지로 나뉩니다.

블록 기반 언어

명령이 적힌 블록을 마우스로 끌어다 붙여 프로그램을 만듭니다. 엔트리와 스크래치가 여기에 속합니다.

블록은 모양이 맞는 것끼리만 결합되므로 문법을 틀릴 일이 거의 없습니다. 대신 준비된 블록에 없는 일은 시키기 어렵습니다.

텍스트 기반 언어

키보드로 코드를 직접 입력해 프로그램을 만듭니다. 파이썬, C, 자바 같은 언어가 여기에 속합니다.

준비된 블록에 매이지 않아 복잡한 일도 시킬 수 있습니다. 대신 문자 하나만 틀려도 프로그램이 실행되지 않을 수 있습니다.

블록 기반이 「쉬운 것」이고 텍스트 기반이 「어려운 것」이 아닙니다. 둘은 지키는 것이 다릅니다. 블록 기반은 문법을 틀리기 어렵게 만든 대신 할 수 있는 일을 줄였고, 텍스트 기반은 무엇이든 적을 수 있게 한 대신 문법을 틀릴 여지를 남겼습니다.


텍스트 기반 언어끼리도 서로 다르다

텍스트 기반 언어만 해도 수십 가지가 있고, 주로 쓰이는 곳이 조금씩 다릅니다.

널리 쓰이는 텍스트 기반 프로그래밍 언어와 주로 쓰이는 곳
언어 주로 쓰이는 곳
파이썬(Python) 데이터를 다루는 일, 인공지능, 자동화. 미리 만들어 둔 라이브러리를 가져다 쓰기 좋습니다.
C 가전제품이나 기계 안에 들어가는 프로그램. 기계에 가까워 빠릅니다.
자바(Java) 여러 사람이 함께 오래 고쳐 쓰는 큰 프로그램.
자바스크립트(JavaScript) 웹 브라우저 안에서 실행되는 프로그램. 지금 보고 있는 이 화면에서도 실행되고 있습니다.

「가장 좋은 언어」를 찾는 물음은 답이 나오지 않습니다

표의 어느 줄도 다른 줄보다 낫거나 못하지 않습니다. 무엇을 만들 것인지, 어디서 실행할 것인지, 같이 만들 사람들이 무엇을 쓰는지에 따라 고르는 것입니다. 그러니 「어느 언어가 제일 좋은가」 대신 「이 일에는 어느 언어가 알맞은가」를 물어야 합니다.

스스로 확인

블록 기반 언어로 프로그램을 만들어 본 적이 있나요? 그때 블록에 없어서 못 시켰던 일이 있었는지 떠올려 보세요.

우리는 파이썬으로 이야기한다

처음 배우는 사람에게 문턱이 낮기 때문입니다.

하나 — 읽으면 대충 뜻이 보인다

아직 파이썬을 배우지 않았지만, 아래 두 줄이 무슨 일을 하는지 짐작할 수 있을 것입니다.

name = input('이름이 뭐예요? ')
print('반가워요, ' + name + '님!')

input은 「들여오다」, print는 「찍어 내다」라는 영어 단어입니다. 단어의 뜻이 하는 일과 거의 그대로 이어집니다. 이름을 입력받아 저장하고, 그 이름을 넣은 인사말을 화면에 출력합니다.

조금 더 긴 것도 마찬가지입니다.

score = 72

if score >= 60:
    print('통과')
else:
    print('재시험')

if는 「만약 ~라면」, else는 「그렇지 않으면」입니다. 점수가 60 이상이면 「통과」를, 그렇지 않으면 「재시험」을 출력합니다. 조건에 따라 실행할 명령이 달라지는 이 구조는 순서도에서 마름모로 그리는 판단 기호와 같습니다. 순서도를 코드로 옮겨 적은 것입니다.

if 아래 줄이 오른쪽으로 조금 들어가 있는 것이 보이나요? 파이썬은 이 들여쓰기로 「어디까지가 그 조건에 속한 명령인지」를 나타냅니다. 지금은 이 정도만 알아 두면 됩니다.


둘 — 남이 만들어 둔 것을 가져다 쓴다

프로그램을 만들 때마다 모든 것을 처음부터 짤 필요는 없습니다. 자주 쓰이는 기능은 이미 누군가 만들어 두었고, 가져다 쓰기만 하면 됩니다. 이렇게 미리 만들어 묶어 둔 것을 라이브러리(library)라고 합니다.

import random

pick = random.randint(1, 30)
print(str(pick) + '번 당첨!')

import random은 무작위 수를 다루는 라이브러리 random을 가져오라는 명령입니다. 그다음 줄이 1부터 30까지의 수 가운데 하나를 뽑습니다. 무작위로 수를 뽑는 방법을 우리가 직접 고민하지 않았습니다. 파이썬에는 이런 라이브러리가 아주 많아서, 그림을 그리는 것부터 데이터를 다루는 것까지 가져다 쓸 수 있습니다.


셋 — 어느 컴퓨터에서든 실행된다

같은 파이썬 코드를 윈도에서 쓰든 맥에서 쓰든 대부분 고치지 않고 그대로 실행할 수 있습니다. 학교에서 만든 것을 집에서 이어서 할 수 있다는 뜻입니다. 파이썬 자체도 돈을 내지 않고 내려받아 쓸 수 있습니다.


코드를 기계어로 옮기는 두 가지 방식

코드를 기계어로 옮기는 일은 번역 프로그램이 대신 합니다. 번역 방식은 크게 둘로 나뉘고, 파이썬은 실행하면서 번역하는 방식을 씁니다.

인터프리터 방식

코드를 실행하면서 한 줄씩 번역해 차례로 실행합니다. 이런 번역 프로그램을 인터프리터(interpreter)라고 합니다. 파이썬이 이 방식입니다. 다만 파이썬은 실행하기 전에 파일 전체의 문법을 먼저 검사하므로, 문법 오류가 한 곳이라도 있으면 한 줄도 실행되지 않습니다.

한 줄만 고쳐도 바로 실행해 볼 수 있어 시험해 보기 편합니다. 대신 실행하는 동안 번역도 함께 하므로 속도에서는 손해를 봅니다.

컴파일러 방식

코드 전체를 한꺼번에 기계어로 번역해 놓은 다음 그것을 실행합니다. 이런 번역 프로그램을 컴파일러(compiler)라고 합니다. C가 이 방식입니다.

번역이 미리 끝나 있어 실행이 빠릅니다. 대신 한 줄을 고쳐도 다시 번역하는 일부터 해야 합니다.

코드를 쓰는 창, 번역해서 실행해 주는 도구, 잘못된 곳을 찾아 주는 도구. 이 셋을 한 화면에 묶어 놓은 프로그램을 쓰면 편합니다. 파이썬을 받으면 이런 프로그램이 함께 딸려 옵니다. 지금은 「코드를 쓰고 바로 실행해 볼 수 있는 창이 있다」는 정도만 알아 두면 됩니다.

스스로 확인

「통과 / 재시험」 코드에서 60을 70으로 바꾸면 결과가 어떻게 달라질까요? score가 72일 때를 놓고 말해 보세요.

핵심 정리

프로그램과 프로그래밍

program & programming

  • 프로그램 — 무엇을 어떤 차례로 할지 적어 놓은 명령의 모음
  • 프로그래밍 — 그 프로그램을 만드는 일
  • 똑똑해서 일하는 것이 아니라 정해 준 절차를 그대로 따를 뿐이다

프로그래밍 언어

programming language

  • 사람의 말은 듣는 사람에게 맡기는 것이 많아 그대로 프로그램으로 쓸 수 없다
  • 기계어는 0과 1뿐이라 사람이 쓰기 어렵다
  • 그 사이를 이어 주는 중간 언어가 프로그래밍 언어다

언어의 두 가지 방식

블록 기반 · 텍스트 기반

  • 블록 기반 — 문법을 틀리기 어렵게 만든 대신 할 수 있는 일을 줄였다
  • 텍스트 기반 — 무엇이든 적을 수 있는 대신 문법을 틀릴 여지가 있다
  • 「가장 좋은 언어」가 아니라 「이 일에 알맞은 언어」

파이썬

Python

  • 영어 단어의 뜻이 하는 일과 거의 그대로 이어져 읽기 쉽다
  • 미리 만들어 둔 라이브러리를 가져다 쓸 수 있다
  • 인터프리터 방식이라 시험해 보기 편하다. 다만 문법 오류가 있으면 한 줄도 실행되지 않는다

확인 퀴즈

배운 내용을 확인해 봅시다.

Q1

사람의 말을 그대로 프로그램으로 쓸 수 없는 가장 큰 까닭은?

Q2

블록 기반 언어와 텍스트 기반 언어에 대한 설명으로 옳지 않은 것은?

Q3

파이썬 코드 import random이 하는 일은?