먹고 기도하고 코딩하라

취업시장에서 살아남기 (0) : 현재 상태 객관적으로 보기 본문

일상

취업시장에서 살아남기 (0) : 현재 상태 객관적으로 보기

2G Dev 2021. 9. 1. 17:25
728x90
728x90

 

어느덧 시간이 많이 흘러 벌써 졸업반이 됐다. 글을 수정하는 오늘은 8월 30일, 개강 이틀 전이다. 이 글을 언제 발행하게 될지는 모르겠지만 오늘 solved.ac에서 골드 티어로 승급했다. 8월 11일에 계정 만들어서 지금까지 골드 문제는 1개밖에 안 풀었는데 그냥 양치기해서 승급한듯.

어쨌든 2달 뒤면 졸업 작품 전시회에 우리 팀이 고생해서 만든 작품을 전시할 거고, 서류 몇 장 써서 여기저기 내면 이 학교에서의 성장은 끝이다. 겨울에 취업 성공하면 졸업할 거고 그렇지 않다면 유예할 것 같다.

학교 다니는 4년 동안 나는 뭘 했을까? 실컷 힘 빼면서 노는 걸 좋아하지는 않는데 소소하게 딴짓하기를 즐겨서 원래 계획했던 할 일을 많이 못 했다. 허송세월하고 지난 날을 돌아보니 후회스럽다.

왠지 굉장히 오래 산 것처럼 얘기했는데 뭐 잘 유지한 것도 있다. 나는 거의 언제나 시험은 잘 봐서 학점을 잘 유지했다. 사실 시험 잘 보는 비결은 다른 데 있지 않다. 무작정 외우고, 백지 펼쳐놓고 아는 거 다 쓴 다음에 책 펼쳐서 내가 못 쓴 부분을 추가로 외우는 그뿐이다. 여튼 학점이라도 잘 유지했으니 된 건가 하면 그렇지는 않다. 학점이 좋다는 이유만으로 날 채용할 기업은 없을 테니 말이다.

 

현재 나는 iOS 앱 개발자로서 취업을 목표로 공부 중이다. 코딩 테스트 응시 언어는 파이썬이다.

 

 

 

객관적인 상황

1. 7학기까지 통산 학점 4.2, 전공학점도 4점 넘는데 자세히는 모른다 4.3이었나. 주전공, 부전공 모두 컴퓨터공학 계열

2. 개발 프로젝트 다수 (그러나 거의 혼자 했으며 팀 프로젝트 경험이 많지 않음). 일부는 배포해 3,000명 가량에게 서비스한 경험이 있음. 웹개발 (Vue.js + Nuxt.js) 외주 경험 있음.

3. 코딩 테스트 -> 준비 중인데 준비가 너무 늦었네요.. ^^ 현재(2021년 8월 후반 기준) 백준 실버 문제는 웬만큼 푼다. 이상하게 백준 실버보다 프로그래머스 렙2 문제가 더 까다롭게 느껴진다. 여러 가지 알고리즘을 이론적으로만 알고 문제풀이를 많이 안 해봐서 코드를 어떻게 작성해야 할지 구현하는 능력이 부족한 상황이다. 다행스럽게도 SQL 풀이는 잘 할 수 있다.

4. 기술 면접 -> 공통적으로 나온다는 OS와 컴퓨터의 작동 방식을 조금씩 나눠 암기하고, 검색하며 노트에 정리하고 틈틈이 이해하고 외우는 중. 학교에서 들은 '컴퓨터 구조', '운영체제' 과목의 프린트를 버리지 않은 게 신의 한 수다.

5. 포트폴리오 -> 최근까지 프론트엔드 취업을 준비했기 때문에 swift로 만든 건 2년 전 여름방학에 농담처럼 만든 엄복동 계산기뿐이다. 하반기에는 나와 내 친구들이 쓸 만한 것들을 만들어 앱스토어에도 등록하고 피드백도 받아보려 한다.

6. 인성 면접 -> 전혀 준비 안 됨. 졸업 전시회 이후에 면접 스터디를 찾아야 한다.

 

 

문제풀이를 기피한 이유

코딩 테스트라는 게 있다는 걸 처음 안 때는 2018년 1학기, 내가 독어독문학과에서 전과한 첫 학기였다. 당시 '파이썬 프로그래밍'을 가르쳐주시던 교수님께서 워크샵 때 상금을 걸고 간단한 코딩 테스트를 볼 건데, C언어로 볼 것이며 파이썬으로도 구현 가능할 정도로 낼 거라고 하셨다.

당일 3문제가 나왔는데 다른 두 문제는 기억이 나질 않는다. 한 문제는 확실히 회문 체크 문제였다. 그런데 C언어로 하려니 도저히 어떻게 해야할지 모르겠는 거다. 멍하니 모니터만 보다가 씁쓸한 마음으로 강의실을 나섰다. 팰린드롬 풀이 실패, 그게 나와 프로그래밍 문제 풀이의 쓰디쓴 첫 만남이었다.

백준 저지 사이트에 가입해 문제를 몇 개 풀었다. 난 당시 자료구조를 수강 중이었고, 힙을 갓 배운 상태였다. 당연히 풀 수 있는 문제가 얼마 없었다. 지금보다 멘탈이 더 코스모스같이 여렸던 그 때는 '틀렸습니다'가 너무 짜증났고, 가끔은 공포스럽기까지 했다. 아니 이런 어려운 문제들이 있다니? 이런 걸 꼭 풀어야 하는 걸까? 알고리즘 대회는 머리가 좋은 길포일 같은 괴짜들이 나가 푸는 것이라고 생각하고 개발에 치중하기로 했다.

그리고 그 해 여름방학에 갓 배운 파이썬으로 카카오톡 챗봇을 만들어 3,000명의 사용자를 모았다. 기고만장해진 나는 '역시 그런 문제 따위 날 괴롭힐 수 없어' 뭐 이런 생각을 했던 거 같다. 3년 뒤의 내가 어떤 개고생을 할지도 모르고 말이다. -_- 

 

 

문제풀이를 다시 시작한 이유

사실 최근에 전공을 바꾸고 싶다는 생각을 했다. 우리 학교는 전과를 2번 할 수 없으니 최소한 2년 전에는 마음을 굳혀서 경제학과나 회계학과 비스무리한 걸 복수전공했어야 했다는 생각이 들었다. 2년 전부터 경제에 관심은 있었는데 복학을 2020년 2학기에 해서 당장 들을 수 있는 과목이 없었다. 2021년 1학기가 되어서야 경제원론 과목을 들었고, 그 전에는 개인적으로 여러 종류의 책을 섭렵하며 경제 공부를 했다. 그러면서 생각했다. 아... 이거 괜찮은데?

하지만 나는 이미 전과자였기 때문에 또 전과할 수는 없었고, 복수전공이나 부전공을 해야 했다. 하지만 거기까지 생각이 닿자 의심이 피어올랐다. 먼저, 학위를 얻기 위해 추가학기를 하자니 돈을 내고 추가학기를 해야 했는데 그럴 수는 없었다. 적어도 10학기까지는 해야 할 텐데, 그러면 돈을 상당히 많이 써야 하기 때문이다(물론 그 학위를 얻음으로써 미래에 창출할 현금흐름에 비하면 꽤 괜찮은 투자일 수도 있지만 불확실하다). 둘째, 경제학이나 회계학 학위가 개발자로서의 나의 가치를 크게 높여줄 거라는 생각이 들지 않았다. 그렇다면 나는 1년과 약 800만원을 통째로 허비하게 되는 것이다.

결국 개발자가 되어야 한다. 그것도 내가 원하는 일을 할 수 있는 기업에 들어가서 일해야 한다. 그러려면 코딩 테스트를 보는 기업의 시험을 치르고 면접까지 통과해야 한다.

어쩔 수 없이 코딩 테스트를 위한 공부를 해야 할 수밖에 없다는 결론이 나오고 나서 내가 가장 먼저 한 일은 코드업 100제 풀이였다.

 

 

오직 코테 통과를 위한 계획

1. 언어 기본서를 읽자.

2. 그 언어로 코드업 100제를 풀자.

3. 자료구조와 알고리즘 책을 읽고 정리하자. 개념을 알 때까지 구현하며, 시간/공간복잡도 위주로 정리한다.

(여기서 나는 '모두의 알고리즘 with 파이썬(이승찬)', '파이썬 자료구조와 알고리즘(미아 스타인)' 책을 읽고, 밑에 후술할 유튜브 채널을 참고했다.)

4~7번은 섞어가며 병행한다.

4. 백준의 기본 문제들을 푼다. 골드 티어가 되면 브론즈 문제 풀이는 그만두고, 너무 쉬운 문제는 넘어가며 solved.ac 기준 최소 실버 3 티어 이상의 문제 위주로 푼다.

5. 백준 워크북에서 쉬운 문제들부터 풀고 틀리거나 에러, 시간/메모리 초과가 난 문제들은 최적화할 방법을 찾는다. 잘 안 풀리면 답지 보고 풀고, 비슷한 문제를 풀어서 그 풀이를 내 것으로 만든다. 내가 설명할 수 있을 정도로 꼼꼼히 풀이 방법을 익힌다. (현재 여기)

6. 프로그래머스 레벨 1~레벨 3까지 전부 푼다. (현재 여기)

7. 백준 실버 3~골드 1 티어 문제까지 빈출 유형(DFS/BFS, 완전탐색, 시뮬레이션, 최소비용, DP, 이분탐색 등) 문제를 푼다. (현재 여기)

8. leetcode에 가입해서 easy~medium 문제를 푼다. hard도 시도해 본다. 일단 기본 카테고리 문제를 풀고 top 100 liked question으로 정렬해서 따봉 많이 받은 문제를 푼다.

9. 프로그래머스의 SQL 고득점 Kit 문제를 풀고, 코딩테스트 고득점 Kit 문제도 푼다.

-> 여기까지를 연말까지 할 일로 보고 있다.

8월 30일 현재 150문제 가량을 풀었는데, 연말까지 4개월 남았으니 하루에 3문제 풀이를 목표로 해서 추가로 최소 300문제를 더 푸는 게 목표다. 350문제 정도 풀면(약 11월 중순~12월 초 예상) 학교 랭크 3등을 찍는데 여기서 백준 문제는 그만 풀고 릿코드랑 기업 기출문제 풀 생각이다.

 

계획을 짜는 데 참고한 블로그

 

 

여름방학 때 한 일

  1. 스프링 시험이 끝나고 종강 맞이한 다음 내가 제일 먼저 한 일은 점프투파이썬 훑어보기였다. 파이썬은 학기중에 인공지능 수업이나 그럴 때 빼고는 잘 안 쓰다보니 리스트 메소드나 문자열 메소드를 항상 잊어버리기 일쑤였다. 가볍게 모르는 부분만 보면서 단원 문제풀이, 종합문제 풀이를 했다. 원래 파이썬 문법을 알기 때문에 종합문제 전체 풀이까지 5일 정도가 걸렸다.
  2. 그 다음 코드업에 가입해서 파이썬 기초 100제를 풀었다. 기초 100제 문제는 한 80번까지는 매우 쉽다가 그 뒤로는 약간 생각해야 하는 문제가 나타난다. 이 기초 100제는 어떤 알고리즘을 알아야 풀리는 문제들이 아니고 그냥 문제에 적힌대로 구현하면 되는 문제라 조금 생각하면 풀기 쉽다. 그러나 진법 변환, 비트 연산, 2차원 리스트 다루기를 잘 못하면 풀기 힘든 문제들이 있기 때문에 이런 것들은 검색하면서 풀면 풀기 쉽다. 주말 이틀 동안 100제를 다 풀었다.
  3. 그 다음 <모두의 알고리즘 with 파이썬>을 읽으면서 기본적인 문제들을 풀었다. 이 책은 알고리즘 입문서로 아주 좋은 책이다. 정말 기초적인 면을 다루고 있기 때문에 백준 브론즈나 프로그래머스 레벨 1 문제를 풀려는 입문자들에게 강력 추천한다. 이 책이 좋은 이유는 최대한 간단하게 자료구조와 알고리즘을 설명하고 있기 때문이다. 특히 정렬 코드는 금이다. 책을 보면서 따라 실습하고 이론을 익히는 데에 1주일 정도 걸렸다.
  4. 그 다음은 미아 스타인의 <파이썬 자료구조와 알고리즘>을 읽었다. 이 책은 중급서 정도의 내용이다. 파이썬으로 여러 가지 자료구조를 구현하는 데에 주력하고 있으며, 자료구조의 메소드의 시간복잡도 등을 자세히 설명하고 있다. 초급자용 책이 아니다보니 그렇게 친절한 책은 아니므로 문제 풀이를 위해서 자료구조 구현 위주로 보고 고급 내용(스레드, 병행 등)은 휙 넘겼다. 어차피 직접 자료구조를 구현하라는 문제가 나오지 않는 이상 파이썬으로 코테를 본다면 자료구조 구현할 일은 별로 없는 거 같다. 그럼에도 자료구조를 공부해야 하는 이유는 어떤 상황에서 어떤 자료구조를 쓰는 게 좋은지 판단하는 반응 속도를 올리는 데 있는 듯.
  5. 이 책을 읽으면서 유튜브에서 자료구조 강의도 같이 찾아봤다. 엔지니어 대한민국이라는 유튜브 채널이 있는데, 칠판에 그려서 자료구조를 설명해주는 채널이다. 짧은 시간에 자료구조를 설명해 주는 강의인데, 자바 코드로 자료구조를 구현하므로 난 이론 부분만 보고 코드는 안 봤다.
  6. 그리고 T-Academy 자료구조와 알고리즘 강의도 봤다. 이건 안수빈 님이 SK에서 하신 강의인데 1부가 진짜 꿀이다. 문제를 어떻게 읽어야 하는지 가르쳐주시기 때문이다. 사실 백준 문제를 처음 풀 때 문제의 기본적인 단계(입력, 출력 등)를 이해 못해서 문제를 못 풀고 포기하기도 했다. 이런 경우를 대비해서 데이터 입력량이나 시간, 메모리 제한을 보고 어떻게 문제 풀이 계획을 수립해야하는지 등을 알려주시는데, 이런 걸 무료로 보다니 좋은 세상이라는 생각밖에 안 든다.
  7. 여기까지 다 듣고, 책 다 읽고 덮은 다음 바로 프로그래머스로 가서 문제를 풀었다. 레벨 1 문제는 그냥 내장 메소드 쓰고 리스트 컴프리헨션 콜라보해서 쓰면 풀리는 문제들이 상당히 많다. 레벨 1 문제는 사실 별 도움은 안 되지만 문제 풀이에 재미를 붙이고 매일매일 문제를 푸는 습관을 기르는 데 도움이 되는 것 같다.
  8. 레벨 1 문제를 다 풀고 레벨 2 문제를 풀려고 하니 급 어려웠다. 이 때쯤 백준에 가입해서 브론즈 문제부터 풀어제끼기 시작했다. 백준에는 대략 2만 문제 정도 되는 문제가 있는데 어떤 문제를 풀어야 하는지 감이 안 왔다. 이 때 solved.ac 라는 레이팅 사이트와 연계해서 레벨을 보고, 브론즈랑 실버 문제를 풀었다. 처음에는 실버 문제도 풀기 버거웠지만 covenant 님 블로그 글을 보고 꿋꿋이 문제를 풀기 시작했다. 근데 준비운동 약점 체크부터는 거의 못 풀겠길래 '튼튼한 기본기' 정도만 먼저 풀었다.
  9. 저렇게 기본기 문제를 풀고 나면 또 풀 게 없는데, 이번에는 이 블로그에 들어가서 입출력 문제라고 번호를 적어둔 걸 풀어봤다. 이 입출력 문제는 다 맞아야 하고, 못 맞아서 찾아보고 나면 입출력 어떻게 했는지 외워야 한다. plzrun 님의 글은 굉장히 친숙한 데다가(노답의 절망을 잘 알고 있음) 문제를 풀다 보면 이 분과 비슷한 길을 걷고 있다는 생각에 어쩐지 마음이 든든해지기도 한다. 여튼 여기서 입출력 문제를 다 풀고 이 분은 DP를 푸시기를 권하는데, 나는 DP보다 일단 문제 풀이에 재미를 잃지 않도록 단계별 풀이에 들어가서 풀 수 있는 문제들을 풀었다. 스택/큐 문제들 같은 건 자료구조 알면 그냥 풀리는 문제이므로 이런 걸 하나씩 풀어주면 좋은 것 같다.
  10. 이 문제들을 풀면서 코테에 자주 나오는 알고리즘들을 공부해야 하는데, 이 문제들에 접근하는 뼈대를 알아놓기 위해 검색을 시작했다. 가령 DP 문제 풀이에는 입력량만큼 dp 배열을 만들어서 캐시질로 풀어야 한다는 걸 알면 풀이가 쉽고, DFS/BFS로 풀어야 하는 그래프 문제에서는 DFS/BFS 함수의 코드를 줄줄 꿰고 있으면 한층 쉽다. 물론 기본 BFS/DFS (그냥 단순 순회만 하는) 함수로 풀리는 문제는 얼마 없지만 응용하다보면 그래도 풀만한 것 같다. 풀기 쉬운 BFS/DFS는 실버 레벨에도 많으므로 몇 개 풀었다. 근데 난 일단 추천 문제에서 골드가 나오면 문제 번호만 적어놓고 일단 제꼈다.

아직 완전탐색, 이분탐색, 구현 문제와 그래프의 최소비용경로 찾기 등은 약하다. 분할정복도 힘들어서 강의를 들으면서 채워나갈 예정이다. 인프런에서 파이썬 코딩 테스트 준비 강의가 할인할 때 결제해놔서 모르는 부분은 이 강의를 들으면서 채울 예정이다. 유료 강의가 좋은 건 어떤 문제의 풀이 방법을 알려줘서가 아니라 어떤 문제를 봤을 때 어떻게 풀어야 한다는 시그널을 잡아내는 연습을 시켜주고 가장 기본이 되는 풀이 방법을 알려주기 때문인 것 같다. 

 

한 달 뒤에 다시 경과 보고하러 블로그에 글 쓰겠다. 즐거운 추석들 보내시길!

 

 

728x90
반응형
0 Comments
댓글쓰기 폼