"프로그래밍에는 오답은 있어도 정답은 없다"
아마도 프로그래밍을 해 본 사람과 그렇지 않은 사람의 관점이 가장 극명하게 갈리는 명제중의 하나라고 생각한다. 프로그래밍을 해 본 사람은 이 사실에 대해서 거의 대체로 수긍하는데 프로그래밍을 해 보지 않은 사람들은 여기서 오는 특징을 잘 모른다.
이전 글에서 필자는 튼튼한 기본을 다지기 위해서는 개념을 잡아야 한다는 것 , 그리고 적절한 응용을 통해 문제를 해결할 수 있는 능력을 키워야 한다는 것을 이야기 했다.
헌데 말이다... 문제를 해결하는 방법에는 단 하나의 옳은 방법만 존재하는 게 아니다. 간단한 문제라도 학생들에게 과제를 내어주면 그에 대한 해결방법이 사람의 수 만큼 다양하다.
예전에 온라인으로 컴퓨터 프로그래밍 능력을 테스트하는 프로그램을 만드는 부분에 참여한 경험이 있는데 ... 사지선다형의 문제는 단편적인 지식을 점검하는 수준으로 밖에는 만들기가 어려웠고 이 사람이 체계적인 프로그래밍 능력을 가지고 있는지 아닌지를 점검하기에는 상당히 역부족이었다.
( 해서 필자의 경우에는 코드의 빈칸을 비우고서 그 빈칸에 들어갈 알맞는 코드를 적어 넣으라... 라는 식의 절충점을 찾았었다 )
지금도 보면 어떻게든 돈을 적게 쓰고 프로그래밍 능력을 테스트 해 보고자 하는 접근을 하는 곳이 없지않아 있긴 한데 ... 사실 이건 쉽지 않다. 단순히 결과만을 따져서 될 문제가 아니라 문제 풀이의 과정이 결과 이상으로 중요하고 , 왜 이런 과정으로 문제를 풀어내었는가의 판단과 선택여부 또한 능력을 측정하는데 중요한 부분이 되는데 이 부분은 사실 사람마다 "왜 이렇게 생각하느냐" 를 가지고 평가를 내리기 어려운 부분이 존재하기 때문이다.
해서 예전에 프로그래밍 자격시험중에 개발능력을 측정하는 종류의 시험이 있기는 했다. ( 지금은 망해버린 선마이크로시스템즈에서 시행하던 SCJD 라는 자격증 취득을 위한 시험이 있었다 ) 헌데 이 시험 같은 경우에는 문제를 출제하면 그 문제를 해결하기 위한 프로그램을 작성해서 보내는데 채점에만 6개월이 걸리고 그 과정에서 프로그래밍 코드 뿐 아니라 많은 에세이 형태의 문서를 작성해야 했다. 그만큼 시간도 돈도 많이 들어간다는 거다. 내가 알기로는 너무 인기가 없어서 폭망해 버렸다. ㅎ
해서 보면 아직도 프로그래밍 능력에 대한 자격증 형태의 검증시스템을 만들어서 그것으로 뭔가 자신이 이권 또는 권력을 만들어 보고자 하는 시도가 없지않아 있기는 한데 ... 필자가 보기에는 성공 가능성은 별로 없어 보인다.
왜냐하면 그건 남이 짠 코드를 보고 그 코드를 작성하게 된 판단근거와 프로그래밍 과정을 유추할 정도의 고수가 아니면 판단이 불가능하고 또한 객관적인 판단이 불가능하다. 주관적인 판단이라는 비판을 피할 수 없다. 객관적이 못하다면 평가에서 안좋은 결과를 받은 사람들의 태클을 피할 방법이 없다. 당연히 시끌시끌한 분위기는 피할 수 없을 것이고 ... 시험의 공신력은 떨어질 것이고 ... 안봐도 비디오 오디오 뻔 하다.
이런 와중에서 컴퓨터 프로그래밍을 통해서 '주관적인 평가' 를 통해 대학을 우회해서 들어갈 수 있는 방법을 만들겠다? 필자는 이거 백퍼센트 비리가 끼어들어갈 여지를 만들어 줄 것이라고 생각한다. 있어서는 안 되는 일인데 아마도 '코딩을 통해 인생 팔자 고쳐보자' 라는 생각을 가진 사람들은 이거 하고 싶어서 미칠꺼다. 대학입시만 일단 물고 들어가면 시장은 형성되고 돈은 떠다니기 마련이니깐
.....
필자가 코딩교육에서 대량생산형 교육 ( 그러니까 똑 같은 과정에 수강생이 수십 수백명이 들어와서 배우고 가는 형태의 교육 ) 에 부정적이라는 건 아마 독자분들은 다 아실 터이고 그 대표적인 이유가 여기에 있다. "프로그래밍은 결과가 아니라 과정이기 때문"
사실 문제해결을 하기 위해 어떤 과정으로 문제를 풀어야 할지에 대해서는 사람마다 사정도 틀리고 생각도 틀리다. 어떤 사람에게는 쉽게 쉽게 풀어가야 하는 것이 가장 적절한 방법일 수 있고 , 어떤 사람은 지금 빨리 이 부분을 해결하고 다음 단계로 넘어가야 하는 사정이 있을 수도 있다. 어떤 사람의 경우는 이 문제를 해결하면서 노하우를 정리하고 축적할 필요가 있고 , 어떤 사람에게는 이 문제해결의 방법이 다른 논리로 교체될 수 있을 가능성을 고려해야 하는 사정이 있을 수도 있다. 케이스 바이 케이스로 따지자면 정말 엄청나게 많은 수의 경우가 발생한다.
물론 그런 케이스를 모두 가르쳐 줄 수는 없다. 해서 수업에서는 대표적인 케이스를 가상하여 진행하는 경우가 일반적이다. 헌데 학생들을 데리고 문제해결 능력을 키워주어야 하는 경우에는 결국 이 과정에서 서로의 생각과 해결방안을 놓고 토론하고 의견을 교환하는 것은 반드시 필요하다. 강사가 짜 준 프로그램이 정답이라고 절대 말할 수 없고, 또한 적절한 과정이 배재되어진 결과 코드만 가지고 베끼는 건 그건 타이핑 연습이지 프로그래밍이라고 말 할 수 없다.
이 과정에서 "들어주어야 할 이유" 가 생긴다. 자신은 이렇게 생각해서 이렇게 코드를 짰다. 그래서 돌아갔고 그래서 잘 안돌아갔다. 이게 적절한 과정을 밟은 것인가? 내가 뭐를 잘못 생각했기 때문에 잘 안돌아가는 것인가? 이런 이야기를 들어주고 적절하게 반응해 주는 과정이 프로그래밍 교육에서는 반드시 필요하다고 생각한다.
헌데 대량생산형 교육에서는 이런 여지가 만들어 질 가능성은 거의 없다. 애초에 대량생산형 교육은 수익성을 목표로 해서 만들어졌다. 그렇게 해서 단가를 낮추는 대신 대량의 상품을 판매하듯이 한꺼번에 많은 수강생을 모집해서 수익을 올리기 위한 프레임에서 벗어날 수 없다. 헌데 한 사람 한 사람의 생각을 모두 들어주고 거기에 적절히 반응을 해 주기 위해서는? 당연히 인력이 들어간다. 그것도 상당히 수준이 높은 인력이 요구된다. 그렇게 되면 수익성은 떨어지게 된다.
.....
사실 천재가 아니고서는 자신이 스스로 소프트웨어를 설계하고 구현하고 책임감을 가지고 자신이 작성한 코드의 품질 유지를 위해서 작성한 코드를 손질 할 수 있는 정도의 역량을 보여주기 위해서는 훈련이 필요하다. 사실 적절한 훈련을 통해서 익숙해 진다면 그건 천재만 할 수 있는 일이 아니라 모두가 다 할 수 있는 일이 된다.
그리고 그렇게 10줄을 짤 수 있으면 그렇게 만들어진 10줄 짜리 코드 두개를 붙여서 20줄 짜리를 만들어 주면 되고 ... 또 그 20줄 짜리 두개를 붙여서 40줄 짜리를 만들어 주면 된다. 이게 프로그래밍의 현실 세계다.
대신 자신이 스스로 생각해서 만들어 낸 것이 아니라면 , 스스로 자신이 왜 이렇게 만들었는지를 납득하지 못한다고 한다면 그 코딩교육은 헛돈 쓴 것에 불과할 것이다. 그냥 강사가 나누어준 코드를 타이핑 쳐서 돌려본 추억만 쌓고 돈과 시간만 날린 거고 정작 자신이 스스로 생각해서 뭔가 만들어 보는 능력은 전혀 만들어지지 않았을 거다. 대단한 재능을 가진 사람이 아니었다면 말이지.
그러면 아마 혹자는 '우리애는 남다르게 똑똑하니까 잘 할거야' 라고 생각할른지 모르겠다. 헌데 필자는 그 정도로 대단한 소질을 가진 사람들은 많지 않다고 생각한다. 대신 이런 건 있을 수 있을거다. 영어 수학 공부할 시간을 죄다 코딩하느라고 보내서 시간 가는줄 모르고 코딩에 열중하면서 남다른 프로그래밍 실력을 '독학'으로 깨우친 경우는 있을 수 있을거다.
헌데 그런 재능을 가진 아이들 ... 손을 좀 잡아주고 그들의 이야기를 들어줄 수 있었다면 그네들이 조금은 덜 답답하고 덜 낭비스럽게 그 시간들을 보낼 수 있었지 않을까나?
그리고 열정이라는 것은 당연히 불붙듯 하다가 식어지기 마련인데 그럴 때를 위해서 스승이 필요한것이고 학우들이 필요한 것이 아닌가?
적어도 필자는 그렇게 생각한다.
예전에 강의할 때 쓰레드에 대해서 반나절 정도 강의 & 실습을 했었는데 그 수업을 들은 수강생이 나중에 찾아와서 이런 이야기를 해 주었던 것이 기억난다. 혼자서 많은 책을 보고 인터넷도 뒤지고 ... 쓰레드를 이해하기 위해서 3개월을 붙들었다가 결국에는 뭐가 뭔지 모르는 채로 거의 포기하고 있었는데 여기에서 딱 2시간 수업 듣고는 그게 어떤건지 깨달음이 왔어요. 샴푸와 워시를 예를 들어서 설명해 주실 때는 정말 전율이 왔습니다...
필자는 그 학생에게 무한 칭찬을 날렸다. 참 잘 했고 참 잘 견디어 주었다고. 헌데 그런 학생들이 애초부터 좀 자신의 고민과 의문에 답을 줄 수 있는 싸부님을 만날 수 있었더라면 훨씬 더 좋지 않았을까? 하는 아쉬움은 있더라는 말이지...