[[TableOfContents]] == Perspective on Programming == === A Case Study === * 어떤 프로그램이 1년 걸렸었는데 단계별로 쪼개서 튜닝을 했더니 하루만에 되더라하는 내용이 씌어있다. * 그 단계를 살펴보면, * 알고리즘과 자료구조의 교체 : Sequential 한것을 Binary Tree로 교체함으로써 O(n*n)이 O(n*lg n)으로 줄었다. * 알고리즘의 튜닝 * 자료구조의 개조 * 코드 튜닝 * 시스템 독립적인 코드 튜닝 : double형보다 시간이 절반 정도 걸리는 float를 썼다. * 시스템 의존적인 코드 튜닝 : 크리티컬한 부분을 어셈블리로 다시 짰다. * 하드웨어 업글 : 부동소숫점 연산 가속기를 사용 * 이 각각의 단계에서 빨라진 만큼을 다 곱하니 대략 400이 나오더라하는 내용이 씌어있다. === Design Level === * 디자인 레벨에 관한 가이드 * 문제 정의 * 시스템 구조 * 알고리즘과 자료구조 * 코드 튜닝 * 시스템 소프트웨어 * 하드웨어 === Principles === * 심플한 디자인의 중요성은 아무리 강조해도 지나치지 않다. * 적은 양의 스피드업을 원한다면 가장 고치기 쉬운 부분만을 고치자. * 많은 양의 스피드업을 원한다면 다단계를 고치자. 한군데를 고침으로써 다른 부분도 고칠것이 생긴다. ---- ["ProgrammingPearls"]