구체적인 개념을 추상화하고 일반화하는 데 필요한 요소에는 무엇이 있을까?
아래는 순전히 내 생각이다. 물론 프로그래밍과 수학에서 사용하는 추상화 기술을 적절히 정리한 것에 불과하지만.
아래 세 요소는 닮았지만 엄연히 다르다.
첫째, 기호화.
어떤 절차를 기호로 표현하면 일관성이 생겨 사고 부하를 많이 경감한다.
단순히 더하기나 곱하기보다 더 복잡한 절차도 기호로 표시할 수 있다. 예를 들어 적분 기호나 nabla 기호는 깊은 뜻을 함축한다.
중요한 절차를 기호화하면 그 절차가 meme이 되어 전파하는 데 크나큰 도움을 준다.
둘째, 개념화.
복잡한 것을 한 개념으로 표기하고, 그 개념의 정의와 성질을 열거하면 이론화하기 좋다.
수학에서 어떤 개념을 배울 때는 항상 그 정의와 성질을 제일 먼저 살펴본다.
예를 들어 체(Field)는 5개의 덧셈법칙과 5개의 곱셉법칙, 그리고 1개의 분배법칙을 만족하는 수학 대상이다.
대표적으로 실수나 유리수가 체에 속한다. 체가 갖는 성질을 이해하고 나면, 체의 정의를 만족하는 모든 대상이 같은 성질을 가진다고 확신할 수 있다.
프로그래밍에서는 속성과 기능을 가진 Class를 만드는 게 '개념화'다.
같은 Class(류)에 속한 여러 개체들은 같은 속성과 기능을 가진다고 확신할 수 있다.
개념화의 효과는 너무 자명해서 더 설명할 필요가 없다.
셋째, 변수화.
쉽게 말해 모르는 것이나 가변적인 것을 x로 놓는 것이 변수화다. 이는 장점이 많다.
일단 내가 모르는 것, 내가 구해야 하는 것을 구체적으로 표시하고 나면 나머지가 명확해진다.
즉 아는 것과 모르는 것을 구분할 수 있게 된다.
더해서, 내가 풀려는 문제가 너무 많은 변수를 갖고 있다는 걸 깨치면 접근법이 달라진다.(아예 접근하지 않게 될 수도 있고.)
변수가 적을수록, 단순할수록 좋은 문제이다. 때론 내가 당면한 문제를 풀기 전에 우선 그 문제를 더 좋은 문제로 바꿀 필요가 있다.
이를 '오컴의 면도날'이라고 한다.
끝으로 어떤 변수가 가장 중요한지 파악하기 좋다. 많은 문제에서, 웬만한 변수는 상수로 놓아도 될 만큼 중요하지 않다.
NEXT POST