이전에 준비했던 회사에 최종 합격을 했다. 그러나 연봉 협상에 실패해 아쉽게도 가지 못 하게 되었다. 연봉 테이블을 찢고 들어갈 만한 실력은 아니었던 거 같다. 정말 좋은 회사였고, 면접에서도 피드백을 잘 해주셔서 성장하는 계기가 되었지만 정말 아쉽게 되었다.
한 달 반동안의 작년의 구직활동을 돌아보면서, 올 해는 어떻게 구직 준비를 할까 적어보려고 한다.
아 연봉 협상을 실패하고 나서는 며칠 좀 놀고, 개발 서적이 아닌 읽고 싶은 책도 좀 읽고 했다. 알고리즘은 하루 한 번씩 꾸준히 시도했다. 하루 한 문제를 풀기는 어려웠지만, 하루 한 문제를 최대한 풀도록 노력해봤다. 알고리즘 말고는 공부를 안 했다.
비유적 의미가 아니라 말 그대로이다. 많은 걸 바라지 않는다. 신입이 이력서에 어떤 라이브러리를 써 봤다고 해도, 현업 입장에서는 이 친구가 기본정도는 안다 싶으면 라이브러리 자체는 합격점이라고 생각하는 거 같다.
그러나 라이브러리랑은 다르게 기초적인 것들은 확실히 알아야 한다고 생각한다. 면접을 보다보면서 느낀 건, 신입에게 많은 걸 바라지 않는 대신, 기초가 어느정도 잘 되고 라이브러리도 평균 이상은 쓰는 사람을 신입으로 뽑아 가르치려는 거 같단 점이었다.
예를 들어 네트워크에서 UDP 와 TCP 의 차이라든지, HTTPS 는 무엇이며 HTTP 에 비해서 무엇이 다른지, JS 에서의 function expression 과 function decalration 의 차이점이 무엇인지, bundling 이 무엇인지, hoisting 이 무엇인지, lexical scope 와 closure 가 무엇인지, call stack 이 무엇인지 같은 것들.
그래서 CS 중 적어도 네트워크, 그리고 JS와, HTML 과 CSS 를 조금 더 깊게 공부해 보려고 한다.
사실 우리가 푸는 대부분의 문제는 천재들이 가장 효율적인 답을 내려준 경우가 많다. 그래서 그 효율적인 답에 대해 알고있는지를 물어보기 위해 알고리즘을 한다는 생각을 했다.
예전에 적었던 것처럼 취업준비를 해 보면서, 그 중에서 코딩테스트를 보면서, 기업들의 코딩테스트는 알고리즘을 통해 알고리즘을 잘 하는 사람들을 뽑는다기보다는 알고리즘을 못 하는 사람을 걸러내려는 문과의 인적성과도 비슷하다는 느낌을 받았다. 완전탐색으로 풀어야 하는 문제면 완전탐색으로, 탐욕법으로 풀어야 하는 문제면 탐욕법으로, 적어도 출제자가 문제를 낸 의도대로는 풀어야한다. 만약 대부분의 회사들이 진짜로 알고리즘을 잘 하는 사람을 뽑았을 거면, 알고리즘 전형이 제일 뒤에 있었을 것이다.
예전에 같은 비전공자로 출발한 지인분께서 회사 면접에서 들었던 이야기가 계속 기억에 남았다. 문과와 이과, 정확히 비전공자와 전공자의 차이는 어떻게든 사용하는 자원을 줄이려는, 즉 효율성을 향상하려는 "습관" 의 유무라고.
이 말이 계속 생각났다. 그리고 나 또한 효율성 테스트에서 빨간줄을 쫙 그여보면서, 이젠 알고리즘을 풀 때 이게 진짜 최선인지를 한 번 더 생각해 보게 된다. 굳이 더 돌지 않아도 되는 loop 은 중간에 break 나 continue 를 통해 중단시키고, 굳이 필요한 반복문이나 변수가 아니라면 사용하지 않는다.
코딩테스트를 통과할 정도면 적어도 최소한의 배경지식과 습관에 의해 문제를 해결했다는 걸 검증할 수 있으니, 지원자가 이런 연습을 꾸준히 했느냐도 보는 거 같다.
그래서 매일매일 알고리즘을 풀고 있다. 하루를 오롯이 다 쏟을 수는 없어서 하루 한 문제는 조금 어렵지만, 그래도 꾸준히 한 문제가 풀릴 때까지 시도해보고 있다.
너무 당연한 이야기다. 같이 일하는 건데 같이 일하기 어려운 사람과 같이 일하는 거 만큼 고역은 없다고 생각한다. 그래서 내가 그런사람이 아닌지, 내게 그런 면이 혹시나 있는지, 있다면 어떤 면인지를 생각해본다. 이 부분은 거의 최종면접에서 많이 질문을 받은 내용인데, 이건 준비라기보다는 내가 내 스스로를 돌아보고 고민해야 하는 내용이라고 생각한다. 이전에 내가 썼던 일기들을 읽어본다. 지금도 꾸준히 쓰기도 하고.
"왜 axios 를 썼어요? fetch 써도 되잖아요?" 라는 질문처럼, 특정 라이브러리를 왜 썼는지 물어본다면 그에 대한 근거가 있어야 한다. 무조건. 예를 들어서 Redux 를 쓰지 않고 useContext 를 사용할 수 있는데 왜 Redux 를 사용하셨어요? sessionStorage 를 사용하셔도 되는데 왜 localStorage 를 사용하셨어요? 왜 bearer 로 사용하셨어요? 왜 passport 를 사용하셨어요? 등등. 다 근거가 있어야 하고, 근거 하에 사용을 할 수 있도록 하자.
딱 3개월. 정확히 3월 말까지. 그 때까지 제대로 공부를 해 보려고 한다.
CS 기본 (JS, HTML, CSS, 네트워크) 공부하기
자기만족성 프로젝트가 아닌, 누군가에게 도움을 줄 수 있는 작은 프로젝트 하나 만들어보기
클린코드 / 리팩토링을 보면서 2개월차에 만든 프로젝트를 개선하기
이력서 내면서 공채 지원해보기
읽을 예정이었던 책들을 딱 10페이지씩만 읽고 친구들이랑 공터에 나가 산책이나 해야겠다.
2021년의 새로운 잔디밭이 깔렸다.
그냥이라는 말이 없다는 부분이 인상깊네요 ㅎㅎ
프로젝트를 하면서도 이거를 왜 사용할까 비교해보면서 해야겠습니다!