요즘, 딥러닝 쪽으로 공부하다보니 이런 생각을 하게되었다. 이 이론 까지 정확하기 알고, 내부적인 동작 원리까지 알고 있어야 아는 것일까, 아니면 기존에 만들어진 라이브러리를 가지고 원하는 결과를 알아야, 머신러닝을 알고 있는 것일까. 

 둘다 일리있는 생각이다. 라이브러리 이용법만 알고 있더라도, 충분할 수 있으나 경우에 따라서는 라이브러리 내부를 수정하는 작업이 필요할 수도 있으니 그 원리까지 알아야 할 수도 있다. 그런데, 더 깊이 들어가면 그 원리라는게 대략적인 동작원리인지 수학적인 계산까지 이해해야 하는지 고민하게 된다.


 2*0=0 이라는 것은 우리 생각에는 자명하다. 그런데 수학적으로 따지고 듣자면 항등원 역원을 통해 증명할 수 있다. 그런데 2*0이 0인 사실을 알고 있느 사람이 아는 것인가, 아니면 항등원 역원을 통해 증명 할 수 있는 사람이 아는 것일까?


 갑자기 프로그래밍 OOP에서 말한 캡슐화라는 용어가 떠오른다. 자동차 핸들을 꺽으면 방향이 움직이는 것만 알면되는 것일까, 아니면 기어가 이렇게 저렇게 동작하면서 자동차 앞 바퀴가 꺽이는 원리까지 알아야 운전을 알다고 해야하나? 더 들어가서 기어가 내부적으로 강체(https://ko.wikipedia.org/wiki/%EA%B0%95%EC%B2%B4) 이 움직이는 물리학적 원리까지 알고 있어야 자동차를 운전을 안다고 해야하나. 여기서 더 들어가서 이런 거시적인 세계 말고, 미시적인 세계(이를테면 양자역학) 까지 알고 있어야 아는 것인가? 이런식이면 우리가 알고 있는 것은 하나도 없지 않은가?


 다시 문제로 돌아와서 내가 안다고 하는 것은 내가 필요로 할 만큼 알고 있다는 말로 보인다. 그 필요성이 경우에 따라서는 라이브러리 이용 수준에 머물를수 있고, 경우에 따라서는 내부를 수정해야 할 수도 있다. 그런데 내부를 수정하더라도 해당부분을 공부하면서 익힐 수 있는 배경지식이 있는 정도면 충분할 것 같다.