면접관 앞에서 머리가 하얘지는 순간
번번이 토끼굴로 들어갈 수는 없어!
프로그래밍을 공부하다보면 토끼굴로 들어가지 말고 눈앞의 개념을 익히는 데 집중하라는 유명한 조언을 마주한다. 나도 토끼굴에 들어갈 뻔한 적이 매우 많았고 이 조언을 충실히 따르며 눈앞의 과제에 집중했다. 하지만 요즘 내 생각은 달라졌다. 토끼굴은 시간을 넉넉히 가지고 반드시 한번은 들어갔다 나와야 한다. 가능하면 빨리! 요즘 나는 [모던 자바스크립트 Deep Dive] 를 정독하고 있는데, 중구난방으로 잡혀가던 자바스크립트 개념이 이제는 머릿속에 테이블처럼 정리되는 것 같다. 새로운 개념을 만날 때 비슷한 다른 개념이 떠오르는 것은 좋은 조짐이다.
요즘 나는 이직을 준비하고 있다. 다니던 회사를 퇴사한 이유는 일하면서 공부를 병행하는 법을 모르겠어서였다.
IT 서비스 회사에서 소프트웨어 프로그래머가 하는 일은 이용자들에게 좋은 반응을 얻을 수 있는 서비스를 만들어내는 일이다. 서비스 품질은 서비스의 기술력과 어느정도 상관관계가 있겠지만 정비례하지는 않고, 프로그래머의 실력과도 정비례하지 않는다. 프로그래머는 자신의 실력과 경험에 기반해 리서치와 스터디를 거쳐 적합한 개발방법을 찾아내고, 이는 개발지식만큼이나 중요한 자질이다. 실무에는 커리큘럼이 없기 때문에, 필요한 지식을 그때그때 습득할 수 있어야 한다.
1년 전에 비해 나는 확연히 성장했다. 모르던 것을 알게 됐고, 할 수 있게 됐다.
재사용가능하고 메모리 누수가 없는 코드의 중요성 대해 알게 됐다.
자바스크립트 메서드와 리액트 훅을 필요에 따라 빠르게 쓸 수 있게 되었다.
타입스크립트를 사용할 수 있게 되었고, jest 프레임워크를 이용해 TDD 방식의 개발 경험도 가지게 되었다. (그럼에도 프론트엔드 실무에서 테스트코드를 사용하는 효율적인 방향에 대해서는 여전히 의문이 있다)
2년차에 접어든 시점에서, 나의 다음번 가장 큰 목표는 Redux Saga 를 사용해 액션 모니터링을 구현하는 방식을 공부해보고, 우리 앱에서 여러 단계에 걸쳐서 작성하고 있는 비동기 로직을 대체하자고 제안하는 것이었다. 그래서 연말 연휴 기간에 공식문서를 살펴보았다. '제너레이터' 라는 개념이 등장했다. 자바스크립트 객체였다. 자바스크립트 개념은 늘 아리송하게 느껴졌다. 아는 것도 조금 다르게 질문을 받으면 대답하지 못했다. 이런 상태로 회사에 다니면서 내가 원하는 수준까지 성장할 수 있을지 알 수 없었다.
나는 막연한 불안감을 명확한 문장으로 추려보았다.
객체지향의 특성을 살리면 중복 제거가 가능하다던데, 객체지향이 뭐고, 객체지향적인 설계란 무엇일까?
자바스크립트의 각 객체에는 무엇이 있고 어떤 특징이 있는지 막힘없이 설명할 수 없는 상태에서 리액트지식을 확장시키는 것, 혹은 새로운 프레임워크를 다루는 것은 사상누각이 아닐까?
적어도 기본적인 알고리즘 유형들은 구현할 수 있도록 해야겠다.(알고리즘을 작성할 수 있는 것,, 그것이 프로그래머니까)
객체지향(클래스 기반 / 프로토타입 기반), 자바스크립트 객체, 알고리즘 (기본유형). 나는 나에게 당장 필요하다고 느끼는 이 세가지를 프론트엔드 프로그래머의 기본기라고 정의했다. 회사를 다닐 때 정말로 헌신적으로 다니는 내 성격상, 세가지나 되는 학습분야를 업무와 병행할 수 없다고 판단했다. 부족한 부분을 알았는데도 채우지 않고 정체된 채 회사를 다니는 것은 회사에게도 나에게도 생산적이지 못하다고 생각했다. 그래서 퇴사했다.
면접을 보러 다니는 요즘, 나를 괴롭게 만드는 것은 기술지식보다는 태도에 관한 질문이다. 면접을 볼수록 대답할 수 있는 기술질문이 늘고 있다.(다행히도!) 하지만 앞으로 어떤 개발자가 되고 싶은가 하는 질문에는 번번이 시원치않은 대답을 하게 된다.
기본기가 탄탄해서 무엇이든 빨리 배우는 개발자, 오랫동안 프로그래밍을 할 수 있는 사람
사실 이게 나의 목표이다. 그런데 선뜻 이 대답을 꺼내지 못하는 이유는 대답을 하려는 순간 앞에서 제대로 답하지 못한 질문들이 스쳐가면서 생각이 많아지기 때문인 것 같다.
'정말 기본기가 탄탄한 개발자가 될 수 있을까?'
기본기, 그것은 도달할 수 있는 목표일까? 지금처럼 계속하면? 정말로? 이러한 의심은 아마 내가 없애려고 해서 없어지는 것이 아니라, 시간이 쌓인 후에 자연스럽게 사라질 거라고 생각한다. 최근에 본 유튜브 영상에서, 성공을 선택이 아닌 의무로 여겨야 한다는 말을 들었다. 되고 싶은 프로그래머란, 내가 꼭 되어야 하는 모습의 다른 표현이다. 자기가 정한 목적지를 의심하면서 걷는 여행자는 없다.
TMI1.
그래서, 요즘에 하고 있는 작업은 다음과 같다.
[모던 자바스크립트] 를 읽으면서 여러가지 자바스크립트 객체를 깊은 복사하는 함수를 직접 만들어보았다.
자바스크립트로 1일 1 알고리즘 문제풀이를 하고 있다. 기본유형을 숙지하는 중이라서 난이도는 매우 낮다.
C# 으로 클래스기반 객체지향 프로그래밍 수업을 듣고 있다.
TMI2.
프로그래머에게 운동은 필수이다. 요즘 기계체조를 배우고 있는데, 핸드스탠드를 성공했다. 성취감이 엄청나서 면접 광탈의 슬픔따위는 별 것 아니라고 느낄 수 있었다 (ㅎ...)
나는 기계체조가 정말 재미있는 운동이라고 생각해서, 주변사람들한테 많이 추천해주고 있는데 다들 (0_0) 하는 얼굴로 감탄만 하다가 대화가 끝이난다. ㅋㅋㅋ
*제너레이터 : 제너레이터 함수객체는 yield 키워드를 통해 제어권을 호출자에게 돌려준다. 그래서 각 단계의 실행완료 여부를 호출자가 바로바로 알 수 있으므로, 원래는 비동기로 동작하는 프로세스를 순서가 보장된 동기프로세스처럼 코드작성을 할 수 있다.