성장트랜지스터 (응용능력편)

“하루의 33%는 멘토와 함께 보내고, 33%는 동료들과 그리고 나머지 33%는 후배와 함께 보낸다.”

어느 한가로운 저녁시간 수 많은 영감을 얻기위해 Youtube에서 여러 영상을 보던중 접하게된 문장이다.

나는 이 문장을 접하자마자 머리에 망치를 한대 맞은 느낌이 들었고, 비록 짧지만 지난 시간을 돌아보게한 정말 치명적인 문장이였다.

사회생활을 시작하면서 동료들 그리고 멘토분들과 시간은 보냈었지만 나머지 33% 후배와의 시간을 전혀 보내지 못했던것이다.

물론, 동아리 후배들과는 간간히 연락을 하고 지냈었지만 커리어방향이 달랐기 때문에 직접적인 영향을 주진 못했다.

되돌아보면 동아리 시절에는 멘토(교수님)와 동료들(동아리원들) 그리고 후배들(동아리 후배들)과 10평 남짓 공간에서 학술적인 지식과 대회를 나가면서 로봇도 만들고 별의 별짓다했는데… 그 때에 비하면 영혼이 없어진 기분이 많이 들었다.

나는 현재의 상황을 놓고 여러가지 생각을 하기 시작했다.

  • 한창 빠르게 서비스를 만들어 나가야하는 상황에서, 스타트업에서 후배 개발자와 함께하는건 사치인가?
  • 나보다 뛰어난 개발자를 채용해서 팀을 빌딩 해야하는 상황에서 주니어 개발자를 채용하는게 말이나 되는가? 오히려 팀의 전투력에 마이너스 영향을 주는 건 아닐까?
  • 단순 채용을 한다고 해서 팀의 생산성이 향상이 된다고 생각하진 않는다는 걸 나는 잘 알고 있다. 시간과 노력을 할애해야하기 때문에 1명에서 2명이 되었다고 생산성이 2배가 늘어나는 것이 아니라 1/2배가 된다는 걸 알고 있다.
  • 나는 무슨 천운?을 타고 났는지 대학졸업과 동시에 첫 커리어를 스타트업에서 시작을 했는데, 세상 어딘가에 과거 나와 같은 주니어가 있지만 기회가 없어서 새싹을 피우지 못한채 그늘에 있지않을까? 혹여 안목좋은 회사에서 먼저 잡아가는 건 아닐까?

이러한 수 많은 고민과 갈등 3일 끝에 나는 동료들 앞에서 선언?을 했다.

“우리 iOS팀에서 주니어를 채용해봅시다. 그리고 여러분은 싫겠지?만 채용라이브도 해봅시다"

이 말과 동시에 팀에서는 기대와 불안, 걱정, 흥분등 여러 감정들이 뒤섞이기 시작했다.

나도 알고 있다. 매일매일이 새롭고 일도 다이나믹한 상황이고 주변 다른 팀의 인원들은 늘어나고 있고 바쁜 우리 iOS팀.. 거기에 주니어 채용을 위해서 라이브행사와 이력서 검토 그리고 면접까지… 얼마나 힘든지..

나는 진심을 다해서 다음과 같이 동료들에게 이야기를 했다.

“저 또한 iOS개발자가 되기전엔 웹이나 메카트로닉스 개발을 주로했었고 iOS 1도 모르는 상태에서 vingle에서 iOS개발을 시작했어요. 되돌아보면 swift를 잘하고 iOS 잘아는 것 보다 가장 중요한건 응용능력과 학습능력 그리고 열정?이라고 생각해요. 제 2의 David이 탄생할 수 있도록 협조 부탁드려요.”

동료들은 끝내 내 제안을 받아들였고, 나는 계획한대로 채용을 진행하기 시작했고, 8월 초에 결국 주니어 2명을 채용하게 되었다.

동료들의 진심은 어떠했는?진 모르겠지만, 채용라이브부터 시작해서 이력서검토 그리고 면접진행까지 3주 기간동안 도와주셔서 이 글을 통해서 감사의 인사를 남겨봅니다. 그리고 현재 채용된 주니어 분들은 오늘도 열심히 배우고 성장해 나가고 있습니다. :]

서론이 길었는데, 사실 수 십명의 지원자들을 만났고 정말 아쉽게 함께하지 못한 분들도 많았는데, 비록 당근마켓에서는 함께하지 못했지만 다른 곳에서 빛을 발휘하기를 기원하는 의미로 “성장트랜지스터”라는 글을 쓰게 되었다.

성장트랜지스터?

우선 트랜지스터란?

내 기억을 돌아보자면, 학부시절에 꽤나 태워먹었는데 그 게르마늄타는 향기로운 냄새 그리고 오실로스코프를 통해서 증폭되는 신호를 보았을 때 그 통쾌함도 잊지 못한다.

사전적으로 설명하자면 게르마늄(요즘말로는 저마늄…), 실리콘으로 만든 반도체를 이용하여 신호 또는 전력을 증폭하는 증폭기 역할을 하거나 스위치 역할을 하는 소자를 의미하는데 정말 능력자같은 소자다.

성장을 하기 위해서는 어떠한 능력이 있어야하는데, 앞서 동료들에게 선언했던 내용에 따르면 응용능력과 학습능력을 언급한적이 있다.

따라서, 성장트랜지스터 글에서는 위의 두가지 능력을 향상시키기 위한 행동과 노력을 나의 경험을 녹여내며 글을 써볼려고한다.

응용능력

주니어 개발자에겐 현실적으로 많은 것을 기대하긴 힘들다. 물론 개발자로써의 회사경험을 짧게한 주니어도 있지만 대부분은 학부졸업생이거나 최근에 우.순.죽.순 많이 늘어난 학원출신들이 대부분이다. (놀랍게도 당근마켓 iOS 인턴 지원자 대부분도 그러했다.. )

그래서 회사에서 경험할 수 있는 특유의 커뮤니케이션 능력과 일하는 문화등을 잘모르는데 지극히 정상이라 생각한다. (물론 독서를 통해서 접한 분들도 있지만, 인생은 실전이다…)

그렇게 개발자 커리어로 처음으로 다이빙한 개발자에게 가장 중요하고도 가져야할 주무기는 응용능력이라 말하고 싶다.

요즘 주니어 개발자가 되기위해 준비한 분들은 동아리활동을 하거나 개발을 하는 특정 커뮤니티활동(DDD같은것)을 참여하거나, 부트캠프, 학원등을 열심히 다니는데, 그 활동 과정에서 작성한 코드는 현업에서의 코드량과 비교하면 진짜 새 발에 피의 헤모글로빈 세포만도 못할 정도로 작고 귀엽다.

이번에 채용된 주니어분들에게도 산책하듯이 당근마켓 iOS프로젝트를 가볍게 둘러봤었지만, 그 분들의 표정에선 설레임과 기대감 그리고 두려움이 많이 느껴졌었다. 나도 마찬가지다, Vingle의 iOS프로젝트를 처음접했을 때 같은 감정이였다. objective-c와 swift(당시에 Swift 비율이 3%였던걸로 기억…)의 합동무대였는데 당시 생각만해도 아찔하다.

당시 입사 이틀날에 스승님으로 부터 미션이 떨어졌는데, objective-c로 된 user list를 참고해서 swift로 아예 새로 만들라는 것이다.

나는 참 영악하게도 현재 프로젝트에 최근에 작성된 코드를 참고해가면서 코드를 써내려가기 시작했다. 지금 생각하면 굉장히 우습지만?그 때 당시에 UITableView와 Delegate, DataSource, cell을 작성하고 뚝딱뚝딱하고 user list end-point호출하는 기존 로직을 참고해가면서 작성하는데 정말 놀라운건 사실 cell의 reuse매커니즘이나 data source가 어떤 역할하는 건지 delegate가 어떤 역할하는건지 1도 모르는 상태로 만들고 있던 것이다. (정상이 아닌거지)

한줄로 요약하면 기존 코드를 파악한 후에 응용해서 살짝 기대하는 스펙에 맞게 변형을 했을 뿐. 물론 이렇게 하나의 Feature를 끝낸 이후에는 이론적인 개념 공부를 했다.

이렇게 빠르게 Feature를 개발해내고 잠재성을 발휘할 수 있었던 것의 가장 큰요인이 응용능력이라고 생각한다.

물론 이러한 응용능력은 하루아침에 생긴건 아니다. 학부시절 4년 동안 내가 해왔던 습관과 훈련에서 비롯된 것이라 생각한다. 그래서 과거 경험사례를 이야기해보려한다.

사례

위의 사진을 보면 학부시절.. ATmega2560에서 구현한 LED켜는 로직을 ATmega128로 옮겨서 실험을 했던 사진이다. 정말 별것도 아니지만 기존것을 다른 형태로 변형해나가면서 응용을 놀이처럼 했던것이다.

또 다른 일화로는 단순 MCU뿐만 아니라 다양한 블루투스 기능을 제공하는 소자들을 제조사별로 다양하게 구입해서 연동을 해보았는데 제조사마다 스펙이나 필요한 전류나 전압이 다르다만 결국 본질이나 기본적인 개념은 변하지 않는다는 사실을 깨닫게 된다.

제조사 마다 스펙은 상이하지만.

  • Rx/Tx 로 구성되어있다.
  • GND(접지)가 필요하다.
  • Payload 구성은 다르지만 블루투스가 거기서 거기이기 때문에 데이터를 송신하는 과정에서 호핑하는 방식은 동일하다.
  • 등등등

이렇게 다른 제조사의 소자를 바꿔가면서 응용함으로서 기본적인 개념과 이론을 자연스럽게 흡수할 수 있었다.

또한 내가 들었던 수업에서도 찾을 수 있었는데,

당시 다른 교수님 수업들은 대부분 이론에 대한 이해를 먼저한 다음에 프로젝트를 진행한 반면에 강교수님의 임베디드 시스템에 대한 수업은 굉장히 남달랐다. 일화를 소개하자면 다음과 같다.

  • 강의 샘플 코드는 교수님이 연구하고 있던 소스코드 수 천~만줄 되는 라이브러리를 냅다 학생들에게 던져주시고 멘붕을 하사하셨다. (다음날 학생 1/3이 수강취소를 했던걸로 기억한다.)
  • 카메라 모듈 예시로 드라이버 코드 작성하는 수업을 배웠는데 과제로 색상을 식별하는 센서를 연동해오라면서 센서를 던져주셨다. (강의를 완전 찢어 놓으셨다. 물론 학생의 멘탈도 ?찢어 놓으셨다.)
  • 자신이 만들고 싶은 제품을 기획을 하라고 하셨다. 그리고는 그 기획을 바탕으로 수업에 배운 센서나 소자들을 반드시 활용해서 구현해오라고 하셨다.

겉으로 보면 교수님은 학생들을 괴롭히는거 같지만 서도 교수님이 추구한 학습방향은 응용하는 과정을 통해서 진리를 깨닫기를 바래왔던것이 아니지 않았을까?

마무리

나는 갓 현업에 아니 전쟁터에 뛰어든 주니어 개발자들 또는 개발자로서의 커리어를 준비하고 있는 분들에게 이렇게 말해주고 싶다.

이론이나 개념을 먼저 학습을 하고 난다음에 코드를 작성해보는 것도 좋지만 만약 if-else나 사칙연산, function이랑 class, 변수정도 생성할 줄 안다면 같은 동작을 하지만 빠르게 다양한 형태들로 바꿔가면서 구현을 하는 연습을 먼저 빠르게 해보면 좋을꺼같다.

예를 들어

callback을 이용해서 코드를 작성했다면 PromiseKit으로 같은 기능을 구현해보고 그 다음엔 swift의 언어의 한계로 다른 방식으로 응용하기 힘든 상황이라면 javascript를 이용해서 async/await로도 구현해보고 말이다.

또 다른 예를 들면

Alamofire를 이용해서 networking도 해봤으면 URLSession을 이용도 해보고 그래도 성에 안찬다면 android okhttp로도 해보고 말이다.

만약 현업에 있는 주니어라면 동료가 작성한 코드중에 가장 잘 작성한 걸 옆에 두고 모방을 해가면서 꼬아가면서 feature를 만들어보는 것도 좋다. (물론 그대로 가져다써서 문제를 일으키진 않길 바란다 :] ㅋㅋ)

이러한 훈련을 열심히해서 본인의 주무기로 키워낸다면 언젠간 커리어를 시작해서 현업에서 빠르게 두각을 나타내는 슈퍼주니어개발자로 도약하게 될 것이라고 믿어 의심치않는다!

요약

  • 다양한 방식으로의 응용을 통한 진리와 본질의 깨달음
  • 하나의 일종 놀이처럼 즐기기
  • 현업은 이론을 학습하는 학교가 아닌 전쟁터다. 응용능력을 무기삼아 전쟁에 참여해보자.