어느 직업이나 그렇듯 정해진 끝이란건 없다. 선택에 따른 결과가 있을 뿐이다.
다만 어떤 직업을 선택했는지에 따라 앞으로 다가올 선택지의 종류도 달라진다고 생각한다. 내 커리어는 프론트엔드 개발자로 시작되었다.
https://madcamp.io/
학교에 학생들을 가둬놓고(!) 1달동안 개발만 시키는 무시무시한 캠프가 있다. '몰입 캠프'라는 이름에 걸맞게 몰입을 위한 최적의 환경을 제공한다. 개발에 대해 아무것도 모르는 상태에서 참여한 이 캠프에서, 어쩌면 개발자라는 진로가 나와 딱 맞을 수 있겠다는 생각이 들었다.
캠프에 참여하기 전까지는 '프로그래밍'이 어떤건지 배웠다. 프로그래밍과 개발은 다르다. 프로그래머가 요구사항에 따라 코드를 적고 테스트해서 기능이 잘 동작하게 만드는 사람이라면 개발자는 그보다 좀 더 큰 그림을 그릴 수 있어야 한다. 어떤 환경에서 어떤 기술을 사용해서 구현할 것인지 선택할 수 있어야 한다.
그렇기 때문에 '프레임워크'와 같은 단어를 학부생 때 듣기 힘들었던 것 같다. 학부 과정에서는 프로그래밍의 기초와 컴퓨터 공학 이론을 위주로 가르친다. 학교 입장에서도 학생들이 개발자가 되든 연구자가 되든 어쨌든 CS 기초를 알고 있어야 하니 한쪽에 치우치지 않게 교육과정을 짜는게 자연스러울 것이다.
정말 다행히도 재밌어 보여서 선택한 컴퓨터 공학이 내 성격과 딱 맞는 전공이었고 학과 수업도 평소에 열심히 들었다. 그래서 개발을 배우면서 속도가 붙었던 것 같다.
혼자서, 친구들과 개발하다보니 좀 더 큰 욕구가 생겼다. 토이 프로젝트말고 사람들이 실제로 사용하는 서비스를 만들고 싶어졌다. 캠프를 나오고 딱 1학기가 지난 시점부터 스타트업 개발팀에서 근무하기 시작했다. 그러던 중 우연히 찾아온 또다른 기회를 잡게 되었고 올해 11월, 정말 감사하게도 많은 격려를 받으며 퇴사했다.
💡 개발자는 자기반성의 직업이다.
새로운 기능에 대한 기획을 들으면서 이리저리 머리를 굴려본다. 기획을 다 듣고 나서 도저히 데드라인을 맞추지 못할 것 같은 부분을 기획자와 협의하고, 남은 부분을 어떻게하면 elegant하게 해결할 수 있을지 고민한다. 빈 종이나 회사 벽에 붙어있는 화이트보드에 설계를 끄적여보고 필요하면 사수님의 피드백도 받는다. 그리고 코드를 적기 시작한다. 코드를 적으면서도 변수명, 함수명을 몇번씩 바꾸고 과연 이게 최선인지 생각한다.
몇달이 지나고 내가 썼던 코드를 다시 보면 '그때 왜 이렇게 적었지? 이렇게 하면 훨씬 깔끔한데!' 라는 생각이 든다. 정말 이상한 일이다. 왜 이런 일이 일어날까? 시작하기 전에 분명 설계 방식도 생각해보았고, 코드를 적으면서도 클-린 코드를 위해 노력했던게 모두 쓸모없는 일이었을까?
아니다. 우리는 항상 그 순간 최선이라고 생각되는 코드를 적는다. 열심히 설계도 하고, 피드백도 받고, 또 코드를 적는 그 순간에도 고민을 한 다음 적어낸 결과물이다. 설계 단계에서 내가 생각한 방식 외의 또다른 가능성에 대해 고려하지 못한 내 잘못이 있을 수도 있다. 하지만 변수명처럼 작은 부분조차 언젠가 고치게 되기 마련이었다. 옆자리 백엔드 개발자분도 같은 고민을 하고 계셨다. 아, 이쯤되면 눈치챌만했다.
리팩토링은 따로 시간을 내어서 하는게 아니다. 초기 스타트업 특성상 빠르게 새로운 기능을 만들어야 할 일이 많았다. 거기에 따라 해결해야하는 버그 양도 많았다. 우리 회사 기획팀이 개발팀 얘기를 정말 많이 들어주는 편이었음에도 새로운 기능을 추가하거나 버그를 고치는 일보다 리팩토링이 우선순위가 되기는 힘들었다.
사수님의 '어디서 봤는데 리팩토링은 따로 시간을 내서 하는게 아니래요'라는 말을 들은 이후로는 내 코드의 부족한 부분이 보이면 바로 뜯어고치게 되었다. (물론 시간이 넉넉할 때 한정이었지만) 어디서 보셨는지는 모르겠지만 그 말에 크게 공감하게 되었다.
'리팩토링 때 고쳐야지'라고 늘 미루던 부분이 해결되니 그 이후에 적는 코드도 깔끔해졌다. 특히 여러번 재활용되는 컴포넌트 부분을 한 번 리팩토링하고나면 그렇게 기분이 좋을 수 없었다. 🥳 물론 리팩토링한답시고 구조를 다 뜯어고쳐서 진행하다보니 기존에 잘 돌아가던게 안 돌아가서 처음으로 리셋한 적도 꽤 많았지만, 그 과정에서도 배운게 있었다. 이렇게 리팩토링에 실패한 친구들을 따로 모아서 이번 공백기에 제대로 도전해볼까한다.
개발자는 자기반성의 직업이다. 매순간 최선이라고 생각한 코드를 적고 나서도 나중에 보면 또 셀프 반성하게 된다. '아 도대체 왜 이렇게 비효율적으로 적었지?' 사수님은 그만큼 내가 성장했기 때문에 그런 이상한 점이 보이는거라고 말씀하셨다. 앞으로 매일까지는 아니더라도 매달, 매년 셀프 반성을 하는 개발자가 되면 좋겠다.
🎉 개발자는 이런걸로 기뻐할 수 있다.
코드리뷰와 풀리퀘로 만든 광선검, 코드리뷰와 커밋으로 만든 작은 삼각형, 이슈를 많이 만들지 않아 생긴 큰 삼각형, 그리고 골고루 다 해서 빚은 정사각형
그리고 코드가 깔끔하다는 리뷰 한줄
원래 있던 회사와는 다르게 규모가 큰 다른 회사로 들어가게 되었다. 스타트업에서는 내 결정, 내 작업이 제품에 큰 영향을 미쳤지만 이 회사에서는 그렇지 않을 것이다. 그동안에 비하면 아주 미미한 영향을 미칠 때가 많을 것이다. 내가 이런 분위기도 좋아하고 성취감을 느끼게 될게 될지는 미지수다. 기대되는 점도 있다. 큰 회사인만큼 체계가 잡혀있지 않을까, 그리고 코드가 탄탄하지 않을까 하는 기대감이다.
중학생 때 내가 하고싶었던 일 중 하나는 많은 사람들 앞에서 강연을 해보는 것이었다. 대학생이 되어서 30명, 많을 때는 50명정도 되는 동아리 사람들 앞에서 매주 발표를 했다. 먼 훗날 몇백, 몇천명이 되는 사람들 앞에서 내가 겪었던 개발기를 풀어놓을 수 있는 개발자가 되고 싶다. 그것도 영어로 할 수 있으면 더 좋지 않을까? 이쯤 되면 실리콘밸리정도는 가줘야 할 것 같다.
취업만이 답이 아니라는 생각도 든다. 프리랜서, 창업, 개발자가 할 수 있는 일이 많다. 책을 쓰거나 강의를 만들어도 된다. 언제가 될지는 모르겠지만 나중에 이런 일이 하고싶어졌을 때, 내 능력이 부족해서 못하는 일이 없도록 지금은 많은걸 배우고 다녀야겠다. 비슷한 생각을 고등학생 때도 했던 것 같다. 특별히 꿈이 없었을 때, 내 성적이 모자라서 나중에 내가 원하는 학과나 학교에 진학하지 못하게 되면 정말 열받을 것 같다는 생각에 열심히 공부를 했다. 그 덕분에 내 적성에 맞는 학과를 찾아서 4년간 잘 다니고 이제 곧 졸업을 앞두고 있다.
개발자로서 일하면서 느낀점도 결국에는 한 사람이 살아가면서 느낀 점이다. '개발자는 자기반성의 직업이다'라고 썼지만 사실 그렇지 않은 직업이 어디에 있을까? 10년, 20년 뒤에도 계속 반성할 수 있는 사람이 되고 싶다.
저도 코드를 깔끔하게 쓰기위해 바꿔보고 시도해보다보니 자기만의 스타일이 생겼네요
정답은 아니지만 다른사람이(내가) 내 코드를 잘 이해할 수 있어야 하니까요!
큰 회사인만큼 체계가 잡혀있지 않을까, 그리고 코드가 탄탄하지 않을까 하는 기대감이다. => 😭🙏