생산성과 수익성을 포기해야 진짜 교육은 가능하다
필자가 현실에서 벌어지고 있는 코딩교육에 대해 상당히 비판적인 이야기를 하고 있다는 것은 아마 이젠 독자들도 파악이 되셨으리라 생각한다. 헌데 이미 코딩교육 바닥도 정부의 막대한 지원금을 바탕으로 한 이익집단들이 얽히고 섥힌 부분이 존재하고 있는지라 ... 뭔가를 낫게 만드는 것이 쉽지 않은 것이 사실이다.
악화가 양화를 구축한다고 했나 ( 존 그리샴의 법칙 ) 나쁜 화폐와 좋은 화폐가 나란히 유통되게 되면 나쁜 화폐가 좋은 화폐를 밀어낸다는 이 이론은 교육에서도 그대로 적용되는 것 같다. 이익집단의 이익에 의해 이리 저리 치우칠 수 밖에 없는 상황에서 더 나은 방향으로 발전되기는 힘들어 보이는게 사실이다.
종종 이런 문제를 가지고 이야기 하다보면 "대안을 제시하라" 는 다그침 스러운 이야기를 듣곤 한다. 그러면 필자는 그렇게 얘기한다. "지금 현재 되어지는 상황을 기준으로 대안을 제시하라면 아마도 학생과 강사를 더 쥐어짜는 형태로 밖에는 그나마 나은 안이 나오기 어려울거다."
그리고 이어서 만약 당신이 진정한 대안을 원한다면 나는 이렇게 얘기한다. "이익집단의 이권에서 벗어나서 정말 학생들을 위하는 마음으로 잘 가르치는 수업'을 만드는 것으로 돌아가는 것이 진정한 대안이 아닐까?"
( 해서 필자는 정부가 실업률을 극복하기 위해서 이래 저래 애쓰는 건 알지만 정부가 교육에 대한 표준을 정해서 그 표준에 따르는 교육만 지원하겠다고 하는 현행 ncs 제도는 극력 반대하는 사람이다.
그 표준이 세상이 필요로 하는 모든 교육을 담을 수도 없을 뿐더러, 그렇게 정부에서 몇몇 사람들의 이야기만을 듣고 자기 멋대로 표준을 정해버리면 그 표준에 속하지 않는 다른 교육들은 정부 지원하에서 수업료가 공짜인 교육에 밀려서 시작해 볼 엄두가 나지 않을 거다.
당장에 정부가 지원하는 연주자와 작곡자를 위한 교육코스를 지원하는 과정은 ncs 시스템 아래에서 자리를 잡을 수가 없다. 정부 표준에 없으니깐. 그렇다면 음악과 미술에 나름 재능과 소양을 가진 사람들은 취업과 창업에 있어서 정부의 지원을 전혀 못받게 되는 거다.
그러면 미술과 음악에 대한 재능을 죽이고 적성에도 안 맞는 코딩을 공부하지 않으면 정부는 지원을 주지 않겠다는 건데 ... 이게 과연 케이팝으로 먹고산다는 나라에서 바람직한 일일까나? )
암튼 기본기에 충실해야 한다고 누누이 강조하면서 프로그래밍 관련 교육에 나름 이익이 달려있는 사람들로 부터 많은 태클을 당하고 있는 지라 필자도 조심스럽기는 하다. 헌데 아무리 생각해도 필자의 생각에 커다란 오류는 없어 보인단 말이지.
프로그래밍을 배우건 무엇을 배우건 간에 기본이 중요하다는 것이고, 그 기본을 튼튼히 만들어 주는 교육으로 가야 하는 것이고, 그러기 위해서는 일단 시작은 제대로 된 개념을 익히고 , 확실한 이미지를 잡고 , 거기에 필요로하는 코드를 충분히 숙지하고 암기하는 것이 필요하다 ... 이것이 지난 글에서 적은 내용이다.
그럼 '그렇게 해서 기본 개념을 숙지하고 확실하게 이미지를 잡은 다음에는 뭘 어떻게 해야 하는 건가요?" 라는 물음이 있을 수 있겠다. 그 다음에는 이거다
"상황에 따라 문제를 파악하고 그것을 해결하기 위해 자신들이 익힌 개념들을 적절하게 활용하고 응용하는 법을 익혀야 한다"
사실 여기까까지만 되면 학교에서 가르쳐주는 개념으로는 끝이라고 본다. 이 이상을 배우고 싶다면 그건 제대로 된 전공을 선택을 하든지 아니면 그 이상을 교육목표로 하는 코스를 찾거나 아니면 책과 인터넷을 통해서 혼자 독학을 하는게 맞다.
( 필자의 경우에는 독학을 권한다. 사실 현실 필드에서 보면 이렇게 기본이 잘 잡힌 사람들은 거의 대부분 혼자서 자판 두들겨 가면서 직접 코드를 만들어 가면서 새로운 것을 공부할 능력을 갖추고 있더라. 그게 가장 빠르고 정확한 지식을 갖추는 방법이기도 하고.
우스개 얘기로 백견이 불여일타 라는 얘기도 프로그래머들 사이에서는 많이 하니깐 )
기본적인 개념이 어느정도 익혀졌을 때에는 적절한 문제제시가 필요하다. 예를 들어서 곱셈을 막 배웠다고 하는 아이에게 이런 문제를 줄 수 있겠다. '하루에 사과를 2개씩 먹는다고 하면 일주일이면 사과를 몇개를 먹게 되지?' ....
사실 배우는 것과 자신에게 닥치는 문제를 연결시키는 것은 배워야 한다. 단순하게 배우는 것만 가지고 "그럼 이 지식을 가지고 이런 문제를 해결할 수 있겠다" 라고 생각하게 되는 건 일부 뛰어난 학생 또는 선행학습이 되어진 학생들에게서나 가능한 일이다. 일반적이지 않다.
보통은 곱셈을 배웠다 하더라도 그것을 가지고 실제 문제를 해결할 수 있다는 감을 잡을 때 까지는 조금 연습이 필요하고 그 과정에서 시간도 필요하다.
아마 처음에는 "곱셈이랑 사과 갯수 세는 거랑 무슨 상관이 있는건데요?" 라고 어리둥절 하는 아이들이 보통 아이들이다. 아주 떨어지는 아이들이 아니다. 더군다나 사과 같은 경우는 보여지는 것이지만 코드는 그 동작하는 모습이 보여지지 않는다. 글씨와 그림 그리고 상상만으로 코드가 동작하는 것을 만들어 내야 하기 때문에 시간이 걸린다.
헌데 기본적인 개념이 제대로 이미지가 잡혀 있으면 이건 하면 할 수록 는다. 이를 위해서는 문제를 풀기 위해 필요한 개념에 대한 이미지가 확실히 잡혀야 하고 또한 문제를 파악할 수 있는 능력 또한 필요하다.
( 이건 국어 실력의 문제가 되기도 한다. 가끔 보면 컴퓨터 프로그래밍을 가르치는데 문맥을 제대로 이해하지 못해서 멍하니 손 놓고 있는 경우도 흔히 보는 광경이다. 그래서 말을 잘하고 말귀를 잘 알아듣는 학생들이 코딩을 잘하더라 )
처음에는 아주 단순한 문제서 부터 시작한다. 이 부분에는 기존에 개념을 확실히 다지기 위해서 외우고 익혀두었던 코드가 큰 도움이 된다. 미리 익히고 외운 코드를 바탕으로 간단한 문제에 적용하면 그 문제가 해결되면서 "공부해 놓았던 내용" 이 "내가 활용할 수 있는 내용" 으로 성장하게 된다.
이것이 시작되면 실력은 늘더라. 조금씩 다양한 형태의 다양한 문제를 해결하는 연습을 통해서 자신이 배운 내용으로 현실에서 나에게 닥치게 될 문제를 스스로의 힘으로 해결 할 수 있다는 자신감을 갖게 된다는 거다. 복잡한 코드를 짤 필요도 없다. 10 - 20 줄 정도의 코드만 짜서 해결할 수 있더라도 충분하다. 그렇게 해서 만들어진 10 -20 라인의 코드들이 모이고 모이고 모이고 모여서 더 복잡한 문제를 해결하게 되는게 프로그래밍의 세계니깐 말이다.
헌데 강사가 주는 코드를 그대로 베껴서 컴파일러에 넣고 '아 된다' 정도 확인하는 정도 로 넘어가는 교육에는 이렇게 개념을 익히고 + 이미지를 잡고 + 문제를 파악하여 + 지식을 적용하는 ... 과정이 생략되어 있다. 그냥 주어지는 코드를 돌려보는 식의 '추억쌓기' 정도에 해당하는 수준의 교육이라고 생각된다.
물론 이렇게 강사는 강의하고 + 예제 배포하면 + 돌려보고 끄덕끄덕 ... 하면 매우 어려운 강의도 단기간에 끝낼 수 있다. 그렇게 하면 가격대비 성능비가 높은 교육이라고 해서 '자바 프로그래밍 삼일만에 완성' 같은 교육도 뚝딱하고 만들 수 있을거다.
하지만 말이다... 정말 실전에서 자신이 코드를 만들어서 자신에게 닥친 문제를 해결 할 수 있는 능력을 가진 사람을 길러내고 싶다면 필자가 맞다. 그냥 듣기만 해서 코드를 짜게 되는 수준의 인간은 극히 드물다. 코딩은 훈련해야 하는 부분이 있고 그 과정에서 제대로 된 선생과 제대로 된 수업을 만나서 차근차근히 자기 실력을 만들어 내는 교육은 필요하다.
정확한 개념 이후에는 적절한 응용 ... 이게 필자가 이야기하는 기본기의 핵심이 된다. 개념 잡고 + 이미지 잡고 + 외울거 외우고 + 문제 파악해서 + 적용해서 해결하고 ... 이게 개발 현장에서 요구하는 역량의 가장 중요한 밑거름이 된다고 필자는 확신한다.