이번주 프로젝트는 PintOS의 코드를 직접 수정해가며 진행하는 프로젝트다. PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제인데, 이를 기반으로 KAIST 권영진 교수님 주도 하에 만들어진 KAIST PintOS로 진행된다.
PintOS코드를 보고 "운영체제를 처음부터 구현하는 줄 알았는데, 지금까지 한 rb트리, malloc_lab, web_proxy와 다른게 뭐지?"라고 생각을 했는데 alarm-timer와 priority-scheduling을 하면서 운영체제를 공부할 때 기능만 알고있던 것들을 실제로 구현해보니 PintOS 프로젝트를 하는 이유에 대해 이해가 갔다.
예를들어 sleep()함수 하나를 쓰기만해도 sleep_list에 슬립된 스레드들이 정렬되어 들어가고 시간이 지난 스레드들을 sleep_list에서 빼와서 ready_list에 넣는 과정,
스레드를 생성하면 우선순위에 따라 실행되는 스레드가 달라지고 스레드 실행도중에 임계구역을 만나면 세마포어를 통해 기다리는 과정을 코드로 구현하면서 나중에 운영체제를 다시 공부하더라도 지금 구현한 내용을 토대로 쉽게 다시 떠올릴 수 있을거라고 생각한다.
이전과 다르게 이번주는 2인팀으로 배정받았다. 2인으로 팀이 구성된다면 코어타임 할 때나 프로젝트 구현할 때 얻을 수 있는 정보의 양이 3인팀에 비해 적다는 단점이 있지만 소통을 3인팀보다 잘 할 수 있다는 장점이 있다.
그래서 우리는 이 장점을 살려 각자 구현이 아닌 페어프로그래밍 방식으로 프로젝트를 진행하기로 했다.
페어 프로그래밍
페어 프로그래밍은 두 명의 개발자가 하나의 작업을 함께 수행하는 프로그래밍 방법이다. 주로 두 명의 프로그래머가 키보드를 나눠 가지고 같은 코드를 작성하거나 검토하고, 문제를 해결하기 위해 함께 논의하면서 작업을 진행한다.
오류 감소: 두 명의 프로그래머가 함께 작업하면 코드의 오류를 더 쉽게 발견할 수 있다. 한 명이 실수를 하더라도 다른 사람이 검토하고 수정할 수 있으므로 실수를 사전에 방지할 수 있다.
지식 공유: 두 명의 프로그래머가 서로 다른 배경과 경험을 가지고 있을 가능성이 높다. 이러한 다양성은 문제 해결에 도움이 될 수 있으며, 서로 지식을 공유하고 새로운 기술을 배울 수 있다.
품질 향상: 두 명이 함께 작업하면 코드의 품질이 향상될 수 있다. 서로 코드를 검토하고 의견을 공유하면서 더 나은 설계와 구현 방법을 찾을 수 있다.
팀워크 강화: 페어 프로그래밍은 팀원 간의 협업을 강화시키는 데 도움이 됩니다. 서로 대화하고 의견을 나누면서 함께 문제를 해결하는 경험은 팀원들 간의 신뢰와 이해를 증진시킨다.
페어프로그래밍을 할 때 서로 개념과 로직을 확실히 알았다면 문제가 될 것이 없다.
하지만 서로 다른 로직을 생각하고 오개념을 알고있다면 문제가 될 것이다.
실제로 프로젝트를 할 때 개념이 쉬운 alarm-timer를 구현 할 때는 문제가 크게 없었지만 비교적 개념이 어려운 priority를 구현할 때는 서로 생각한 로직이 다르고 개념도 확실히 알지 못해서 프로그래밍을 할 때 많은 어려움을 겪었다.
따라서 페어프로그래밍을 할 때는 기본 개념을 확실히 공부하고 프로그래밍을 하기전에 로직에 대해 방향을 맞추고 시작하면 문제될 것이 없다고 생각한다.