sw사관학교정글/회고 및 생각정리

[week03] SW사관학교 정글 3주차 회고

D cron 2021. 11. 28. 23:07

📷 회고

이번 주차 역시 알고리즘 주였고 키워드는 그래프, BFS. DFS, 위상정렬이었다. 

 

모르는 개념들은 나동빈 형님의 강의를 듣고 정리하고, 문제를 풀어보는 식으로 진행했고 1시간정도 고민하다가 모르겠으면 답을 보고 이해하고, 다시 한번 풀어보는 식으로 진행했다.  

 

3주차에 조원중에 한명은 알고리즘을 푸는걸 좋아하는 형이었다...! 알고리즘 문제를 풀기도 잘 풀고, 답을 보고 이해하고 그걸 흡수하는 속도도 엄청 빨라서 내가 일주일동안 걸려서 겨우 다 푼 문제들을 3일만에 다 풀어버리고 다른 사람들을 많이 도와줬다. 도움을 줄 때도 내가 어떤 부분에서 지금 모르고 있고 어떤걸 생각해야 할지 힌트도 적절하게 줘서 모든 과제를 끝내는데 도움을 많이 받았다.

 

3주차가 되니까 3기 동기(거의 운명공동체)들과도 조금씩 친해지고 이야기 할 기회도 많았다. 삶을 정말 열심히 살아온 사람들이 많았고 다양한 삶의 경험들과 생각을 듣는게 정말 재밌었다. 내가 사람 좋아하는걸 여기 와서 깨달은 것 같다. 정글을 준비할 때 뽑히면 정말 좋겠다고 생각했는데 실제로 합격하고 와 보니까 내가 생각했던 것 보다 더 좋은 환경이라서 정말 감사했다. 개발적인 지식 뿐만아니라 다양한 사람들에게서 다양한 삶의 이야기들을 듣고, 열심히 사는사람들 속에서 같이 성장해가는 느낌이 정말 좋다 😇

 

예전에 군대에서 같이 연등하면서 이야기가 잘 통해서 엄청 친해진 형이 있다. 정글에 지원하기 전에 '어떻게 해야 성공적인 인생의 길을 효율적으로 가장 빠르게 갈 수 있을까'에 대해서 이야기한 적이 있는데 그 형이

인생은 절대로 너가 정확히 설계한 대로 살아지지 않고 어떤게 효율적인지는 그 길을 가보기 전에는 모른다. 나중에 뒤 돌아 봤을 때 내가 했던 노력들이 너의 삶에 어떤 영향을 주었는지 아는거니까 지금 효율적인걸 너무 따지는데 시간을 보내면서 가만히만 있는건 오히려 비효율적이다.

 

라는 말을 했었는데 정말 맞는 말 같다. 내게 주어진 선택지가 너무 많거나 하고 싶은게 너무 많은 사람은 일단 하나의 길을 짧고 굵게 고민해서 정한 다음에 그 길로 가보는 것도 나쁘지 않을 것 같다.

 

2주차를 진행하면서 알고리즘 공부를 할 때 '어떤 식으로 공부하면 좋다!' 라는 방향성이 주어지지 않고 키워드와 문제들만 주어지니까 내가 지금 효율적으로 공부하고 있는건지, 내 방식이 맞는 방식인지 피드백을 얻을 수가 없었다. 그래서 운영진 분들과 이런 부분에 대해서 면담을 하고(면담내용은 여기) 3주차를 진행해 보니까 어떤걸 우리에게 바라시는지 어렴풋이 알 것 같았다. 지금 당장 비효율적이더라도 시행착오를 통해 스스로 성장하는 방법을 찾아내는 5개월이 될 것 같다.

 

이번 주차부터는 블로그 올리는 방식을 바꿨다. 내가 주차를 겪으면서 인상깊었던 내용은 따로 포스팅을 하고, 일요일마다 올리는 포스트에서는 한 주의 회고, 조언, 생각들만 정리하기로 했다. 배운 내용까지 넣으니까 글이 너무 길고 주제가 여려가지라 보기가 불편했다.

 

주차별로 진행하면서 배운 내용들은 일주일동안 노션에 대충 정리해두고 일요일에 한 번에 개발 지식 지도에 넣고 있다. 그리고 컴퓨터시스템도 그냥 읽었더니 머리에 들어오지 않는 것 같아서 노션에 정리하고 있다. 

 

점심 먹고 졸리면 휴게실에서 20분 정도 자고 나오자! 잠이 조금 부족할 때 낮잠자는 게 확실히 오후 컨디션에 영향을 미치는 것 같다.

 

💻 코치님 조언

Q . 좋은 코드를 짜고 싶습니다. 어떤 코드가 좋은 코드인가요?
다음의 우선순위대로 더 좋은 코드입니다. 즉, 첫번째 조건이 만족되지 않는 코드는 두번째, 세번째 조건이 만족되어도 나쁜 코드입니다.

1. 정답을 내는 코드가 좋은 코드입니다. 주어진 문제의 조건을 만족하는 입력에 대해 문제가 요구하는 답변을 내는 코드가 좋은 코드입니다. 즉, 어떻게든 제대로 돌아가는 코드를 짜는 것이 첫번째 조건입니다. 실행되지 않는 코드는 최악이며, 어떤 때는 정답을, 어떤 때는 오답을 내거나 무한루프에 빠지는 코드도 나쁜 코드입니다.

2. 계산 복잡도(Computational complexity)가 낮은 코드가 더 좋은 코드입니다. 시간 복잡도와 공간 복잡도는 알고리즘의 성능을 측정하기 위해 만든 개념이고 도구입니다. 시간 복잡도가 낮은 알고리즘이 훨씬 빨리 돌며, 공간 복잡도가 낮은 알고리즘이 훨씬 적은 메모리를 차지합니다. 같은 논리로 같은 기계에서 항상 더 빠르거나, 더 적은 메모리를 차지하는 코드가 더 좋은 코드입니다.

3. 사람이 알아보기 좋은 코드가 더 좋습니다. 사람이 코드를 읽고 이 코드가 문제를 어떻게 푸는지, 어떻게 동작하는지 이해하기 쉬운 코드가 좋은 코드입니다. 코드의 길이, 변수명의 길이, 주석의 유무따위는 부차적인 사항입니다. 코드와 변수명이 짧고, 주석이 한줄도 없어도 대부분의 사람이 코드를 읽고 이해할 수 있으면 아주 좋은 코드입니다. 반면에, 코드가 길어도 복붙(copy & paste) 투성이고, 주석은 있으나 코드 동작과 다르며, 의미를 이해할 수 없이 길이만 긴 변수명을 가진 코드는 나쁜 코드입니다. 코드의 길이가 짧아도 이해할 수 없다면 암호일 뿐입니다. 다른 사람이 유지 보수 할 수 없으며, 바이러스 코드로 의심 받을 수 있습니다. 프로그래밍 언어도 언어이므로 알아보기 좋게 쓰는것이 좋고, 자연어와 마찬가지로 많은 연습이 필요합니다.