최근 머리가 좋아지는 Logo 프로그래밍이라는 책을 읽고있다. 이 책은 Logo라는 언어에 대한 입문서라고 말할 수 있는데, 이 언어는 어린이들이 사용할 수 있을 만큼 쉽고, 창발적인 사고를 할 수 있도록 도와준다. 현재 미국, 유럽, 일본의 영재교육에 사용되는 것으로 알고있다.
Logo를 이용하여 코드를 작성하면 거북이(?)가 정의된 코드에 따라 화면에서 이동을 하게되고 그 궤적이 화면에 남게된다. 난 현재 기본적인 단계로 직진 및 회전하는 명령만 사용할 수 있다.
간단한 도형 - 사각형, 원, 삼각형등을 그리는 것은 아주 쉽다. 단지 '직진 100픽셀, 90도 우로회전'을 4번 반복하는 것이 사각형이고, 각도와 횟수만 바꿔주면 삼각형이 될 수도, 원이 될 수도 있기 때문이다. 내가 간단한 것을 복잡하게 생각하고 있었다는 것을 깨닫게 된 도형은 별이다. (변명을 하자면, 난 한 쪽 스크린에는 영화를 재생해놓고 다른쪽 스크린에서 코드를 작성하고 있었다는 것이다)
어쨋든, 내가 그린 별은 다음과 같다.

처음에 이 방법을 생각하게 된 기초는 정오각형에 삼각형을 하나씩 붙이려고 했던 것이 별과 같은 모양이라는 생각이었다. 허나 정오각형의 내각을 잘못 계산하는 바람에 (원래는 108도인데 120도로 생각하고 있었다) 계속 이상한 모양이 나오는 것이었다. 결국에는 각도를 제대로 알아내고 그려냈지만... 거북이의 입장에서 보면 거북이가 이동한 경로는 다음과 같다.



공식에 있는 720은 거북이가 회전하는 각도의 총합이다. 이는 5각별이 아닌 경우에도 마찬가지인데, 이를 이용하면 n각별을 그리는 코드를 도출할 수 있다.
to nstar :n :length
repeat :n [fd :length rt 720/:n]
end
시도해보지는 않았지만 내가 시도한 방법으로 n각별을 그리는 방법을 찾을 수는 있을 것 같다. 그러나 코드를 읽는 사람도 매번 n각형에 따른 별의 꼭지점 각도를 계산해야 하는등 직관성이 많이 떨어진다는 한계가 있다.
이와 같은 경우가 아니더라도 간단한 해결책을 두고 복잡한 경우만을 생각하고 쉬운 방법을 보지못해서 시간을 낭비하고 다른사람의 효율도 떨어뜨리는 경우는 많을 것이라 생각된다. 협력작업(나의 경우에 있어서는 Pair Programming)이 얼마나 중요한지 오늘 한번의 경험을 또 하게 되었다.