본문 바로가기

Project

프로그래밍을 하면서 수학과 포인터가 필수인가요?

최근 아는 블로거들 사이에서 이슈가 되고 있는 수학공식과 포인터에 관한 내 의견을 이야기하자면
참 쓸대없는 소모적인 논쟁인것같다.

먼저 프로그래밍을 할때 수학이 필요할까?
이 질문에 대한 답은 예전에 쓴 글(수학과 컴퓨터) 에서 이미 언급한적이 있다.
당신이 수식에 관련된 대상에 대해 프로그래밍을 한다면 필요하겠지만 그렇지 않다면
그다지 필요성은 못느낄것이다. 내가 지금까지 프로그래밍을 하면서 사칙연산 이상의
수학실력이 필요하다고 느낀적은 없다.

그럼 수학과 논리력과의 관계는 어떨까?
많은 사람들이 착각하고 있는 것이 있는데,
논리력과 수학의 관계는 인과관계 즉 필요조건이지 충분조건이 아니다.

말하자면 수학을 잘하는 사람은 논리력을 가지고 있지만 수학을 못한다고해서 논리력이
없다고 판단하는것은 잘못된 것이다.

나 또한 프로그래밍을 하는데 논리력이 필요하다는것은 동의하는 바이다.
하지만 그 논리력이 수학이 전제되어야만 나온다고 생각하지 않는다.
기본적으로 논리력은 수학이 전제되지 않은 다른 많은 직업에서도 필수적인 항목이다.
예를들면 변호사,의사,작가,신문기자,편집자 등등 심지어는 디자이너까지 논리력은 중요한 능력이다.
이러한 직업을 가진 사람들이 모두 수학을 잘했을까?
수학은 수를 다루는 기술의 일종이다. 이 기술에 대해 쉽게 적응하여 능숙한 사람이 있고 그렇지 않는
사람도있다. 이 기술을 가지고 그사람이 논리력이 있다고 판단하는것은 섣부른 결정이다.

길다고 말할수 없지만 지금까지 내가 경험한 프로그래밍은
1. 고객이 원하는 프로그램의 요건을 정의
2. 정의된 요건에서 구현하려는 사양을 추출
3. 추출된 사양을 구현
이라고 라고 말할수 있는데
이중 1,2번이 프로그래밍에서 가장 큰 비중을 차지하고 있고 3번에 해당하는 구현은
프로그래밍의 일부분에 지나지 않는다.
또한 1과 2에서 필요한것은 논리력이지 수학공식이아니다.

그럼 이제 포인터로 넘어가자.
포인터를 모르면 프로그래밍을 포기해야하나요?

난 지금까지 포인터를 언급하지 않고도 자바를 이해하는데 전혀 문제가 없었다.
(이쯤에서 미리 방금언급한 포인터에 대해 정의를 한다. 여기서의 포인터는 C언어 및 C++의
포인터를 말한다.)
 나 말고도 수많은 사람들이  C언어의 포인터를 모르고도 PHP,JAVA등의 언어를 이해하고 이용하며
구현하는데 있어서 큰 문제를 못느껴왔다. 그러면 사람들은 이런 질문을 할것이다.

"그럼 추상화의 구멍은요?"


많은 사람들이 포인터를 모르면 알수없는 에러와 버그에 고생을 할것이다라고 말한다.
그게 사실일까? 위의 설명은 일부분만의 사실을 이야기하고 있다.
당신이 포인터를 가지고 얼마나 많은 버그들을 고치고 에러의 원인을 발견했는가?

대부분 언어의 사양수준에서 해결되지 않는가? 단지 일부분의 발견하기도 힘든 버그를 위하여
로우 레벨의 언어까지 익혀야한다고 말하는것인가?
모든사람이 하나의 버그를 해결하기위해 내부구조까지 알아야한다는이야기인가?

난 오히려 그런사람들에게 이렇게 묻고싶다.

"당신이 커버할수 있는 추상화의 범위는?"

얼마나 낮은 레벨의 구현까지 이해하지않으면 안되는 것인가? 한사람이 감당할수 있는
범위는 분명 존재한다. 누구나 그 범위를 만족해야한다고 생각한다면 그것은 잘못된것이다.
IT 비지니스 전문가가 낮은 레벨의 상세한 구현까지 알아야한다고 말할것인가?
그런일들은 그쪽 도메인에 전문가에게 맡기는것이 빠른일이 아닌가?

보통 성숙된 공학의 다른 분야들은 각각 추상화의 레이어에 해당하는 전문가들이 존재한다.
만약 프로그래밍의 에러의 원인이 정말 낮은 수준에서 일어난다면 우리는 그쪽 분야에 해당하는
전문가에게 맡기면 되는것이다.

내가 하고싶은말은 한가지이다.

"현재 당신의 포지션을 보고 또는 미래의 포지션을 생각해 당신이 쌓아야할 지식을 공부하세요."

또한 이것은 당신이 담당하고 있는 도메인에 관한 이야기이다.