본문 바로가기
일상/자기계발

2023년에 대한 공부 피드백, 내가 깊이 반성하는 점들..

by exdus3156 2024. 1. 1.

2023년을 끝으로 한 12월 31일 주말.. 지금껏 내가 잘못 생각하고 행동한 모든 것들을 되돌아보고 자료를 수집했다.. 그리고 2024년의 나를 위해 길게나마 기록을 이렇게 남겨보았다.


#. 내가 잘못한 점 (반성할 거리)

#. 목표를 잘못 설정했다.

나건일 저자의 <오늘부터 작심만일> 책에는 다음과 같은 내용이 나온다.

2012년 나는 컴퓨터 개발자로 첫 커리어를 시작했다. 지인의 회사에서 인력이 필요하다고 연락이 왔다. IT 기반 스타트업이었던 회사는 인턴 개발자를 필요로 했다. 이떄다 싶었고 아직 부족하지만 도전해보고자 했다. 

하지만 설레는 마음도 잠시였다. 현실은 냉혹했다. 그곳에서 내가 할 수 있는 일은 없었다. 두 달간 프로젝트를 진행했지만 별다른 결과를 만들어내지 못했다. 나름의 성과는 있었지만 내부 직원들에게 미친 영향은 미미했다. 결국 더 이상 일하지 못하고 쫓겨나게 되었다. 회사 대표의 지인을 정리해고할 만큼 당시 나는 정말 쓸모없는 인원이었던 것이다.

대학에서 나는 컴퓨터 공학과를 마쳤다. 성적도 좋은 편이어서 거의 모든 과목이 A++이었다. 그러나 학교에서 배운 내용 중 실제 회사에서 활용할 수 있는 건 하나도 없었다. 그래서 회사 업무를 따라갈 수 없었다. 게다가 회사는 직원들이 누군가를 도와줄 수 있는 환경은 아니었다. 모든 사람이 각자의 프로젝트를 하느라 정신없었기 때문이다.

충격이 컸다. 불성실하게 일한 것도 아니었다. 나는 그때 정말로 내가 할 수 있는 모든 노력을 다했다. 지금까지 모든 경험을 통틀어 가장 집중했던 시간이었다. 그럼에도 불구하고 아무런 성과도 없었다. 하지만 여기서 물러설 순 없었다. 자존심이 상했지만 꾹 참았다. 그리고 다시 그 회사에 문을 열고 들어갔다.

이번에는 방식이 완전히 달라야 했다. 학교에서 거의 전과목 A++을 받았던 내가 왜 회사에서는 아무것도 해내지 못했을까?

대학에서 가르치는 교육과 실제 산업 현장 업무에는 괴리가 있다. 대학은 컴퓨터에 대한 일반적인 지식을 전달해준다. C언어, 자료구조, 알고리즘, 운영체제 등을 다룬다. 그러나 현장은 달랐다. 내가 어떤 언어를 할 수 있는지, 얼마나 알고리즘을 잘 짜는지가 중요한 게 아니었다. 지금 당장 프로젝트에 필요한 기능 구현을 할 수 있는 기술을 가진 사람이 필요했다. 스타트업에서 지금 당장 론칭할 수 있는 시스템을 구현할 수 있어야 한다. 자료구조, 알고리즘에 대한 이해가 부족해도 괜찮다. 개념이 필요할 때 학습하면 된다. 그전에 기능 구현이 더 중요하다.

 

인프런 Rookis 님의 강의에서 아래와 같은 답변도 들었다.

취업이 중요한게 아니라, 취업하고 나서 2~3년차가 훨씬 더 중요합니다. 이제 본인의 선택이에요. 스스로 훈련을 하고 연습을 하지 않으면 나중에 진짜 여러분들이 연차가 쌓여서 신규 콘텐츠를 바닥부터 시작할 때 그야말로 멘붕이 옵니다. 회사는 절대 공부시켜주지 않아요. 본인이 혼자 다 해야해요. 회사는 당신의 어떤 미래도 보장해주지 않습니다. 학교가 아니에요! 저연차 때는 뭔가 회사가 학교 같고, 실제로 사수가 붙어 케어해주니까 그렇게 느껴지는데, 그거 잠깐입니다. 회사는 정말 소름끼칠 정도로 여러분의 성장, 인재성에 관심 1도 없습니다.

 

신티제 저자의 <개발자는 처음이라> 라는 책에서는 아래와 같은 내용을 발췌했다.

내가 아무리 ‘저는 개발의 본질부터 배웠기 때문에, 어떤 언어나 기술을 사용하시던 금방 적응할 수 있습니다.’라고 해도, 그분들이 내 포트폴리오를 보면 C와 C++을 사용해 본 것이 전부이고, 시중에 널리 사용되는 기술을 사용한 흔적은 눈을 씻고 찾아봐도 없기 때문에 취업 시장에서는 많이 냉대를 받았던 것 같다.

물론 나는 내 학원 생활이 후회되지는 않는다. 그 긴 기간 동안 얻는 경험은 돈 주고도 못 사는 경험이기 때문이다. 하지만 그런 값진 경험을 취업 시장에서 제대로 봐주는 사람은 많지 않다는 것을 취업 시장에 뛰어들고 나서야 알게 되었다. 오히려 그쪽은 특정 기술, 예를 들면 자바와 스프링을 6개월만 전문적으로 배운 사람을 좀 더 선호하는 것이다.

사실 나는 그 당시에는 잘 이해가 되지 않았다. 나는 심지어 그런 기술을 직접 만들어서 써본 사람인데 이 시장에서는 왜 이렇게 나를 냉대하는지 모르겠던 시기가 있었다. 하지만 이후 취직을 하고 사용해 보지 않았던 언어와 프레임워크를 사용하게 되었는데, 생각보다 적응의 시간이 필요하다는 것을 알았다. 물론 내 학원 경험이 부질없다는 말은 아니다. 이는 개발의 깊이가 깊어지면 깊어질수록 빛을 발한다. 하지만 그런 접해보지 못한 기술을 익히는 데 있어서 어느 정도의 적응 기간이 필요하기에 취업 시장은 애초에 그런 쪽에 특화된 사람을 더 필요로 하는 것이다.

 

공통점이 무엇일까? 개발자로 일하고 싶어 하는데도 정작 개발자라는 일(목표)에 대해 거꾸로 생각하지 않아서 커리어를 힘들게 준비하고 시작했다는 점을 강조하는 것이다.

애초에 개발자란 무엇인가? 최종 목표로 가는 자신만의 길에 개발자가 되는 것이 있다면 나는 이 질문을 진지한 마음으로 스스로에게 물어야 했다. 나는 지금까지 개발자라는 직업에 대해 진지하게 질문을 던진 적이 없었다. 그냥 코딩이 재밌고 결과물이 매력적이라는 단순한 이유로 산업에 뛰어들었다.

하지만 개발자의 본질은 직업이다. 직업이란 상품을 만들고 판매해서 돈을 버는 비즈니스다. 개발자는 소프트웨어를 만들고 서비스해서 돈을 번다. 

개발자로 취업한다는 것은 곧 개발자라는 직업을 얻겠다는 것이며, 이것은 곧 소프트웨어를 만들고 고객들에게 서비스해서 돈을 버는 그룹에 소속되겠다는 것이다.

취업이란 실무 능력을 증명하는 일련의 과정이다. "실무 능력"이라는 추상적인 단어에 대해 내가 깊게 생각해보지 않은 것이 패착이었다. 무슨 IT 인재가 되니, 성장하는 개발자가 되니, 개발의 본질을 배웠니, 코딩이 재밌니 뭐니, 기본기가 중요하니 뭐니, .... 너무 이상적인 개념으로 대충 생각해버리고 말았다. 정말 그렇게 생각했다. 부끄럽다.

실무 능력이란 "실제 서비스를 운영하면서 요구되는 모든 업무를 수행하는 능력"이다. 핵심 가치는 실제 서비스 운영이다. 컴퓨터에 대한 전반적인 지식은 중요하지만 당장 요구되는 것은 아니다.

면접을 위한 토이 프로젝트(포트폴리오) 구현, 개발의 본질, 컴퓨터에 대한 깊은 이해 따위는 핵심이 아니었다. 나는 너무 "면접 통과" 단계만 신경썼다. 그래서 소프트웨어 산업 및 개발자의 업무가 신입으로 입사하고싶은 나에게 무엇을 요구하는지 몰랐다.

나는 개발자 취업이라는 문제를 거꾸고 생각해 본질을 역추적해야 했다. 개발자란 돈을 벌 수 있는 실제 소프트웨어를 개발하고 운영하는 일련의 과정에서 벌어지는 문제를 빠르고 기민하게 대응할 수 있는 사람이다.

실제 서비스 구현이란 목표를 가지고 거꾸로 시작해야 한다. top-down이다. bottom-up이 아니다. 즉, 모든 기술을 마스터하고 숙련한 뒤 서비스 구현에 뛰어드는 것이 아니다.

10년차 개발자조차 모든 기술을 알지 못한다. 원래 개발이라는 업무가 그런 것이다. 서비스 구현이란 목표를 향해 출발하여, 개발 과정에서 나타나는 새로운 기술을 빠르게 습득하고, 모르는 문제를 구글링해서 해결하고, ... 이런 것들이 개발자의 기초 체력이지, 모든 것에 통달하는 것이 아니다.

평생 공부라는 것이 모든 기술에 능통한 교수님이 되라는 뜻이 아니다. 기존에 내가 알고 있는 것만으로는 새로운 서비스를 구현할 수 없기 때문에 새로운 기술을 빠르게 이해하고 습득해서 목표에 맞게 적용하는 민첩함을 갖추라는 뜻이다.

많은 사람들이 착각하는 사실이 있다. 우리는 한 분야에서 성공하기 위해 관련된 모든 것을 신경써야 한다고 생각하지만 그렇지 않다. 우선순위가 명확해야 되며 큰 효과를 내는 요소에 더 집중해야 한다. 간략하게 정의된 본질에만 집중해도 빠르게 성장할 수 있다. from <오늘부터 작심만일>

 

나는 착각을 해버렸다. 나는 좋은 개발자에 대한 잘못된 인상을 가지고 있었다. 나는 실력 좋은 개발자란 알고 있는 것을 조합해서 새로운 서비스를 만들어내는 사람이라고 생각했다. 그래서 공부도 그렇게 했다. 모르는 것이 나오면 알 때까지 파고 들었다. 하지만 모든 기술을 알고 난 다음에 원하는 제품을 만든다는 것 자체가 말도 안 되는 일이라는 것을 늦게 깨달았다. 쓸데없는 깊이까지 들어갔던 것이다. 그러고서는 나중에 까먹어버리니... 비효율의 극치였다.

취업에 대해서도 잘못 생각했던 것 같다. 개발자의 일이란 돈 버는 일이다. 지금 당장 기능 구현 및 운영에서 벌어지는 문제를 이해하고 해결할 수 있는 사람이 개발자다. 따라서 취업 후에 회사의 기술 스택을 공부한다는 것은 말도 안 된다. 신입에게 그런 투자가 가능하다면 여유 있는 대기업일 것이다. 이것이 "돈 버는 소프트웨어"라는 단어에 숨은 의미였다.

나는 기술 스택에서 모르는 것이 있으면 취업에 실패할 것이라고 생각했다. 하지만 기능을 구현하는 과정은 내가 미리 머릿속에 있는 필요한 지식을 꺼내와서 조합하는 일이 아니다. 모든 기술에 통달하는 것은 숙련된 개발자라도 힘들다. 기능에서 시작해서 필요한 것을 발견하고 습득하고 구현하는 일이 본질이다. 


 

#. 피드백

거꾸로 가야 한다. 물론 프로그래밍 언어나 철학에 대한 이해도 중요하다. <개발자는 처음이라>라는 책에서도 개발 자체의 본질을 알아야 하는 것도 중요하다고 말했다. 하지만 나는 일을 하는 관점에서 개발자라는 직업에 다가가야 했다. 개발자의 일이란 실제 서비스를 기획하고 개발하고 운영하는 힘과, 그 과정에서 벌어지는 문제를 해결할 수 있는 사람이다.

거꾸로 가야 한다. 서비스 개발에서 시작해서 역방향으로 내가 모르는 개념을 탐지하고 그것을 이해하고 블로그에 정리하고 포스팅해야 한다. 운영체제나 네트워크 과목, 자료구조와 알고리즘도 중요하지만, 실제 서비스에 어떻게 이 개념들이 접목되는지 모르는 이상, 나는 실제 서비스 개발에서 시작해 거꾸로 가면서 모르는 것을 발견하고 해결해나가는 힘을 길러야 한다. 더 이상 bottom-up 방식으로 공부해서는 안 된다.