0단계
순서대로 일을 진행시킬 수 있다
가장 단순한 형태의 스크립트 (say, say, wait, say, close)
요약 : 가장 단순한 형태. 누구나 입문 가능한 수준

1단계
판단과 분기를 할 수 있다 (if, goto, for)
초창기의 Basic 을 비롯한 언어적 형태의 스크립트
공통작업을 추출해낼 수 있다 (gosub, return)
다차원 배열을 지정할 수 있다
Basic 이후 언어들
요약 : 판단과 분기를 통해 반복작업을 줄일 수 있다. 예) 1부터 100까지 더한다

2단계 - 함수
함수의 형태를 갖춘다. (인자와 리턴값 개념을 갖춘 func)
동적 할당을 할 수 있다. 자료구조를 정의할 수 있다. 재귀호출을 할 수 있다
C, Pascal 등의 언어
요약 : 코드를 라이브러리화하여 능률을 향상시킬 수 있다. 예) 자료구조와 알고리즘

3단계 - 일반화
함수의 인자로 함수를 보낸다.
3단계를 잘 알고 있는가 판단하는 법 : 일반화된 퀵 소트
Ruby 의 Block, C++의 Template, C 의 함수포인터
요약 : 프레임워크를 통한 코드 재활용.

4단계 - 고계도 프로그래밍
함수를 만들어내는 함수를 만든다, Currying
Lisp 의 macro, C++ 의 Template Meta Programming
요약 : 도메인에 맞는 언어를 만들어서 그 언어로 문제를 해결한다


부록 : 내가 체험했었던 프로그래밍의 벽들

1. 처음 컴퓨터를 접하고 나서 베이직을 공부하면서, 잡지에 게재된 basic 으로 된 간단한 게임 프로그램의 소스를 고쳐가면서 프로그래밍의 감각을 익힌다. 어린 나이에 내가 컴퓨터 프로그램을 잘 안다고 착각하기 시작. 허나 대부분의 게임들은 기계어로 만든다는 것을 알게 됨. 기계어는 도전할 엄두가 나지 않았음.

2. 컴퓨터 학원에 갔는데 학원선생님이 1부터 100까지 더하는 프로그램을 만들어보라고 시키셨다. 어떻게 하는지 모름. for 문도 쓸 줄 알았지만 a=a+i  라는 문장을 생각해내지 못 함. 그 후에 좀 더 체계적인 공부 시작

3. c 언어를 익혀서 ibm-pc 의 허큘리스 모드에서 돌아가는 프로그램을 만들기 시작. msx 때 처럼 쓸 수 있도록 스프라이트 에디터를 만들어본다. 점찍기 선긋기까진 할 수 있었지만, 칠하기 (fill) 기능을 만드는 것에서 벽에 걸림. 재귀호출이란 것을 알아야 한다는 것을 뒤늦게 알게 됨

4. ui 쪽에 관심이 생겨서 윈도우 시스템 같은 것을 만들게 되었음. 헌데 윈도우마다 자식 콘트롤의 갯수가 제각각 가변이란 것을 어떻게 구현할까에서 막힘. 그때까지 배열 외의 자료구조는 생각해본 적이 없었음. 자료구조라는 것을 알아야 한다는 것을 알게 됨

5. 리스프라는 언어를 배우면서, 그 해당 문제를 해결하기 위한 언어를 리스프로 만들어서 그 언어로 문제를 해결한다라는 방식이 있다는 것을 알게 됨. 함수가 함수를 만드는 개념이 있고 이걸 써서 복잡한 문제를 간단하게 해결할 수도 있다는 것을 알게 됨

(후략)

imcgames 의 김학규입니다