Altruistic Programmer's Blog (KR)

이타주의 프로그래머의 블로그

Archive for March, 2010

경험에 의한 공부법

without comments

[옛날 블로그 글입니다. 2008/01/24]
[중간에 첨삭 들어갑니다.]

 

[8회]

공부는 은근한 긴장상태를 유발한다.

-> 공부하는 시간을 따로 정해서 그 때만 공부한다.

-> 아무리 재밌어도 틈날때마다 공부하기 시작하면 스트레스가 누적된다.

      ( 운동이 재밌어도 무리하면 안되는 것과 비슷.. )

 

[7회]

공부의 내용이 어렵고, 복잡해서 이해가 잘안되고, 진도가 잘 안나가는 경우

-> 남들도 그럴 것이라는 생각을 갖는다.

-> 자신 있는 분야인데도 그렇다면, 남들은 2배 더 어려울 것이라는 생각을 갖는다.

 

[6회]

공부할 것이 많고, A가 더 공부하고 싶은데 B를 해야하는 경우

-> B를 열심히 공부할 수록, A를 공부할 시간이 많이 생긴다.

-> 그러니 B를 열심히 하자.

 [2010.03.29 B를 하는 수 밖에 없는지 잘 생각해본다.
적성과 맞지 않는 일을 하고 있는 것은 아닌지 고민해본다.]


[5회]

어느 것을 공부하는 게 나을지 망설여 질 때

-> 일단 마음 가는 것 먼저 공부하고, 다른 것도 다 공부한다.
[2010.03.29 공부의 목표가 서지 않았기 때문에 이런 망설임이 있는 것이다.
공부의 목표, 나아가서는 인생의 목표를 세운 후에 공부를 한다]

 

망설이는 시간, 확신이 없어서 공부를 해도 집중하지 못하는 비효율성이 더 시간 낭비가 되는 것 같다.

동기와 피드백이 적절하다면 공부는 재미있으니 시간은 아깝지 않다.

 

[4회]

공부가 진전이 없을 때, 공부를 해도해도 너무 어려울 때

-> 도무지 공부를 해도 모르겠을 때는 공부를 더 하면 된다.

 

뭐든 자꾸 하면 는다.

 

[3회]

공부에 있어서 중요한 것.

1. 동기 – 현실에서의 활용 목적.

2. 피드백 – 성장하고 있다는 느낌.

 

피드백은 우리가 모르는 사이에 찾아오는 경우가 많다.

성장 그래프는 계단형의 모습을 띄는 경우가 많다.

고로, 겉보기엔 매일이 똑같아도 사실 성장하고 있다는 점을 잊지 말자.

동기와 피드백이 적절하다면 공부는 재미있다.
[2010.3.29 Inner Game에서 꼽는  즐거움, 성장, 성과의 삼각형과 대충 매핑된다]

 

[2회]

공부에 있어서 딱 맞는 말.

1. 두마리 토끼를 잡으려다 둘 다 놓친다.

2. 갑자기 기억안난다 -_-;;

 

[1회]

경험에 의한 공부법.



1. Wikipedia에 가서 용어 및 기술의 개요를 파악한다. 

2. 좋은 개론서를 여러 권 읽는다.

3. 좋은 심화서적을 여러 권 읽는다.

4. 많이 응용하고 써먹어 본다.

 

주의 사항.

* 좀 자신있어도 2번을 건너뛰면 학습효율이 매우 떨어진다.

* 3번을 건너뛰어도 써먹는데 문제가 없더라도, 3번은 꼭 필요하다.

   -> 써먹는데 문제가 없다는 건 자기 생각일 뿐이다 -_-;;

 

개발이외의 분야에도 유효한 것 같다.

Written by muscly

March 29th, 2010 at 2:10 pm

Posted in 기타

Tagged with

C# 3.0 람다 표현

with 2 comments

[옛날 블로그 글입니다. 2008/01/25]

요새 공부하느라 C# 3.0 과 SlimDX로 연습용 3D 엔진을 만들던 터에
C# 3.0에서 소개된 람다 표현을 유용하게 사용하는 기회가 생겼다.

아래 소스 코드는 연습용 엔진의 클라이언트에서 발췌한 것으로
호랑이를 키프레임 애니메이션으로 이동시키기 위한 코드.

 

// Vector3 값을 갖는 키프레임을 만든다.

// 0ms, 1000ms, 2000ms 에 위치할 곳을 설정.

KeyFrameValuesVector3 > keyValues = new KeyFrameValuesVector3 >();
keyValues.Insert( new TickCount(0), new Vector3( 0, 0, 0 ) );
keyValues.Insert( new TickCount(1000), new Vector3( 1, 0, 0 ) );
keyValues.Insert( new TickCount(2000), new Vector3( 1, 1, 0 ) );

 

// 위에서 만든 키프레임을 기반으로 보간된 값의 집합을 만든다.

// 두 번째 인자가 보간 알고리즘을 람다 표현으로 넣는 부분.

// 선형 보간이다.

InterpolatedValues<Vector3> interValues = new InterpolatedValues<Vector3>(
     keyValues, 
    (left, right, ratio) => left * (1.0f – ratio) + right * ratio
     );

 

// 호랑이에 붙을 타임 컨트롤러( mover 라고 불러도 되고 )를 만든다.

// 두 번째 인자가 보간된 값을 객체의 어떤 속성에 적용할지에 대한 람다 표현

// Position 속성에 적용하고 있다.

InterpolatedController<Vector3> interCtrl = new InterpolatedController<Vector3>(
      interValues,
      (node, value) => node.Position = value,
      new TickCount( myRender.CurrentTickCount.ToInt())

      );

// 타임 컨트롤러의 타겟으로 호랑이를 선택한다.

interCtrl.Target = tiger;

보간 알고리즘이나, 보간된 값을 3D 객체의 어떤 속성에 적용할지를 인라인으로 만들어서 넘길 수 있다는 장점이 있다. 뭐, 결국은 delegate가 넘어가는 것이니 syntactic sugar 라고 볼 수 있지만, 왕편리..

 같은 내용이지만, 다음은 키프레임 애니메이션으로 큐브를 돌리는 예제.

// Quaternion 값을 갖는 키프레임을 만든다.

// 0ms, 1000ms, 2000ms 에 회전할 각도를 정한다.

KeyFrameValuesQuaternion > keyValues = new KeyFrameValuesQuaternion >();
keyValues.Insert( new TickCount(0), 

     Quaternion.RotationYawPitchRoll(0, 0, 0));

keyValues.Insert( new TickCount(1000),

     Quaternion.RotationYawPitchRoll((float)Math.PI / 2, 0, 0));

keyValues.Insert( new TickCount(2000),

     Quaternion.RotationYawPitchRoll((float)Math.PI / 2, (float)Math.PI / 2, 0));

 

// 위에서 만든 키프레임을 기반으로 보간된 값의 집합을 만든다.

// 두 번째 인자가 보간 알고리즘을 람다 표현으로 넣는 부분.

// 선형 보간이다.

InterpolatedValues<Quaternion> interValues = new InterpolatedValues<Quaternion>(
     keyValues, 
    (left, right, ratio) =>

           Quaternion.Normalize( left * (1.0f – ratio) + right * ratio )
     );

 

// 큐브에 붙을 타임 컨트롤러( rotator 라고 불러도 되고 )를 만든다.

// 두 번째 인자가 보간된 값을 객체의 어떤 속성에 적용할지에 대한 람다 표현

// Rotation 속성에 적용하고 있다.

InterpolatedController<Quaternion> interCtrl = new InterpolatedController<Quaternion>(
      interValues,
      (node, value) => node.Rotation = new RotationInfo( value ),
      new TickCount( myRender.CurrentTickCount.ToInt())

      );

// 타임 컨트롤러의 타겟으로 큐브를 선택한다.

interCtrl.Target = tiger;

Written by muscly

March 29th, 2010 at 2:02 pm

Posted in 프로그래밍

Tagged with ,

시크릿 실천법

without comments

 

얼마전 리뷰를 올린 시크릿(http://altprog.com/blog/1220)의 실천법 책이다. '시크릿'을 팔고도 돈을 더 벌려고 '부록'을 내놨구나. 라는 느낌으로 읽기 시작했는데, 읽어보니 두 책간의 상관관계가 그리 크지 않다. 제목만 바꾸면 별도의 자기계발서로도 팔릴 수 있을만큼 좋은 내용들을 많이 담고 있다.

시크릿의 공동저자중 한 명인 존 다마티니가 지은 책인데, 읽어보니 저자가 참 존경스럽다. 자기 말대로 여러 교리와 철학을 열심히 연구한 티가 많이 난다. 한쪽에 치우침이 없이 균형잡힌 생각을 요구하면서도 지루하지 않고 에너지가 넘친다.

어떤 일이든 장점과 단점이 있다라는 양면성의 원리가 자주 등장하는데, 불교에서 분별심(좋고 나쁨을 판단하는 마음)을 내지 말라고 한 것이 이런 느낌이었구나라는 생각이 들었다.

건강하기 위해서는 충분히 휴식을 취하라고 얘기하기 쉽상인데, 역설적으로 120세까지의 목표가 있다면 건강할 수 있다고 얘기한다. 하루종일 할 일이 없어서 웹서핑을 하고 앉아있는 것보다는, 명확한 목표와 흥미를 가지고 열심히 일한 날에  오히려 몸이 개운한 경험을 해본 나로서는 참으로 공감이 가는 얘기다.

또 돈이라는 것에 물질, 탐욕과 같은 부정적인 이미지가 많았는데, 역시나 양면성의 잣대로 보면 영적인 목표를 이루는데 도움이 되는 긍정적인 이미지도 있음을 알게 되었다. 

각 장마다 배운 내용을 실천할 수 있도록 다양한 질문을 제공하는데, 이 질문들에 정성들여 대답하는 것이 나 자신, 내가 소중하게 생각하는 것, 나의 목표 등에 대한 인식을 높여주리라 기대하고 있다.

Written by muscly

March 21st, 2010 at 12:17 pm

Posted in 독후감

Tagged with , , ,

프로젝트가 서쪽으로 간 까닭은

with 2 comments

http://www.yes24.com/24/goods/3600609

"피플웨어"의 톰 디마르코와 티모시 리스터의 최신작이다. 읽고있으면 얼굴이 화끈거리다가도 어느새 끄덕거리게 되는 현장의 얘기들로 가득차 있다. 

최고의 개발서로 꼽고 있는 "실용주의 프로그래머"와 같은 반열에 오를 책이다. 내년 쯤에는 원서를 구입해서 읽어봐야겠다.

Written by muscly

March 12th, 2010 at 10:09 pm