프로그램을 만들때는 가장 작은 단위의 기능을 하는 함수를 만들고 그런 함수들이 모여 좀 더 큰 기능을 하는 함수가 되고 결국 그것들이 전체 프로그램이 된다.
그러면 나중에 완성된 프로그램이 마치 지능이나 어떤 판단력을 갖추고 있는것처럼 보이는데 프로그래밍을 해본 적이 없거나 잘 모르는 사람들이 보면 그것이 처음부터 그렇게 작동하도록 설계되었다고 생각할지도 모르겠다. 그런데 내 경우 프로그램을 만들면서 처음부터 그렇게 완벽한 설계를 해놓고 시작하는 경우는 거의 없다.
처음부터 완벽한 설계도를 머리속에 갖추고 '코딩은 말 그대로 코딩일뿐'이라면서 프로그래밍을 하는 사람이 과연 몇이나 될까? 이건 마치 작곡을 할때 처음부터 하늘의 영감을 받아 단번에 오선악보에 교향곡을 적어 내려갔다고 하는 전설적인 얘기와 같다. 모짜르트는 실제로 그랬다고 하지만... 뭐... 그런 충공깽 천재들은 논외로 칩시다.
일단 원하는 목적이 있고 그것에 맞춰서 작동하는 지극히 단순한 형태의 함수를 만들뿐이다. 목적에 적합하면 그 함수를 계속 사용하고 뭔가 부실하면 뜯어 고친다.
예를들어 함수 A를 만들었는데 처음에는 반환 해야할 값이 true 또는 false이면 충분했던 것이 좀 더 자세한 리턴값이 필요하다고 여겨지면 함수를 뜯어고쳐 문자열을 반환하게 바꿀 수 있다. 이제 뜯어 고친 함수를 B라 하자.
위에서 함수를 뜯어 고친다고 했는데 실제로 그 함수를 직접 수정하지는 않고 같은 내용을 복사해서 함수명을 바꾼 후 그걸 수정해 나가는게 보통이다. 그래서 코드에 함수 A와 B가 일정 기간동안 공존하게 된다. 왜냐면 함수 B를 만들어 놓고 나중에 보니 적합하지 않고 쓸대없이 복잡해서 그냥 함수 A를 계속 쓰는 경우도 있기 때문이다.
그러다가 함수 B가 문제없이 잘 작동하고 별 문제가 없으면 나중에 코드 정리를 할때 함수 A는 삭제해 버리거나 그냥 냅둔채 계속 함수 B를 쓰게 된다. 근데 함수 B가 잘 작동하는게 뭔가 비효율적인것 같아서 그걸 또 고쳐서 함수 C를 만들고 그게 더 낫다고 여겨지면 그 다음엔 함수 C를 쓰게 된다.
그렇게 내가 원하는 적합한 형태의 함수들이 살아 남아서 프로그램이 된다.
최근에 뭔가 만들고 있는데 이게 작업기간이 한달이 넘었다. 회사에서 업무에 활용할 프로그램을 퇴근에서 한두시간 깨작거리던게 덩치가 커져서 어느샌가 1000라인이 넘어 버렸다. 처음에는 인터페이스라고 할것도 없는 아주 단순한 형태의 스크립트였는데 지금은 대충 모양새도 갖췄다.
이쯤되면 중간에 안쓰는 함수들은 한번 정리를 해야하는데 그걸 보고 있으려니 '아 프로그래밍에도 진화론은 여지없이 적용되는구나' 싶어서 끄적거려 봤다.
댓글 없음:
댓글 쓰기