초등학교 3학년때인데,

컴퓨터를 손에 넣고 일주일이 되지 않았을 때의 이야기.


게임을 만들려고 비행기를 그렸음.

APPLE BASIC 의 HLINE VLINE 을 이용해 막대기 세 개를 그었지.

검은 배경위의 선비 사짜 모양의 비행기.


  #

  #

#####

  #

 ###


얘를 움직여야 되는데 어떻게 움직일지 몰랐음.

( 말 그대로 I'm stuck )

그래서 고민하던 중에

COLOR 명령을 이용해 비행기 색을 바꿔서 그렸지.

FOR 문으로 색을 돌아가며 그리던 중에

검은색( 배경색 ) 으로 그렸더니 비행기가 사라졌어.

그리고 다음색으로 그려질때 비행기가 나타났어.

오!

유레카!

같은 위치로 이동했다!

라고 느낀거지. ( 생각한게 아니라 느낀것 )


그래서 비행기를 배경색과 다르게 찍고, 배경색으로 지우고 옆에다 다시 찍었지.

이동완성!


그때 깨달음. 이동 = 삭제 + 생성.

다음날 한 칸씩 이동할때 깜박임을 최소화하기 위해

세로 길이 만큼의 블럭만 다시 그리면 된다는걸 깨달았고,

도형의 세로방향 외곽선 만큼의 비용으로 일반화 된다는걸 깨달았지,

새롭게 그리는 비용도 마찬가지.

이동속도를 높이기 위해 건너 띄자면 그 거리만큼 늘어나고,

최대 크기는 원래의 형태 만큼의 지우는 비용이지.

즉, 이동을 추가분 만큼의 새로그림, 삭제분 만큼의 제거인

이동 = 일부생성 + 일부삭제

로 구현하는 것이 더 경제적이란걸 깨닫지만,

일부를 구현하기 위해 간단한 기하학적 해석이 필요하다는것 또한 깨달았지.

그 일부 라는 단어가 컨텍스트를 기억하고 있어야한다는 문제임도 알게 되고 말야.


이게 여기서 끝나는 문제가 아닌게,

파일의 처리나, 이미지의 kernel convolution에도 등장하더라.

결국은 기본논리임.