..

20210718

회고는 나 자신을 위해 쓰는 글이며 대부분의 경우 나 자신 외 다른 독자를 별로 고려하지 않는다.

Fact

  1. 어제에 이어서 오늘 아침에도 몸 상태가 좋지 않았다.
  2. 오전에 학생을 지도했는데, 짧은 주기의 회고와 피드백에 중점을 두고 진행했다.
  3. 제럴드 와인버그의 글쓰기 책을 오랜만에 다시 읽었다. 자료수집 부분을 다 읽었다.
  4. 요즘 생산성과 회고에 대해 했던 생각을 회고하며 오랜만에 다시 회고를 작성하기 시작했다.
  5. ramdajs의 활용에 대해 더 공부했고, 개인프로젝트 Tresk의 리듀서 코드를 리팩터링했다.
  6. 이규원님의 TDD강의 중 일부를 찾아들었다.
  7. 교내 창업팀에 프런트엔드 개발자로 지원했다.
  8. Clojure에 관한 글을 읽고, 공부할만한 자료를 찾아봤다.
  9. 내일 무엇을 할 지 간단히 계획했다.

Feeling

  1. 그래도 오늘 오후부터 몸이 회복되어서 기분이 좋다.
  2. ramdajs를 더 잘쓰고 싶은 마음에 여러 함수들을 공부했으나 하다보니 실제 코드에 적용하면서 필요에 따라 찾아쓰지 않으면 학습효과가 크지 않을 것 같다는 생각에 드랍했고, 이렇게 ramdajs가 좋으면 아예 오래전부터 관심가져오던 Lisp의 방언인 Clojure을 공부하는게 낫지 않을까 하는 생각을 했다.
  3. 이제 프런트엔드 개발자로는 교내 개발팀이나 해커톤 등을 자신있게 지원할 수 있다는 느낌이 들었다. 물론 이번 시도가 어떻게 될지는 모르겠다. 보통 고학년들로 구성되는 것으로 알고있기도 하고, 내 자신감이 허황된 것일수도 있기 때문이다.
  4. 얼마나 많은 시간이 있는지는 학습에 있어서 중요 요소가 아니라고 느꼈다. 내 말은, 정말 그렇게 느꼈다는 것이다. 이것은 테스트 주도 개발을 안다고 생각하는 사람(나 같은)이 정말 숙련된 개발자가 작업하는 것을 보고 “아 그러니까 정말 그렇게 작게 나눈다는 말이군요.”하는 것과 같다.
  5. 회고를 더 자주, 더 열심히 해야겠다고 느꼈다.

Finding

  1. UseEffect, UseState

     const [lable, setLable] = useState('');
    
     // 여기서는 성능 이득은 없지만 가독성이 더 좋다. 즉시 실행 함수 없이 Guard Clause를 쓸 수 있다.
     useEffect(() => {
         if (isEmpty) {
         setLable('isEmpty');
         return;
         }
    
         setLable(
         (isOpen)
             ? 'logBookCloser'
             : 'logBookOpener',
         );
     }, [isEmpty, isOpen]);
    
     // 아래 코드는 UseEffect - UseState 로 바꿀 이유가 없다. 성능 이득도 없고 Guard Clause도 적합하지 않다.
     const lable = (isOpen) ? 'fold' : 'unfold';
     const icon = (isOpen)
         ? <UnfoldLessRounded />
         : <UnfoldMoreRounded />;
    
  2. reduce / pipe 아래 두 코드는 동일하다. 첫번째 코드는 ramdajs를 이용한 것이다.

     // R
     const double = map(multiply(2));
     const plus = map(add(3));
     const mod = map(modulo(__, 3));
    
     const arr = [1, 2, 3, 4, 5, 6, 7];
    
     const trans = pipe(
     double,
     plus,
     mod,
     );
    
     trans(arr);
     /// [2, 1, 0, 2, 1, 0, 2]
    
     const double = (arr) => arr.map((x) => 2 * x);
     const plus = (arr) => arr.map((x) => x + 3);
     const mod = (arr) => arr.map((x) => x % 3);
    
     const arr = [1, 2, 3, 4, 5, 6, 7];
    
     const trans = [
     double,
     plus,
     mod,
     ];
    
     trans.reduce((acc, func) => func(acc), arr);
     /// [2, 1, 0, 2, 1, 0, 2]
    
  3. 친구와 Github Copilot에 대해 이야기를 나누다가 다음과 같은 아이디어를 얻었다. 첫째, 현재 고수준의 언어, 예를 들어 javascript로 프로그래밍하는 것에서 Copilot의 자동 생성 기능으로 프로그래밍 하는 것으로 이동하는 것은, 기계어, 또는 어셈블리어에서 javascript같은 고수준의 언어로 이동하는 것과 같은 것 아닐까? 추상화의 수준만 계속 높아지는 것이다. 이렇게 생각하니 Copilot에 대해 회의적으로 생각하던 마음이 조금은 사라졌다. 둘째, 이런 방식은 어떨까? 개발자들은 테스트 코드만 작성하고, 자동 생성된 코드가 테스트 코드를 통과하는지만 확인하는 것이다. 또는, 테스트 코드 자체가 설명서라는 아이디어에서 출발하여, Copilot이 테스트 코드 자체를 보고 생성할 코드를 결정하는 것이다.
  4. 와인버그의 글쓰기 책에서 돌을 수집하는 부분을 읽었다. 여러가지 길게 설명을 했지만 중요한 것은 일상에서 내가 딱 봤을 때 ‘에너지’가 느껴지는, 즉 자기가 확 끌리는 돌을 수집하도록 항상 준비하고 있어야 한다는 것이다.
  5. 최근 무엇을 하는지 설명하는 이름을 짓지 말고 왜 이것을 하는지 설명하는 이름을 지으라는 피드백을 많이 받았다. 이 리팩터링도 그 포인트를 신경쓴 것이다.
  6. 애자일 회고에서 ‘나부군 이야기 - 일일 회고’ 에서 다음과 같은 문장을 읽었다. “그럼 우리가 처음으로 돌아가 오늘을 다시 시작할 수 있다면 무엇을 어떻게 다르게 해볼 수 있을까요?” 갑자기 내가 했던 수업이 떠올랐다. 나는 그동안 학생들을 지도할 때 “다시 이 문제를 푼다면 어떻게 다르게 하면 좋을까요?” “지금 수업의 절반을 했는데 우리가 무엇을 했나요? 남은 시간은 어떤 것은 그대로, 어떤 것은 다르게 하면 좋을까요?” 같은 질문을 자주했다.(물론 애자일을 공부한 덕이다.) 그런데 왜 나는 나 혼자 공부할 때 스스로에게는 그런 질문을 하지 않는가? 나는 학생들을 지도할 때 회고하도록 유도하면서 왜 나는 제대로 하고 있지 않은가? 오늘부터 해야겠다.

Future Action

  1. 나는 촘촘한 계획을 짜두는 것이 중요하다고 생각하지는 않는다. 빠른 주기의 회고, 피드백과 동적 조정이 더 중요하다. 그렇지만 적어도 내일 아침에 일어나서 뭐부터 할 지는 정해두는 것이 좋다는 생각이 들었다. 전에 ‘타이탄의 도구들’을 읽으면서 매일 내일 아침에 일어나야 하는 이유가 있어야 한다는 문장을 읽었다. 올해 3-4월 쯤 빠르게 성장했을 때를 되돌아보면 그때도 아침에 딱 깨면 ‘아 오늘 이거 이거 해야한다 빨리 도서관 가야겠다’라고 생각했었다. 당연히 그 할 일은 부담이 크지 않으면서 흥미로운 일이어야 한다. 내일 아침은 ‘Learn clojure in Y Minutes’를 시작으로 클로져를 공부하면서 시작할 것이다.
  2. 나는 글 쓰는 것을 좋아하고, 글을 잘 쓰는 것이 어떤 일을 하든지 중요하다고 생각한다. 제럴드 와인버그 같은 사람이 이상적일 것이다. 실제로 몇 주전에 ‘제럴드 와인버그의 글쓰기 책’ 앞부분을 읽었고, 그가 제시하는 자연석 기법이 흥미로우면서 내가 그동안 해온 것과 유사한 부분이 있다고 ‘생각만’했다. 그래서 오늘 그 뒷 부분에 제시된 ‘돌을 수집하는 방법’들을 읽었고, 당장 시작했다. 오늘 수집한 돌은 다음과 같다. ‘복잡한 시스템 부수기. 와인버그 글쓰기 76쪽’ 내일부터 하루에 1개의 돌을 수집하는 것으로 시작할 것이고, 점차 늘려나갈 것이다.
  3. 무엇을 해야할까? 나는 개발 자체도 재밌고 애자일도 재밌다. 자바스크립트도 재밌고 프런트엔드도 재밌고 그 외 개발에서 다양한 분야에 흥미를 느낀다. 그렇지만 동시에 흥미와 무관하게 ‘이걸 하는게 나한테 좋겠는데?’ 하는 것이 있다. 예를 들어 나는 블록체인이 가져올 가치와 영향력을 믿고, 그 흐름의 일부가 되고싶지만, Go나 Rust를 이용한 코어개발이나 스마트 컨트렉트 개발 자체에는 영 재미가 붙지 않는다. 그러던 중 이 글을 읽었다. “재미없는 공부는 아직 때가 멀었다는 신호이다. 하지마라. 재미있는 걸 찾아 공부해라. 그러다보면 언젠가는 재미없던 것들이 무지 재미있어질 것이다. 모든 지식은 맞닿아 있다.” 나는 아직 대학에 다닐 시간이 7학기나 남았다. 지금까지 잘 해왔으니, 적어도 당분간은 계속 재밌는걸 찾아 몰두하면 되지 않을까?
  4. 건강을 관리해야한다. 내가 최근에 쓰고 있는 글에서 ‘건강에 뭔가 문제가 있다는 느낌을 가지고 있는 것과 공복 혈당이 정상 수치 이상이라는 문제를 가지고 있는 것은 해결가능성이라는 측면에서 완전히 반대편에 있다’라고 쓴 문장이 있다. 내 생각에 내 몸이 완전히 정상인 것 같지는 않다. 그런데 종합건강검진에서 모든 것이 완벽하게 정상이라는데 어쩌겠는가? 그렇지만 일단 확실한 것은 책상 앞에 앉아서 보내는 시간을 줄여야 한다는 것이다. 최근 읽은 주당 20시간 근무하는 회사, 주당 16시간 일하기에 대해 내일 생각해보고, 일부 적용해보고, 회고해볼 것이다.
  5. 자주(필요하다만 1시간 마다, 또는 그보다 자주) 회고하고 기록해야겠다. 그리고 매일 아침, 그리고 그 날 회고를 쓰기 전 전날 회고를 읽어볼 것이다. 그리고 내일은 좋은 회고를 가려내는 법, 되돌아보다를 다시 읽어봐야겠다.

Affirmation

참고 : 자기 다짐 의 올바른 사용

나는 실행 프레임이 아니라 학습 프레임으로 세상을 바라보며 성장하는 사람이다.

Feedback

(19일) 1, 2, 3은 실천했고, 할 것이다. 특히 1은 좋은 생각이다.

5는 생각은 했으나 충분히 적용하지 못했다. 링크한 글도 다시 읽지 못했다. 내일 다시 고고.

4에 대해서는 아직 나아진 것이 없다.