어느덧 취업한지 6개월이 넘어간다. 아직 실무에 ㅅㅣ....정도 경험하고 있는거같은 상황이지만, 이제 회사 프로덕트에 무슨 일이있고, 무슨 문제가 있는지 말로듣고 알아들을 정도는되고, 그중에 아주 간단한건 고칠 수도 있는 수준이 되었다.
나도 회고록 써본다.
첫 1개월은 Golang 코딩 실습. 말그대로 언어를 배워서 간단한 RESTAPI를 만드는 연습을 했다. 뭔지도 모르는 자료 이름들을 가지고, 어떻게든 HTTP request를 읽어내고, response를 내보내는 연습을 했고, 그 과정에서 데이터들을 다뤄내는 연습들을 했다.
다음 4개월은 회사 제품에서 돌아가는 API서버를 python -> Go 로 옮겨적는 작업, 트랜스 코딩을 진행했다. 회사측에서는 다른 일정으로 바빠서 할 짬이 잘 나지않는일이면서도, 내가 할 수 있는 수준의 일이라고 생각했던듯 하다. 이 과정에서나는 Golang으로 코딩하는 스타일을 거의 정립했다고 생각한다. 이제 뭔가의 아이디어가 있으면 그걸 Golang이 가지고있는 패키지나 함수들로 표현해낼 수 있는 정도가 되었다.
이후 1개월은 회사 프로덕트 코드의 전체를 파악하는 시간을 가졌다. 개인적으로는 가장 힘든 시간이었다.
1. 초보인 나에게는 다른사람의 코드가 아무리 잘 짜여져 있더라도 코드가 너무 미로같았고,
2. 내가 가진 도메인지식은 제로에 가까웠고
3. 나는 내가하고있는일이 언제끝날지 가늠조차 할 수 없었다.
이 세가지 이유로 나는 최근의 1개월이 꽤나 고된시간이었지만, 결국 개발자가 하는 모든 경험을 표현할 수 있는 말로 이 시간을 정리 할 수 있었다.
"해보면 어떻게 되긴 되더라."
최근에 python으로 API개발할 일이 하나 생겨서 진행하고있는데, 리턴값으로 err을 지정하지 않는게 이제 너무나 부자연스러워 보일 정도이다.
물론 여기서 python이 나은가 Golang이 나은가를 논하고자 함은 아니다.
내가 Golang에 쏟은 시간만큼 Python에 쏟았다면, 나에게는 지금 만큼의 Python에 대한 깊은 이해가 있었겠지.
다만 나에게는 이제 모든 변수에 type이 존재하고, 그 type이 쉽게 바뀌지 않으며, class보단 Struct와 Interface가 더 익숙해졌을 뿐이다.
Wecode에 다닐 때에는 그저 구현에 집중했었다. 분기가 어디서 나뉘는지, 어디서 리턴하는지, 효율적인지 비효율적인지 별로 따지지 않았고, 그걸 따지고있을 시간조차도 부족했다. 구현할것만 산더미 였으니까. 하지만 트랜스코딩 작업을 거치면서 CTO님에게 Seperation of Concern 스타일의 코딩을 배우게 되었는데, 이걸로 인해서 내 코드의 가독성이 꽤나 올라갔다고 생각한다.
짧게 요악하자면, 불필요한 Else를 줄이고, 예외사항이나 에러상황에서 바로바로 리턴하는 스타일의 코딩인데. 각 코드블럭에서 코드가 어떤작업을 수행하는지 쉽게 알 수 있기 때문에, 훨씬 효율적인 코딩을 할 수 있게 되었다.
나는 보안업계에 어쩌다보니 들어왔다. 물론 보안업계에 뭔가 혁명을 일으키고자 큰 뜻을 품고온건 아니다. 어쩌다보니 괜찮은 대우를 약속해준 CTO를 만났고, 와보니 내가 성장하기엔 더할나위없는 회사였다. 그리고 그 회사에 기여하기위해, 지난 몇달간, 그리고 지금도 수많은 Domain 지식을 습득해야한다. 회사에서 주로 다루는 기술은 네트워크 카메라 / 라즈베리파이 / 알람센서로 정리할 수 있다.
내가 회사 프로덕트의 코드를 파악하려고하면 프로그래밍 언어는 둘째치고 이 놈들이 날 가로막기 시작한다. 날 멀뚱히 쳐다보고 있는 저 IP 카메라는 ONVIF와 RTSP프로토콜을 지원한댄다. 이 카메라의 작동원리를 우선 알아야 한다. 그래서 열심히 검색하고, 필요한 지식들을 모아간다. 그리고 그걸 코드에 녹여내었으면, 라즈베리가 어떻게 IP카메라와 통신하는 과정에서 XML / WS Discovery라는 개념을 알아야 하고 또 그것에 대해서 공부하고 .... 뭐 이런식의 모르는 단어가 튀어나올때마다 하루씩 공부를 해야하고, 그만큼 내가 약속한 일정은 반일씩, 하루씩 미뤄져간다. 나는 초조한데 그것에 대해서 아무말도 하지않는 CTO님에 대해서 어떨때는 감사하고, 차라리 어떨때는 그냥 닥달해줬으면 싶기도하고, 오만가지 생각이 다든다. 그리고 항상 개발이나 코드파악에 필요한 만큼만 도메인 지식을 이해하고 넘어가는데, 이렇게 딱 필요한 수준으로만 배우고 넘어가는것이 맞는지도 의심이 갈때가 있다.
나는 처음 개발자로 구직을 시작할 때, 트렌디한 언어를 구사하며, 데이터베이스에 해박한 지식을 가진 개발자가 되는것을 대략의 목표로 삼았었다. 하지만 지금은 해야하는것을 해낼 수 있는 개발자로 혹은 직원으로 그 목표가 전면 수정되었다.
개발자가 되고, 스타트업에 오고나서 보니 확실히 보이기 시작한다. 회사는 당신의 가치를 당신의 잠재능력으로 평가하는게 아니고, 당신이 해온 업적과 결과물들로 평가한다는걸 말이다. 결국 연협을 잘하려면, 개인은 회사의 빼놓을 수 없는 구성원이 되어야 한다. 그러기 위해서는, 회사가 돌아가기 위해 필요한 무언가에 있어서 기여를 한다는 말인데, 이걸 개발자의 말로 치환하면 결국 프로덕트 혹은 코드가 된다.
결국 내가 개발자로 성장하고 돈을 많이 벌려면, 나를 써준 회사에서 내가 코드로써 뭔가를 기여하고, 내가 기여한 코드와 프로덕트로 수익을 보고, 본 사실에 대해서 인정할 수 있어야 나의 가치를 인정해준다는 말이다. 그리고 그런 개발을 함에 있어 내가 무슨 기술을 다룰 줄 아는지, 뭘 해봤는지, 뭘 모르는지 같은 문제들보다 중요한 문제는, 무엇을 해야하는지이다.
단순한 수학적인 접근이다.
당장 회사에 새로운 웹페이지가 필요하다. 회사에서는 세 가지 선택지가 있다. 첫 번째 SI, 두 번째 채용, 세 번째 내가 배워서한다. 첫 번째나 두 번째는 회사에게 당연하게도 비용을 초래할 것이다. 근데 세 번째 선택지로 내가 업무하는 시간을 늘려서 하게 된다면? 회사에서는 나로 인해 구인 / 채용과 이에 들어가는 경제적인 가치를 모두 절약한 셈이 된다. 그렇다면 나는 이러한 가치에 어느정도 상응하는 보상을 회사에 당연히 요구해도 되는것 아닐까?
이러한 생각들이 머리에 자리잡고 나니, 내 개발자로써 이정표처럼 생각하고 있던 커리어는 꽤나 퇴색되고, 얼른 회사가 성장하는걸 보고싶어졌다. 그게 내 성장이고, 내 성적표니까.
CTO 님이 내게 회사 깃헙주소를 넘기며, 나에게 Golang에 대해서 가르치며, 혹은 도메인 지식에대해서 설명하면서 항상 했던말이 있다. "음 이게 좀 생소하고 좀 어려워 보일 수는 있는데요... 근데 뭐 다 할수있어. 하나하나 하다보면 할 수 있어요."
나는 이말이 굉장한 기만인거같았다. 뭔가 그 경지에 간 자만이 할 수 있는 말인줄 알았다. 근데 되더라. 그 과정이 힘들긴한데. 해야되는 일을 파악해서, 작게 작게 쪼개서, 공부하고, 코드로 구현해 내고, 끝나고 나니까 다 내가 하긴했더라. 그래서 지금은 뭔가 나한테 지시가 떨어지면, 허허헣 하고 웃을 뿐이다.
정확한 일정산정을 할 만큼 업무파악 능력을 키워보고싶다. 개발 역량이야 당연한거고, 그걸 해내는 일정을 정확하게 계산하는게 아직 어렵다고 느껴지기도하고, 나에게 필요한 요소인것 같아서.. 그걸 좀 키워나가 보고싶다.
펌웨어개발자 간지나네요 응원합니다 경연님 !!