우리 팀은 페어 프로그램(Pair Programming) 으로 진행했는데, 말그대로 한명은 실제로 코드를 작성하고, 나머지는 옆에서 입코딩을 하면서 같이 작업하는 방식이다. 코드 작성은 한명씩 돌아가면서 진행했다.
나는 페어 프로그램에 매우 긍정적으로 생각하는데, 물론 지금 이 주차가 끝나는 시점에도 그 생각은 유지되고 있다. 내가 코딩하는 것보다 구현 속도도 빠르고, 해당 코드나 지식에서 내가 접근하지 못했던 생각과 방향에 대해서도 디테일하게 공유할 수 있었다. 또하나의 장점은 팀원들에게 설명할 자료를 보여주기위해서 자료정리를 더 잘할 수 있었다. 팀원에게 제대로 설명하지 못하면 제대로 안다고 할 수 없으니 내가 알고있다는 착각도 방지할 수 있었다. 물론 이것은 우리 팀원들이 훌륭해서기도 하다. (github에 conflict날일도 적으니 시간상으로도 효율적이었다.)
초반에는 아침부터 저녁까지 우리가 정한 chapter가 끝날때까지 같이 붙어있었는데, 이러니 에너지 소모가 많았다. 계속 얘기하고 고민하니 그럴 수 밖에. 그래서 며칠이 지난 후에는 오후1시부터 6시까지 시간제한을 두고, 그 안에 구현을 해보기로 했다. 그 시간에 구현을 끝내기 위해서 그전에 각자 공부를 해오고, 구현이 끝나고는 디버깅 시간을 가져서 디버깅이 완료되면 github에 공유했다. 이러니 시간안에 구현을 완료하려고 타이머폭탄이 터지는 것처럼 조급하게 코딩하니 그또한 나름 재미있었다.
참고한 자료들은 한양대의 pintos ppt, kaist의 pintos ppt자료였다. 두 자료들은 32bit os내용으로 우리가 구현하는 64bit pintos와는 조금 차이가 있지만, 구현해야하는 함수들의 종류와 flow에는 많은 도움이 되었다.
주차의 시간표는 다음과 같이 진행했다.
기본으로 주어진 Pintos는 프로그램과 인자를 구분하지 못하는구조로 되어있다.
$pintos -T 20 --fs-disk=10 -p tests/userprog/args-multiple:args-multiple -- -q -f run 'args-multiple arg1 hey2 hw3 til4'
위와 같은 명령어를 pintos에 입력했을 때, task로 입력되는 내용은 'args-multiple arg1 hey2 hw3 til4' 부분이다. 기본 pintOS는 이를 의미없는 하나의 덩어리로 인식하는데 우리는 이번 과제를 통해 덩어리를 parsing하고, 그 조각에 맞는 파일이 실행되도록 상호작용하도록 만드는 것이 이번주 과제의 목표였다. 즉, 이번 과제에는 프로그램이 시스템 콜을 통해서 OS와 상호작용하여 command line에서 명령어가 실행될 수 있도록 만드는 것이다.
week09 목표 : 프로그램 이름과 인자를 구분하여 스택에 저장, 인자를 프로그램에 전달하고, 작성한 시스템 콜을 실행시켜 command line의 명령어가 실행되도록 만드는 것.
정말 정글과정을 하면서 더 느끼는 거지만, introduction과 Q&A가 우리가 필요한 정보가 다 있다. 근거없는 구글검색보다 해당 글을 보는게 더 유의미할 때가 많다.
구현을 바로 완벽하게 하면 좋겠지만, 유투브에서 몇십년차 프로그래머를 봐도 그렇게 하지 못하더라. 하지만 그 분들은 디버깅 속도가 완전 빠르더라. 부럽다. 머리속에서 코드가 어떻게 굴러가는지 어떻게 연결되어있는지 아시니까 그런것 같다. 하지만 아직 주니어 단계인 나는 참 느리고 미숙하다. 정글에 오기전인 나보다 지금 더 성숙해진 내 모습처럼, 훗날에는 더 빠른 디버깅을 할 수 있는 사람이 되길 바래본다.
이번에도 디버깅을 하면서, 아무리 눈씻고 찾아봐도 잘못된 곳이 없는데 all fail의 굴레에서 벗어나질 못했다. 9시간을 미련과 집착을 떨었었는데, if문에 (a==b)가 아닌, (a=b)라고 써서 그런거였다. 와. 그 오류를 발견했을 때의 허탈감이란..! '='하나를 더붙이고 나니 바로 93개가 통과가 됐다. 내 머리속 논리 오류도 중요하지만 이 손가락이 내는 오류도 조심해야겠다. 눈을 크게 뜨고 디버깅하자!
이론 공부한 건 노션에 정리해 놓고 있다. 아무래도 kaist강의나 다른 youtube강의를 보고 이론공부를 하는데 ppt나 자료들을 블로그를 해도될지 고민되기 때문이다. 그렇다고 참고그림을 내가 다시 재생산하자니 시간낭비가 심하다. 그리고 팀원에게 노션을 공유하려고 했는데 넣은 자료가 너무 많아 로딩시간이 5분이 넘는것같다.;;
공부한 자료를 더 예쁘게 정리해서 블로그에 정리하고 싶은 스택1
운동을 너무 안했더니 몸이 무겁다. 하지만 공부할게 산더미라고 생각하니 쉽게 운동갈 엄두가 안난다...운동 스택2
머신러닝 공부를 놓지않고 하고 싶은데 정글 커리큘럼을 쫓아가는데 바빠서 정리를 못하고 있다. 스택3
다른 친구들을 알고리즘 주차가 끝나고 열심히 스터디하던데. 스택4
나만무를 대비해서 인강을 끊어놨는데.. 스택5
스택이 점점 쌓여만 간다.😭 얼른 정글이 끝나고 이 스택큐를 비우고 싶다.
혹시 누군가에게 도움이 될까 해서 내 userprogram 주차 노션을 아래에 공유한다.
https://spiral-bread-95b.notion.site/week09-User-program-c2b4b0e94d4d4f608371dc4e39c63d81