7 건의
BACKGROUND KNOWLEDGE 검색결과

'Clean Architecture'라는 책을 읽다가 좋은 내용이 있어서 글을 써본다. 

 

과학수학의 차이는 뭘까?

수학은 명제의 올바름을 증명하는 학문인 반면,

과학이 다루는 법칙들은 절대 증명할 수 없다.

 

수학은 증명없이 참으로 받아들여지는 명제인 공리와 공리를 이용해 증명된 정리, 정리를 도출하는데 필요한 보조정리, 정리 증명에 자연스럽게 따라 도출되는 따름정리로 구성되는 유클리드 계층구조를 토대로 한다.

이 유클리드 계층구조를 이용하여 어떠한 명제가 참이라는 것을 증명하는 것을 목표로 한다. 

이 증명이 무조건 참일 수 밖에 없음을 증명하지 못한다면 명제는 거짓이다.

 

반대로 과학은 자연에서 규칙을 발견하고 

그 규칙에 맞는 공식을 세운다. 

하지만 이 공식은 수학에서의 명제처럼 증명이 가능한 존재가 아니다.

이 공식이 지난 수세기동안 반례가 없었다고 하더라도 증명이 된 적도 없고 증명할 수도 없었기 때문에 항상 거짓일 가능성은 열려 있는 것이다. 

과학 법칙을 시연할 수도 있고, 아주 정밀한 정확도로, 아주 많은 수의 반복을 통해 측정할 수도 있다.

하지만 증명할 수는 없다.

책에서 드는 예는 뉴턴의 운동 제2법칙인 F=ma.

우리는 자동차를 탈 때마다 F=ma가 믿을만한 법칙이라는 데 목숨을 걸고 있다.

한번도 증명된 적도 없고 증명할 수도 없지만 말이다.

과학은 수학과 반대로 틀렸음을 증명하지 못하는 방식으로 이루어진다.

간단하게 말하면 귀납법.

 

소프트웨어의 안전성은 수학의 영역일까 과학의 영역일까?

소프트웨어의 안전성을 수학적으로 증명하고자 한 핵물리학자이자 프로그래머인 사람이 있었으나 실패하였고

현재 우리는 소프트웨어의 안전성은 과학적 방법으로 확인하고 있다.

테스트라는게 그렇지 않나?

'버그가 있는지 죽어라 찾아봤는데도 못찾겠더라' 그러면 이 소프트웨어는 안전한걸로 생각하고 쓰는 거다.

올바르지 않음을 증명하는데 실패함으로써 일정 수준이상의 안전함을 보장하는 것이다.

 

소프트웨어 안정성에 대한 수학적인 증명이 실패하였고 대개의 프로그래머들이 이를 엄밀히 증명해서 얻는 이득에 대해 회의적이라는 것은 사실이지만 이것이 불가능한 것은 아니라고 생각한다.

미래에 천재가 소프트웨어의 완전성을 최소 기능 단위로 엄밀함을 증명할 수 있게 될지도.

 

학창시절 수학 과학을 배우면서 수학이 뭔지 과학이 뭔지 느낌으로만 구분짓고 있었지 이렇게 구분 할 수 있다는건 이 책을 읽으면서 처음 알게되었다.

끝.