그리고 개념에 대한 확실하고 정확한 이미지 형성
필자는 튼튼한 기본을 무척이나 강조하는 사람이라는 건 여지껏 써 온 글에서 누누히 이야기를 해 온 바다. 보통은 기초는 그냥 건너뛰어도 되는 것. 쉬운 것. 언제든지 할 수 있는 것. 하찮은 것. 누구에게서든 배울 수 있는 것... 이렇게 생각하는 경향이 있다는 건 필자도 잘 안다. 헌데 이건 천만의 말씀이다.
초기 프로야구 시절의 일이다. 당시는 우리나라 프로야구의 수준이 미국 일본에 비해 많이 떨어졌던 지라 외국에서 능력있는 코치를 영입해서 훈련을 하는 경우가 많았는데 이런 웃지 못할 에피소드가 있었다고 한다.
모 구단에서 유명한 코치를 데려다가 훈련을 시켰는데 기본기 훈련만 계속 시키더라는 거다. 그래서 '이런 훈련은 국내 코치들에게 시켜되 되는건데 구지 비싼 외국인 코치를 데려다가 기본기 훈련을 할 필요가 있나?' 해서 그 코치를 해고하고 다른 더 유명한 코치를 데려다가 훈련을 시켰는데 그 코치도 똑 같이 기본기 훈련을 시키더라는 거다...
필자가 삼성SDS 정보기술연구소에서 신입사원시절을 보낸건 앞의 글에서 적은 적이 있다. 필자는 정말 그 곳에서 날고 기는 프로그래머를 많이 만났다. 아마 다시는 그렇게 대단한 역량의 사람들을 또 만날 수 있을까 싶을 정도로 당시로서는 대단한 사람들이 많았었다. 헌데 거기의 사람들은 신기할 정도로 새로운 기술이나 문물에는 관심이 별로 많지 않았다. 일부 얼리어답타 정도를 제외하고는 말이지...
오히려 당시로서는 생소했던 비주얼베이직 같은 도구를 쓰고 있으면 그 날고 기는 선배들이 신기해하면서 어... 이런 것도 이젠 있구나 하고 구경하고 가는 일도 있었다. 헌데 그렇게 새로운 트랜드나 경향에 둔감한 듯 해도 그 사람들의 실력이라는 것이 장난이 아니었더라는 거다.
외국의 유명 소프트웨어를 써 보고는 그 소프트웨어의 엔진부분에 어떤 자료구조가 동원되어야 하고 그것을 위해 어떤 코드를 짜고 어떻게 API를 구성해야 하는지를 그렇게 힘들이지 않고서 잡아내는 귀신같은 능력을 구경하기도 했으니깐 ... 한마디로 문제해결능력이 귀신 수준이었던 것이고 그 문제를 해결하기 위해서 어떤 기본기를 응용해서 어떤 코드를 만들어야 할지를 거의 귀신같이 잡아내는 걸 보고서 혀를 내눌렀더라는 거다.
필자가 기본기에 대한 중요성을 뼈저리게 깨달았던 것도 그 시절의 그런 경험들이었다. 사실 기본기라는 것이 그렇게 대단하더라는 거다.
....
그럼 누군가가 필자에게 이런 걸 물어 볼 수도 있을 것 같다 "선생님이 생각하시는 기본기라는 것은 어떤 것인가요?" 뭐 설명하자면 이것도 말이 길어지기는 한데 필자가 생각하는 바는 대략 이러하다. 여러가지가 있는데 이 글에서는 이거 한 가지에 대해 얘기를 해 보고자 한다.
"먼저 기본적인 사항들에 대해 정확한 개념을 잡는 것에서 시작해야 한다"
사소한 개념도 그 개념을 정확하게 이해하고 있는지 아닌지 스스로 돌아봐야 한다. 그리고 그 단순한 개념뿐 아니라 개념과 개념이 얽혀 있는 경우에도 그 개념이 왔다갔다 하는 것이 아니라 제대로 흔들리지 않게 자리잡고 있는지 살펴 봐야 한다.
예를 들어서 이런 걸 생각해 볼 수 있다.
int i , j ;
i = 100 ;
j = i ;
아주 단순한 코드이다. 헌제 3번째 줄의 코드를 그냥 그러려니 ... 하고 넘어가는 경우를 흔히 본다. 사실 이 코드를 아주 정확하게 설명할 수 있는 선생도 필자가 본 바로는 절반 정도 될 것 같기도 하다.
"자 이 코드에서 질문이다 세번째 코드가 뜻하는 바를 정확하게 설명을 해야하는데 ... 이 코드는 하나의 기억장소에 두개의 이름을 붙이는 형태로 동작하는지? 아니면 기억장소 안에 기억장소가 들어가는 형태로 동작하는지? 아니면 기억장소의 내용을 꺼내어서 기억장소에 넣는 형태로 동작하는지? 아니면 기억장소의 값을 복사해서 기억장소에 넣는 형태로 동작하는 건지? 그리고 왼쪽의 기억장소와 오른쪽의 기억장소간은 어떤 일이 벌어지는 것인지 등등을 감안해서 정확하게 설명해 보도록"
이라고 하면 헷갈리기 시작한다는 거다... 어느 프로그래밍 언어에서 든지 배우는 단순한 코드인데도 불구하고 그런 개념을 정확하게 제대로 설명해 놓은 책도 잘 못봤고 ... 강조하여 가르치는 선생도 많지 않더라.
헌데 이런 기본적인 개념이 제대로 잡히지 않으면 응용에 있어서 분명히 한계가 온다. 50줄만 넘어서면 코드가 꼬이는 일이 벌어진다. 당연한게 개념도 모르는 걸 그냥 대충 눈썰미로 쓰기 시작하니 "쓰지 말아야 할 형태로 쓰는" 일이 생기고 그 시점에서 컴파일러는 에러를 발생시키는데 정작 짠 사람은 그 원인을 알지 못하게 되니 말이지...
헌데 일주일에 1시간씩 일년에 32시간 정도 수업해서 이런 기본적인 개념에 대해서 반복하고 숙달하면서 응용되어진 코드까지 연습할 시간이 될까? 필자의 기준으로는 택도 없이 모자란다. 저 개념이 뼈 속 깊이 자리잡기 위해서는 시행착오를 거치면서 깨달음이 있어야 하는 것이거든... 그건 단순히 강의를 듣는 것 만으로는 절대 만들어 지지 않더라는 거다.
자신이 스스로 생각하고 만들고 거기서 발생한 오류를 잡아내면서 자신이 기존에 가지고 있었던 개념을 수정하는 방법으로 접근 해야 한다는거다. 그렇게 하는 방법 이외에 더 좋은 방법이 있을른지 모르겠다.
왜냐하면 강의라는 것이 듣는 것 만으로는 한계가 분명한 교육수단이기 때문이다. 실제로 강사가 아무리 잘 강의자료를 만들어서 능숙하게 강의를 진행한다고 하더라도 강사의 머리속에 자리잡은 개념의 20% 미만 정도가 듣는 사람에게 전달이 된다고 한다. ( 필자가 어느 전문가를 통해 듣기로는 17% 라고 하더라 ) 그리고 필자는 그것에 전적으로 동원한다.
즉 내가 머리속에 자리잡은 확실한 이미지의 흐리멍텅한 버젼 정도가 학생들에게 전달되는게 강의라는 교육수단의 한계가 된다. 사실 선생이 그렇게 강조하고 가르치더라도 왜 못알아 듣냐고 답답해 하는 경험은 대부분의 선생님들이 가지고 있을터인데 사실 그게 당연한거라는 거다.
결국 아이들은 스스로 자신이 기존에 가지고 있었던 깨달음에 근거해서 새로운 지식을 받아들이고 그것을 깨달아야 한다는 거다. 즉 스스로 깨달은 것이 진짜 지식이지 단순히 강의를 듣는 것으로는 제대로 된 지식이라고 할 수 없는거다.
예를 들어 덧셈을 알고 있는 학생에게 곱셈을 가르치게 되면 2 에 2 를 더하면 얼마지? 그리고 2 에 2 에 2 를 더하면 얼마가 되지? 그런 식으로 2 를 두번 더하는 걸 2 곱하기 2라고 하고 2를 세번 더하는 걸 2 곱하기 3 이라고 하는거야. 이게 곱셈이야 ... 라고 설명을 한다고 할때 이건 덧셈이라는 개념을 알고 있는 학생이라면 이해가 되겠지만 모르면 이해가 안된다. 그리고 이해가 된 것 만으로 곱셈이 아무때나 되지 못한다. 자꾸 연습해서 자신의 머리속에 곱셈에 대한 이미지가 제대로 잡히는 것 까지 해야 그게 제대로 된 기본이 잡히는 거다.
머리속에 확실하고 정확한 이미지가 잡히도록 하는 것. 그것이 기본의 출발점이 된다. 해서 자신에게 닥치는 문제가 있을때 곱셈을 해서 정확하게 문제를 해결할 수 있는 수준이 되게 되면 그 부분에 대한 제대로 된 개념을 잡게 된거라고 본다.
그리고 가능하다면 구구단 정도의 예제는 암기해서 신속하게 상황에 맞는 응용이 가능하도록 하자면 금상첨화이겠지.
뭐 혹자는 변별력을 강조한답시고 19단 까지를 외우게 하는 부모도 있겠지만 ... 솔직히 그거 까지는 난 오버라고 본다. 변별력이 중요하지만 19단 까지 달달 외우게 하는 건 아이에 대해서 좀 너무하는 거 아닌가? 그리고 19단 까지 외워야 풀 수 있는 문제를 시험에 내는 건 교육을 망치려고 작정한 거라고 생각한다.
그냥 ... 자신에게 주어지는 문제를 해결할 수 있는 능력 정도면 학교에서의 교육으로는 더 이상 바라면 안되는 거 아닌가 하는 생각을 한단 말이지.