목차
출처: Pinterest
0. 들어가며
페어 프로그래밍을 통해 C언어로 자료구조와 알고리즘을 직접 구현하는 “자료구조 스터디"를 마친 회고록입니다.
2022년 3월, 나는 운이 좋게도 42서울 6기 카뎃이 되었다.
치열하게 피신 과정을 마치고 본과정에 왔지만, 막상 공부를 시작하려고 하니 다시 피신 첫 날로 돌아간 것 같았다. 모든 것이 새롭고 낯선 환경 속에서 누구와 함께 공부해야 할지, 어디서부터 무엇을 해야 할 지 막막했기 때문이다.
그러다 우연히 42서울 슬랙 채널에서 박은종 멘토님께서 운영하시는 “자료구조 스터디" 모집 게시물을 보았다.
마침 함께 공부할 동료가 필요했기에 멘토님의 공지는 막막한 마음에 내리는 단비와 같았다.
자료구조를 C언어로 구현하는 기회는 흔하지 않을 것 같았고, 페어 프로그래밍을 경험해보기 좋은 기회라 생각했다.
하지만, “과연 내가 할 수 있을까?” 라는 의문이 먼저 들었다. 해당 공지가 올라왔을 때는 이제 막 첫 과제인 Libft 를 끝낸 상태였는데, 자료구조를 공부할 정도로 충분한 실력이 쌓였는지 스스로 자신이 없었기 때문이다.
하지만, 생각을 정리한 끝에 ‘무엇이든 시작하기에 완벽한 환경이나 상황은 없다’는 결론을 내렸다. 그래서 “선 지원, 후 고민” 이라는 마음가짐으로 자료구조 스터디에 지원했다.
그리고 약 2개월이 지난 지금, 이 선택은 굉장히 만족스러웠다고 말할 수 있다.
1. 왜 신청했는가? 무엇을 얻고자 했나?
자료구조 스터디를 신청한 이유는 크게 3가지로 정리할 수 있다.
코딩 테스트 대비
코딩 테스트에서 요구하는 자료구조와 알고리즘을 공부하고 싶었다.
대부분의 코딩 테스트에서는 자료구조와 알고리즘에 대한 지식이 있어야 원활한 문제 풀이가 가능하다. 그동안 꾸준히 코딩 테스트 문제를 풀어보긴 했지만, 단순 구현이 아닌 특정 자료구조나 알고리즘을 사용해야 풀 수 있는 문제는 거의 풀지 못했다.
피신에서도 DFS 나 재귀를 활용해야 하는 문제는 풀지 못했던 것이 아쉬움으로 남아있었다. 이 외에도 평소에 약했던 부분인 그래프, 스택, 큐, 정렬, 그래프에 대해 깊이 공부하고 싶었다.
동료와 협업하는 방법 배우기
내가 42서울을 선택한 이유 중 하나는 “동료 학습” 을 경험하기 위해서였다.
혼자서 공부하는 것에는 익숙했지만, 누군가와 함께 공부하는 것에는 여전히 어색함을 느끼고 있었다. 결국 현업에서는 누군가와 함께 코드를 작성하고, 리뷰를 주고 받는 것에 익숙해져야 하기 때문에 42서울에서 충분한 연습을 하고자 했다.
동료 학습의 대표적인 방법론인 페어 프로그래밍은 2명이 함께 프로그래밍을 하여 실제 작동 가능한 소프트웨어를 만드는 것을 목표로 한다. 이를 자료구조 스터디에 적용함으로써 혼자서 공부하던 관성에서 벗어나 동료와 함께 지식을 공유하고 배우는 것에 익숙해지고자 했다.
새로운 동료 알아가기
기존에 알던 동료가 아닌 아직 만나지 못한 동료를 만나보고 싶었다.
피신에서 만났던 동료들이 아쉽게도 함께 본과정에 오지 못하거나, 사정이 있어 클러스터에 자주 오지 못하고 있었다. 그러다 보니 클러스터에 도착하면 자의 반, 타의 반으로 대부분의 시간을 혼자서 공부를 하고 있었다.
그래서 공부도 중요하지만, 인적 네트워크를 잘 구축하는 것도 중요하다고 생각했다. 이민석 학장님께서도 강조하셨지만, “이전에 같이 공부를 했던 동료가 아닌 처음 보는 동료와 함께 공부하는 방법을 익혀야한다." 는 말씀을 실천하기 위해 자료구조 스터디에 참여했다. 스터디를 통해 평소에 생각하지 못했던 새로운 관점을 배우고, 문제를 바라보는 시야를 넓히고자 했다.
2. 무엇을 어떻게 했는가?
스터디 진행 방식
자료구조 스터디는 다음과 같은 방식으로 진행되었다.
•
1주일에 1~2번씩 모든 스터디원이 모여서 멘토님으로부터 학습 주제에 대한 설명을 듣는다.
•
2명씩 짝을 지어서 학습 주제에 대해 함께 공부하고 페어 프로그래밍 기법을 적용해서 코드를 작성한다.
•
학습한 내용을 다른 스터디원들과 함께 공유하고 발표하는 시간을 갖는다.
•
주간 단위로 짝을 바꾸고, 회고를 작성한다.
사실 멘토님의 설명보다는 동료와 함께 학습하는 비중이 훨씬 크다. 비율로 표현하면 1 : 9 (멘토님 설명 : 동료학습) 정도 되는 것 같다.
페어 프로그래밍
페어 프로그래밍은 상황에 따라 오프라인과 온라인을 병행하며 진행했다.
오프라인으로 진행하는 경우에는 개포 클러스터의 각 층마다 설치된 TV 와 연결하여 화면을 공유하여 진행했다. 그리고 TV 화면 위에 메모가 가능하기 때문에 서로의 생각을 시각화해서 전달하려고 노력했다. (42서울은 학습을 위한 시설이 정말 잘 되어있다는 것을 느꼈다.)
온라인으로 진행하는 경우에는 Visual Studio Code 의 확장 기능인 Live Share 를 활용하여 동시에 코드 편집을 하고, 터미널 실행 결과를 함께 공유했다. 다만, 온라인으로 진행하는 경우에는 상대방에게 나의 목소리가 잘 전달될 수 있도록 조용한 환경에서 마이크를 사용했다. 카페와 같이 주변 소음이 많은 곳보다는 주로 집에서 진행했다.
이번에 처음 페어 프로그래밍을 해보았는데, 혼자가 아닌 둘이서 함께 하기 때문에 다음과 같은 사항들을 가장 중요하게 생각했다.
•
시간 약속 잘 지키기
•
작은 성과라도 함께 기뻐하기
•
작업 중 적절하게 휴식하기
•
코드는 반드시 짝이 함께 있는 자리에서 작성하기
•
상대방의 감정이 상하지 않도록 조리있게 나의 생각을 전달하기
•
코드 컨벤션 정하기
그리고 페어 프로그래밍의 효과를 온전히 적용하기 위해 42서울 공식 동아리인 <팔만코딩경>에 페어 프로그래밍에 대한 전반적인 지식을 정리하여 게시했다. (참고자료 : 페어 프로그래밍이란? (feat. VSCode Live Share))
페어 프로그래밍 게시물 (팔만코딩경)
3. 무엇을 배웠나?
자료구조 스터디를 하며 많은 것을 배웠지만, 그 중에서 3가지만 정리하자면 다음과 같다.
페어 프로그래밍을 통해 짧은 시간 안에 효과적으로 배울 수 있다.
페어 프로그래밍은 빠른 피드백을 기반으로 짧은 시간 안에 서로 배우고, 가르쳐 줄 수 있는 학습법이라는 것을 배웠다.
스터디를 하기 전에는 누군가와 함께 코드를 작성한다는 것이 어색했고, 이게 과연 효과가 있을까 싶었다. 하지만, 혼자서 했다면 오랜 시간이 걸렸을 과제들이 짝과 함께 하니 생각보다 빠르게 진행되었다. 그리고 미처 생각하지 못했던 부분도 질문을 통해 빠르게 확인한 덕분에 디버깅도 빠르게 이루어졌다.
무엇이든 직접 경험해보기 전까지는 알 수 없겠지만, 페어 프로그래밍은 나에게 생각보다 잘 맞는 학습법이라는 것을 느꼈다. 그래서 이제는 주변 동료들에게 페어 프로그래밍을 권하고 있다. 앞으로 남은 42 과제들도 가능하다면 페어 프로그래밍을 하며 진행하고자 한다.
코드 컨벤션은 시간과 에너지를 아껴준다.
코드 컨벤션 없이 작성한 코드는 다시 읽었을 때 가독성이 떨어지고, 코드를 수정하고 정리하는 데 시간이 오래 걸렸다.
일상 생활에서도 규칙과 약속은 지양해야 할 것들을 피하기 위해 존재한다. 마찬가지로 코드에서도 피해야 하는 습관이나 행동들이 있기 때문에 코드 컨벤션이 필요하다는 것을 배웠다.
코드에 정답은 없겠지만, 누구나 읽기 쉽고 수정하기 쉬운 코드를 작성하는 것이 생산성 향상에 도움이 된다는 것을 깨달았다.
논리가 단순하고 명확하면 코드는 쉽게 나온다.
복잡해보이는 문제도 작은 단위로 나누면 요구하는 바가 명확하고 단순해지는 것을 배웠다.
이전에는 전체적인 코드의 흐름을 생각하지 않고 코드를 먼저 작성하곤 했다. 그렇게 코드의 양이 많아지면 무엇을 위해 코드를 작성하고 있는지 방향을 잃곤 했다.
이는 문제에 대한 충분한 분석이 부족했고, 프로그램 설계에 대한 고민이 없었기 때문이라는 것을 알게 되었다.
그래서 이번 스터디에서는 코드를 작성하기 전에 문제의 요구사항에 대해 충분히 파악하고, 어떤 식으로 작동할 것인지 설계를 구체적으로 하기 위해 노력했다. 그 결과, 이전보다 코드 작성에 시간이 훨씬 적게 걸린다는 것을 확인할 수 있었다.
4. KPT 회고(Keep, Problem, Try)
자료구조 스터디를 마치며 회고를 KPT 템플릿에 맞추어 정리하고자 한다. 참고로 각 단어가 의미하는 바는 다음과 같다.
•
Keep : 앞으로 유지할 좋은 습관이나 행동
•
Problem : 아쉬웠거나 개선이 필요한 점
•
Try : 앞으로 새롭게 시도할 점
Keep
•
협업을 하는 경우에는 코드 컨벤션을 반드시 작성한다.
•
혼자서 하기 어려워 보인다면 적극적으로 동료를 찾아서 함께 공부한다.
•
코드 작성은 문제를 충분히 파악하고 나서 한다.
Problem
•
자료구조 공부를 할 때 서적을 참고하지 않았다. 인터넷에 있는 자료도 좋지만, 서적에는 인터넷에 없는 심도 깊은 내용이 담겨 있다는 것을 나중에 알게 되었다.
•
코드에 적절한 주석을 남기지 않아서 다시 코드를 읽을 때 이해하는데 어려움이 있었다.
•
디버깅 툴 사용법을 정확하게 알지 못해서 디버깅에 시간이 많이 들었다.
Try
•
지식을 얻기 위해 서적을 적극적으로 활용한다.
•
코드에 간단하게라도 주석을 남긴다.
•
디버깅 툴 사용법을 확실하게 공부하고 적용한다.
5. 마치며
마지막 스터디 모임에서 함께 디버깅을 하는 모습
자료구조 스터디가 끝나갈 무렵, 문득 피신에서 풀지 못했던 문제가 생각나서 다시 풀어보았다. 재귀를 활용하는 문제였는데, 이제는 재귀를 능숙하게 사용해서 풀어내는 모습을 보며 뿌듯함과 기쁨을 느꼈다. 그동안 쌓아온 노력과 시간들이 결코 헛되지 않았음을 확인할 수 있었다.
자료구조 스터디를 신청하며 스스로에게 들었던 의심은 이제 자신감과 확신으로 바뀌었다.
“일단 부딪혀보면 길은 보인다!”
물론, 지난 과정들이 결코 쉽지는 않았다. 뒤로 갈수록 공부해야 하는 것도 많아지고, 난이도가 점점 높아졌기 때문에 잠시 쉬고 싶은 순간도 많았다.
하지만, 그럴 때마다 다시 마음을 잡을 수 있던 건 든든한 동료들 덕분이었다. 머리가 아플 정도로 함께 고민하고, 원하는 결과를 얻어가는 과정을 반복하며 일종의 전우애가 생긴 것 같다.
이 자리를 빌어 길고도 짧았던 시간을 함께 해준 동료들에게 감사하다는 말을 전하고 싶다. 그리고 소중한 기회를 마련해주신 박은종 멘토님께도 감사의 마음을 담아 전하고 싶다.
마지막으로 자료구조 스터디를 고민하는 카뎃 분들에게 일단 신청해보라는 말을 전하고 싶다. “빨리 가려면 혼자 가고, 멀리 가려면 함께 가라”는 속담이 있다. 42 과제를 하는 것도 중요하지만, 장기적으로 본다면 자료구조 스터디는 42 과제를 수행하기 위한 기초 체력을 튼튼하게 다지는 과정이라 생각한다. 그동안 혼자 과제 하는 것에 익숙했다면, 이제는 든든한 동료들과 힘을 합쳐보는 것은 어떨까?
끝.