'프로그래밍'에 해당되는 글 1건

  1. 2007.03.27 생각하는 프로그래밍 (존 벤틀리)
posted by oss 2007. 3. 27. 08:55

프로그래밍 본질에 관한 15가지 에세이


가장 중요한 것은 프로그래밍에 대해 곰곰히 생각하는 것은 유용하기도 하고 재미있기도 하다는 것입니다. 거기에는 단지 정형화된 요구사항 문서로부터의 체계적인 프로그램 개발 이상의 것이 있습니다. 이 책이 프로그래밍에 환명을 느끼는 프로그래머를 한 명이라도 다시 그들의 일을 좋아할 수 있게 도울 수 있다면, 소기의 목적을 달성했다고 할 수 있을 것입니다.

##################################################

역자 서문
서문

1부 준비
칼럼 1. 조개 껍질 깨기
칼럼 2. 아하! 알고리즘
칼럼 3. 프로그램의 구조를 결정하는 데이터
칼럼 4. 정확한 프로그램 작성
칼럼 5. 프로그래밍에서의 사소한 문제

2부 퍼포먼스
칼럼 6. 퍼포먼스에 대한 개관
칼럼 7. 봉투 뒷면에 하는 간단한 계산
칼럼 8. 알고리즘 디자인 기법
칼럼 9. 코드 튜닝
칼럼 10. 메모리 절약

3부 프로덕트
칼럼 11. 정렬
칼럼 12. 표본 선정 문제
칼럼 13. 탐색
칼럼 14. 힙 Heaps
칼럼 15. 문자열 처리

1판에 대한 에필로그
2판에 대한 에필로그
부록 1. 알고리즘 카탈로그
부록 2. 추정 퀴즈
부록 3. 시간과 공간에 대한 비용 모델
부록 4. 코드 튜닝을 위한 규칙
부록 5. 탐색을 위한 C++ 클래스
연습문제 힌트
연습문제 해답
찾아보기

##################################################

www.programmingpearls.com


프랑스의 소설가이자 항공기 디자이너인 Antoine de Saint-Exupery는 "추가 할 것이 더 이상 없을 때가 아니라 제거할 것이 없을 때, 디자이너는 완벽함에 도달했다는 것을 알게 된다,"고 말했다.


"아하!"라는 감탄사와 함께 깨닫기 전까지는 문제가 어렵게 보인다. 위의 문제를 배열 ab를 변환하여 ba로 만드는 문제라고 생각해 보자. 그리고 배열의 특정 부분의 원소들을 반전시키는 함수가 이미 존재한다고 가정하면, ab에서 시작하여 a를 반전한 a'b를 얻을 수 있고, 다시 b를 반전하여 a'b'을 얻게 된다. a'b'의 전체를 반전하면 (a'b')'이 되는데, 이것은 정확히 ba와 같다.


작업을 하다 보면 메모리가 부족해 어떻게 해야 할지 모를 때에는 코드에서 한 걸을 물러나 불만을 가지면서 데이터를 주의 깊게 살펴보는 것이 최선이다. 데이터의 표현(representation)이 프로그래밍의 본질이다.


"9를 버리는(casting out nines) 방법"으로 세 번째 계산을 검사해보면 역시 틀렸음을 알 수 있다. "9를 버리는 방법"이란 숫자들을 모두 합한 후에 9로 나누어 나머지를 찾는 것이다.


나는 회계학 수업에서 "72의 법칙"을 처음으로 배웠다. 여러분이 y년 동안 연리가 r%로 돈을 투자했다고 가정하자. 회계에 이 법칙을 적용하면, r * y = 72가 될 때 여러분의 돈은 대략 두 배가 된다.


위에 언급한 책들과 7가지의 다른 책들이 모두 <Dr.Dobb's Essential Books on Algorithms and Data Structures>라는 CD-ROM에 담겨있다.


"비트(bit)를 가지고 작업하는 사람은 물릴(bitten) 각올르 해야 한다"


프로그래머의 업무 중 하나는 오늘의 문제를 해결하는 것이다. 그리고 또 다른(더 중요할 수도 있는) 하나는 내일의 문제를 풀기 위해 준비하는 것이다.


프로그래머를 위한 10가지 제안

정확한 문제에 대해 작업하라.
솔루션의 디자인 공간을 연구하라.
데이터를 살펴보라.
봉투의 뒷면을 이용하라.
대팅(symmetry)을 이용하라.
컴포넌트를 이용하여 디자인하라.
프로토타입을 작성하라.
어쩔 수 없을 때는 트레이드오프를 해라.
단순함을 유지하라.
우아함을 추구하라.


이 책의 1판을 검토했던 한 분이 "Bentley의 일상 작업 환경은 프로그래밍의 천국이다. 그는 New Jersey의 Murray Hill에 있는 Bell 연구소의 기술 고문 중의 한 명이고, 첨단 하드웨어와 소프트웨어에 즉각 접근할 수 있고, 세계에서 가장 뛰어난 소프트웨어 개발자들과 구내식당에서 함께 식사한다."라고 썼습니다. Bell연구소는 여전히 그런 곳입니다.



프로그래밍에 대한 에세이.
전공(이제는 교육학의 길도 걷고 있지만)에 관련된 이러한 책들은 언제나 나의 길에 대한 헛점을 짚어준다.
생각치 못했던 것들, 더 깊이 고려해봐야 할 것들...
공학도란 것이 단순히 빡빡하고, 퍽퍽한 일들을 반복하는 것이 아니라 엔진에 기름을 치듯 현실 세계를 부드럽게 돌리는 윤활류 역할을 한다는 것을 새삼 느낀다.