|
C++ 을 사용한지는 꽤 되었으나 사실 최적화라는 과정을 많이 거치진 않았습니다.
기능 구현하기에 급급해서 성능을 생각하지 않고 막코딩을 하기 일수였죠.
이 책을 보면서 최적화에 대한 필요성과 효율성을 다시 한번 깨닫게 되었습니다.
단순 소프트웨어 제어 뿐만 아니라 하드웨어 설계 까지 고려한 최적화를 깊이 있게 설명하고있습니다.
이 책은 C++에 어느정도 익숙하고 c++로 프로그램을 작성해본 사람을 대상으로 합니다.
C++ 기본서로는 추천하지 않으며, 리팩토링이나 최적화에 관심있는 분께 추천합니다. |
![]() 최적화에 대한 책이라고 해서 최적화 방법만 사전식으로 나와있을 줄 알았는데 내용이 생각보다 다양하다. 먼저 최적화의 필요성과 컴퓨터 과학의 기본 지식을 설명해준다. 전반적인 개요 설명이 충분하고, 이후 성능 측정 방법과 최적화 방법에 대해 설명해준다. 앞의 필요성과 개요 부분만 봐도 상당히 중요한 내용이 많다고 생각한다. 성능 측정을 위한 방법도 설명해주고 이런 방법의 다양함과 테스트 방법 및 결과들을 체계적으로 정리하고 문서화하는 것에 대한 중요성, 또 증명해야 하는 목표까지 비단 최적화뿐만 아니라 개발 전반에 있어서 꼭 알아두어야 할 내용이 들어있다. 약간 너무 깊이 들어가는 게 아닌가 싶은 부분은 시간 측정에 필요한 '시간'에 대해 알려주는 부분이다. 어떻게 정확하게 측정할 수 있을까에 대한 내용인데, 진자시계부터 전자시계 등 백과사전에서나 볼법한 예시를 들어줘서 상당히 재미있었다. 또 시스템에서 시간 값을 반환해주는 여러 가지 함수에 대해서도 소개해주었다.
최적화 방법에 대해 알려주는 부분은 이해하는데 어려움이 좀 있었다. c++보다는 c 위주로 작업을 하고 있어서 클래스나 자원 할당에 대한 부분이 익숙하지 않아서 예제를 봐도 와닿지(?) 못하는 부분이 꽤 있어서 아쉬웠다. 기술적으로는 많은 도움이 되었다. c나 다른 언어에도 적용할 수 있는 방법도 많았고, 지금껏 생각하지 못한 새로운 아이디어처럼 느껴지는 방법도 있었다. 입문자보다는 어느 정도 실전 경험이 있는 사람이라면 정말 큰 도움이 될 책이라고 생각한다. 예제 코드만 봐도 몇 줄 수정하지 않고 20%씩 성능이 오르는 걸 보면 담당하는 제품에도 이런 식으로 적용하면 마법같이 빨라지겠다 싶은 생각과 함께 코딩 욕구가 솟아오르기도 한다. 개발 참고서라 그렇게 중요하지는 않은 부분이지만 직역하는 느낌에 읽다가 흐름이 끊기는 부분이 몇 번 있었던 것 같다. |
|
프로그래밍을 공부하다보면 자주 듣는 말이 책 좀 그만보라는 말 입니다. 컴퓨터공학은 책으로 공부하는게 아니라 인터넷으로 공부하는 거라고도 합니다. 어떤 말인지 이해는 하겠다만 기계공학과 출신이여서 그런지 책으로 공부하는게 마음이 편합니다. 그리고 뭔가 여러 사람들이 인터넷 만능설을 가지고 있는 듯한 느낌이 듭니다. 책의 서론부터 참 재밌는 내용이 나옵니다. '21세기 초 C++은 공격을 받았습니다. ··· ··· ··· 많은 유명 기업들은 독점 객체지향 언어를 홍보하면서 C++은 사용하기 너무 어려우며 자신들이 만든 언어가 미래라고 주장했습니다. ··· ··· ··· 프로세서 코어의 속도는 빨라지지 않았고 작업량은 계속 늘어났습니다. 대기업들은 확장설 문제를 해결하기 위해 C++ 프로그래머를 고용하기 시작했습니다.' 이전 리뷰에서도 자주 언급했지만, 난 엔지니어 포프님의 사상을 좋아한다. 포프TV를 자주보는데, 그 중 '프로그래머로 살아남기 위해 필요한 언어 둘' 이라는 영상이 있다. 영상의 내용을 요약하면 필요한 언어 2개란, 1) 메모리를 직접 관리해줘야하는 언어(C, C++ 등)이고 2) 메모리를 알아서 관리해주는 언어(C#, JAVA, Python 등) 이라는 것이다. 무어의 법칙에 따라 프로세서 코어의 속도는 크게 향상되지 않고 있다. 이러한 상황에서 대규모 프로그램을 한정된 메모리 안에서 돌리기 위해서는 당연히 메모리를 직접 관리해주는 언어가 필요하다. 메모리를 직접 관리해주는 것 까지는 좋다. 프로그래밍을 해본 사람은 알테지만 똑같은 문제를 보고 같은 기능을 하는 프로그램을 구현했다고 하자. 재밌는건 사람마다 프로그램의 성능이 전부 다르다는 것이다. 쉽게 말해 코드를 어떻게 작성했느냐에 따라 성능이 천차만별이 된다. 프로그래밍을 소개하는 책은 수두룩 하지만 이런식으로 성능에 관련된 책은 극히 드물다. 따라서 'C++ 최적화' 책은 중급 프로그래머라면 반드시 봐야하는 책이라고 생각한다. 책의 구성으로는 최적화가 무엇인지를 소개하는 챕터부터 시작해서, 하드웨어 최적화, 성능 측정, 동적 할당 변수 최적화, 자료구조/알고리즘 최적화 등등이다. 프로그래밍을 하면서 자주 사용하는 것들에 대한 어떻게 최적화하는지를 가르쳐줍니다. 주로 게임 프로그래머처럼 응답속도나 실행시간에 민감한 업계에 종사하는 분들이 보시면 좋다고 생각합니다. 책의 중간에도 '코딩하기 쉬운 알고리즘을 사용해 프로그램을 개발한 다음, 프로그램의 실행 속도가 너무 느리면 되돌아가서 다시 최적화하는게 좋다' 라고 나옵니다. 저자는 차라리 처음부터 올바른 방법을 사용하고 하나의 알고리즘만 디버깅하는 편이 낫다라고 말합니다. 개인적으로는 전자가 더 우선시 되어야한다고 생각합니다. 책은 난이도는 그렇게 높지 않다고 생각합니다. 지난번 C++ 책의 내용에 비하면 읽기가 수월합니다. 다만 어떤 방법의 최적화가 더 좋은지는 알겠으나 당장 쓸 일이 없습니다. 따라서 이미 프로그램을 개발하고 성능을 디버깅하는 프로그래머 수준 정도에서 보는게 가장 좋다고 생각합니다. |
|
모던 프로그래밍 언어가 많이 등장했다. 하지만 아직까지 프로그래밍을 배우는 사람이라면 역시 C와 C++정도는 마주하게 된다. 그 중에서 C++ 기본을 익히고 조금 할 줄 안다 싶을 때 한 단계 업그레이드 하는데 도움을 줄 책이 바로 C++ 최적화(Optimized C++) 이다! 기본서를 보고나면 중급서에 대한 목마름이 찾아온다. 사실 이 책이 중급서 이상으로 느껴질 수도 있다. 하지만 실무에서 C++을 평범하게 사용중인 신입 ~ 주니어 개발자라면 큰 도움이 될 것이라고 생각한다. 사소하지만 한 번 쯤 궁금했을 내용들, 가령 위와 같이 double과 float의 연산속도에 대해서도 이야기한다. 온라인에서 종종 접할 수 있는 질문이고 갑론을박이 오가기도 하는 문제이다. 도움이 되지 않는 것들이라고 해서 좋지 않은 코드에 대해서도 설명한다. 심지어 이건 StackOverFlow에서 가져온 코드이다! 야생의 함수가 나타났다!!! 개발자들이 흔히 참고하는 stackOverFlow의 코드라서 더욱 흥미롭고 모든 답변이 좋은 답변은 아닐 수 있다는 경각심을 일깨워 준다. 너무나 다양한 상황과 꿀팁들이 나열되어 있어서 모두를 소개할 수가 없다. 많은 프로그래머들의 영원한 숙제인 동기화에 대해서도 여러가지 꿀팁을 제공하니 정말 유익한 책이다. C++ 개발자라면 정말 추천하고 싶은 책이고 사실 다른 언어 개발자가 봐도 공통된 부분은 도움이 될 것 같다. JAVA 버전도 나오면 좋겠다는 작은 기대를 해본다. |
|
기능 구현하기에 급급해서 성능을 생각하지 않고 막코딩을 하기 일수였죠.
이 책을 보면서 최적화에 대한 필요성과 효율성을 다시 한번 깨닫게 되었습니다.
단순 소프트웨어 제어 뿐만 아니라 하드웨어 설계 까지 고려한 최적화를 깊이 있게 설명하고있습니다.
이 책은 C++에 어느정도 익숙하고 c++로 프로그램을 작성해본 사람을 대상으로 합니다.
C++ 기본서로는 추천하지 않으며, 리팩토링이나 최적화에 관심있는 분께 추천합니다. 기능 구현하기에 급급해서 성능을 생각하지 않고 막코딩을 하기 일수였죠.
이 책을 보면서 최적화에 대한 필요성과 효율성을 다시 한번 깨닫게 되었습니다.
단순 소프트웨어 제어 뿐만 아니라 하드웨어 설계 까지 고려한 최적화를 깊이 있게 설명하고있습니다.
이 책은 C++에 어느정도 익숙하고 c++로 프로그램을 작성해본 사람을 대상으로 합니다.
C++ 기본서로는 추천하지 않으며, 리팩토링이나 최적화에 관심있는 분께 추천합니다. |
|
08월 07일 리뷰 - 리뷰자 김종욱
지은이: 커트 건서로스, 옮긴이: 옥찬호 C++이 생겨난지도 이제 근 25년이 다되어가고 있다. 그 기간동안 무수히 많은 명세가 제안되었고 기능적으로 효율적으로 상당한 진보를 이루어워왔다. 이런 파고의 과정을 거치다 보니 C++만큼이나 다양한 어프로치와 새로운 인사이트 그리고 최적화 이론이 등장한 언어도 없을 것이라 생각된다. 위의 언급한 것들 중에, 본 서는 특히 C++을 어떻게하면 최적화 할 수 있는지에 집중하고 있다. 가령 C++의 코드를 최대한 버퍼에 올리거나 혹은 필요없는 로직들 등을 없엠으로써 효율 향상을 시키는 방법 등을 말이다. 【어떤 독자를 위한 책인가】 이 책은 그림은 상당히 적고 글이 대부분인 책이다. 글보단 그림 위주로 책을 읽으며 학습하기 좋아하는 분이라면 위 책을 선택하는 것은 어찌보면 잘못된 선택일 수 있다. 또한 C++의 성능 향상 이슈를 다루다보니 C++의 기본 지식과 이에 필요한 하드웨어 지식등을 요하고 있다. 따라서 대학교 학부 수준의 전산학 지식을 가지고 있지 않은 독자가 있다면 이해하는데에 어려운 부분이 있을 것이라 생각된다. (물론 책에서 자세히 설명하고 있으나 그 설명만으로 전부를 이해하는데엔 확실히 한계점이 있어 보였다.) 결론적으로, 위 책은 자신이 C++의 동작 원리와 기본기에 대해 어느정도 숙달되었고, 또한 하드웨어 이론에 대해서도 어느정도 이해하고 있는 독자를 대상으로 하고 있다. 【책의 구성】 'C++ 최적화' 책의 구성은 어떠한가. 본 서는 스텝 바이 스텝으로 책의 내용을 접근하고 있다. 가령 하드웨어부터 시작하여 하드웨어를 제어하기 위한 C++에 이르기까지 바텀-업 방식을 취하고 있기에 학습하기에 매우 좋은 구성을 하고 있다. 또한 위 책은 다양한 수치를 독자에게 제공함으로써 책에서 제안하고 있는 최적화 이론의 논리적 근거를 명백하게 제시하고 있다. 따라서 실험이나 최적화 이슈로 고민하는 사람이 있다면 이를 확실한 근거로 삼아도 좋을 것이라 생각한다. 다만 위에서 언급했던 것처럼 책의 대부분이 글로 이루어져 있고, 각 쳅터별로 서두 본론 정리 식의 구성을 취하여 나름의 체계성을 가추어져 있으나, 자칫하면 약간 지루함에 빠질 수 있는 오류가 있다. 이 부분만을 주의해서 차근 차근 공부해간다면 최적의 효율을 취할 수 있을것이라 기대한다. 【C++ 최적화를 읽으며…….】 리뷰어는 지난 20년 가까이 C와 C++을 전공해왔다. 그렇기에 그 긴 세월 동안 C/C++이 어떤식으로 변해왔는지 멀리서나마 지켜볼 수 있었는데, 요즘 만큼 활발히 C/C++이 변화하는 시대도 없는 듯했다. (이렇게 고인 언어가 말이다!!) 또한 웹 프레임 워크가 중요해지는 시대이다 보니, 다양한 웹관련 언어들이 탄생하고 소멸하고 다시 나타나고를 반복하고 있다. 이런 시대일 수록 기초 언어 하나를 최적으로 학습한다면 다른 언어들을 학습함에 있어 큰 어려움이 없을 것이라 기대해본다. 【점수…….】 구성 : ★★★★☆ 내용:★★★★☆ 디자인: ★★☆☆☆ 전문성 : ★★★★☆ #본 리뷰는 리뷰자 김종욱의 저작권에 귀속되므로 참고시 참고 URL 명시 및 저작자에게 사용 통보를 해 주시기 바랍니다. #본 리뷰의 점수 및 평가 내용은 김종욱 리뷰자의 한정된 것이므로 지극히 주관된 평가 임을 명시합니다. #학습과 관련된 질문과 문제에 대한 질문은 일절 받지 않습니다. 스스로 찾아서 학습하는 것 그것이야 말로 진정한 학습자입니다. ###### 감사합니다 ###### |
|
"발적화"에 능통했던 학생 개발자 시절 최적화의 개념을 처음 접했던 것은 대학 시절 "소프트웨어 공학" 강의 시간이었습니다. 이론 중심적인 강의였기 때문에 최적화를 실무 환경에서 고객의 요구를 충족하고 비용을 줄이기 위해 소프트웨어 개발 프로세스의 후반부에 수행하는 과정 중의 하나라고 인식하는 정도에 그쳤던 것 같습니다. 프로그래밍 과제나 학기 단위 프로젝트에 최적화 기법을 적용하는 것은 전적으로 개인의 역량이었고 교수님의 평가 기준에 속한 것도 아니었습니다. 저는 게으른 학생인 편이었기 때문에 반복문 내부에서 같은 함수의 호출이 반복적으로 일어나는 것 정도를 수정하는 "발적화" 수준에 머물렀고 전후 성능을 측정하여 비교하는 섬세함을 발휘하지도 않았습니다. 그다지 중요하게 여기지 않던 최적화의 필요성을 느낀 것은 "임베디드 프로그래밍" 강의를 수강하며 라인 트레이서를 구현하는 프로젝트를 진행할 때였습니다. 집이나 실습실의 PC에 비하면 아주 협소한 하드웨어에 모든 요구 사항을 구겨 넣기 위해서는 코드 최적화가 필수였습니다. 소스 파일의 용량을 조금이라도 줄이고 메모리를 효율적으로 사용하기 위해 밤새 고민하던 체력과 열정은 지금 어디로 간 것일까요? 임베디드 C++ 개발자의 경험을 "노련하게 풀어낸 책" 이 책의 저자는 임베디드 C++ 개발자 경력을 가지고 있습니다. 성능 향상을 위한 입증된 테크닉을 소개하며 실제 경험을 기반으로 소프트웨어 성능과 관련된 문제들을 언급합니다. 챕터의 소제목을 포함하여 기술 지식을 맛있게 포장해 놓은 흔적을 많이 발견할 수 있습니다. 적게는 수 배에서 많게는 수백 배의 성능 개선이 이루어지는 최적화 기법을 흑마술에 비유한 것은 적절한 표현이라고 생각합니다. 이 책은 최적화라는 무거운 컨셉과는 달리 생각보다 쉽고 즐겁게 읽을 수 있습니다. 뒤집어 생각하면 이 책은 접근하기 쉬운 방식으로 최적화를 간단하게 소개하는 수준에 그칩니다. 나쁜 책이라고 할 수는 없지만 제시된 예제와 최적화 기법은 딱히 새로운 것이 없고 단순합니다. 특히 자료구조 최적화를 다룬 10장은 C++기본서에서 볼 수 있는 지식을 나열해 놓은 것에 불과합니다. 이를 저자로서의 노련함이라고 포장해야 할까요?
"가볍게" 읽을 수 있는 최적화 입문서 개인적으로 최적화는 OOP와 STL을 학습한 후 디자인 패턴을 다루기 전에 학습하기 좋은 주제라고 생각합니다. 다만 이 책을 전적으로 의지하여 최적화를 학습하기에는 부족한 요소가 많습니다. 이 책의 절반가량은 C++의 기능을 설명하며 나머지 부분도 C++을 깊게 이해하고 있는 분이라면 이미 알 법한 내용입니다. 즉, C++ 프로젝트 경험이 많고 STL을 잘 이해하고 있는 분에게는 새로운 것이 없는 내용으로 구성된 책입니다. 최적화와 전혀 관련 없는 내용을 다루는 것은 아니지만 정확성이 떨어지고 뭔가 많이 빠진 느낌입니다. 바이블 수준의 기본서를 학습한 후 STL의 동작을 추가로 학습하고 싶고 최적화에 간단히 입문하고 싶은 분이라면 추천할만한 책입니다. 하지만 현실적으로 C++ 기본서를 마스터했더라도 최적화라는 주제에 관심을 두기에는 이른 단계이지 않을까요? 어쨌든 왜 최적화를 해야 하며 최적화의 핵심이 무엇인가에 대한 정답만큼은 확실하게 제시하는 책입니다.
|