지동설이 천동설을 이긴 것은 단지 옳음과 그름의 문제라고 할 수는 없다.
단지 지동설이 더 간단하고 이해하기 쉽기 때문에 받아들여진 것이다.
오캄의 면도날에 따라 더 경제적인 해결책이 받아들여진 것이다.
소프트웨어 공학에서도 경제성이 중요하다.
그리고 그것이 무엇에 대한 경제성(효율성)인지도 중요하다.
천동설은 신학적인 면에서 경제성을 가졌지만 실용적인 면에서 경제적이지 못했다.
소프트웨어 공학에서도 효율성의 관점은 단순하지가 않다.
throughput, response time, balancing 같은 product의 결과에 대한 경제성도 있지만
개발시간, 유지보수시간, 이해시간에 대한 경제성도 존재한다.
초기에 throughput만 중시되던 시대에는 batch job이 가장 효율적이 었다.
response time이 강조되면서 time shared 방식이 생겨났고
scheduling을 통해 자원 가동률(효율성)을 높히는 multi programming이 태어났다.
memory space를 아끼기 위해 shared library가 생기고
쉽게 개발하기 위해 compiler도 생겨났다.
compiler도 처음 나왔을 때는 모두가 느리다고 쓰지 않았지만 요즘은 compiler없는 코딩은 상상할 수가 없다.
이제는 개발자의 수고를 덜어주기 위한 방법들이 등장하고 있다.
garbage collection이라든지 compiler의 optimization이 있다.
특정 상황에서 빠른 구현을 가능하게 하는 방법도 생겨났다.
excel, word 같은 전문 프로그램은 C언어로 직접 코딩하는 것보다 throughput은 낮지만
CPU, memory는 충분히 빠르기 때문에 별 차이가 나지 않는 다.
C언어보다 개발시간은 수십배 단축되고 버그의 위험도 매우 적고 안정적이다.
OOP도 마찬가지다. 기존의 modular programming보다 조금 느릴 수도 있지만
개발자가 이해하기 쉬운 코드가 나온다.
그리고 어떤 경우는 개발자의 이해와 compiler의 이해를 도와서 optimization하면 더 빨라질 수도 있다.
functional language들 같은 경우는 soundness에 중점을 두고 있다.
이론적인 안전성을 달성하여 마음 놓고 프로그램을 만들 수 있게 한다.
안전하기 때문에 사고로 인한 피해를 줄여 경제적이기도 하다.
그래서 각 관점이나 해결방법에 따라 가장 경제적인 해(solution)이 달라지기 때문에
많은 tool들을 익힐 필요가 있는 것이다.
댓글 없음:
댓글 쓰기