최근들어 갤에 "어디까지 해야함?" 류의 질문이 많이 보여서, 주관적으로 생각하는 "취업"을 위한 기본기에 대해 한번 써봄. 하고싶은 말은 많지만 근무시간에 할일없어서 모바일로쓰는거라 가독성은 양해좀

참고로 본인은 현재 네카라쿠배에서 일한지 1년좀 넘었고, 5곳중 4곳면접 2곳최합했고, 백갤시작하기전에 취업했음

먼저, 본인이 생각하는 "기술에 대한 이해도" 는 대충 3단계로 분류함. 물론 칼같이 절대적인 분류는 아니고, "정도" 의 개념으로 보면 됨.

1. 진짜 딱 써보기만하고 어떻게 돌아가는지는 모르는 상태, 사용만 할줄 아는 단계
이 단계에서는 기술이 내부적으로 어떤 컨셉으로 어떻게 돌아가는지는 모르고, 그냥 "하니까 되던데요?" 의 수준임. 예를들면, 스프링에서 컨트롤러 어노테이션을 붙였더니 여기로 요청이 들어오네? 만 알고있는 상태임. 여기서 발전할 생각이 없는 사람들을 코드몽키라고 비하함.

2. 기술의 컨셉을 알고, 응용할줄 아는 단계.
이 단계에서는, 각 기술이 제공하는 멘탈모델을 이해하고, 아 이런식으로 돌아가는거면, 내가 이렇게 바꾸면 어떻게 돌아가겠구나 예측해볼수있고, 그게 답이 맞는 경우가 되는 경우가 맞음.
이것도 예를 들자면, db 에서 복합인덱스가 어떻게 구성되는지 이해하고, 그러면 순서를 바꾸면 현재 쿼리가 더 효율적/비효율적으로 돌아가겠구나 생각할 수 있음.

3. 기술의 내부 시스템을 이해하고, 구현할수있는 활용단계.
이 단계가 되면, 흔히 말해 컨트리뷰터가 될 수 있는 단계. 시스템이 구현 레벨에서 어떻게 이뤄졌는지 알고, pros and cons를 고려해 왜 제작자가 이런 구현방식을 선택하고 설계했는지 이해할수있음.
보통 대학원 이상에서 연구하는사람들은 여기를 택함. 반대로 비즈니스 개발자는 사실 여기까지 올 일이 많이없음.

여기까지가 1차원적인 얘기고, 이제 2차원으로 확장하면 이 "기술"이라고 하는건 정말 분류가 다양함. 너희들이 일반적으로 알고있는 cs, 즉 알고리즘, 네트워크, 운영체제, db 등등이 하나하나 뭉텅이가 "기술"이 아니고, sql 도 하나의 분류고, 인덱스도 하나의 "기술"이 될수있음.

그리고 이 2단계까지는 경계선지능이 아니면 누구라도 노력하면 뚫을수있음. 여기서부터가 중요한 얘긴데, 이 2단계를 여러 기초분야에서 뚫다보면, 기술의 접점을 발견하게됨. 자료구조알고리즘에서 배웠던 내용이, 운영체제에서 배웠던 내용이 db 인덱스에서 어떻게 사용되는지 알게되는거지. 한마디로 수학과영어처럼 서로 다른 분야에대해 공부한게아니라, 국어와 영어처럼 접점이 있다는 사실을 알게됨.

그리고 이 사실을 한번 이해하게되면, "컴퓨터가 어떻게 동작하는지"를 알게되면서 2단계를 뚫는 속도가 기하급수적으로 빨라지게됨. 이 "2단계를 뚫는 속도"가 바로 내가 생각하는 기본기임.

흔히 회사에서 어차피 새로 배워야한다, 뭐 면접때 배우겠다고 말하면 짤린다 등등 이런 얘기들 많이 들어봤지? 면접자는 보통 이 개념을 모른상태로 "몇개월이 걸리더라도 꼭 노력해서 2단계를 뚫겠습니다!" 라는 생각으로 말하니까 감점인거고, 면접관은 "이새끼가 기본기가 있네? 그러면 새로운걸 가르쳐줘도 2단계까지는 일주일이면 되겠네" 니까 여기서 입장차이가 나는거지.

그리고 "잘하는" 시니어는 위 분류에 따라 2종류로 나뉘는거고. 하나는 진짜 특정분야를 미친듯이 파서, 3단계를 뚫어내는 기술의 대가가(혹은 연구자) 되는거고 다른 하나는 2단계 뚫는 속도가 미친듯이 빨라서 3일, 하루면 터득할수 있는 수준이 되는거고, 이러한 사람들은 보통 대규모시스템설계에 능함.

그러면 다시 돌아와서, "~~ 이거 어디까지 공부해야돼요?" 라는 질문으로 보면, 자바를 예를들어보자

1. 니가 for문같은 기본 자바 문법을 알지만, 제공되는 유틸 클래스/함수에 익숙하지 않다면, 넌 0단계임.
2. 자바 유틸에 익숙하고, 간단한 cli 어플리케이션을 만드는데 부담이없다면 1단계다.
3. 자바 유틸의 컨셉을 이해하고, 어떤점에 주의해서 코드를 작성해야하는지 , 그리고 거기에 맞게 니가 최적화를 결정할수있다면 2단계다.
4. 자바 문법은 단순 specification 이란걸 이해하고, 바이트코드레벨 최적화 고려할수있거나, 언어 문법의 설계 선택 이유를 이해하고 코틀린은 자바와 어떻게 다른지, 왜 다르게 만들었는지를 이해할 수 있다면 3단계다.

대충 이런 느낌으로 이해하면 될것같음. 사실 이 부분은 나도 취업하기전까지는 몰랐어서, 본인이 겪어보기전까지는 잘 와닿지않겠지만, 그래도 조금이라도 도움될까해서 써봄.

틀리면 니말맞