최근들어 갤에 "어디까지 해야함?" 류의 질문이 많이 보여서, 주관적으로 생각하는 "취업"을 위한 기본기에 대해 한번 써봄. 하고싶은 말은 많지만 근무시간에 할일없어서 모바일로쓰는거라 가독성은 양해좀
참고로 본인은 현재 네카라쿠배에서 일한지 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단계다.
대충 이런 느낌으로 이해하면 될것같음. 사실 이 부분은 나도 취업하기전까지는 몰랐어서, 본인이 겪어보기전까지는 잘 와닿지않겠지만, 그래도 조금이라도 도움될까해서 써봄.
틀리면 니말맞
참고로 본인은 현재 네카라쿠배에서 일한지 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단계다.
대충 이런 느낌으로 이해하면 될것같음. 사실 이 부분은 나도 취업하기전까지는 몰랐어서, 본인이 겪어보기전까지는 잘 와닿지않겠지만, 그래도 조금이라도 도움될까해서 써봄.
틀리면 니말맞
나도 이렇게 생각함 언어만 봐도 c++ 쓰니깐 되던데요? Java쓰니깐 되던데요? Java 그냥 쓰면 되는데 내부 구조가 어떤지 꼭 알아야 되나요? 포폴에서 레드블랙트리 비트리 그냥 대충 좋은거 때려박고 구현했는데 이정도면 되는거 아닌가요? 에서 이제 조금 더 이해하고 코드작성이 가능하고 코드 작성수준에서 내가 생각한 대로 작동하면 2단계고
여기서 C++과 java가 어떻게 다른지 왜 그렇게 언어를 설계한건지 다른 방법은 없었던건지 레드블랙트리와 비트리의 차이점은 무엇인지 왜 그런식으로 만든것인지 그렇다면 이건 어떤식으로 활용하고 사용해야 하는지? 이런 점을 파고들어 이해하면 3단계까지 가는거같음 근데 보통 사람들이 2단계 까지 하고 자기가 잘하는줄 착각해
난 5단계할래 - dc App
2년차 맞냐? 우리 주니어들이랑 왜케 다르지
감사합니다
님 코테 무슨 언어로 봄?
자바파이썬 그때그때 익숙한언어로했음
3단계는 주니어도 힘들어보이는데? - dc App
2번도 스프링기준으로 예시좀 들어주셈 - dc App
3단계는 주니어도가 아니라 시니어도힘듬. 여기는 취향 재능 노력 삼박자가 다맞아야함. 취업을위한 관문은 3단계를 뚫었냐가 아니라, 2단계까지 얼마나빨리뚫을수있느냐 의 능력임
스프링으로 따지자면 0단계는 crud 개발할때도 버벅이는사람. crud 및 rdb + 서버 정도의 단순 아키텍쳐를 처리할 수 있으면 1단계. 2단계는 다양한 스프링의 추상화 시스템과 그 내부 소스코드를 이해할수있는사람. 3단계는 추상화로 인해 생기는 제약조건 해소방법을 스프링안에 녹여낼수있는사람 정도로 예상
2번 스프링 기준으로 구현체랑 인터페이스보고 어떻게 써야할 지 감 잡는 사람임 +docs의 도움은 받겠지만 2가 안되는 애들이 구글링해서 대충 문제 풀고 검색했더니 그렇게 하라더라가 끝인거임
인터페이스 보고 추측해서 쓸수있다는것도 인정. 컨셉을 이해했다는거고 컨셉을이해했다는건 기술 접점이란 개념을 의식적으로 알던모르던 이해했다는 의미라고 생각함
기술적 접점 씹 공감 그냥 많이 씹뜯물빨 하다보면 2단계까지는 되는듯
프로젝트는 뭐했었음? - dc App
부트캠프했는데, 사실 여기서 얻은건 "할말이생겼다" 정도이고 네이밍빨을 받거나 한건 없음. 실제로 아예모르는 시니어들도 꽤있었고
어떤 부캠 - dc App
ㅋㅋ무슨취조하냐? 알려주기싫어서 부트캠프했다고뭉갰는데 왜자꾸묻지?
이런게 필요했음 ㄱㅅㄱㅅ
와 ㄱㅅㄱㅅ 내가 지금 2단계를 달성해보려고 노력하는 단계구나 공부할 수록 겸손해지는 것 같음ㅋㄱㄲ - dc App
2단계 해보려고 하는데 하면 할수록 점점 배울게 많아진다. 무슨 빙산 위만 보다가 아래 보는 느낌임
글 잘보고 갑니다 감사합니다.
명문
난 1단계라 네카라쿠배를 못가는거네