자. 당신이 다니는 회사는 개발자들이 그토록 오고 싶어하는 유명한 회사라면 이글을 읽을 필요가 없다. 그런데, 소규모의 평범하기 그지없는 회사라면 그래서 웬만한 경력 개발자들은 결코 오지 않는 곳이라면 선택은 신입뿐이다. 그리고 그 신입들의 대부분은 무지하게 평범하다.

전공이 컴공이면 다행이지만, 대부분은 아마 2~4년 대학을 나와서 안드로이드앱과정이나 자바-스프링과정을 3~6개월 정도만 배우고 나온 친구들이다. 그 6개월도 채 안되는 시기에 Java, Spring, Mybatis, MySQL, Oracle, jQuery, html, css, Android 등을 모두 배운다. 과연 얼마나 깊이가 있겠는가? 게시판이나 제대로 만들 줄 알면 정말 대단한 인재인 것이다.

그런데 필자 역시 마찬가지였다. 그냥 겉만 햩고 나온 것이다. 대부분의 중소개발업체에 이력서를 내는 신입들은 대부분 이와 같을 것이다. 그러므로 우리가 할 수 있는 일은 이 수박겉만 핱은 신입들을 제대로 교육시켜서 쓸만한 개발자로 만드는 일이다.

신입 개발자들의 가장 힘든점

우리가 신입일때 생각해보자. 대부분의 사수가 있다면(운이 좋다면 실력있는 사수) 회사내의 소스를 주고 분석하라구 한다. 그리고는 기능하나씩을 추가시키거나 버그수정, 테스트등을 시킨다. 물론 이것도 교육이 될 수 있으나, 거의 대부분 카피앤페이스로 구현하게 마련이다. 운좋게 잘 돌아가면 인정받는 것이고, 문제가 생기면 욕을 먹는다. 하지만, 신입들한테 가장 어려운 것은 바로 기존의 그 방대한 소스를 보고, 기능을 추가하거나 수정하는 것이다. 특히, 그 소스가 기가막히게 잘 짜인 소스가 아니라면 더 힘들다. 그냥 복사와 붙여넣기의 달인뿐만 아니라 (소스보는) 눈치의 달인이 된다.

건물을 짓는다고 생각해보자. 처음부터 그 방대한 도면을 주고, 1층 확장공사를 해보라고 신입한때 지시하면 어떻게 되겠는가? 대부분의 신입은 거기서 숨이 막힌다. 무엇을 먼저 봐야 할지, 무엇을 먼저 해야 할지, 무엇이 더 중요한지 전혀 배우거나 경험해보지 못했기 때문이다. 신입들에게 가장 먼저 필요한 것은 이론과 그것을 부담없이 테스트할 수 있는 연습장이다. 즉, 배운 것을 부담 없이 해볼 수 있는 작업장이 필요한 것이다. 그리고 그것을 제공해야 하는 사람이 수퍼개발자이다.

수퍼 개발자가 할 일

개발팀내에 가장 잘하는 개발자가 어디든 있다. 그 사람은 그 회사의 수퍼개발자이다. 수퍼개발자가 가장 할 일은 두 가지이다.

  1. 개발자 교육
  2. 실습 환경 구축

먼저 수퍼개발자는 업무관련 교육을 제외한 개발 관련교육은 자신이 직접 신입을 교육시켜야 한다. 어설프게 2,3년 선임이 교육시키는 것이 아니라, 오랜 경험과 이론을 갖춘 수퍼 개발자 자신이 직접 해야 된다. 여러분이 운전을 배울 때 10년 넘은 베테랑 운전자한테 배우는 것이 안전하겠는가? 이제 1~2년된 운전자에게 배우는게 안전하겠는가? 1,2년 운전자는 고작 스킬을 가르치지만, 베테랑 운전자는 경험이 묻어있고, 농축된 철학이 가미된 기술을 알려준다.

수퍼개발자가 해야 할 이유는 분명하다. 그들은 후임 개발자들이 뛰어놀 수 있는 공간을 만들어주어야 한다. 개발방법론을 구축하고 프로세스를 만들고, 프레임워크를 제품을 적용하고 신기술을 도입하고 이것들을 갖고 놀 수 있는 환경을 구축하는 것이 가장 중요한 일이다. 제품에 대한 대부분의 개발과 핵심은 본인이 다 움켜지고(가르쳐주지도 않고) 간단한 기능만 넘겨서는 안된다. 물론, 처음 제품을 개발할때는 그럴수밖에 없겠지만, 서서히 본인의 직접 기능구현하는 부분은 줄여야 한다.

다른 개발자들과 경쟁하는 수퍼개발자가 가장 어리석다. 수퍼개발자는 경쟁자가 되어서 안되고, 코치가 되어야 한다. 그렇다고 코딩을 하지 말라는 뜻이 아니다. 다만 그 코딩은 다른 개발자에게 제공되어지고 도움이 되는 코딩이어야 한다. 더 핵심적이고 난해한 것을 할 수도 있다. 그러나 그것을 움켜쥐는 것이 본인이 무기라고 생각하지 마라. 수퍼개발자의 최대 무기는 자신의 개발자들이 점점 실력있는 개발자가 되는 것이다.

이제 겨우 막 학교나 학원을 나온 친구들에게 방대한 소스를 분석하라고 하지 마라. 버그를 잡으라고 하지 마라. 먼저, 그들의 실력을 확인한 후에 업무에 필요한 기술을 가르쳐라. jQuery, Spring을 사용한다면 관련 책을 사주어 스터디를 통해 업무에 맞게 교육시켜라. 그리고 난 후에 그들이 직접 맘껏 개발할 수 있도록 작은 프레임워크를 개발해주어라. 그 프레임워크안에서 직접 게시판이든, 방명록이든 간단한 기능을 직접 구현하도록 하라. 즉, 조그만 가건물을 만들어주고 그 안에서 작은방을 만들 수 있게 해주어라. 1층짜리 건물구조를 알게되면 5층짜리 구조도 파악하기 쉽고 그렇게 발전해가면 결국 20층 고층건물의 구조도 파악이 된다.

인내심을 가져야 한다. 답답할 것이다. 하지만 당신도 처음에는 누군가에게 답답한 존재였을 것이다. 인내심과 애정을 갖고 대해야 한다. 무지는 용서하되, 게으름은 용서해서는 안된다. 심성이 좋은 개발자인데 1년도 안되서 당신 곁을 떠난다면 문제는 수퍼개발자인 당신에게 있는 것이다.

수퍼개발자가 지속적으로 해야 할 일은…

끊임없는 자기수련과 공부이다.

리더쉽은 그냥 세월이 지나서 생겨지는 것이 아니다. 누군가에게 가르칠 수 있는 사람이 되려면 먼저 그만한 인격과 리더쉽에 힘써야 한다. 책도 많이 읽고, 열린 자세의 마음을 유지하도록 애써야 한다. 그리고 기존의 알고 있는 지식에 도취되지 말고 끊임없이 배움을 갈구해야 한다. 기능구현에 몰두하기 보다는 원리에 좀 더 다가가는 공부를 해야 한다. 자신이 지금껏 알고 있다고 생각하는 것들을 의심해야 한다. 그 의심을 픔으면서 두려움 속으로 스스로를 내몰 줄 알아야 한다. 사람들과 덕담을 주고 받으면서 미소를 지어가면서 분위기에 맞추는 것이 아닌 본질을 찾고 배우도록 노력해야 한다.

좋은 사람이 되려고 하지 말고 배울게 있는 사람이 되어야 한다.