[WIL]항해99 2주차 회고🛥

고플래닛·2021년 6월 21일
0

WIL(Weekly, I Learned)

목록 보기
2/7
post-thumbnail

2주차 회고록

항해99 부트캠프에 들어온지 벌써 2주가 지났고, 앞선 1주차 미니프로젝트에 이어 이번주차와 다음주에는 자료구조와 알고리즘을 공부하는 시간으로 정해졌다. 항해99에선 총 60개의 선별된 알고리즘 문제를 풀도록 안내해주고, 그 중에서 앞으로 10일간 40문제를 풀고 추가여력이 있을 경우 난이도가 다소 높은 20문제를 풀도록 하였다.

이번 2주차에는 오롯이 나와의 싸움이였다. 두뇌의 한계를 경험해 본 시간이였고, 생각의 확장성이 부족하다는 것을 여실히 느꼈다. 처음 접하는 자료구조와 알고리즘 개념으로 인해 하루 약 20시간을 모두 투자를 했는데 반해 생각만큼 단기간에 이부분을 소화하기는 매우 어려웠다. 하지만 항해99에서는 왜 가장 어려운 부분을 2~3주차에 하도록 커리큘럼을 구성했는지를 이해한다면, 스트레스를 받지 않고 알고리즘과 자료구조를 대할 수 있기에 스트레스없이 편하게 집중할 수 있었다. 그리고 알고리즘을 공부하면서 지금까지 모호했었던 부분인 <문제 해결능력>이란 부분에 대해 조금은 감을 잡을 수 있었다.
사실 10일이란 한정된 시간 안에 대학에서 2학기에 진행하는 수업을 소화한다는 것은 너무 욕심이지 않는가. 대학은 교수님에게 자세한 원리를 깨우치며 이론을 배우는데 반해, 우리는 기초적인 동영상 강의와 찾아갸아만 배울 수 있는 구글 교수님의 도움을 받으므로 교육의 질적인 차이는 분명히 존재한다. 하지만 우리의 가장 큰 장점은 배울 것만 배울 수 있다는 장점도 있으므로 장단점이 있을 것 같다.


What I did?

  • 자료구조를 이해하기 위해 자료구조 이론을 공부하였다.
  • 알고리즘에 필요한 이론들을 공부하였다.
  • 총 29문제의 알고리즘 문제를 풀었고, 30분 이상 문제해결에 접근할 수 없을 시 구글링을 통해 문제에 대한 힌트를 얻고 풀었다.

What I learned?

무작정 알고리즘 문제 풀이에 접근해보니 어떻게 접근할 지 맥락조차 파악하지 못하였다. 따라서 알고리즘적 사고를 배우기 위해서는 필요한 이론에 대한 학습이 선행되어야만 했었기에 이번 주차에는 이론들에 대한 개념을 숙지하는 목표를 세웠다.
이론에 대해 확실한 개념을 잡도록 노력을 했지만, 굉장히 어려웠고 완벽한 이해는 불가능했다. 하지만 기본적인 개념은 숙지하였기에, 앞으로 다양한 문제풀이를 통하여 확실히 개념을 숙제할 예정이다.

  • 자료구조인 큐(queue), 스택(stack), 링크드리스트(Linked List), 해쉬테이블, 트리(tree), 힙(Heap) 구조에 대해 공부하였다.
  • 정렬(버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬)에 대해 공부하였다.
  • 재귀 용법에 대해 알아보았고, 재귀 사용법과 알고리즘적 사고를 배울 수 있었다.
  • 이진탐색, 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS)에 대해 공부하였다.

What I changed?

• 코드가 친구처럼 다가왔다.

: 이전까지 코드는 낮선 이방인 같은 느낌이였다. 하지만 알고리즘의 개념을 공부하면서 코드의 작동 원리를 하나씩 파악해보니 굉장히 심플하고, 말을 잘 듣는 친구라는 생각이 들었다. 그러면서 조금씩 친근하게 느껴지게 되었지만, 굉장히 자주 낮을 가려 나의 말을 무시하는 경향이 많다.(물론 내가 말도 안되는 코드를 쳐서 무시했겠지만... 말이다.)

• 컴퓨터적 사고란 말이 무엇인지 조금은 알 것 같다.

: "개발자에게 꼭 필요한 것이 무엇인가?" 에 대하여 많은 개발자들이 컴퓨터적 사고를 하는 것이 중요하다고 하는 여러 글들에서 보았다. 그 글들을 보면서 컴퓨터적 사고가 무엇인지 힌트조차 잡지 못했었지만, 알고리즘 공부를 하면서 이 말의 뜻은 조금은 알 것 같았다.
컴퓨터적 사고란 것이 굉장히 복잡하고, 다양한 것들이 포함되어 있겠지만... 결국엔 답은 하나라는 것을.
간단히 이야기 하자면,
컴퓨터 왈, "다 필요없고, 내가 알수 있게 쉽고 똑바로 코드쳐!!!
결국 컴퓨터에게 명령을 잘 할 수 있도록, 내가 문제를 잘 접근하여 컴퓨터가 이해할 수 있도록 쉽고 효율적인 코드를 짜는 것이라는 것이다.
컴퓨터를 하나씩 이해해보면서, 컴퓨터 공학에 대해 공부해보고 싶은 생각이 들었다. 조금씩 컴퓨터에 알아갈 수 있도록 개념들을 공부해보고 싶다.


what I will?

• 알고리즘엔 왕도가 없다(There is no royal road to learning Algorithm)

: 기하학의 아버지라 불리는 유클리드가 했던 말 중에서,공부엔 왕도가 없다는 말을 인용하였다.
알고리즘을 공부해보니 단시간에 승부를 보는 것은 결국 벼락치기로 중간고사, 기말고사를 공부했던 방법처럼 결국 다 잊혀질 공부를 하는 것이 아닌가 생각이 든다. 잊혀질 공부를 하고자 알고리즘을 공부하는 것은 아니기에 매일 조금씩 꾸준히 하면서 많은 문제를 풀어보는 것이 중요하다고 생각한다.
현재 매일 새벽 5시에 일어나 공유오피스로 출근(?)하고 있다. 새벽 시간에는 보통 전날 배운 것이나 풀리지 않은 문제들을 해결하는 시간으로 쓰고 있는데, 1~2시간 정도는 알고리즘 문제를 풀이하는데 시간을 쓰도록 계획을 변경할 예정이다.

• 다른 개발자들의 생각을 공부하자.

: 문제를 해결하는데 있어 정답이 1가지만 존재하진 않는 것처럼, 많은 개발자들이 다양한 방식으로 문제에 접근한다. 문제를 접근하는 방식이 다르다는 것은 주어진 문제를 다르게 바라본다는 것이 아닐까?
주어진 문제를 다양한 관점에서 바라볼 수 있다는 것이 결국 개발자가 성장하는데 가장 중요한 능력이 아닐까 생각해본다. 다양한 개발자들의 코드를 보면서 배우고, 왜 이런 코드가 나오게 되었는지 한번 생각해보자!


앞으로도 회고록에서는 총 4개의 단락으로 나누어서 적어보고자 한다. 그 이유는 블로그 포스팅을 하려면 시간을 많이 소요되는 부분이므로, 기본 프레임을 만들어 놓고 작업한다면 시간을 단축시킬 수 있고, 가독성이 높기에 보는 사람도 이해하기가 훨씬 쉬울 것이다. 따라서 뭘 했는지, 배웠는지, 그리고 그것을 통해 무엇이 달라졌고, 개선하면 좋은지를 나누어서 적도록 하겠다.

profile
blog 이사했습니다. 주소 : https://goplanit.site/

0개의 댓글