알고리즘 스터디를 시작하면서…

알고리즘 스터디를 시작하려는 계기

필자는 대학생 시절 2학년 2학기때 알고리즘 수업을 접했습니다. 알고리즘 이론 그 자체만 배웠던 기억이 납니다. 중간고사, 기말고사를 모두 실제 프로그래밍이 아닌 의사코드를 사용해서 시험을 보았습니다. 이마저 벼락치기로 시험을 보았기 때문에 2학년 2학기가 지난 후 남는 것이 없었습니다. DFS를 배우기 시작하면서 알고리즘 암기과목으로 바뀌었기 때문에 머리에 남는 것은 BigO 표기법 정도 기억이 났던거 같습니다.

그렇게 한편으로 보내버렸던 알고리즘이 압박해오기 시작했습니다. 바로 취업준비!! 공채가 있는 기업이나 가고 싶은 기업들은 대부분 코딩 테스트가 존재하였습니다. 압박을 느끼나 알고리즘을 꾸준히 준비할 틈은 없었습니다. 면접에 대비해 공부해야할 것들, 빠른 시일내 프레임 워크를 익혀 프로젝트 만드는 것이 알고리즘 공부를 하는 것보다 우선시 되었기 때문입니다. 취업준비 과정 중에 리프레쉬하고자 백준 알고리즘, 프로그래머스에서 몇 문제 골라서 풀어보고 좌절을 맛본 것이 고작입니다.

하지만 다수의 기업에서 코딩테스트를 거치면서 알고리즘에 대한 부족함을 느꼈습니다. 문제를 접할 때면 ‘이거 분명 알고리즘 수업 시간에 배운 건데 어떻게 풀었지???’, ‘DP로 푸는 건 알겠는데 어디서부터 접근해야하지??’ 이런 생각이 주로 들면서 ‘내가 알고리즘 공부를 너무 등한시 했구나’ 라고 느꼈습니다.

이것도 잠시 취업에 성공하고 나서는 한동안은 공부 해야겠다는 생각이 전~혀 들지 않았습니다. 새로운 개발환경에서 익숙해 질 필요도 있었고 6개월 정도된 웹 개발자의 실무에서는 대단한 알고리즘을 필요로 하지 않았습니다. 보통 데이터를 비즈니스 로직 처리를 한 뒤 정제해서 특정 형태로 보내주고 받아서 처리하는 것이 주된 업무입니다. 이런 식으로 비슷한 업무를 처리했지만 속도는 늘지않았습니다.

?!

문득 들었던 생각이 문제해결능력이 부족한게 아닐까 라는 생각이 들었습니다. 나는 그냥 코드만 작성하는 코더인가??? 코더가 되긴 싫고 멋있는 프로그래머가 되고 싶은데?? 문제해결능력을 어떻게 기를 수 있지?? 많이 경험해 보는 수 밖에 없는가?? 무작정 경험한다고 문제해결능력이 늘진 않을거 같은데?? 문제해결방법에 대해 인터넷 검색을 하면서 찾아본 결과 프로그래머의 문제해결능력을 기를 수 있는 기본적인 방법인 알고리즘 공부를 시작하게 되었습니다. 이런 생각을 하던 도중 웹 개발 학원을 같이 다닌 동기와 뜻이 맞아 같이 공부하고자 알고리즘 스터디를 구성하게 되었습니다.

스터디 목표 설정하기

아직 모임이 시작하지 않았지만 개인적인 각오를 다지고자 다음과 같은 목표를 정해보았습니다.

  • 알고리즘 서적 중에 강력한 추천이 많았던 알고리즘 문제해결 전략 (구종만 저, 일명 종만북) 완독
  • 학부생 때 포기에 가까웠던 DFS 알고리즘 + Dynamic Planning 정확히 익히기
  • 백준 알고리즘 사이트 SW 역량 테스트 문제 풀이 + 삼성 SW 역량 테스트 통과
  • 주 1~2회의 꾸준한 알고리즘 포스팅 업데이트
  • 스터디 멤버 구성원들이 만족할 수 있는 성공적인 스터디

또한 기회가 된다면 Top Coder 같은 코딩 대회에 참가하는 것을 다음 목표로 정하고 있습니다.

알고리즘 스터디 계획하기

알고리즘 스터디가 성공적으로 이뤄지기 위해서 스터디 방법에 대해 인터넷 검색을 하던 중 누구에게나 공유하고 싶은 좋은 글을 발견했습니다. HeeJeong Kwon 님 블로그에 알고리즘 공부법 글을 읽어보았는데 공감되는 부분도 많았고 스터디 구성 가이드라인을 잡는데 많이 도움이 되었습니다.

필자가 생각하고 있는 스터디 계획입니다.

  • [5 – 10분] 스크럼 => 개인이 공부한 내용과 스터디 모임 전까지 일정, 당일 스터디 개인 계획 공유
  • 개별적으로 할당된 문제 풀이 공유 및 피드백 (Code Review)
  • [10 ~ 20분] 이론 정리 내용 공유 및 피드백
  • [30분 – 자유] 개별 문제 선정 + 자유로운 문제 풀이

또한 소규모 프로젝트 Task 관리에 적합한 Trello 를 사용하여 매주 내용을 공유하며 GitHub Repository를 이용해 스터디가 없는 동안에도 코드 리뷰를 통해 실력을 향상시키고자 합니다.

마침

지금 생각해보면 프로그래밍을 배운 뒤 쉽게 무언가를 익혔던 기억은 많이 없는거 같습니다. C 에서 포인터를 접할 때 그 기분은 아직도 잊지 못합니다. 이런 똥멍청이(?!)가 여기 있었네 하면서 자괴감에 빠진 적이 많았습니다. 이에 굴하지 않고 포인터를 익혔을 때는 능숙하게 사용할 수 있었던 거 같습니다.

종만북 앞부분만 읽었는데 머리가 터져오는 것이 C 포인터를 접하던 때랑 비슷합니다. 이런 알고리즘도 능숙하게 사용할 수 있다고 믿고 문제해결능력을 기르기 위해 버티고 또 버티고자 합니다.

답글 남기기

이메일 주소는 공개되지 않습니다.