C언어의 허들은 과연 포인터일까? 포인터가 매번 머리를 어지럽히는 이슈이기는 하지만 그렇다고 해서 C언어를 포기하게 만드는 지점은 아니다. 사실은 포인터 자체의 문제보다는 컴퓨터 구조를 먼저 배우지 않고 C언어를 배우는 커리큘럼의 순서 문제다.
대다수의 컴퓨터학과는 신입 첫학기에 프로그래밍 언어를 한 가지 수강하도록 한다. 그 때 그것이 C언어라면 컴퓨터 구조를 수강하지 못하고 포인터를 만나게 된다. 그러면 이런 개념을 왜 쓰는지 도무지 이해가 안 될 수 밖에 없다. 레지스터 간접 주소는 뭘 하는 건지, OS는 메모리를 어떻게 두고 쓰는지, 아무 것도 모르는 상태에서 변수의 주소란게 도대체 무엇이란 말인가. 그럼 결국 힙 메모리를 왜 할당하는지도 알 수가 없다. 그냥 C언어 문법만 외우고 끝나는 것이다.
비단 이 뿐만이 아니다. 컴퓨터학은 상당 부분 응용과목이기 때문에 지식의 선후관계가 얽혀있는 경우가 많다. 대부분의 과목이 두 번 배워야 제대로 이해할 수 있다. 사실 커리큘럼이라는 게 지식의 체계화보다는 학점 획득 과정 중의 8학기 난이도 배분이 목표인 거라서 진짜 공부와는 거리가 멀다. 실제로 뭔가를 깨달으려면 학부 과정에선 어림도 없다. 학부생들 중 그럴싸한 지식을 갖고 있다면 사실상 학교 밖에서 이미 배운 친구들이다.
그럼 커리큘럼이 잘못 됐으니 제대로 고치라고 요구하면 되는가? 그렇지 않다. 학부과정은 4년 동안 학부 졸업자가 필요한 만큼의 기반 지식을 쌓아주는 게 목표다. 깊은 학문을 하기 위한 건 정식 목표가 아니다. 현실적으로 주어진 학기와 수강학점 안에서 강의를 하는게 당연하고 그게 학부과정의 상식적인 학사운영이다. 원하는 바가 있다면 학생 여러분이 직접 선택을 하고 직접 공부를 하는 수 밖에 없다. 깊게 배우고 싶은 부분이 있다면 무엇을 더 배울지 선택하라. 정확히 배우고 싶다면 그 부분을 사전지식이 쌓인 후에 다시 학습하라.
포인터 같은 것은 사실 단촐한 예다. 가벼운 사례일수록 예로 삼기 쉬우니 든 것 뿐이다. 그냥 일반화시켜서 생각하면 된다. 제대로 분야를 파고들자면, 예를들어 네트워크 공부만 하려고 해도 C언어를 상당 수준까지 습득해야 가능하다는 것을 느끼게 될 것이다. 2학년쯤 네트워크 과목을 수강하겠지만 그 때 A+ 학점을 받았다고 해도 4학년쯤 되어 다시 한 번 들여다봐야 겨우 자기 실력으로 패킷 정도는 뜯어볼 수 있을 것이다. 와이어샤크가 다해주는데 왜 배우냐고? 프로그래머가 아니라 유저가 목표라면 그냥 지금 배운 만큼에서 졸업하면 된다. 말했듯이 학생 여러분이 직접 “선택”하는 것이다.
커리큘럼을 탓하라고 해주는 말이 아니다. 실질적인 학습 목적을 깨달으라는 뜻이다. “졸업할 때까지 착실히 과정을 밟았으니 이제 나도 전공자다”라는 착각에 빠지지 말라는 경계의 소리다. 착실히 코스를 밟았다면 이제 기반지식이 쌓인 것뿐이다. 입사해서 신입사원이 되어도 뭔가를 새로 배우기 전까지 아무 것도 못 할 것이고, 대학원에 가도 이제 공부를 시작하는 사람일 뿐이다. 그런데 주변에는 간혹 그렇지 않은 친구들도 있을 거다. 실무능력을 다 갖추고 입사하는 되는 흔히 말하는 경력직 같은 신입. 이들은 커리큘럼을 따라간 다음에 선수과목이 완성되고 나서 본과목을 한 번 더 본 친구들이다. 아마도 중고등학교 때 이미 코딩을 꽤나 했겠지.
대부분의 전공책에서 지식을 전달할 때 그 발생배경까지 설명에 할애하는 경우는 거의 없다. 사실 자신의 전공을 충분히 나레이션 할 수 있는 사람들이 명문대의 제대로 된 교수이기는 하나, 현실적으로 우리가 접하는 교수는 강의를 잘 하는 사람이 아니라 연구하고 논문 쓰는 사람이다. 결국 지식의 근간은 누가 별도로 가르쳐주지 않는 이상 자연스럽게 저절로 터득하는 수 밖에 없는데 그 토대가 되는게 바로 선수과목이다. 안타깝게도 같은 학기의 A과목의 3챕터가 B과목의 1챕터에 대해 선수지식이 될 수 있다는 문제를 넌지시 알려주고 있는 것이다. 그러니 조언하건데 핵심 과목은 반드시 4학년 때 다시 공부하도록 하라. 마지막 학기에 적당한 과목으로 학점을 채우고 취업에 매진하는 현실을 알지만, 그래도 막상 스펙보다는 진짜 실력을 갖추는 쪽이 먹고살기 더 좋다. 마지막 학기 여유로울 때 도서관에서 시간을 조금 더 보내면 당장 곧 찾아올 기술 면접 때부터 엄청나게 큰 도움이 될 것이다.
