Intro

img

이 글은 42서울 라피신 후기를 담은 글입니다.


라피신 과정에 대한 기록 남기기

8월 21일부터 시작된 저의 라피신 후기가 9월 15일 경으로 끝나게 되었습니다. 사실 매일 1커밋을 목표로 했었는데, 라피신 과정이 생각보다 빡셌기 때문에 그 목표는 지키지 못했던 것 같네요.
아무튼, 한 달 동안의 라피신을 체험하면서 제가 직접 겪고 느낀 감정과 생각들을 정리하기 위해 이 글을 작성하게 되었습니다. 비록 한 달의 기간이긴 하지만, 이 길고도 짧았던 시간 속에서 정말 많은 것을 배우고 깨달았기 때문입니다.


1주차

img

라피신이 시작되면 정말 3無교육(교재, 교수, 커리큘럼이 없는 교육)이라는 말 답게 아무것도 알려주지 않습니다. 그저 적당히 자리를 잡고 앉아 맥으로 주어진 과제를 진행해야 합니다.
과제는 42서울의 인트라넷 홈페이지에 들어가면 확인해 볼 수 있습니다.
중요한 공지 등은 협업 메세지 툴(?)인 슬랙(slack)을 통해서 알려줍니다. 그리고 과제에 대한 팁 같은 것도 슬랙을 통해 공유가 되니 슬랙을 잘 확인해보는 것이 좋습니다.
첫 번째 과제는 shell과제인데, 유닉스 기반 os에서 많이 다루는 명령어를 이용해서 파일을 편집하거나 작성해서 제출을 하는 문제가 많았습니다. 그렇기 때문에 저는 라피신을 하기 전에 간단한 shell 명령어라도 알아보고 오는 것이 좋다고 생각합니다. 비록 유튜브에서 알려주는 것이랑 거리가 있긴 한데, 명령어를 전혀 모르고 오는 것이랑 알고 오는 것이랑은 차이가 크니까요.
그리고 shell 과제는 shell00과 shell01으로 이루어져 있는데, 이 과제들은 가능한 1주차 안에 끝내는 것이 좋습니다. 왜냐하면 매주 금요일마다 치루는 exam에서는 c언어 문제만 나오기 때문입니다.
그래서 만약에 1주차 안에 shell 과제를 다 끝내지 못했다면 계속 과제를 붙잡기보다는 c00과제 등을 먼저 풀어보는 게 좋다고 생각합니다. 그리고 1주차에 이뤄지는 rush00은 꼭 해보시길 바랍니다. 문제 자체가 난이도가 매우 어렵진 않고 풀어볼만 했던 것 같습니다. (근데 저는 조장님이 다 짜오셔서 그냥 검토만 해봤던 것 같네요….)
금용일에 치뤘던 exam00은 물론 망했습니다. ㅋㅋㅋㅋ 10분인가 15분 안에 시험에 진입 못하면 강제 퇴실 당하는데, 이 고비는 넘겼지만 시험 문제 찾는다고 어떻게 하다가 고비가 잠시 생겼습니다. 이것 때문에 1시간을 날린 듯 하네요 ㅋㅋㅋㅋ
물론 문제 푸는 것 자체도 낯설어서 꽤 애먹었던 것 같습니다. 분명 과제 때는 함수만 만들어서 제출하면 되는데, 시험 때는 main함수도 같이 써서 제출해야 하는 게 많습니다. (그리고 이 main 함수가 굉장히 중요합니다.) 결국 1주차 exam은 10점…. 주말에는 rush 평가를 받았습니다. 5층에 위치한 9클러스터에 팀별로 들어가서 직접 카뎃 분에게 채점을 받는 형식이었는데, 이게 뭔가 평가 방식이 카뎃 분마다 엄격한 정도가 달라서…
사실 운빨이라고 말씀 드리고 싶네요. 다행히 저희 팀은 기본 과제는 잘 실행되었고, 추가 과제에서 약간의 실수가 있어서 약간은 아쉬운 점수를 받게 되었습니다.


2주차

2주차도 사실 1주차랑 비슷했던 것 같습니다. 과제가 주로 c언어에 관련된 걸로 바뀌었다는 거 정도만 차이가 있었습니다. 근데 지금 드는 생각이긴 한데, 이 때부터 사람들간의 진도 격차가 벌어지기 시작했던 것 같습니다. 사실 shell 과제는 모두에게 낯선데, c언어는 전공자에게는 익숙하고 많이 다뤄본 언어기 떄문에 그런 것 같기도 하고, 코드를 짜는 것이라던가 알고리즘적인 능력은 평소에 공부를 많이 했던 사람이 더 유리하기 때문입니다.
저는 c언어는 라피신 시작 전 문자열까지는 공부를 해 놨는데, 알고리즘을 잘 몰라서 헤맸던 것 같습니다. (그 놈의 백트래킹….)
저는 2주차에 c00은 끝냈던 것 같은데 c01, c02과제 해결하는 게 좀 늦어졌던 것 같네요. 아마 모르는 문제 푼다고 계속 붙잡고 있다가 시간 버린 게 젤 큰 듯 합니다.
모르는 문제 있을 땐 주변 사람들한테 물어보고, 슬랙에도 물어보면서 해결하시고, 그래도 모르겠다면 일단 건너뛰는 걸 추천합니다. 과제 점수는 일단 50점만 넘기면 success로 뜨고 다른 과제를 풀다가 그 문제를 풀 수 있는 방법이 생각날 수도 있기 때문입니다. (저는 주변에도 물어보고 슬랙에도 물어보면서 해결할려고 했지만, 결국 이해 못했습니다. ㅋㅋㅋㅋ) 참고로 2주차 exam도 망했던 것 같습니다. (지금 보니 망친게 많네요…. ) 1주차에 비해선 많이 풀긴 했지만, 메인 함수에 인자 넣는 방법을 몰라서 코드를 작성할 줄은 알아도 채점 받을 때마다 틀렸던 것 같습니다. 2주차 exam01은 그렇게 30점으로 끝냈던 것 같습니다. 참고로 러쉬는 2주차에도 신청하긴 했는데, 문제가 너무 어렵고 그 때 겨우 레벨 3이었던 제가 팀장이 되어서 어떻게 문제를 풀지 생각이 나지 않았습니다. (rush 팀은 랜덤으로 정해지고 그 중에서 가장 레벨이 높은 사람이 팀장이 되는 방식입니다.)
그렇게 2주차 rush는 실패… 결국 give up을 했습니다. (생각해보니 이것도 백트래킹 방식이었네요)


3주차

3주차부터는 슬슬 안절부절해졌던 것 같습니다. 저는 이 때부터 밀린 진도를 나갈려고 노력했는데, 기계 채점은 제가 생각치도 못한 예외 케이스로 저를 괴롭힙니다.
동료평가에서는 이상이 없었는데 기계채점에서는 틀리는 상황이 발생하고… 평가 포인트를 얻기 위해 하루에 3번 정도 평가를 다녔던 것 같네요. 참고로 하루에 5번 이상도 하신 분이 있었던 것 같습니다.
근데 저는 3주차에 계속 c02, c03을 붙잡고 있었던 것 같습니다. 신기한게 평가 전에는 보이지 않던 오타나 실수 등이 동료 평가 중에는 아주 잘보입니다. 그래서 저는 자꾸 과제에서 success를 받지 못해서 뒤의 과제에 있는 문제들을 미리 풀어봤습니다. 금요일에 치룬 exam02에선 2주차 때 치룬 시험의 아쉬움을 만회하기 위해 많은 준비를 했고, 이 때 60점을 받아 success를 했습니다.
그리고 3주차 rush는 신청하지 않았습니다. 2주차 rush도 풀기 버거웠던 저였기에, rush보다는 제 개인과제에 우선 집중하자는 생각을 했습니다.


4주차

마지막 4주차가 다가오면서 저는 밀린 과제를 후다닥 해치우기 시작합니다. c03부터 c06까지를 해치웠던 것 같습니다. c07은 풀어보다가 3번까지만 풀었네요…

img

위 사진처럼 마지막 4주차 동안 레벨을 미친 듯이 올린 것 같습니다. 그래도 남들에 비해서 느린 진도였긴 했는데, 나름대로 최선을 다했던 것 같네요.
참고로 마지막 주에는 bsq라는 과제가 있지만… 이것도 신청을 하지 않았습니다. 왜냐면 개인 과제 진도 나가는데 정신이 팔렸기 때문에…
그리고 시간이 흘러 이번주 금요일에 드디어 final exam을 치뤘습니다. 저는 8클러스터에서 시험을 치루게 되었습니다. 8클이 평소에도 추운 곳인데, 이 날 유독 에어컨을 세게 튼 것 같았습니다. 덕분에 지금 감기 기운으로 좀 고생 중 …
마지막 시험인 만큼 후회 없이 치루자는 생각을 했고, 아는 문제는 다 풀었습니다. 신기한게 예전에 백준을 잠시 풀어보다가 못 푼 문제가 나왔는데, 시험 때 기적적으로 이 문제를 풀어내지는 못했고 한 두시간 정도 고민하다가 결국 틀려서 finish하고 나왔네요… 그래도 16문제 중에서 9문제는 풀어서 후회는 없다고 말씀드리고 싶습니다.

img

시험을 치루고 여친이랑 저녁을 먹은 뒤 집에 와서 잠시 인트라넷에 들어가봤는데, 시험 때문에 레벨이 올라가 있었습니다. 원래 level 8까진 가고 싶었는데, 조금 아쉽게 레벨7에 그치게 되었습니다.


지금 생각나는 라피신 꿀팁

라피신이 끝나고 지난 라피신 기간을 회상해보면서 생각난 나름의 꿀팁을 적어보고자 합니다.

  1. shell이나 c언어, git은 조금이라도 공부하고 오자.
    우선 shell이나 c언어는 많이 알고 올수록 좋은 것 같습니다. 알고 문제에 접근하는 거랑 모르고 문제에 접근하는 것은 정말 천지차이입니다. 애초에 라피신 자체가 커리큘럼, 교수, 교재가 없는 학습 스타일이기 때문에, 전혀 모른 상태로 온다면 피똥싸기에 좋습니다. 조금이라도 공부하고 오면 적응이 빨라지더라고요. 특히 git은 간단한 명령어(add, commit, push, log 등)만 알고와도 충분합니다. 과제나 시험 제출이 42서울 인트라넷에 존재하는 git repository에 push를 하는 방식으로 제출이 되기 때문에 간단한 git 명령어를 알고 오면 좋습니다.
    그리고 이 외에도 알고리즘 등을 공부하고 오는 것도 추천합니다. 저는 알고 있는 알고리즘이 그리디, 버블 정렬이 다였기 때문에 좀 고생했습니다.(그리고 끝내 정복하지 못한 백트래킹 알고리즘…)
    또 라피신에서는 printf등의 함수가 아닌 write라는 생소한 출력 함수를 사용하기 때문에 저수준의 c언어도 공부하면 좋을 것 같습니다. 이건 그냥 인터넷 한 번 검색해 보는 것도 추천합니다.

  2. 주변 사람들이랑 친해지자.
    주변 사람들이랑 친해지면 더욱 더 좋습니다. 거의 대부분 1주차에 자기가 앉은 주변 사람들이랑 친해지는 것 같더라고요. 같이 밥 먹거나 정보 공유, 모르는 문제 등을 물어보기에 정말 좋습니다.

  3. 평가를 많이 다니자.
    평가를 많이 다니면, 우선 평가 포인트라는 것도 많이 얻을 수 있고, 아직 풀지 못한 문제나 과제에 대한 힌트를 얻을 수 있습니다.

이 정도가 제가 지금 생각나는 꿀팁인 거 같네요. 그리고 부가적으로 라피신에서는 맥을 다루기 때문에 맥을 한 번이라도 안 써본 분이라면 친구 노트북이라도 써보면서 적응해보는 게 좋을 것 같네요. 또 라피신에서 매주 열리는 쿠키데이라는 이벤트에도 참여를 해보는 것을 권장할 수 있습니다. 쿠키 데이 때 카뎃 분들이랑 많은 얘기를 하게 되는데 이 때 시험에 대한 팁 등을 얻을 수 있다고 하더라고요. 저는 쿠키데이 참여한게 4주차가 전부여서 이런 팁에 대해 잘 몰랐던 것 같습니다.

그리고 신기한게 라피신에서는 평가가 동료 평가 + 기계 평가라는 요소로 이루어져 있는데, 기계 평가에서 점수가 좋아도, 동료 평가에서 점수가 낮다면 그만큼의 점수가 나오게 됩니다. 예를 들어 기계 평가에서 점수가 80점이고, 동료 평가에서 점수가 60점이라면 최종 점수는 70점으로 나온다는 것입니다. 사실 동료 평가는 defense라고도 불리고, 이 defense라는 게 얼마나 상대방을 논리적으로 설득시킨 것이냐를 기준으로 삼고 있기 때문에 그런 것 같습니다. 이런 요소 때문에 라피신에서의 동료 학습이 사실 동료 속이기(?) 학습이라는 얘기도 있고, 심지어 중급 닌자 시험이라는 얘기도 들은 것 같습니다.


주변 식당

참고로 라피신을 진행했던 장소인 대륭 서초타워 근처는 회사들이 많아서(아무래도 강남이다 보니) 식당도 정말 많습니다. 날마다 새로운 식당에 가서 밥을 먹었던 것 같네요. 그만큼 식비도 많이 나가니 라피신 시작 전에 식비라도 보충할 수 있는 자금이 있는 게 좋습니다. 저는 돈이 부족해서 용돈도 받았던 것 같습니다…
근처 식당으로 추천할 만한 집은 강남의 재수생(?) 맛집인 강남 불백, 그리고 국밥계의 에르메스라고 할 수 있는 농민백암순대국 집을 추천합니다. 강남 불백은 나름 괜찮은 가격에 불백 정식을 먹을 수 있고, 밥 양도 많고 1인 1 계란 후라이, 1된장 찌개를 제공해서 만족감 있게 밥을 먹을 수 있는 곳입니다. 그리고 농민백암순대국은 평소에 줄이 너무 길어서 비오는 날 오후 1시 넘은 시각에 20분 정도 웨이팅 해서 먹게 된 곳인데, 국물이 정말 맛있습니다. 단 아까도 언급했듯이 줄이 매우 길기 떄문에 자주 방문하기를 권하는 것은 어렵고, 한 번쯤 방문해 볼 만한 식당이라고 생각합니다. 여기 말고도 대륭타워 근처 파파이스도 종종 갔던 것 같고, 정원식당 같은 백반집도 추천합니다.


라피신이 끝난 지금 드는 생각

img

컴퓨터는 머저리다…는 농담이고
지금 생각해보니 정말 많은 일들이 있었던 라피신이었습니다.
라피신 과정에서 정말 많은 사람들을 만나고 친해지면서 많은 깨달음을 얻기도 하고, 많은 생각을 했던 것 같습니다.
개인적으로 라피신에 참여해보면서 제 자신에 대해 부족한 점을 알게 되고, 이 점을 보완해야겠다는 생각을 많이 하게 되었습니다. 알고리즘, 자료구조 등에 더 공부를 해야겠다는 생각을 하게 되었고, 라피신 전에 공부하던 c를 마저 공부해 볼 생각입니다.
그리고 라피신 과정이 끝나는 게 제 공부의 끝이 아니라 오히려 시작이라는 생각을 하게 되었습니다. 한 달간의 라피신 과정에 매일 참여한 것만으로도 충분히 좋은 경험이었다고 생각하고, 저 나름의 최선을 다했다는 생각이 들었습니다. final exam을 치룬 후 아쉽다기 보다는 후련한 마음도 컸구요.
라피신 재도전이 가능하다고는 하지만, 재도전을 할 생각이 아직은 들지는 않습니다. 라피신에서 얻은 저 나름대로의 교훈을 통해 좀 더 부족한 부분을 보완할 생각이 우선이기 때문이기도 하고… 라피신 재도전은 1년 후에 가능하다고 들어서 다른 프로그램을 신청해볼까 생각 중입니다.
지금 드는 생각은 라피신을 통해 저수준에서 c언어로 직접 프로그래밍 해보면서 컴퓨터에 대한 이해력이 증가하게 된 것 같다는 것입니다. 지금은 표준 라이브러리에서 제공하는 함수를 제가 직접 구현해보면서 수십년 전의 컴퓨터 엔지니어들이 어떤 생각으로 이런 함수를 만들었고, 그게 어떤 문제가 있는지 알게 된 것 같습니다. 그리고 무엇보다 깐깐한 기계채점을 통해 예외처리 실력이 조금은(?) 증가한 것 같다는 생각도 들었습니다.

이상으로 한 달간의 라피신 후기 작성을 마치겠습니다.