프로그래밍 공부

| 2011. 6. 28. 23:55

요새 내가 일과 시간 외에 하는 일 중에 가장 주력하는 것은 음주프로그래밍 공부다.
혹자는 영화를 보는 것이나, 책을 읽는 것, 또는 야구 관련 영어 글을 번역하는 것이 아니냐고 물을 수도 있겠지만 저 세 가지 활동은 엄밀히 말하면 일과 시간 외에 일어나는 일이 아니다.
책을 읽고 번역을 하는 것은 대개 주중에, 그것도 일과 시간 도중에 짬을 내어 하는 활동이다.
사실상 나의 일과 시간은 비일과 시간과 크게 다르지 않기는 하지만 최소한 저 두 활동은 거의 내 사무실에서만 벌어지는 일이다.
영화를 보는 것은 보통 주말의 취미 생활이며, 주말이라는 신성하고 짧은 기간은 '일과 시간 외'라고 치부하기에 너무 고귀한 존재라 처음부터 논외 대상이었다.

컴퓨터 프로그래밍에 사용되는 수단을 '언어'라고 칭한 것은 굉장히 좋은 발상이다.
비록 인간이 사용하는 언어와 모든 면에서 동일한 특성을 공유하고 있지는 않지만 그 프로그래밍 수단을 언어라고 부르는 것이 전혀 어색하지 않을만큼, 핵심적인 면에 있어 프로그래밍 방법을 배우는 것은 하나의 새로운 언어를 배우는 것과 비슷하다.
내가 거의 유일하게 구현할 줄 아는 C로 예를 들자면 다음과 같다.

언어에 있어 가장 기본이 되는 문자의 경우, C 언어와 나의 제 2외국어인 영어가 같은 표현 체계를 공유하고 있기 때문에 러시아어를 배울 때처럼 알파벳부터 하나하나 익힐 필요는 없었다.
아이가 처음으로 말을 떼는 것처럼 더듬더듬, 단어 단위로 말하는 방법은 2년 반의 전자과 전공생의 짬밥으로부터 익혔다.[각주:1]
본격적으로 공부를 시작하기로 마음먹고 처음 공부에 들어간 것은 언어의 기초인 문법.
영어의 구조와 관련된 수업을 들은 뒤로 라틴어 계열의 언어는 구조 파악이 의미 파악에 가장 핵심이라는 확신이 든 뒤부터 나는 새로운 언어를 접할 때 대부분 그 문법부터 살펴보는 버릇이 생겼다.
주부와 서술부를 구성하는 것이 무엇인지, 서술부가 동사, 목적어, 보어로 어떻게 나뉘는지, 전치사구와 종속절은 무엇인지에 대한 기본적인 개념 없이 구조를 파악하는 것은 불가능한 일이기 때문이다.

동영상 강의를 통해 C 언어의 문법이 어떤 구조를 가지고 있는지 배우고 그 문법의 예문에 등장하는 기본적인 단어들, 즉 C 언어의 기본적인 함수들의 의미와 기능을 알아나갔다.

언어에 있어 문법이 중요하다지만 그것은 당연히 기초 단어 정도는 알고 있다는 전제다. 영어 공부 열심히 하자.


각종 과외와 학원으로부터 생긴 경험에 의하면 문법을 공부하는 것은 배우는 사람으로 하여금 정말로 뭔가를 배웠다는 느낌을 들게 하지만 사실상 그 지식은 거의 아무데도 쓸모없는 경우가 많다.
그 이유는 너무나 자명한 것이, 문법을 아무리 파악하고 있어도 실제 독해를 하거나(다른 사람이 작성한 코드를 이해하려고 하는 경우) 직접 글을 쓰는 경우(스스로 코딩을 하는 경우)에 흔히 말하는 '실전 경험'이 전무하기 때문이다.
문법 공부가 막바지에 다다랐을 때에서야 그 간단한 이치가 떠올랐다.
그래서 문법은 이 정도면 어느 정도 완성되었다고 판단하고 실전 경험을 쌓기 위해 어떤 공부를 해야할 지 찾아다녔다.

여기서 의외로 많은 시간이 소요되었다.
이제 막 영어 공부를 시작한 사람이 다음 과정에서 어떤 공부를 해야하는지 혼자서는 잘 모르는 것처럼 나 역시 나에게 필요한 것이 바로 곁에 있었음에도 괜히 이 곳 저 곳을 들쑤셨다.
내 주변에서 나에게 도움을 줄 수 있는 사람 대부분이 학교 커리큘럼을 따라갔기 때문에 나처럼 아무것도 없이 혼자 공부하는 방법에 대해서는 잘 모르는 듯했다.
하지만 문득 그런 사람 중 하나가 건네준 책이 떠올라 그 책을 펼쳐봤고 바로 거기서 나의 다음 공부감을 찾았다.
결국 그들은 답을 알고 있었던 것이었다.
내가 제대로 물어보지 못했을 뿐.

오래 전에 배운 문법의 많은 부분을 잊어버리고 자료 구조 공부에 들어갔다.
단순한 메커니즘만을 배우던 문법보다 실제 코딩이 어떻게 이루어지는지를 배우는 과정은 확실히 더 어려웠지만 그만큼 흥미로웠다.
알고리듬은 어떻게 짜는 것이며 그것을 C로는 어떻게 구현하는 것인지를 알아가는 것은 단순히 기존에 알고 있던 문법을 짜맞추는 것 이상의 지적 활동이 요구되는 것이다.
우리가 단순히 문장에 not을 넣는 것이 어떤 변화를 불러오는지, 즉 구조적으로 어떤 변화가 있고 의미적으로는 어떤 변화가 있는지 아는 것과 '진짜 여자라면 아스날 팬이랑은 사귀지 않는다'라는 의미를 영어로 어떻게 표현해낼 수 있는지 떠올리는 것은 매우다른 일이다.
후자를 가능하게 하기 위해선 not을 넣는 것이 어떤 의미인지를 파악하는 것 이상의 발상이 필요하다는 말이다.

난 아스날 팬이 아니다.


아직까지는 아주 즐겁게 공부에 임하고 있다.
비록 정말 내가 말하고자, 쓰고자 하는 바를 자유 자재로 구사하는 수준은 못 되지만 어휘력이 늘어가고 같은 뜻을 이렇게도 저렇게도 표현하는 내 모습을 보면서 계속 동기 부여를 받고 있다.
가끔 내 코딩 어디에 문제가 있는지 모르겠는데도 자꾸 문법이 틀렸다고 징징거리는 컴파일러를 보면 열이 받을 때도 있지만 프로그래밍 언어를 공부하는 사람이라면 누구나 거쳐가는 과정이리라.

하긴 고작 이 정도 공부해놓고 벌써 질린다면 나는 정말 전자과 전공생의 자격이 없는 거겠지.
스스로 재미도 느끼고 그러면서 지식도 쌓고 그러면서 나름 미래를 위한 대비도 할 수 있는 일이란 흔치 않은 것이니 더 열심히 해야겠다.
빛나는 미래가 내 앞에 놓여있는지 누가 알겠는가.


  1. 요새 혼자 공부하면서 경험하는 것들을 당시에는 겪었던 기억이 없는 것으로 봐서 '나는 정말 공부를 안 하는 학생이었나보다' 한다. [본문으로]