개발자 4년차. 자료구조 강의를 열다
자기소개
- 본인은 4년차(2023년 말 기준 경력 3.5년) 비전공 출신의 Python 개발자(데이터 분석가)이다.
- 빅데이터 분석 정부지원과정을 수강하였으며, SI업체 > 스타트업 을 거쳐 물경력(?)을 쌓고 있는 중이다.
- 개발자는 공부를 계속 해야한다는 심리적인 강박을 갖고 있지만, 작심 3일로 강의만 구매해놓고, 앞에 몇 강 듣고 덮어버린 강의만 십여개를
Infxx
,Fastxx
등 다양한 업체에 걸쳐 보유중이다.
회사의 위기와 함께 찾아온 계기(?)
- 본인의 회사는 최근 급여가 밀리기 시작하여, 실업급여 지급 조건을 만족할 지경 에 이르렀다.
- 최근 블로그를 시작하였는데, velog 메인 홈페이지에 배달의민족 지원 후기가 심심치 않게 보였다.
- 나도 드디어 대기업에 지원해볼 시기가 온 것일지도 모른다. 코딩 테스트를 공부해볼까? 하고 알아보니, 자료구조, 알고리즘의 배경지식이 있으면 좋다는 것이다.
- Fastxxx 사의 내 강의실에 고이 잠자고 있던 그 강의실로 몇 년만에 들어가게 되었다.
자료구조의 흑역사
- 잠시 안좋은 기억을 떠올려보자면, 대학에서 컴퓨터공학을 부전공하던 시절, 자료구조 강의를 듣고 난 좌절했었다.
Array List
,Linked List
,Stack
... 교수님은 무슨 프링글스 통을 칠판에 그리고 데이터 블록이 들어왔다 나갔다가 하는 모습을 그렸다. 이런 것들이 다 뭐란 말인가?
자료구조가 이렇게 재미있다니?
- 오늘 월차이기도 하겠다. 스타벅스에 앉아 아이패드를 열고, 한번 강의를 들어보았다. 근데 왠걸? 자료구조가 이렇게 재미있는 것이었나?
- 나의 3년여 기간동안의 경험들이 떠오르며, 용어 하나하나가 살아움직이며 연결되기 시작하였다.
자료구조/알고리즘이 필요한 이유 - 한 가지 사례를 설명하겠다.
For문 vs Join > R언어로 작성된 코드를 Python으로 옮기다
- 개발 1년차, SI 업체에 막 취업했을 무렵, R 언어로 작성된 RandomForest를 이용한 민원분류기 코드를 Python으로 옮기는 업무를 했었다.
- 내가 받았던 민원분류기 코드(R언어)는 실행버튼을 누르면 10초 이내에 실행 후 종료되었다.
- 나는 모든 코드 구현을 마쳤음에도 불구하고 남은 시간이 4시간 정도라고 나오는 것이었다.
- 당시 나는 Python도 잘 못할 때였는데, 두 DataFrame의 값을 비교하여 label을 생성하는 부분을 For문으로 구현했기 때문이었던 것으로 기억한다.
For문을 Join으로
- 나는 별다른 원인을 파악하지 못한 채, print를 찍어보며 디버깅을 하다가 병목구간을 발견하였다.
- For문을
pd.merge
구문으로 수정하자 4시간짜리가 몇초로 바뀌는 기적을 경험하였는데, 나는 이러한 몇 가지 사항들을 경험적으로만 알고 있었지, 그 원리는 지금까지 정확히 모르고 있었다.
Database 수업의 경험
JOIN 알고리즘의 종류
- 나는 네이버카페 데이터와 사람들에서 SQLP,DAP,DBA 강의를 수강하였다.
- 당연히 그 과정속에서
Hash
,Sort Merge
,Nested Loop
조인을 배웠었는데, 그러한 알고리즘이 어떻게 작동한다는 것만 배웠고, 그것의 기원이 어디인지는 모르고 있었다.
시간복잡도
코드의 중복과 JOIN 방식의 차이
- 처음 For문으로 개발했던 알고리즘의 시간복잡도는 N이었고, 아마 For문이 돌면서 동일한 작업을 N번씩 반복하면서 그 복잡도는 기하급수적으로 올라갔을 것이다.
- 반면에 JOIN을 통해 데이터를 일단 하나로 붙이고, 데이터 처리 프로세스 코드의 중복이 제거되면서 시간이 극도로 빨라진 것이었다.
다른 강의도 들어볼까
공부가 지루하고 재미없는 것이 아니라 이렇게 재미있는 것이었으면, 얼마나 좋았을까.
- 이번 경험을 통해 자료구조/알고리즘은 당연히 완강하게 되었으며, CS관련 다른 과목들에도 눈이 가기 시작했다.
- 나의 3년간의 시행착오와 경력이 헛되지만은 않았던 것임을 공부를 통해 증명해보려고 한다.