2부 1장 - 인류 최고의 언어

 

2015년, 왜 프로그래밍을 말하는가 

21세기, 그것도 2010년을 기점으로 어마어마한 정보의 홍수 속에서 살고 있는, 현대인들이 잃어버린 것이 ‘생각하는 능력’이다. IT 산업이 발전하면서 생각의 기본이 되는 모든 정보가 우리에게 너무도 쉽게 제공된다. 컴퓨터가 출현하기 전인 20세기 후반까지만 하더라도 우리 인간들은 정보를 스스로 기억하고, 직접 생각을 통해서 지식을 축적했다. 그러다가, 컴퓨터를 비롯한 수많은 기기와 소프트웨어가 발달함에 따라, 우리가 기억하고 생각했던 거의 모든 정보와 지식은 그것을 사업으로 하는 기업들에 의해 컴퓨터 속에 존재하게 되었다. 컴퓨터에 저장된 정보와 지식들은 다양한 서비스 소프트웨어에 의해서 다시 우리에게 제공된다. 편리함을 얻었다. 대신에, 우리가 잃어버린 것은 생각하는 능력과 사유하고자 하는 의지이다.

 

암기는 하지만, 사유할 줄은 모른다

생각한다는 것도 우리 몸의 근육을 쓰는 것과 같다. 근육을 쓰지 않으면 퇴화하듯이 생각하는 것도 하지 않으면, 생각하는 기능이 퇴화된다. 중고등학교 선생님들의 이야기를 들어보거나, 대학생들을 수십 년 가르쳐 온 교수님들의 이야기를 들어보면, 요즘의 아이들이 훨씬 똑똑하다고 한다. 이 똑똑하다는 것이 중고등학생이건 대학생이건 아는 것이 많다는 것이다. 지식이 풍부하다. 어떤 것을 물어봐도 척척 대답한다. 교수님들의 강의 내용 중에서, 사실에 관한 것이라면 학생들이 즉시즉시 인터넷을 찾아서 틀린 것을 수정해주는 경우를 많이 겪는다고 한다.

그런데, 이 똑똑한 아이들에게 ‘왜, 그럴까?’라는 질문을 하면 제대로 대답하는 아이들이 없다. 지식이나 사실에 관한 것에는 똑똑한 아이들이, 그 지식이나 사실을 바탕으로 스스로 생각해서 답을 해야 하는 것에는 잼뱅이라는 이야기이다. 사실을 받아들이고 그것을 암기하는 것과 사실을 분석해서 이유를 찾아내는 것은 둘 다 우리의 뇌를 사용하는 것이지만, 뇌의 활동 방식이 다르다. 뇌 과학에서는 활성화되는 뇌의 부위도 다르다고 한다.

 

미국에서 전국적인 코딩 배우기 운동을 펼치고 있는 ‘코드닷오알지(Code.org)’는 이를 잘 보여주고 있다. 이 사이트에서는 간단한 코딩의 개념을 게임을 통해 가르치고 있다. 유명한 스마트폰 게임 ‘앵그리 버드’, 세계적으로 흥행한 애니메이션 ‘겨울왕국’의 캐릭터를 활용해 코딩의 과정을 학습하게 한다. 
이 사이트는 특히 저명한 IT 기업의 창업자들이 발 벗고 나서 지원하고 있는데, 이들이 직접 등장해 코딩의 마법 같은 매력을 설명하는 비디오 클립은 세계적으로 큰 화제가 되었다. 
스티브잡스가 코딩의 중요성을 언급한 1995년의 인터뷰. 원본은 남아있지 않은 것으로 알려져있었으나, 잡스 사후인 2012년에 발견되었다고 한다.
출처 : The Lost Interview

 

프로그래밍은 사고력의 실제적 도구이다

사고력이 뛰어난 사람이 프로그래밍을 잘할 수 있다. 누구도 부인하지 않는 진실이다. 그런데 놀라운 것은 프로그래밍을 하면 사고력이 생긴다는 것이다. 즉 프로그래밍을 통하여 사고력이 훈련되는 것이다. 이 부분에 대해서 사람들은 잘 인정하지 않는다. 원래 사고력이 뛰어난 사람이 프로그램을 잘하는 것이어서 그렇게 보인다고만 생각한다. 필자의 생각은 다르다. 사람은 누구나 사고할 수 있는 능력을 갖추고 있다. 훈련하기에 따라서, 그것이 개발되기도 하고, 아주 원시 수준에서 고착될 수도 있다. 프로그래밍은 이 잠재된 사고력을 훈련시키기에 아주 적합한 수단이다. 특히 어려서부터 이 훈련을 자연스럽게 받는다면, 생각하는 것 자체를 아주 쉽게 몸에 익힐 수 있다. 그래서 어린이들에게 하는 프로그래밍 교육이 중요하다. 프로그래밍을 통해서 생각하는 법을 가르칠 수 있다. 아이들이 좋아하는 게임을 프로그래밍하게 한다면 안성맞춤이다. 게임을 만드는 것만큼 아이들에게 흥미도 제공하면서, 프로그래밍 기술을 익히게 할 수 있는 것이 없기 때문이다. 이 세상의 그 어떤 것이 아이들에게 생각하게 할 수 있는 것이 있겠는가? 

 

이미지 출처 : Thalley 실제로 컴퓨터 공학의 본질은 문제 해결의 과정에 있다. 컴퓨터 공학 박사인 Luther College의 Brad Miller는, 그의 책 ‘알고리즘과 데이터 구조를 통한 문제 해결’에서 Computer Science를 아래와 같이 정의한다. “컴퓨터 사이언스를 정의하기는 쉽지 않은데, 이는 종종 컴퓨터라는 단어 때문이다. 컴퓨터는 컴퓨터 사이언스에서 중요한 역할을 하긴 하지만, 어디까지나 도구일 뿐이다. 컴퓨터 사이언스는 문제, 문제의 해결, 그리고 문제 해결 프로세스를 통해 도출되는 솔루션에 대한 학문이다. 문제가 주어지면, 컴퓨터 과학자의 목표는 알고리즘을 만들어내는 것이 된다. 그리고 이는 언제 생길지 모르는 문제를 풀어내기 위한 단계별 리스트이다. 알고리즘은 정확히만 짜이면 그 문제를 해결할 수 있는 유한한 프로세스이다. 그러므로 알고리즘 자체가 해결책이다.”

이미지 출처 : Thalley

실제로 컴퓨터 공학의 본질은 문제 해결의 과정에 있다. 컴퓨터 공학 박사인 Luther College의 Brad Miller는, 그의 책 ‘알고리즘과 데이터 구조를 통한 문제 해결’에서 Computer Science를 아래와 같이 정의한다.

“컴퓨터 사이언스를 정의하기는 쉽지 않은데, 이는 종종 컴퓨터라는 단어 때문이다. 컴퓨터는 컴퓨터 사이언스에서 중요한 역할을 하긴 하지만, 어디까지나 도구일 뿐이다. 컴퓨터 사이언스는 문제, 문제의 해결, 그리고 문제 해결 프로세스를 통해 도출되는 솔루션에 대한 학문이다. 문제가 주어지면, 컴퓨터 과학자의 목표는 알고리즘을 만들어내는 것이 된다. 그리고 이는 언제 생길지 모르는 문제를 풀어내기 위한 단계별 리스트이다. 알고리즘은 정확히만 짜이면 그 문제를 해결할 수 있는 유한한 프로세스이다. 그러므로 알고리즘 자체가 해결책이다.”

 

프로그래밍을 통한 문제 해결적 사고와 창의적 사고 능력의 배양

프로그래밍을 하게 되면 생각하지 않을 수 없다. 프로그래밍을 하는 목적은 주어진 문제를 해결하기 위한 것이다. 그래서 프로그래머들은 강제로 자신의 두뇌를 문제를 해결하는 쪽으로 집중하게 된다. 문제 해결을 위한 생각을 할 수밖에 없다. 실제로 프로그래머들은 프로그래밍을 하기 전에, 주어진 과제를 ‘문제’로서 분석한다. ‘문제 정의’ 혹은 ‘요구 사항 정의’로, 프로그램을 짜는 이유를 분명히 정리한다. 결국 프로그래밍을 한다는 것은 주어진 문제를 해결하는 것이다. 주어진 문제를 해결하지 못하는 프로그램은, 아직 미완성의 프로그램이거나, 잘못 짠 프로그램이다. 프로그래밍을 하면 할수록, 이 문제 해결 능력이 훈련이 되고, 훈련되는 만큼 능력이 커지는 것이다.

이런 문제 해결적 사고력을 훈련한 사람들이 프로그래밍이 아닌 다른 일을 하게 된다면 어떤 일이 생기게 될까? 생각하게 되는 대상(주제. 혹은 과제. 생각의 이유)이 ‘문제’가 아니라 다른 것으로 바뀌게 된다. 즉, 새로운 제품일 수도 있고, 새로운 서비스일 수도 있다. 대상을 문제에서 새로운 어떤 것으로 바뀌게 되면, ‘창의적인 사고(innovative thinking)’를 하게 된다. 생각을 진행해 나가는 방식은 동일하다. 생각의 대상이 문제에서 ‘새로운 무엇’으로 바뀌는 것이다.

프로그래밍이 놀라운 것은 스스로 생각한 결과를 구체적인 실체로서 구현해 내는 것이다. 새로운 것을 생각해서, 새로운 창의적인 제품이나 서비스를 구체적인 프로그램으로 만들어 낸다. 그 과정을 반복하면서 프로그래밍을 하는 사람들은 창의적으로 변화해 간다. 프로그래밍은 생각을 객관화하는 도구이다. 생각의 대상을 문제 해결에 맞추는 것이나, 새로운 방법에 맞추는 것이나 모두 가능하다. 창의성의 기본도 생각하는 것이다. 생각하지 못하면 우리는 창의적이 될 수 없다. 

  비주얼 프로그래밍 언어 중 하나인 Flowgorithm의 화면. 프로그래밍의 과정 자체가 플로 차트로 표현된다 최근 프로그래밍 언어의 방향성 가운데 하나가 바로 비주얼 프로그래밍이다. VPL(Visual Programming Language)라고도 불리는 이 언어들은, 논리의 과정을 도표나 그림으로 표현해준다. 박스와 화살표로 표현되는 각 단계는 사실 생각의 순서와 흐름을 표현해준다고 할 수 있다. 

 

비주얼 프로그래밍 언어 중 하나인 Flowgorithm의 화면. 프로그래밍의 과정 자체가 플로 차트로 표현된다

최근 프로그래밍 언어의 방향성 가운데 하나가 바로 비주얼 프로그래밍이다. VPL(Visual Programming Language)라고도 불리는 이 언어들은, 논리의 과정을 도표나 그림으로 표현해준다. 박스와 화살표로 표현되는 각 단계는 사실 생각의 순서와 흐름을 표현해준다고 할 수 있다. 


생각을 끌어내는 프로그래밍의 과정

생각을 한다는 것이 쉬운 일은 아니다. 생각하는 방법을 전문적으로 연구하거나 몸에 체득한 사람들이 아니면, 생각한다는 것은 참으로 어려운 일이다. 철학자에게 생각한다는 것은 ‘놀이’일 수 있지만, 전혀 복잡한 것은 생각해 본 적이 없는 사람들에게 깊이 생각하라는 것은 머리에 쥐가 나는 일이다. 그런데 프로그래밍은 우리로 하여금 그 생각을 차근차근 이끌어 가게 해준다. 생각이 어려운 것은 단지 머릿속에서만 뱅뱅거리기 때문에 그 정리가 어려운 것이다. 프로그래밍은 우리의 생각을 객관화시켜 주는 도구이다. 생각을 도식으로 그려서 우리 눈에 보이게 해준다.

프로그래밍을 한다는 것(소프트웨어로 무엇이든지 개발한다는 것)은 실제로 컴퓨터 언어를 써서 명령어를 만들어 내는 코딩(coding)의 단계 이전에 무수히 많은 생각을 해야 한다. 그래서, 프로그래밍을 한다는 것은 생각한다는 것이다. 주어진 문제에 대해서, 문제의 본질이 무엇인 지를 생각하고, 그 문제를 해결하는 방법을 찾아내는 것이 프로그래밍을 하는 과정이다. 다만, 이 각각의 과정에서의 생각의 과정을 컴퓨터 상에 표시하든지, 아니면 종이에 표현하게 함으로써 우리의 생각을 도와준다. 실제로 프로그래밍을 하는 과정을 좀 더 자세히 이야기해 보자.


컴퓨터 사이언스는 문제, 문제의 해결, 그리고 문제 해결 프로세스를 통해 도출되는 솔루션에 대한 학문이다.
— Brad Miller, "Problem Solving with Algorithms and Data Structures"

이 장에서 다루는 내용들

  • 미국에는 왜 코딩 배우기 열풍이 불고 있을까?
  • 프로그래밍이 사고력을 키우는 매커니즘
  • 프로그래밍이 창의력을 키우는 매커니즘
  • 프로그래밍이 기획력을 키워주는 이유