[리뷰] 읽기 좋은 코드가 좋은 코드다(한빛미디어)


 - 한빛 미디어



코드를 작성하는 시간보다 이미 작성된 코드를 읽고 파악하는데 더 많은 시간을 소모한다는 이야기는

어느 유명한책에서 이야기한것이 아니더라도 자기 자신을 살펴보면 쉽게 알 수 있을 것이다.


내가 작성한 코드는 누군가 반드시 읽는다. 

혼자 작업 하더라도 스스로가 자신의 코드를 읽게된다.

이책은 제목 그대로 읽기 좋은 코드를 만드는 방법을 알려준다.


Code Complete나 Clean Code에도 비슷한 내용들이 있지만, 기존 책들이 여러가지를 

설명하면서 부분적으로 읽기 쉽게 작성하는 방법을 설명했다면, 이책은 처음부터 끝까지

어떻게 코드를 읽기 쉽게 만들것인가에 집중한다.


이책이 없더라도 책의 내용을 경험적으로 터득하고 있는 사람들도 있을것이다.

코드를 잘 작성하는데 관심을 가진 사람들에게 이책은 그들의 고민과 노력을 잘 정리해놓은 책일 거이다.


코드 작성의 경력이 있더라도 코드를 잘 작성하는 방법에 관심이 없었던 사람들에게는

적어도 이책은 필수적으로 봐야할 책일것이다. 

변수명을 a, b, ii, aa로 만들면서 좋은 소리들을 수 있는 시대는 지난것같다.


책에서 특별히 흥미있었던 부분은 2장에서 min/max, first/last, begin/end를

어떤 의미로 사용하면 좋을지에 대해서 정확하게 이야기한 부분이다.


영어가 부족하기 때문에 생기는 일이겠지만, first/last, begin/end를 사용할때

어떤 기준으로 단어를 선택할지 기준이 모호했는데 그 부분을 잘 이야기해줬다.


책에는 코드를 읽기 쉽게 작성하는 다양한 방법들을 설명하고
상황에 맞는 적절한 삽화와  다양한 언어(c++, javascript, python, java)를 사용한 예제로 이해를 돕고 있다.
모르는 언어를 사용한 예제라고 해도 하나의 언어만 알면 이해하기 쉬운 난이도의 예제여서
거꾸로 예제를 보면서 다른 언어를 맛보는 재미도 있다.

책이 얇고 가볍기 때문에 부담없이 읽기 좋다.
욕심같아서는 책의 내용을 모두 머릿속에 넣은 상태에서 코드를 작성하고 싶다.

내 주변에 이제 막 코드 작성을 시작한 사람이 있다면 이 책은 꼭 읽어보라고 알려주고 싶다.


임백준님이 번역한 책으로, 번역의 만족도는 100%. 다른 좋은 책이 이정도로만 번역되어 나왔으면 좋겠다.

아이폰 앱 디자인 정석(한빛미디어)


아이폰 앱 디자인 정석아이폰 앱 디자인 정석


아이폰 앱 디자인 정석(한빛미디어)


한빛미디어 모바일 시리즈중 하나로 아이폰 앱 디자인에 대해서 설명해줍니다.

앱 디자인입니다. 코드는 한줄도 나오지 않으며, 어떻게 해야 UX를 살리는 UI를 만들지에 대해서 알려줍니다.

그래서 부제가 사용자경험(UX)를 극대화 시키는 사용자 인터페이스(UI)의 비밀입니다.


책 제목에 정석이라는 단어가 붙어서.. 

수학의 정석과같이 묵직하면서도 꺼려지는 첫인상을 풍겼습니다. 


책은 풀컬러로 되어있으면서 그림들이 많이 포함되었습니다.

글로 설명한 내용을 그림에서 확인해볼수 있는 구조입니다.

책을 위한 임시 자료가 아니라 개발되어 쓰여지고있는 어플의 화면을 가지고 설명합니다.


책에서 흥미로웠던 부분은 6개의 PINCH&ZOOM 부분입니다.

디자인은 이렇게 해야한다는 설명으로 끝이 아니라 이렇게 디자인된 어플이 이거다라고 알려줍니다.

그것도 대부분 이름만 대면 알만한 어플들입니다. 

어플 개발자가 UI의 어떤 부분들을 어떻게 만들었는지를 설명해줍니다.


또, 아이폰 표준UI에 대해서 하나씩 설명을 합니다.

표준UI 컨트롤이 어떤게 있으며, 어떤 UI속성들이 있고 언제 쓰면 좋은지를 자세하게 설명합니다.

관심만 가지고 있던 저에게는 아주 좋은 정보를 알려줘서 좋았습니다.


책 제목에서 아이폰 앱 디자인으로 아이폰에 집중했지만, 아이폰 특화된 UI 설명을 제외한다면

전체적으로 UX를 살리는 UI를 디자인하는 방법에 대한 설명입니다.

그래서 다른 기기에서 개발할때도 참고할만한 내용들이 있습니다.

단적인 예로 경고창이 끼어들 타이밍이 언제인가.. 에 대해서도 알려줍니다.


책을 다 읽고 드는 생각은.. 나중에 UI관련 작업을 하게되면 다시한번 훑어봐야겠다. 입니다.

그런데 그게 간단하게 되지는 않을것 같습니다.

챕터의 마지막에 체크해봐야할 것들 목록을 몇가지 적어주지만,

요약된 몇가지 부분들만 있어서 좀더 자세히 점검하려면 책을 정독해야겠지요.


부록으로 체크 리스트가 하나 추가되었다면,

좀더 간편하게 UX를 살리는 UI를 체크해볼수 있을것 같다는 생각이 들었습니다.


이 책은 터치 모바일 기기에서 UX를 살리는 UI를 만드는 많은 사람들에게 도움이 될거라 생각됩니다.

[리뷰] HTML5 Canvas(한빛미디어)


HTML5 Canvas(한빛미디어)

HTML5에서 Canvas만 집중적으로 다루고 있는 책입니다.
그렇기 때문에 Canvas에 대해서 자세하게 설명되어 있습니다.  

Canvas를 이용해서 폰트, 이미지, 동영상, 간단한 애니메이션, 오디오, 사운드 처리를
단계별로 예제만들면서 설명하고.  배우것을 기반으로 Cavnas게임도 만들고, 모바일에 대한 이야기도 합니다.

예제가 많아서 따라하다보면 Canvas를 익힐 수 있는게 이책의 큰 장점입니다.
각 장마다 단계별로 코드를 조금씩 보여주고 설명 한 후, 마지막에는 
그장에서 사용한 최종코드 전체를 볼수있게 구성되어있습니다.

그래서 뒷부분의 전체코드를 보면서 앞장에 설명한 내용을 다시 생각해볼 수 있었고,
특히 코드에 사용된 폰트가 마음에 듭니다 :-) (0(숫자0), O(영문자O)를 구분하기 쉬워서..)

하지만!!
javascript는 잘 모르고, HTML은 간단한 태그만 알고있는 상태에서 처음 책을 접했을때
javascript에 대해서 대략 감은 잡고 있어야 이해하기 수월하겠구나는 생각이 들었습니다.

만약 프로그래밍을 모르고 HTML5 Canvas를 공부할 목적으로 책을 구매하는 사람들에게 쉬운 책이 아닙니다.
javascript를 모른다면 책 뒷표지에 있는 로드맵에 표시된 책을 훑어본 이후 이책을 읽으시길 권합니다.

Canvas를 이용해서 게임을 만드는 부분은 상당히 흥미로운 부분이었습니다.
Canvas의 사용에만 집중한 것이 아니라 약간의 팁도 덤으로 알려줍니다.
하지만, 수학/물리를 설명하고 사용하는 부분에서는 기본지식이 없으면 이해하기 힘듭니다.
로직은 이해하지 못하고 게임만들면서 사용된 Canvas만 바라봐야 합니다.
뭐.. 수학/물리는 간단한 내용들이라 책 내용을 이해하면서 파악하셔도 됩니다.

개인적으로 책에서 가장 마음에 안들었던 부분은 Canvas API에 대한 설명/정리 부분입니다.
처음보는 API에 대해서 매개변수에 대한 설명은 없고 예제에서 사용합니다.
예제를 보며 API에 대해 정리를 했더니 뒷 부분에서 API에 대해 별도로 설명을 합니다.
그런데 그게 어떤건 잘 설명해서 보여주고, 또 다른것은 그렇게 설명하는게 없기도 합니다.

책에서 사용한 API에 대해서만이라도 부록에서 찾아볼 수 있도록 준비되어 있다면 어땠을까 하는 생각을 했습니다.

HTML5의 Canvas에 대해서 배우고 싶은 사람들에게는 이책을 추천합니다.
Canvas를 통해서 게임을 만들어보고 싶은 사람들에게는 아주 강력하게 추천합니다!!

Pointer Container, boost::ptr_vector<>

hared_ptr를 사용해서 vector에 값을 넣을때 다음과 같이 사용했었습니다.
v.push_back(boost::shared_ptr(new int(1)));
 대충 알고 써먹은 boost를 천천히 훑어보기로 맘먹고 보는데 Pointer Container라는 것이 있어서
간단하게 테스트하고 잊어버리기 전에 기록해둡니다.
class PtrTest
{
public:
	PtrTest() {value_ = 0;};
	~PtrTest() {};
	PtrTest(const PtrTest& other)
	{
		std::cout << "Copy Const" << std::endl;
		value_ = other.value_;
	}
	PtrTest& operator=(const PtrTest& rhs)
	{
		if(this == &rhs)
		{
			return *this;
		}
		std::cout << "= Operator" << std::endl;
		this->value_ = rhs.value_;		
		return *this;
	}	
	void SetValue(int value) {value_ = value;}
	int GetValue() {return value_;}
	
private:
	int value_;
};

TEST(PtrVectorTest, ptr_vector_test)
{
	boost::ptr_vector ptr_vector; 

	PtrTest* test_a = new PtrTest;
	test_a->SetValue(1);

	PtrTest* test_b = new PtrTest;
	test_b->SetValue(2);
	
	ptr_vector.push_back(test_a); 
	ptr_vector.push_back(test_b); 
	ptr_vector.push_back(new PtrTest); 

	PtrTest* test_ptr = &ptr_vector[0];	
	EXPECT_EQ(1, test_ptr->GetValue());

	PtrTest test_ptr_2 = ptr_vector[1];	
	EXPECT_EQ(2, test_ptr_2.GetValue());
	EXPECT_EQ(3, ptr_vector.size());

	ptr_vector.erase(ptr_vector.begin());
	EXPECT_EQ(2, ptr_vector.size());
}


new한 데이터를 boost::ptr_vector에 넣고 나서 delete를 하지 않아도 메모리릭이 발생하지 않습니다.
boost::ptr_vector 내부적으로 메모리 관리를 하고 있는듯합니다.
이부분은 내부 동작을 좀더 자세히 살펴봐야 알 수 있을 듯합니다.

boost::ptr_vector를 사용하기 위해서는 boost/ptr_container/ptr_vector.hpp 를 include 해야 합니다.

boost::ptr_vector 말고도 boost::ptr_deque, boost::ptr_list, boost::ptr_set,
boost::ptr_map, boost::ptr_unordered_set, boost::ptr_unordered_map이 더 있다고 합니다.

출처 -  http://en.highscore.de/cpp/boost/smartpointers.html 




'프로그래밍' 카테고리의 다른 글

기본 생성자와 생성자 오버로딩  (0) 2012.09.08
eclipse에 pydev 설정 에러 처리  (0) 2012.06.18
Office Add-in 만들기.  (0) 2012.02.08
Lua 테이블 내용 출력하기  (0) 2012.01.28
Lua Table 복사에 대한 처리  (0) 2012.01.16

Office Add-in 만들기.

VSTO(Visual Studio Tools for Office)를 사용하면 Office용 Addin을 만들수가 있습니다.

excel을 사용하다 worksheet가 많아지면서 검색과 정렬에 불편한 점이 있었습니다.
구글링하면 하이퍼링크를 사용해서 관리하는 방법과 vba를 이용해서 excel에서 만들어 쓰는 방법을 이야기합니다. 둘다 마음에 안들어서 삽질로 외부프로그램으로 엑셀파일을 로드해서 워크시트를 조절하게 했는데 병맛같은 기분이 들더군요.

그래서 다시 검색. 검색...해보니 Office 2003부터 Add-in 형식으로 기능을 추가할 수 있었습니다.
구글링을 해보니 아주 괜찮은 문서를 발견해서 링크를 남겨놓습니다.

C#, VB를 사용해서 addin을 만들 수 있으며, Visual Studio Express 버전에서는 addin 프로젝트를 지원하지 않습니다.

http://www.clear-lines.com/blog/category/VSTO.aspx   
다양한 부분의 글들이 있으며 VSTO에 관한 글도 많습니다. 

http://clear-lines.com/blog/post/excel-2007-vsto-add-in-tutorial.aspx 
Tutorial 형식으로 VSTO를 처음부터 배포까지 잘 설명해주고 있습니다.
튜토리얼만 따라하다보면 어떻게 해야하는지 감을 익힐 수 있습니다.

영어로 되어있지만 메뉴와 코드부분의 설명만 잘 봐도 충분히 따라가며 만들 수 있어서 좋습니다.