[[TableOfContents]] == A Small Matter of Programming == * 발판을 마련하자.(Build scaffolding.) === From Pseudocode to C === * 그냥 Binary Search의 슈도코드를 C문법으로 바꿔놓은 것이다. === A Test Harness === * 루프를 정해진 횟수만큼 돌면서 테스트할 값을 일일히 입력해주고 있다. * 하다보면 지겹다고 해서 이 작업을 자동화해줄 발판을 다음 섹션에서 보여준다. * 그러면서 버그 있는 Binary Search를 보여주고 있다. * 큰 프로그램에서는 툴에서 제공하는 디버깅을 쓰지만, 이렇게 작은 알고리즘 같은 것에서는 print문 같은걸 쓰는게 편하다고 한다. === The art of assertion === * c에서의 assert문을 사용하는 테크닉 같은 것을 보여주고 있다. * 대강 assert의 완급 조절이라는 말로 표현이 될듯하다. * 또한 Binary Search의 가장 중요한 전제 조건인 sort되었는가? 체크해주는 함수를 앞에다 써준다. 이 경우에는 search를 한번만 해주면 n + lg n 이렇게 될것이다. 하지만 sort되었는가 체크하는 함수는 한번만 해주면 되므로, search를 한 몇천,몇만번 돌리면 결국 lg n 에 수렴할 것이다. * 참고서적 : Writing Solid Code === Automated Test === * 아까 말했던 컴퓨터가 자동으로 테스트해주는 발판을 만들어보자. * 별거 없다. 그냥 배열을 생성한다음, for를 정해진 횟수만큼 돌려가면서 assert체크해준다. 끝이다.--; 이렇게 함으로써, 사이즈가 0, 1, 2의 제곱수, 2의 제곱수가 아닌수 모든 경우의 수를 테스트해볼수가 있다. === Timing === * 역시 별루 볼 거 없다. search 1000번 이상한다음 걸린 시간에 대해 그래프를 그려보면, lg n 의 그래프가 나온다. === The Complete Program === * 역시 별말 없다. === Principles === * Scaffolding * Coding : 하이레벨의 슈도코드로부터 시작하자. * Testing : 큰 시스템보다는 발판 내에서 테스트하는게 훨씬 쉽다. * Debugging : 발판이랑 고립된 프로그램이나, 임베디드된 곳에서는 하기가 힘들다. Column5에서 설명한다. * Timing ---- ["ProgrammingPearls"]