본문 바로가기
회고/SW 사관학교 정글 5기

Week05 | C 언어 시작 | 물고기는 존재하지 않는다.

by Lizzie Oh 2022. 10. 27.

정글 0주차 때 3일짜리 프로젝트를 하면서 '와 정글 진짜 빡세네' 생각했는데,

요즘 깨닫고 있다. 0주차가 제일 쉬웠다.

(이 글 보고있는 우리 동기들 ㅇㅈ ?)



매 주차 발제를 할 때마다 난이도가 역대급이라고 느낀다. 5주차 발제를 할 때는 어이가 없어서 약간 헛웃음이 나올 정도였다. 어느 정도였냐면 5주차 일주일 동안 1. C언어 문법을 전체적으로 다 공부, 2. gcc, linux 공부, 3. 연결리스트 및 레드블랙트리 구현 를 마쳐야 했다. 지난 한 주 어떻게 공부했는지를 짧게 요약해보면.. !

공부 스케쥴 - 목금토일

목요일 발제를 마치고 바로 C언어 공부를 시작했다. 구글링을 해보니 세계적으로 가장 유명한 C언어 책은 K.N.King의 C :Programming A Modern Approach 이나 국내에 번역본이 없었고 (그래도 위키독스에 주민하님이 번역하신 자료가 있어서 중간중간 참고하기 좋았다) 밀리의 서재에 나혼자 C언어 라는 책이 있었다.

나 혼자 C 언어 책으로 전체적으로 쭉 공부를 하고, 추가적으로 궁금한 게 있는 경우 C Programming : A Modern Approach를 찾아보았다. 영어가 쉽게 쓰여있어서 큰 어려움은 없었다. 목요일부터 토요일까지 3일동안 꼬박 나혼자 C언어 책 450 페이지를 읽고, 일요일에는 C Programming 책으로 연결리스트를 공부했다. 4일동안 C언어를 처음부터 끝까지 훑어보는게 가능한 거라는 걸 ^^; 알게되었다. 일요일 저녁부터는 CLRS로 레드블랙트리 이론 공부를 시작했다.

공부 스케쥴 - 월화수

월화에는 레드블랙트리 이론을 이어서 공부하고 화요일부터는 코드 구현을 병행했다. 레드블랙트리 개념을 공부하면서 트리의 균형을 맞춘다는 개념이 신기했고, 트리를 회전할 때까지만 해도 충분히 감당 가능한 난이도라고 생각했다. 하지만 레드블랙트리의 삽입이 이렇게 빡셀지 몰랐지? 머리를 쥐어뜯으며 삽입을 이해했더니 삭제가 이렇게까지 어려울 줄 몰랐지???????????????????


게다가 지난 4주간 로컬 환경에서 파이썬으로 코딩하다가, 갑자기 우분투 ec2 에서 C언어로 코딩하려니까 코딩 난이도가 말도 못하게 올라갔다. 컴파일 언어는 난생 처음 접해보는데다가 서버도, vscode도 환경 설정을 따로 해야 했다. MakeFile, launch.json 파일 tasks.json 파일.. 이번 주 내내 앞으로 내딛는 단 한 걸음도 쉽게 넘어간다고 느껴지지가 않았다.

과제 수행 또한 쉽지 않았다. 4일동안 머리에 쑤셔넣은 자료형, 동적 메모리 할당, 구조체, 포인터 따위들은 명확한 형태 없이 얼기설기 엮여있었다. 그런 상태에서 vscode를 키고 나니 코드 한 줄 쓰는 것조차 쉽지 않아서 결국 레드블랙트리를 구현한 다른 코드를 보면서 시작할 수 있었다.

성장

월요일 저녁에 레드블랙트리 삭제로 고통받던 나는 뽀미(우리반 막내 별칭)에게 이렇게 말했다.

 

"괜찮아, 목요일 아침의 나는 어떻게든 이걸 끝내 있을거야. "


그리고 목요일의 나는 레드블랙트리 구현 및 테스트 케이스를 모두 통과했다. 결과적으로도 해냈지만, 해내기 전에도 이미 해낼 것을 알고 있었다. 지난 4주간 절대 못 해낼 것 같은 과제들을 계속해서 해내면서 무의식적으로 나는 해낼 수 있다는 생각을 하게 된 것이다.

나는 이런 무의식이 삶에서 얼마나 중요한지 알고 있다. 우리는 대부분의 일을 의식보다는 무의식에 따라 처리하기 때문이다. 뇌 과학적으로도 뇌는 자주 생각하는 방향으로 생각한다는 게 밝혀져있다. 어려움앞에서 겁 먹고 도망쳐버릇하면 뇌는 어려움 앞에서 항상 도망쳐야겠다는 방향으로 생각하게 된다. 반면 결국 해낼거라고 생각하고 도전해버릇하면 뇌는 유사한 상황에서 팔을 걷어붙이고 문제에 뛰어드는 방향으로 생각하게 된다.

그런 의미에서 정글에서의 나는 올바른 방향으로 성장하고 있다는 것을 느낀다. 작은 성취들이 쌓여서 앞으로도 성취할 수 있다는 생각이 자연스레 몸에 배는 것. 이게 내가 생각하는 건강한 자신감이다. 일련의 도전과 성취를 통한 자신감이 내 무의식과 내 몸에 배어가는 중이다.

 

물고기는 존재하지 않는다

내가 결국엔 잘 해내리라는 것을 알고있었지만 성취에 다다르는 과정은 역시나 고통스러웠다. 코드를 쓰면서도 이게 올바르게 쓰고 있는 건지 확신이 서질 않고, 디버깅하는 과정도 암흑에서 길을 찾아나가는 것 같이 느껴졌다. 과제 제출 전날 레드블랙트리 코드를 13시간째 작성하고 수정했을 때쯤 불현듯 '와 어떻게 이렇게까지 못하지, 나 코딩이랑.. 안 맞나?' 하는 생각이 뇌리를 스쳤다. 원래 부정적인 생각은 임팩트가 강하니까. 그 생각이 몇 시간 정도는 머릿속에 머물러있었다. 하지만 이내 깨달았다.

물고기는 존재하지 않는다.

그래, 물고기는 존재하지 않지. 그렇게 또 부정적인 생각을 곧 털어버릴 수 있었다. (아래 책을 안 읽어보신 분들은 꼭 한 번 읽어보시길. 이 책의 반전은 소중하기 때문에 더 이상 의미를 설명하지는 않겟습니다 😋 )

 

물고기는 존재하지 않는다 | 룰루 밀러 - 교보문고

물고기는 존재하지 않는다 | 2022년 최고 화제작 《물고기는 존재하지 않는다》 스페셜 에디션 출간! 한국 독자에게 전하는 저자 특별 메시지 수록 한정판 출간 기념 일러스트 엽서 세트 증정올

product.kyobobook.co.kr


물고기는 존재하지 않는다와 유사한 울림을 주었던 책이 한 권 더 있다. 비욘 나티코의 '내가 틀릴 수도 있습니다' 이다. 제목에 속아 안 읽을 뻔 했던 책인데 읽고나서 정말 좋아하게 된 책이다. (왜 책 제목을 이렇게 번역했는지 아쉬움 ㅠ) 이 책을 통해 배우게 된 사실은 머릿 속에 떠오르는 부정적인 생각을 모두 믿지는 말아야 한다는 것이다.

이 곳에서 매일 한계와 부딪히며 때로는 스스로를 의심하게 되지만, 스스로를 향하는 의심이 틀릴 수도 있다고 생각하며, 곧이 곧대로 믿지는 않겠다고 다짐하고 있다.

도움을 요청하자

위에서 스스로 잘 한 점들을 많이 적어두었으니, 보완할 점도 함께 적어본다!

나는 본래 주는 걸 좋아한다. 먹을 것도 하나 보다는 넉넉히 사서 주변에 나눠주는 편이고 좋은 게 있으면 주변 사람들에게도 다 주고 싶다. 도움도 받는 것보다는 주는 게 더 익숙하고 더 좋다. 도움을 요청하는 건 도움을 주는 것보다 좀 더 어렵게 느껴진다. 때론 창피하기도 하고 때론 폐를 끼치는 것 같아서 도움을 요청하기가 망설여진다.

지난 주차에도 도움이 필요한 순간들이 꽤 있었지만 실제로 도움을 요청하지 못하기도 했고, 혼자서 한참을 끙끙대고 나서야 어렵사리 도움을 요청하기도 했다. 그런데 도움을 받고 나니 도움을 요청하는 게 문제를 해결하는 가장 빠른 방법이라는 걸 알았다. 새 한 주는 철판 두껍게 깔고 모르거나 도움이 필요할 때가 생기면, 주변에 많이 물어보고 빠르게 해결해보려고 한다!

신체

저번 주 금요일부터 몸 상태가 이상했다. 요즘 우리 반에 감기가 좀 도는데 나에게도 바이러스가 침투하려고 할랑말랑하는 느낌..? 여기서는 아플 여유가 없기 때문에 무조건 초기에 잡아야 한다는 생각에 금-토는 비타민을 몸에 때려박고 프로폴리스 사탕을 목이 마를 새가 없이 물고 있었다. 저녁에도 최대한 기숙사에 일찍 들어가서 누워서 공부하다가 푹 자고 나왔다.

운동도 다 패스하고 최대한 쉬려고 노력했더니 다행히 일요일부터 몸 상태가 많이 회복되었다. 그럼에도 누적된 피로덕에 요즘은 저녁마다 몸이 부서지는 거 같은 느낌이다. 이번 주 부터는 운동도 더 열심히하고 일찍 자고 일찍 일어나는 생체 리듬으로 바꿔서 피로를 최소화해보려고 한다.

티타임

정글에서 운영진과의 티타임은 항상 많은 동기부여가 된다. 오늘의 티타임에서도 좋은 이야기들이 많아서 간단히 기록!

RB트리를 구현하는 것보다, RB트리라는 자료구조가 왜 나왔을까, 이 자료구조가 어디에 쓰일까를 고민해보아라.
RB트리 뿐 아니라 다른 영역에서도 이런 사고방식이 도움이 된다.
Q. 파이썬으로 코테 준비해도 괜찮아요?
A. 선호하는 언어가 있는 회사들도 있지만, 파이썬으로 코테를 준비하는 게 가장 일반적이다 + 너무 마이너한 언어만 아니라면 회사를 보고 언어를 고르기보다는 그냥 나 자신과 가장 잘 맞는 언어를 고르는 것을 추천한다. 그래야 끌려다니지 않는다
Q. 다른 사람의 코드도, 심지어는 내 코드도 보고나서 이해하는 게 너무 어렵다
A. 코드를 많이 봐야 코드 읽는 실력이 는다. 좋은 글을 많이 읽으면 글을 잘 쓰는 것처럼 좋은 코드를 많이 봐야 좋은 코드를 쓴다.
프로그래밍을 처음 공부하는 단계에 필요한 조언
- unit test : 처음부터 코드를 쭉 다 적고 마지막에 테스트 하지말고, 최대한 작은 단위로 짜고 테스트하는 습관을 길러라
- function 단위로 생각; 함수를 쓰는 이유는 함수를 잘 만들어 놓고 내부 동작은 신경쓰지 않으려고 함수를 쓰는 것.
- divide and conquer도 같은 맥락. 큰 문제를 작은 문제로 쪼개 놓고 생각하는 것. 이렇게 작은 단위로 진행하는 습관을 가져라.
알고리즘 주차와 앞으로의 주차들은 공부의 방향이 달라야 한다. 앞으로의 공부들은 깊이 들어가면 끝이없기 때문에 '끝!' 이라고 할 객관적인 기준이 없다. 그렇기 때문에 본인이 일주일의 시간분배를 잘 해야 하고, 며칠동안 어떤 공부를 끝낼지에 대해서 미리 계획을 세우고 움직여야 한다. 전체적으로 공부해야 할 것들을 빠르게 확인하고 나서, 구체적인 계획을 세워야 한다. 그리고 항상 버퍼를 둔다. 계획 내에 끝내지 못했을 경우에 이를 마무리할 시간을 두고 계획을 짠다.

Q. 계획을 세우고 공부하고 있지만 항상 계획이 틀어진다. 특히 공부를 하면서 퀄리티(깊이)와 일정(시간) 사이에서 알맞은 지점을 찾는 게 너무 어렵다. 퀄리티를 우선하며 공부를 하니까 자꾸 계획이 미뤄진다. 그렇다면 계획을 기준으로해서 계획이 틀어지는 순간부터는 깊이보다 시간을 우선해서 공부를 진행해야 하나?

(위 질문에 대해 운영진 세 분께서 모두 대답을 해주셨다)
A1. 정답은 없지만, 그럼에도 불구하고 답변을 하자면, 계획에는 버퍼가 있다. 내가 그냥 받아들이고 넘어갈지 아닐지 그 가치를 잘 판단해야 한다. 계획보다는 길어져도 더 깊이 이해해야 할 가치가 있는 내용이라면 버퍼를 끌어다 쓰더라도 시간을 투자하는 거고, 그럴만한 가치까지는 없다고 생각이 들면 받아들이고 넘어가면 된다.
A2. 계획은 (경험 상) 대부분 계획대로 되지 않는다. 그럼에도 불구하고 왜 계획을 짜야하나? 그 이유는 첫째, 전체적인 스케쥴을 가늠할 수 있게 해주기 때문이고 둘째, 계획은 '시행착오의 준거가 되어 이를 통해 학습할 수 있기 때문'이다. 즉 계획은 원래 계획대로 될수만은 없는 것이니 계획대로 안 되는 것에 너무 스트레스 받지 말고 대신 계획대로 되지 않을 때 현실과 계획과의 차이를 알고 이를 배워나가면 된다.
A3. 깊이와 시간 사이의 한 지점을 고르려고 하지말고 본인의 capacity (학습 능력, 학습 속도, 몰입의 정도)를 올리는 방향을 생각해라
사람은 모두 다르기 때문에 어떤 방법이 가장 좋은지에 대해 정답은 없다. 어떤 방법이 가장 좋은지를 찾는 것보다, 최선을 다하고 있는가, 오늘 하루 잘 성장했는가에 집중하는 게 더 중요하다.

 

TMI

1. 우리반 그림판 명장 BS가 그려준 토끼에, 아티스트 JH 께서 생동감을 입혀주셨다.
아래 움짤로 슬랙 이모티콘도 만들어줬다. 홍수를 피해 토망가는 티떱숲의 토끼 ㅠ 넘 귀여워.. 최고야 👍🏻👍🏻👍🏻


2. 춤이 너무 추고 싶다ㅠㅠ 르세라핌 새 노래 무대 직캠보고나서 너무 예쁘고 안무도 너무 예쁘고 퍼포먼스 너무 잘해서 갑자기 느어무 춤추고 싶었다 따시... 정글 끝나면 다시 얼른 춤 시작해야지 ㅠ^ㅠ

반응형

댓글