말귀를 그대로 알아듣는 로봇

컴퓨터는 정말 놀라운 물건이에요. 1초에 수백만 가지 일을 할 수 있지요. 하지만 여기 재미있는 비밀이 있어요. 컴퓨터는 우리가 뭘 원하는지 알아맞히지 못해요. 아주 조금도요. 우리가 만나게 될 친구 중 가장 힘이 세지만, 가장 눈치가 없는 친구랍니다. 그럼 어떻게 컴퓨터가 무언가를 하게 만들까요? 아주, 아주 분명한 지시 목록을 써 주는 거예요. 그것이 바로 코딩이에요.

친구에게 땅콩버터 샌드위치 만드는 법을 가르친다고 상상해 보세요. 그런데 그 친구가 모든 말을 글자 그대로 받아들인다면요. 우리가 "빵에 땅콩버터를 발라"라고 말하면, 친구는 병째로 빵 위에 올려놓을 거예요. 우리는 "병을 열고, 떠서, 펴 발라"라고 말하는 걸 깜빡한 거죠. 컴퓨터도 바로 그래요. 코딩은 상상에 맡기는 일을 하나도 남기지 않는 기술이에요.

그래서 우리는 모든 일을 아기 걸음처럼 작은 단계로 나누어요. 순서대로요. 1단계, 그다음 2단계, 그다음 3단계. 이렇게 순서가 있는 단계 목록을 알고리즘이라고 해요. "레시피"를 멋지게 부르는 말이지요. 쿠키를 만드는 레시피와 비디오 게임을 만드는 레시피는 같은 생각이에요. 이것을 하고, 그다음 이것을 하고, 그다음 이것을 하는 거예요.

하지만 한 가지 문제가 있어요. 컴퓨터는 영어도, 어떤 사람의 언어도 말하지 못해요. 깊이 들어가 보면 컴퓨터가 이해하는 것은 두 가지뿐이에요. 전등 스위치처럼 켜짐과 꺼짐이지요. 우리는 그것을 1과 0으로 써요. 컴퓨터 안의 모든 단어, 사진, 노래는 사실 수백만 개의 작은 스위치가 켜졌다 꺼졌다 하는 것뿐이에요.

스위치를 손으로 하나하나 켰다 껐다 하려면 영원히 걸릴 거예요. 그래서 똑똑한 사람들이 Python, Java, Scratch 같은 프로그래밍 언어를 만들었어요. 이런 언어 덕분에 우리는 읽을 수 있는 말에 가까운 것으로 지시를 쓸 수 있어요. 우리가 "비가 오면 우산을 가져가"라고 입력하면, 그 언어가 우리의 문장을 그 모든 작은 스위치 신호로 바꾸는 지루한 일을 해 준답니다.

번역기가 우리를 위해 그 마법을 해 줘요. 그것은 우리의 친근한 코드를 읽고, 기계가 실제로 따르는 켜짐과 꺼짐의 언어로 다시 써 주는 특별한 프로그램이에요. 공항에서 우리와 오직 스위치 말만 하는 사람 사이에 서 있는 통역사라고 생각하면 돼요.

진짜 지시에는 몇 가지 똑똑한 요령이 필요해요. 우리는 컴퓨터에게 선택하게 말해요. "만약 문이 잠겨 있으면, 그때는 노크해." 우리는 반복하라고도 말해요. "이것을 100번 해." 그러면 우리가 100번 쓸 필요가 없지요. 그리고 점수처럼 우리가 놀수록 올라가는 것을 기억하게 하려고 변수라는 작은 상자를 주어요.

그리고 솔직히 말하면, 첫 시도는 거의 절대 제대로 되지 않아요. 빠진 쉼표 하나, 틀린 숫자 하나 같은 아주 작은 실수 때문에 전체가 푸드덕거리며 멈출 수 있어요. 우리는 그런 실수를 버그라고 부르고, 그것을 찾아내는 일을 디버깅이라고 해요. 모든 코더는, 아주 뛰어난 코더도, 오타 하나에게 살짝 당하며 많은 시간을 보낸답니다.

그러니 전체 비결은 이것이에요. 코딩은 아주 글자 그대로 알아듣고, 아주 빠른 친구에게 오해할 수 없을 만큼 분명한 레시피를 주는 거예요. 단계마다, 선택마다, 스위치마다요. 우리는 천재에게 명령하는 것이 아니에요. 우리가 말한 것만 정확히, 딱 그대로 하는 기계를 인내심 있게 가르치는 선생님이 되는 거예요.
