"공부하는데 방해가 되는것이 무엇이 있는가?"
여기에는 여러가지의 요소가 있을것이다. 쉴세없이 떠들어대는 TV나, 띠리링 하며 하단에서 반짝거리며 글을 쳐 넣어주길 기다리는 메신져들이나, 포털사이트 입구에 떡 떠있는 자극적인 헤드라인의 기사들과 주위의 잡음등등 이류를 들자면 여러가지가 있다.
요즘 내가 격고 있는 방해꾼은 이런 외적인 요소는 아니다. 공부하면서 내가 기존에 알고 있던 사실들에 대한 지식의 단편성, 편견, 혹은 아집들 때문이다.
예를들면 이런거다.
난 초등학교 1학년때 고학년 선배가와서 4-6 은 무엇이냐? 라는 질문을 했었다. "음수" 라는 개념을 알고 있지 못했던 초등학생때는 계산을 할 수가 없었고, 도무지 이해가 되지 않는 문제였다.
C언어에서도 비슷한 경우가 있다. 많은 초급자용 입문책엔 if문을 설명할때 이런식으로 간단하게 설명한다 (물론 내가 운영하고 있는 홈페이지에도 그런식으로만 설명해놓았다)
if(비교문)
비교문이 참일때 실행시킬 문장;
중학교 2학년때부터 C언어 관련 책을 보았었는데, 대학생이 될때까지 4년동안 if문 다음에는 정말 "비교문" 만 들어갈 수 있는줄 알고 있었다. if(scanf("%s", szInput) && *szInput); 이런문장이 이해될리가 없다. 엄밀히 따지자면 비교문이지만 scanf라는 명령어가 들어간다는것 자체가 "순수한 비교문만 들어갈 수 있다" 라고 생각하고 있었을때에는 떠올릴 수 없는 발상이였다.
대학교 1학년때 C언어 시험기간에 친구들을 대상으로 강의를 해준적이 있다. 이때 for문으로 구구단을 짜는걸 설명해 준적이 있었는데..
for(int i = 2; i < 9; i++)
for(int j = 2; j < 9; j++)
이란 문장을 보고 친구들이 했던 질문이 생각난다. "for문 안에 또 for를 쓸 수 있는거야?" 우리가 배웠던 교재에는 중첩for문이라는 단원이나 문장이 없었기 때문에 이를 몰랐던 친구들로서는 발상이 쉽진 않았던거다. (다행이도 내가 처음공부했던 GW-BASIC관련 책에는 중첩for문이라는 단원이 따로 존재했다)
가장 최근에 고민했던것은 3D프로그래밍에서 쓰는 수학관련..
고등학교때 행렬을 배울때는 이런식으로 배운다. (x, y)좌표를 회전하는 행렬A가 있을때 (x, y)를 2행1열로 만들고, 회전행렬 A를 앞에다. 그리고 2행 1열로 만들어진 좌표 행렬을 뒤에다가 곱해서 회전된 좌표의 값을 구했다. 따라서 A변환을 하고 B변환을 할경우 곱하는 순서는 B A 좌표 순으로 되어야만 했다.
그런데... DirectX로 프로그래밍을 하다보니 A변환후 B변환을 해야 해서 BA를 곱하고 그 결과로 적용을 시켰더니 뭔가 이상하게 나온다. 아무리 생각해도 이건 이상했다. 나중에 속는셈치고 순서를 AB로 바꾸어 적용시켰더니 그제서야 제대로 나온다.
얼마전에 DirectX에서는 좌표를 3행1열로 저장하지 않고 1행 3열로 다룬다는걸 알게 되었다.
좀더 넓은 시야를 가지고 공부를 해야 한다. 기존에 알고 있던걸 맹목적으로 신용하지 말고 비판하는 태도로 공부를 해야 한다.. 사실 지금도 얼마나 머리속에 편견을 가지고 공부를 하고 있는지도 모른다..
일상 이야기2007/01/16 16:00
TAG 공부
