활용한 스터디 기법 : 피어세션
, 짝코딩
첫 주차 OT 진행하고, 며칠 뒤 미니쉘 구현에 필요한 사전지식을 학습한뒤 피어세션을 열기로 하고 개인적으로 학습하는 기간이 약 1주일 주어졌다. 그 후 본격적으로 팀원들간 스케쥴 조정을 하고 고정적인 시간에 모여서 짝코딩기법을 도입해 설계부터 코드구현까지 함께 하게 되었다. 처음 구상했던 데드라인은 시작한 날로부터 한달까지…! 그러나 실제로 완성까지는 약 3~4주만에 되었지만, 추가적으로 발견되는 케이스들과 abort상황, 메모리 누수 상황을 처리하기 위해서 추가로 약 2주간을 들인 끝에 모두 미니쉘을 통과하여 스터디를 마칠 수 있게 되었다!
사전학습 단계 (피어세션)에서 겪은 시행착오
전체적으로 아직 추가적으로 팀원을 더 받는 기간이기도 했고, 기존에 합류하기로 하신 분이 포기의사를 밝히는 등 분위기가 조금 어수선했다. 미니쉘 팀원 모집을 좀더 여유를 갖고 했어야 한다는 아쉬움이 남는다. 개인 팀을 구하는데도 오랜 기간이 걸리는데 시간이 좀 촉박했던 것 같다.
피어세션은 과제 구현에 필요한 CS들을 추후 기술면접에서도 대비할 수 있게 해주는 효과가 있는 기법이다. 원래의 스터디 구상은 미니쉘에서 필요한 프로세싱관련 개념들과 파싱에 관한 개념들을(컴파일러 과목은 기술면접에서 거의 다루지 않으므로 과제에 필요한 최소한만) 각자 학습한 뒤 메타인지로 스스로 정리해볼 수 있는 기회를 만들고 싶었다.
그러나 실제 세션 당일 잘 굴러가지 않았다. 미니쉘은 대표적인 구현과제인 이유가 근본이유라고 생각한다. 미니쉘에서 쓰이는 프로세스에 대한 개념들은 사실 이전 과제들에서 정복하고 왔어야 하는 CS개념들 인 것이다. 팀원들도 굳이 해야하나하는 필요성에 대한 의구심이 있지 않았을까 하는 짐작을 해본다.
그럼에도 어느 멘토님들은 미니쉘과 같은 과제를 하고 나면 블로그 글 20개 정도가 나와야 제대로 했다고 말씀하셨던 기억이 난다. 너무 구현에만 신경쓴 나머지 아쉬운 마음이 든다.
구현 단계(짝코딩)에서 겪은 시행착오
초기 설계부터 IEEE의 shell API 규격이 담긴 메뉴얼과 bash 메뉴얼을 참고하여 미니쉘의 구조를 구상했다. 실제의 쉘이 동작하는 방식대로 처리되어 추후에 발생할 문제들에서 자유로워졌다. export ho=ho, ec$ho hi
를 하게 되면 hi가 나와야 한다던지…
설계단계에서 처음으로 flow chart를 제대로 만들어서 진행해보았다. 특히 tokenize 함수를 구현하는데 많은 도움이 되었다고 생각한다. 동료평가시에도 코드로 보면 쉽게 이해하기 어려운데, 플로우차트를 보여드리며 진행하여 훨씬더 이해를 도울 수 있었다.
그리고 거의 모든 부분에서 수도코드를 작성하고 실제의 코드로 옮겨내었는데 수도코드를 먼저 작성하고 코드를 작성하는 것이 여러명이서 하기에 필수작업이라는 판단이 들었다. 여러명이서 진행하는 과제이기때문에 팀원모두의 의견합치와, 결정된 사항을 모두 같은 내용으로 이해할 수 있어야 했기 때문인데 이때 수도코드를 작성하는것이 좋은 영향을 끼쳤다고 생각한다.
그러나 미니쉘의 방대한 코드들을 작성하는데는 더이상 짝코딩 기법을 활용하기 쉽지 않았다. 목표로한 스터디 기간이 1달이었기에 후반으로 갈수록 시간이 모자라다고 느끼게 되었고 막바지는 각자 부분부분을 맡아서 구현하고 리뷰하는 방식을 취하게 되었다. 그래서 막바지에서는 팀원 각자가 자신이 맡지 않은 부분들을 전부 소화할 수 없다는 생각이 들었다. 이점이 조금 아쉬웠다.
또한 시간이 모자라다는 현상에 영향을 끼친 원인들에는 팀원간의 의견합의가 어려웠다는 점을 꼽을 수 있었다. 특히 이미 전날에 합의가 된 사항도 다음날 번복되며 다시 논쟁을 하게 되는 경우가 빈번했다. 합의가 되지 않은상황에서는 코드를 짤 수가 없었다. 그래서 몇몇 팀원들이 늦게오는 날엔 출석한 팀원들이 합의해서 코드를 짜고 푸쉬해버리는 방식으로 밀어부치곤 했다. 뒤에가서는 팀 노션 페이지에 합의한 내용을 자세히 정리하는 방식으로 팀원들의 합의를 이끌어 내었다.
그리고 팀원간에 컨벤션이 합의가 안되어서 아쉬웠다. 사람마다 코드를 작성하는 스타일이 너무 달랐다. 그나마 짝코딩을 활용해서 코드를 짤때는 괜찮았다. 그러나 각자 부분부분을 맡아서 짤때는 함수이름, 변수이름 등이 통일된 느낌이 들지 않았고, 직관성있고 가독성있게 짜는 것과 거리가 먼 경우도 많았기에 코드리뷰에서 이해하기 쉽지 않은 경우가 많았다. 이 부분은 미리 컨벤션을 통일하고 진행을 했었다면 더욱 좋지 않았을까한다.
스터디의 좋았던 점