프로그래밍 테크닉 1

사람들이 사고하는 방식은 직관에 의한 경우가 많다. 특히 직관이 인식을 결정하고 과정을 거치려면 언어의 도움을 받는다. 예를 들면 빵 세개가 있고 한개를 먹으면 빵 두개가 남는다고 했을때, 이 연산을 프로그램화한다고 할때 직관적으로 이해하는 인상을 준다.

흔히 프로그래밍도 이와 같다고 볼 수 있는데 프로그래밍 경험이 많지 않으면 프로그래밍 과정을 배울때 실망을 할 수도 있다.

왜냐하면 프로그램 소스코드는 직관적으로 사람이 이해하는 문자열이 동원되기도 하지만, 인공지능 구현과 같이 복잡한 수식들간의 연산관계로 구현되는 경우에는 빵이나 먹다와 같은 직관적인 문자열이 아니라 수학 공식으로 사상된 대상을 다루기 때문이다.

인공지능의 예를 들면 신경망 알고리즘에서 가장 단순한 형태의 계층을 모델화할때 퍼셉트론 구현에서도 선형 함수가 동원되는데 어려움을 겪는 이유는 프로그램 소스코드 또한 직관적일 것이라는 믿음 때문인 것 같다.

이 학습에 대한 어려움을 해소하려면 프로그램이 직접적인 직관적 구문보다는 간접적인 방식으로 구현됨을 알면 일단 전제적인 것이 해결된다고 생각한다.

수식이 아니더라도 이런 간접구현방법도 있다. 예를 들면 의존성 라이브러리가 설치된지 알아내는 코드로 직관적인 판단이 아니라 의존성 라이브러리를 구성하는 파일 하나가 존재하는지 판별하고 간접적으로 설치되었다고 판명하는 등의 방법이 가능하다. 이 경우 간접적인 구현이 대응시키는 논리적인 정확도가 중요한 변인이 된다.

인공 지능도 이와 같아서, 최근의 발전도는 딥러닝의 수학적 연산의 효율에 대한 정확도가 높아진 것과 관련이 큰 것 같다.

다시 말해 프로그래밍 방법론에서 규정하는 구현 방법은 반드시 사람이 이해할 수 있는 단어나 사고와 표현 방식이 아닐 수 있음을 미리 인지하면 준비가 된다.

물론 API 개발자들이 배려를 하면 직관적인 방법도 프로그램의 일부가 된다. 함수명과 변수명을 아래처럼 작성하는 예가 있다.

result = convert(from, to);

그래서 프로그래밍은 종합적인 사고 방식으로, 직관과 간접의 방법이 두루 쓰인다고 생각할 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다