IT 이야기/IT와 사람

좋은 개발자로 크고 싶어요. 서버 개발자는 어떻게 되나요?

Terry Cho 2016. 3. 10. 13:05

좋은 개발자가 되고 싶어요. 서버 개발자는 어떻게 되나요?


조대협 (http://bcho.tistory.com)


블로그를 운영하면서 자주 받는 질문들이 "좋은 개발자가 되고 싶어요." "아키텍트는 어떻게 되나요?" "서버 개발자가 되려면 어떻게 해야 하나요?" 라는 질문들인데, 일일이 답변을 드리기가 어려워서 생각을 정리해봅니다.





사실 답은 저도 잘 모르겠습니다. 아직 좋은 개발자가 아닌거 같아서요. 그래도 그간 IT를 경험하면서 나름의 생각을 정리해 보면 다음과 같습니다.


좋은 개발자가 되는 방법은 학교에서 다 배웠다.


사실 좋은 개발자가 되는 방법은 학교에서 다 배웠습니다. 대학교 과정에는 IT 개발에 필요한 필수 이론들을 다 배웁니다. 자료구조, OS, 소프트웨어 공학론 등등. 다들 중요한 내용이지만 학교 다닐때는 정작 깨닫지 못하고 소홀해지는 경우가 많습니다.

대학교때 빠졌던 잘못된 생각중의 하나가 "요즘 누가 C를 쓰냐. MFC나 Visual C가 대세 아냐?", "자료 구조는 모하러 배워. 이미 라이브러리들이 다 있는데.." 와 같이 기본을 중요시 하지 않았던 기억이 있습니다.

결국 들어가면 들어갈 수 록 기본으로 가게 되더군요. 다시 공부하려면 시간이 엄청 들져... 얼마전에 빅데이타 공부하겠다고 통계학고 수학책을 사놓고 행렬과 벡터를 다시 파고 있었던 기억이 납니다.


비단 컴퓨터에 대한 전공 수업뿐 아니라, 수학, 법률, 인문학, 경영학등 모든 것이 다 중요하다고 봅니다. 결국 소프트웨어는 이런 것들을 위해서 만들거나 이런것들을 활용해야 하는 것들입니다. 사용자 대상의 서비스를 만들때, 화면 배치 응답 시간에 대한 결정은 인문학과 심리학적으로 사람을 이해하는데 기반하며, 협업을 함에 있어서 상대를 이해하고 스토리 텔링을 하면서 설득하는 것들도 대인 관계 기법과 철학등에서 배워올 수 있습니다. 한비자나 마키아벨리의 군주론이나 노자의 사상들은 팀을 운영하는데 있어서 도움이되는 내용들을 제공합니다.


결국 학교에서의 시간을 소홀하게 하면 안된다는 이야기 입니다.


소프트웨어는 기술이 아니라 협업이다.


근래의 소프트웨어 개발은 기술의 발전 속도가 배우빠르고, 기술의 종류가 많아서 이제는 도저히 한사람이 다 배워서 커버를 할 수 없는 분량입니다. 예전에는 Unix/C만 알아도 대충 왠만한 서버는 개발을 했고, EJB시대만 해도 자바, EJB, 오라클 정도면 대충 서버를 만드는데는 크게 문제가 없었지만, 근래에는 쏟아지는 오픈소스, 스크립트 언어등 기술이 너무많아서 몇가지 기술로만 한다는건 무리입니다. 거기에 빅데이타, 클라우드, IOT, VR, 미디어 서비스등 도메인도 많아져서 혼자서 감당할 수 없는 지식들을 협업으로 풀어야 합니다. 즉 인간관계와 소통과 같은 소프트 스킬이 중요해집니다.


혼자서 모든 개발을 하지 않을거라면, 커뮤니케이션과 협업 방식을 키우는게 대단히 중요 합니다.


알고리즘에 대한 공부는 지속적으로


근래에 소프트웨어 개발에서의 변화는 알고리즘의 중요성이 점점 더 올라간다는 겁니다. 데이타를 저장하고 보여주는 것이 예전의 일반적인 소프트웨어 였다면 근래에는 머신러닝을 이용한 추천, 이미지 인식등 AI 영역을 곁들인 서비스들이 융합이 되고 있습니다. 데이타도 점점 많아지면서 빅데이타를 이용한 분석등이 많이 사용되고 있습니다.

 이러한 AI나 데이타 분석은 기본적으로 데이타 구조나 알고리즘에 기반을 합니다. 그래서 요즘 많은 IT 기업들이 입사 시험에 코딩 테스트나 알고리즘 테스트를 추가하는 것도 일맥 상통하다고 봅니다. 물론 이런 주류를 잘못 이해한 임원들이 기획자나, 프로젝트 메니져, 인프라 엔지니어에게까지 알고리즘 문제를 요구하는게 문제이기는 합니다만

전체적인 큰 흐름으로 봤을때 알고리즘 능력 배양은 앞으로도 점점 중요해질것이라고 봅니다.

 그런데 이러한 알고리즘 문제는 계속해서 접하지 않으면 쉽게 까먹습니다. 미적분을 잘하던 고등학생이 나중에 대학생 되면 다 잊어먹는것과 같은 선상이라고나 할까요. 

지속적으로 알고리즘 문제에 대한 감을 유지하는 것은 중요한 일이 아닐까 합니다.


좋은 환경과 사수를 만나라


조금 실무적인 이야기로 들어가면, 사실 좋은 개발자로 크기 위해서는 좋은 사수와 개발 환경을 만나는게 대단히 중요합니다.

열심히 공부해서 좋은 기업에 입사해서 일년동안 복사만 한 친구와, 직접 Production 시스템에 소스코드를 Commit하고 문제를 해결한 사람 하고는 성장 속도 자체가 다르져.. 그래서 직접 코딩을 하고, 운영 시스템에 반영을 하면서 이에 대한 결과를 모니터링하고 문제를 해결할 수 있는 환경을 접하는게 중요합니다. 


또한 환경이 아무리 잘되더라도, 여러 실패나 실수를 줄일 수 있게 최적의 배움의 경로를 제시해줄 수 있는 좋은 사수가 있는 곳이 가장 좋을것 같습니다. 


물론 스펙이 좋은 회사에 들어가서 커리어를 쌓으면 다음 이동시에 또 좋은 회사로 갈 수 있는 장점이 있지만, 스펙도 좋고 직접 운영 코드에 손도 데고, 좋은 사수를 만날 수 있는 곳은 찾기는 어렵습니다만 분명히 있습니다...


저는 입사를 생각하는 사람들에게는 다른 것은 알아서들 잘 생각들을 하니, 직접 같이일할 사수를 만나보라고 권하고 싶습니다.


직접 짜봐라


소프트웨어 개발은 결과적으로 코드를 짜고 이를 개선해 나가는 작업입니다. 이걸 잘하려면 해봐야져.

직접 무언가를 만들어봐야 합니다. 예전과는 다르게 요즘은 오픈소스 생태계가 좋아서 오픈 소스 생태계에 참여해서 글로벌 개발자들과 협업을 해볼 수 도 있고, 앱 스토어등을 통해서 앱을 직접 퍼블리슁해볼 수 있습니다.

계속해서 무언가를 만들어 나가면 많은 경험이 쌓입니다. 특히나 운영 시스템을 경험해본 사람의 경험치는 남다르다고 할 수 있습니다.  제일 좋은건 몬가 앱을 만들어서 배포 하고 운영해보는게 제일 좋지 않나 싶습니다.


기술의 흐름을 읽어라


마지막으로 기술의 변화를 잘 추적하는게 중요합니다. 항상 그때 그때 마다 기술의 주류가 있습니다. 이런 기술의 흐름을 민감하게 모니터링 해야 남보다 앞서 나갈 수 있는데, 페이스북의 타임 라인에서 자주 언급되는 기술들이나, InfoQ, Dzone과 같은 개발자 사이트에서 자주 언급되는 기술들을 보면 대략 주류라고 생각하면 됩니다. 서버 개발자가 되고 싶다면 서버 개발에 관련된 글들의 흐름을 보고, 앱 개발자면 앱 관련 기술들의 흐름을 보면 됩니다.


그리고 오프라인 커뮤니티 모임에 많이 나가보길 권장합니다. 생각보다 많은 정보를 얻을 수 있고, 나의 위치가 어느정도 되는지 뒤돌아 볼 수 있는 기회가 되기도 합니다.


어떻게 보면 일반론 적인 이야기가 될 수 도 있겠지만, 직군이나 또는 직급에 따라서 집중해야 하는 분야만 차이가 있을 듯 근본은 똑같다고 봅니다. 누가 그러더군요. "물은 물이되 산은 산이로다..". 서버 개발이건, 아키텍트, 프론트 앤드건.. "개발은 개발입니다."


궁금해하시는 분들께 어느정도 도움이 되었으면 합니다.