2009년 11월 29일 일요일

뛰어난 개발자는 길러지는 것

이전 글("뛰어난 개발자는 타고나는 것")에서 논리적인 두뇌가 개발자의 Performance에 미치는 영향을 알아보았습니다. 이 글은 원래 상반된 의견을 가진 두 글로 계획된 것인데, 이전 글에 대해서 많이들 관심을 가지고 의견을 주셔서 두번째 글을 바로 올립니다. 
이전 글을 본 독자분들은 자신의 경험에 비추어서 위화감을 느끼시는 것 같습니다. 인정하기 싫은 현실일 수도 있습니다. 사실 이전 글은 사실 경영자가 봐야할 글입니다. 자신을 똑똑한 개발자와 반대편에 두고 무조건 거부감을 둘 필요는 없습니다.

이런 형태의 글은 옛날에도 올렸었죠. ^^


이번 글은 개발자를 위한 글입니다.
Microsoft등의 유수의 소프트웨어 회사들은 상위 0.01% 또는 0.001% 두뇌를 확보하기 위해서 학과를 가지 않고 천문학과, 물리학과 등에서 천재들을 확보하고 있습니다. 그리고 학생 중에서도 소프트웨어 개발에 특별한 재능을 보이는 개발자 후보를  싹쓸이 하기 위해서 엄청난 노력을 기울입니다.
이러한 활동은 국내 대부분의 소프트웨어 회사들은 먼나라 얘기일 뿐입니다. 또한, 이러한 사람들이 개발자가 된다고 해도 우리나라 보통의 소프트웨어 회사에서 진짜 훌륭한 개발자로 성장하기는 어려울 것 같습니다.

똑똑하고 뛰어난 논리 회로를 지닌 사람이 뛰어난 개발자가 될 가능성이 확실히 높기는 하지만, 개발자가 몸담은 환경에 따라서 훌륭한 개발자가 될 수도 있고, 천덕꾸리기가 될 수도 있습니다.
또한 그런 특별한 논리 회로를 지닌 사람만이 할 수 있는 일은 어렵기는 하지만 그리 많지는 않습니다.  대부분의 개발업무는 보통의 두뇌를 가진 사람들이 수행합니다. 물론 이들도 일반인과 비교하면 비교도 안될 정도로 논리적인 두뇌를 가지고 있습니다.
하지만 훌륭한 개발자가 되는 것은 두뇌의 성능에 의해서 결정되지 않습니다. 상위 0.1%의 두뇌를 가지고 있다고 하더라도 훌륭한 개발자가 되는데 크게 유리하지도 않습니다. 훌륭한 개발자는 어떻게 경험과 경력을 쌓아가느냐에 달렸습니다. 

제가 두 글에서 서로 다른 시각을 두는 것은 두뇌에서 나오는 개발자의 Performance와 실제 개발의 전반적인 Performance의 차이를 보여주기 위함입니다. 어차피 두뇌는 거의 정해진 것입니다. 하지만 개발자가 어떠한 환경에서 어떤 방향으로 성장하느냐에 따라서 10년 후의 Performance와 회사에서의 기여도는 엄청난 차이를 가져옵니다. 이것은 개발자 혼자만의 노력으로 가능한 것은 아니고 회사에서 환경을 제공해 줘야 합니다.

그럼, 뛰어난 개발자로 길러지는 방법에 대해서 알아보겠습니다.

첫째, 먼저 자신을 잘 알아야 합니다.
모든 사람은 장점과 단점이 있습니다. 두뇌는 뛰어나나 표현을 못하고 글을 잘 못쓰는 사람이 있는가 하면 두뇌는 보통이지만 인화력이 뛰어나고 남을 잘 이해해주는 사람도 있습니다. 누구는 발표를 잘하고 누구는 설득을 잘합니다. 누구는 끈기는 없지만 아이디어는 끝내줍니다. 또 누구는 신제품 가지고 놀기를 좋아합니다. 자신의 능력과 취향을 잘 알아야 합니다. 그래야 개발의 수많은 분야에서 어느 분야로 성장할지 결정할 수 있습니다. 소프트웨어 개발자 외에도 가능한 다른 분야는 Project Manager, Product Marketing, QA Engineer, Build and Release, Technical Support 등 다양한 분야가 있습니다.

둘째, 자신의 전문 분야에서는 최고가 되어야 합니다.
자신의 분야에서 최고가 된다는 마인드로 주변의 누구보다도 자신의 분야에서는 많은 지식과 경험이 있어야 합니다. 그렇지 않고 일반지식만 가지고 있다면 소프트웨어 개발자로는 부족하죠. 남들보다 특출난 한 분야가 꼭 있어야 합니다. 모든 분야에서 모두 최고가 된다는 것은 불가능하기 때문에 자신만의 분야를 찾는 것도 중요합니다.

셋째, 넓은 지식과 경험을 가져야 합니다.
항상 코딩에만 집중하는 개발자는 넓은 지식을 가지기 어렵습니다. 개발자는 자신만의 분야 뿐만 아니라 다양한 분야의 지식을 섬렵해야 합니다. 그러기 위해서 가장 좋은 방법은 Peer review입니다. 개발자는 자신의 프로젝트만 할 것이 아니라 다른 팀의 여러 프로젝트의 Review에 꾸준히 참석해서 도움을 주는 것 뿐만 아니라 자신의 경험과 지식도 넓혀야 합니다. Review가 아니면 그렇게 많은 지식을 넓힐 기회가 별로 없습니다. 또한 다양한 Conference에도 꾸준히 참석해서 Technology Trend도 따라가야 하며 인맥도 유지해야 합니다. 많은 경력을 가진 개발자들은 자신의 개발업무에만 치중하는 것이 아니라 회사의 중용한 기술적을 결정에 참여를 해야 하기 때문에 넓은 지식을 자지고 있지 않으면 안됩니다. 
또한 소프트웨어공한의 다양한 분야에 대한 전반적인 경험과 지식도 같이 가지고 있습니다. 그렇지 않고 매일 코딩만 하는 개발자에게 어떻게 높은 연봉을 줄 수 있을까요?

넷째, 긍정적인 마인드입니다. 
회사에 긍정적이고, 팀에 긍정적이고, 자신에게 긍정적이어야 합니다. 그렇지 않은 개발자는 분위기가 음산하고 같이 일하기 거북합니다.
회사의 정책에 호응하고 긍정적이지 못한 개발자는 항상 불만이고 반대합니다. 이러한 패턴은 바뀌지 않고 언젠가는 회사의 발등을 찍을지 모릅니다. 실력이 뛰어나도 이런 개발자는 빨리 내보내는 것이 좋습니다.
팀에 긍정적이지 못한 개발자는 팀웍을 무시하고 자신만을 위해서 일합니다. 이러한 개발자는 다른 개발자들에게 피해를 끼치며 마이너스 생산성을 가집니다.
자신에게 긍정적이지 못한 개발자는 자신감이 없으며 훌륭한 개발자로 성장하기 어렵습니다. 
또한 이런 개인의 기본 자세는 쉽게 바뀌지 않습니다. 따라서 항상 긍정적인 마인드를 유지하기 위해서 꾸준히 노력하고 자신을 설득해야 합니다. 천성이 긍정적인 사람은 저절로 되는 일이지만 그렇지 않은 사람은 노력을 많이 해야 합니다. 부정적인 마인드는 면접시 탈락의 큰 요소도 되기도 합니다.

이 중에서 대부분은 개발자 스스로 노력해서 가능한 것들입니다. 하지만 셋째는 개발자 혼자의 노력만으로는 어렵습니다. 회사에서 그렇게 할 수 있도록 환경을 조성하고 지원을 해줘야 합니다. 그래서 좋은 환경에서 일하는 것이 중요하죠. 지금의 회사가 연봉은 괜찮지만, 개발자로서 성장할 수 있는 좋은 환경이 아니라면 오래 몸담는 것이 오히려 미래에 내 몸값을 떨어뜨리는 일일 수도 있습니다. 불행히 우리나라에는 좋은 환경의 소프트웨어 회사가 적은 편이기는 하지만, 그 중에서도 상대적으로 좋은 환경을 찾는 노력은 필요합니다. 저의 Mission 중의 하나가 그런 환경을 가진 소프트웨어 회사를 많이 만드는 겁니다.

머리는 똑똑하지만, 같이 일하기 어려운 천덕꾸리기 개발자보다는 경험과 지식 및 인성이 두루 균형 잡힌 개발자가 더 가치 있고 회사에 더 필요합니다. 미래의 나는 내가 만들어 가는 겁니다.

댓글 24개:

  1. 매번 비슷한 생각의 글 올려주셔서 또 들어와 버렸네요. 같은 개발자라도 만나보면 항상 코딩관점에서 생각하는 분들이 많습니다. api와 코드를 하루종일 봐도 항상 코드적으로 해결하려고만 하죠.
    저같은 경우는 주로 외국계쪽이나 대기업쪽을 다녔는데 요즘 하고 있는 작은 프로젝트에서는 불만들이 항상 쏟아져 나오고 있습니다. 나중에 긍정적으로 몰입하려해도 분위기들이 불만 투성이라 혼자 긍정이 될 순 없었죠. 오히려 역으로 SRS나 문서들을 쪼고 이만큼 진행한것도 어찌보면 큰 프로젝트에서의 경험이 뒷받침 될 수 있었던 것 같습니다. 큰문화와 체계가 잡혀있던 곳에서 활동한 기술자들이 체계가 잡혀있지 않고 언발에 오줌누기식인 프로젝트를 만나면 어떻게 해야할까요? 역으로 배워야 하지 않을까 생각합니다.
    가끔씩은 불만을 토로하고는 있는데 그 불만이 어떻게보면 조직적인 차원에서의 발전성을 이야기하는 것이지 한 조직을 망하라고 하는 것은 아니거든요^^

    답글삭제
  2. 안녕하세요. moova님
    이런 경우는 참 곤란한 경우죠.
    조직을 바꾸려면 힘이 있어야 합니다. 그렇지 않으면 미움만 사기도 합니다. 아니면, 아주 서서히 조금씩 무리없게 바꿔가야 합니다. 지금 꽤 열심히 하고 계신데, 미움사지 않을 정도로 적절히 조절하시면서 하시면 되지 않을까요?

    제일 좋은 방법은 좋은 환경의 회사에서 일하는 것이겠죠?

    답글삭제
  3. 뛰어난 개발자는 길러지는 것 -All of Software-

    답글삭제
  4. 아악 사수의 존재가 ㅠ.ㅠ
    그래도 가장 좋은건 누군가가 이끌어주는 사람이 있다는거겠죠.
    (3년째 사수없이 살아가는 3년차 개발자 ㅠ.ㅠ)

    답글삭제
  5. 위의 내용은 뛰어난 개발자가 되기 위한 것이 아니더라도, 어떤 분야건 필요충분조건이라고 보여집니다.

    답글삭제
  6. 지나가면서 글 남깁니다.

    사수가 없다면, 스스로 사수가 되어보려고 해 보세요. 분명 달라집니다. 제대로 된 사수 만나기도 하늘에 별 따기입니다.

    답글삭제
  7. 개발자의 한사람으로써 동의합니다. 구구절절 옳은 말씀입니다.

    답글삭제
  8. 좋은 환경의 회사...혹시 아시면 소개좀...^^;;;
    일단 주어진 환경에서라도 뛰어난 개발자가 되기 위해 노력해야 할것 같습니다.^-^
    추천해주신 책~ 잘 보고 있습니다.~ 감사합니다.

    답글삭제
  9. Richpapa님 안녕하세요.
    형이상학적으로 가면 모두 일맥상통하죠.

    답글삭제
  10. 구차니님 안녕하세요.
    전 사수 system을 별로 긍정적으로 생각하지 않습니다. 사수가 있는 것 자체는 좋은 일이지만, 사수를 둬야 하는 원인을 생각하면 부정적입니다. 사수가 아니면 새로 입사한 개발자를 끌어줄 방법이 별로 없기 때문에 사수에게 알아서 하라고 맡기는 경우가 대부분입니다. 제대로 된 환경의 SW회사라면 사수가 없어도 입사 첫날부터 버그도 잡고 제대로 일할 수 있습니다.
    이 글에서도 이러한 제대로 된 환경의 중요성을 강조하고 있습니다. 개발자는 사수가 키워주는 것이 아니고, 제대로 된 환경이 필요합니다.

    답글삭제
  11. 열산성님 안녕하세요.
    블로그에 들려 주시고 댓글 남겨주셔서 감사합니다.

    답글삭제
  12. 안녕하세요. 전경헌 사장님
    회사는 여전히 잘 되시죠? 이렇게 블로그에도 들러주시고 댓글도 자주 남겨주시니 정말 고맙습니다.

    답글삭제
  13. sozu님 안녕하세요.
    좋은 환경의 회사는 여러가지 조건이 있지만, 이를 갖추기 위해서는 경영자의 마인드가 가장 중요합니다. 일단 SW를 잘 이해하는 좋은 경영자가 있는 회사라면 크기와 상관 없이 좋은 회사고 그런 회사에서는 배울 것도 많죠. 구체적인 이름을 나열하는 것은 문제가 있어서 말씀드리지 못하겠네요. 나중에 개인적으로 만나면 알려드리죠.

    일단 국내에는 상대적으로 그런 회사가 적은 편입니다. 하지만 미국에는 정말 많죠. 영어를 잘하시고 기회가 되시면.. 또 아직 국내 경력이 그렇게 많지 않으면 미국 SW회사에 지원해보는 것도 괜찮을 겁니다. 하지만 국내에서 이미 경력이 많다면 미국 SW회사에 입사해서도 적응을 못하는 경우가 많아서 권해드리기 힘들겠네요.

    일단 현재 환경에서 노력해보시기 바랍니다.

    답글삭제
  14. 오랜만에 들어오니 또 좋을 글들이 올라와있네요.
    앞으로는 자주 와봐야 겠습니다.^^

    위의 댓글에서 보면 사수 시스템에 대해서 부정적이신데..
    멘토링이라는 제도와 사수 시스템을 같은 개념으로 보시는것이지요?
    요즘 멘토링노하우 라는 책을 보고 있어서 언급해봅니다.
    규모가 작은 회사에서 체계적인 개발자 교육 시스템을 갖추기란 쉽지가 않을겁니다.
    요즘 개발자 실력 향상 및 교육 방법으로 멘토링 방법을 생각해보고 있는데..
    스스로 공부하려고 하지 않는다면 어떤 방법도 소용이 없겠지요
    항상 가장 부족하고 중요한건 열정인것 같습니다.

    답글삭제
  15. 조언 감사드립니다..^^ 미국진출은 항상 준비하고 있습니다~
    어제 팀장님과 토론하느라 늦게 퇴근하고 집에 가면서 생각해봤는데요..
    꼭 좋은 환경에서만 좋은 개발자가 나올것 같지는 않습니다. 나쁜 환경이라도 좋게 받아드리고 개선하려고 노력했던 경험을 쌓는 것도 좋은것 같아요..물론 정말 어렵겠지만..
    동료들, 윗분들을 설득하려다 보니 제 스스로가 강해지기 위해 더 많이 연구하게 되더라구요~ 그래도 들어주는 사람이 있다는게 너무 감사한것 같습니다.ㅋㅋㅋ
    그리고 그 회사들은 나중에 꼭 알려주세요~~^^ 감사합니다~

    답글삭제
  16. 안녕하세요. 오랜만에 들어왔습니다.
    저희 회사가 전규현 님의 지원으로 저희 개발부 경쟁력은 물론 연관 부서 경쟁력도 많이 올라갔습니다.
    구성원 대부분이 인정하는 사안입니다.
    더욱 의미있는 것은 서로 Communication 을 더 잘 할 수 있는 기반을 닦았다는데 있습니다.
    뛰어난 개발자가 될 수 있는 환경을 제공하는 회사가 되어야 하는데, 모자란 것이 많다는 것만 아는 경영자이어서 문제가 있습니다.

    개발 출신 경영자로서 단점을 보완하고, 장점을 활용하며 스킬을 높여 나가야겠다는 영감을 주는 글 감사합니다.
    뛰어난 개발자가 나올 수 있는 환경을 조성하고 지원하는 회사가 되도록 노력하겠습니다.
    수고하세요.

    답글삭제
  17. 안녕하세요. 크레브님

    용어의 차이를 두어서 설명할 생각은 없습니다. 다만, 사수든 멘토링이든 이를 시행하는 이유와 환경이 중요한 것 같습니다. 회사일이라는 것이 시스템, 프로세스, Role 이런 것들만 잘 정의 되었다고 잘 돌아가는 것은 아니죠. 이런 건 기본 중에 기본이죠. 그외에 멘토링을 통해서 얻을 수 있는 것은 매우 많습니다. 하지만, 흔히 사수제도 도는 멘토링 제도를 하는 이유가 아무런 기초도 되어 있지 않아서 경험있는 사수가 머리속에 있는 것을 하나씩 1:1로 가르치라는 것인데, 시간도 많이 걸리고 효율적이지도 못합니다.

    아직 체계가 없는 회사라면 우선 사수제도라도 시행하는 좋겠습니다. 그리고 빨리 체계를 갖춰야죠. 그래야 비로소 소프트웨어를 제대로 개발할 수 있는 기초중에 기초를 만든 겁니다. 이제 시작이죠.

    답글삭제
  18. 황규환 사장님 오랫만입니다.
    사장님을 비롯해서 개발자들은 아주 인상에 많이 남아 있습니다. 특히 SW 개발을 이해하고 있는 사장님이 회사의 큰 힘으로 생각됩니다.
    글로벌 경쟁력을 갖추기 위해서 앞으로도 해야 할 일이 많지만, 이미 변화의 기초를 갖췄고 나아지는 길을 가고 있기 때문에 앞으로 방향만 제대로 잡아서 성장해나가면 제가 항상 바라는 개발자, 경영자 모두 행복한 SW회사가 될 것으로 확신합니다.
    요즘 계속 너무 바빠서 시간을 못내고 있는데, 조만간에 한번 뵙죠. 건승하십시오.

    답글삭제
  19. 안녕하세요.
    김영보입니다.
    좋은 글 잘 읽고 있습니다. 대단하십니다.
    참, MethodChain UI 버전을 개발해서 발표했습니다.
    www.methodchain.com이고요 많은 조언을 부탁합니다.
    모임에 안 나간지 오래 되었습니다만,
    형펀이 대로 언제 한 번 뵈었으면 좋겠습니다.
    오늘도 좋은 하루 되세요

    답글삭제
  20. 안녕하세요. 오랫만입니다.
    재미있는 거 하고 계시네요. ^^ 저도 바빠서 계속 못나가고 있는데, 나중에 꼭 뵈요.

    답글삭제
  21. 안녕하세요, 네오플 공식 블로그 운영자입니다. 네오플로그에 본 포스트를 스크랩하고 싶은데요, 가능할까요? ^^ 단, 본문이 조금 길어서 일부 내용은 삭제해야할 것 같은데요. 답변 부탁 드립니다. :) 좋은 글이 많네요.

    답글삭제
  22. 안녕하세요. 네피님
    이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
    본문의 일부만 게재하는 것도 얼마든지 가능합니다.
    감사합니다.

    답글삭제
  23. 내일이 바로 구정 연휴시작이네요. ^^ 오늘부터 시작될귀향길이 부디 순조롭길 바랍니다.
    구정이나 발렌타인데이에 관련된 이야기를 할까 하다가 그 보다는 여러분들께 보다 살이되고 피가 되는글을 공유하는 것이 좋을 것 같아 오랜만에 펌글 하나 올립니다.아래 글은 All of software

    답글삭제