이번에 이야기해볼 내용은 빠르게 성장하는 개발자의 세 가지 특징이다. 나는 경력은 거의 없지만, 개발에 입문한 지 10년이 되었는데도 여전히 많이 부족하다고 생각하고 있고, 실제로 다른 사람들보다도 성장이 더딘 편이라고 생각한다. 주변을 둘러보고 개발자로 지내면서 단 기간 안에 빠르게 성장하는 개발자의 사례를 다수 접했는데, 그들은 대부분 처음 입문하고 2-3년이 되었을 때 어느 정도의 성과가 나타나는 것으로 파악했다. 도대체 그 사람들은 어떤 사람들이기에 빠르게 성장하는 것인지 고민해본 결과, 몇 가지 결론에 도달했는데 이를 세 가지 정도로 정리해보기로 했다.
선택과 집중
여러 분야를 걸친 다수의 기술이 아닌 한 분야의 한 두가지 기술에 집중하는 사람은 성장이 빠르다. 목적과 방향이 분명하기 때문에 옆으로 새지않고 조금 더 깊게 공부를 해나갈 수 있기 때문이다. 어느 신입 개발자의 이력서, 특히 컴퓨터공학과나 소프트웨어 학과 학생의 경우를 보면 대학에서 접해본 AI, 블록체인, 웹, 앱 개발과 같은 전혀 다른 영역의 기술 스택을 그저 나열해놓은 경우가 있는데, 이는 할 줄 아는 것이 많고 경험이 많다는 것이 아니라 기술적 깊이가 부족하다는 느낌으로 다가온다. 이 개발자가 대체 뭘 하고 싶어서 개발을 시작한 것인지 그 의도를 알 수 없다.
최근에는 프론트/백엔드/데브옵스 등 포지션에 특화된 개발자를 뽑는 기업들이 늘어났는데, 아무리 다양한 분야의 기술 스택을 가지고 있어도 결국에는 실무에서는 어느 하나의 포지션에 종속되므로 기업의 입장에서 기술 스택만 나열하는 신입은 그다지 반갑지 않은 인재로 다가온다. 때때로 신입 개발자들이 기술 스택을 나열할 때 가능한 한 할 줄 아는 것, 잠깐이나마 접해본 것들까지도 적는데, 이는 방향성이 부족한 개발자로 인지될 가능성이 농후하므로 권하지 않는다.
이력서
이름이 알려지고 실력이 뛰어난 개발자들의 기술스택을 보면 생각보다 단순하게 표현하고 있음을 볼 수 있다. 프론트엔드 개발자라면 Typescript/React 정도만 적어서 소개하는 경우가 많고, 기본 중의 기본으로 취급되는 HTML/CSS/Javascript 는 생략한다. 백엔드 개발자라면 대체로 Java/Spring 만 적고, 그 외에는 적어내지 않는다. 그러니까 흔히 대학생 때 진로 찾기를 명목으로 깔짝거려본 기술들은 적지 않는다는 이야기다.
방향성 없이 다수의 기술을 마구잡이로 접한 개발자들은 기술적 넓이는 넓어질지라도 성장의 측면에서는 그다지 도움이 되지 않는다는 것은 지명한 사실이다. 연봉의 측면에서 따져보아도 제너럴리스트보다는 스페셜리스트가 더 나은 대우를 받는 것 또한 사실이다.
기술적 방황
백엔드 개발에서 PHP/Laravel 을 사용하다가 이직과 같은 상황의 변화로 인해 Java/Spring 을 사용해야 한다고 생각해보자. 처음에는 같은 백엔드이기 때문에 처음 하는 사람보다는 익히는 것이 빠르겠지만, 새로운 언어와 프레임워크를 배우는 시간이 그만큼 낭비된다. 나는 이를 성장이라고 하지 않고 낭비라고 여긴다. 그 시간에 해당 분야의 더 깊은 내용을 공부할 수 있기 때문이다. 더 나아가 같은 개발이라도 전혀 다른 분야로 간다면 이를 처음부터 다시 공부하는 시간이 소모된다. 웹 개발하다가 인공지능을 한다고 생각하면 그로 인해 소모되는 시간은 벌써부터 끔찍하다. 정말 그 분야가 해보고 싶어서 하는 것이 아니라면 다른 분야로 넘어가는 것은 성장을 방해하는 요소가 될 뿐이다.
나의 경우에는 목적도 없었기 때문에 개발의 방향성이 전혀 없었다. 첫 경력은 C++/MFC 로 시작했는데, 게임 개발도 해보고 싶어서 Cocos-2dx 도 건드려보고 취직을 위해서 웹 개발도 하게 되었다. 웹 개발의 경우 프론트엔드와 백엔드를 구분하지 않았어서 둘 다 공부는 했지만 깊이는 얕으면서 시간만 낭비했다. 이 덕분에 개발 입문 10년이 되었음에도 특정 분야에 대한 깊이는 얕다. 그나마 백엔드가 나은 편이다. 작년에는 블록체인도 해보겠다고 Etereum/Solidity 도 공부하기도 했었다. 자신에게 무엇이 맞는지 탐색하는 일은 인생에 있어서 중요하지만, 그것이 너무 길어지면 되려 시간만 지체하는 꼴이 되니 주의해야한다.
문제는 이렇게 접한 기술스택들을 나열해보면 정말 많은데 정작 알맹이를 까 보면 속이 텅 비어있다는 점이다. 관련 분야에 있는 개발자들과 얘기를 하면 처음에는 괜찮다가도 금방 벙어리가 되어버린다. 방향성 없이 기술적 방황이 지속되면서 시간 낭비만 한 것이다. 빠르게 성장하는 개발자가 되려면 한 두 가지 기술에 집중하고 나머지는 과감하게 버리는 것을 권한다. 선택과 집중은 성장에 있어서 큰 영향을 미친다.
기술적 문제 해결과 창작
빠르게 성장하는 개발자들은 기술적 문제를 해결하는 것을 좋아하거나, 창작에 관심이 있다. 개발자와 엔지니어, 그 사이에서에서 얼핏 언급한 바 있지만, 엔지니어든 개발자든지와는 관계없이 기술 그 자체나 자신이 그리는 세계가 있다면 가파르게 성장한다. 대체로 이러한 경우 목적이 분명하기 때문에 기술적으로 방황할 일이 그다지 없기 때문이다. 관심 있는 분야가 명확하거나 만들고 싶은 것이 있다면 지체하지 않고 그 분야를 파면된다. 엔지니어들은 기술 그 자체에 목적을 두는 경우도 있어서 기술 연구에 관심을 가지기도 한다.
적어도 이 섹션에서의 목적은 취직으로 대체될 수 없다. 성장을 위해서는 취직 그 자체가 목적이 되어서는 안 된다. 성장은 취직과 생계를 위한 개발보다는 기술적 문제 해결과 창작을 목적으로 둘 때 조금 더 빠른 속도를 내는데, 이는 직업의식이 요구되는 내용이라 사람에 따라 적용하기에 어려움이 따를 수 있다. 대체로 단순하게 취직하여 돈벌이 수단으로 개발을 하는 경우에는 기술적 문제 해결과 창작에는 관심 없는 경우가 많아서 공부를 하더라도 재미가 없고 아직 경력이 많이 없는 신입 개발자의 경우 기술 스택을 큰 고민 없이 바꿔버리는 경우도 꽤 많기 때문이다.
서비스를 만들어서 사업을 하지 않고 취직을 함으로써 빠른 성장을 보이는 경우, 창작보다는 엔지니어로서의 기술적 문제해결에 관심을 가지는 경우가 많은 것으로 생각된다.
피드백
기술적 문제 해결과 창작에 있어서 성장이 빠른 개발자들은 대체로 사고방식이 유연하기 때문에 잘못된 점이 있거나 다른 이의 지적이 들어올 때 기분나빠하거나 고집만 부리면서 반려하지 않는다. 이들은 대체로 타인의 의견에 대해 논리적으로 타당성을 검증하고 피드백을 수용하려하는 모습을 보이는 경우가 많다. 의견을 수용하지 않더라도 그에 대한 타당한 이유가 반드시 존재한다.
이들은 또한 기술적 고집을 부리지 않는다. 모든 일에 사용할 수 있는 기술과 방법론 따위는 존재하지 않는다는 것을 이미 인지하고 있기 때문에 자신이 사용하는 기술이 만능이라고 외치지도 않으며 타인에게 강요하지 않는다. 만약 부득이하게 사용해야 한다면 그 이유를 명확하게 제시한다. 타 기술에 대한 가능성을 인지하고 지금 사용하고 있는 기술보다 특정 상황에 있어서 더 나은 점이 있다면 검토한다.
오픈소스를 운영함에 있어서도 이슈와 PR(Pull Requests)에 대해서는 적극적으로 검토하고 반영하는 모습을 보이는 등, 더 나은것으로 발전시켜나가는 것에 즐거움을 느끼는 이들이다.
오픈소스/커뮤니티와 사이드 프로젝트
마지막으로 이야기해볼 내용은 오픈소스/커뮤니티와 사이드 프로젝트다. 빠르게 성장하는 개발자들은 관심 있고, 주력으로 하는 기술에 대해 오픈소스에 기여하거나 커뮤니티 활동을 하여 새롭게 등장하는 생태계를 빠르게 습득하고 언어와 프레임워크의 버전을 곧 잘 따라온다. 또한 개발이 일 뿐만 아니라 취미생활이 되는 경우도 많아서 일 이외에도 개인적으로 사이드 프로젝트를 진행하는 경우가 많다.
팀 프로젝트를 구성하고 서비스를 만들어보거나, 능력에 따라는 강의나 책을 쓰기도 한다. 개발자들이 가장 많이 하면서도 지속하기 어려운 것에는 의외로 블로그가 있는데, 사실 블로그는 커뮤니티의 활동의 첫 출발점이 되기에 적당한 활동이다. 오픈소스에 기여하기에도, 사이드 프로젝트를 하기에도 어려움을 느낀다면 기술 블로그를 운영해보는 것이 진입장벽이 제일 낮은 대외활동이라고 볼 수 있다.
그 외에 개발 컨퍼런스에서 발표를 진행하거나 참가하여 네트워크를 늘려나가면서 적극적으로 자신을 홍보하기도 하는 등의 여러 활동을 하는 개발자도 많다.
마치며
여기까지 빠르게 성장하는 개발자의 세 가지 특징에 대해 정리를 해보았는데, 이를 간단하게 정리해보자면 목적과 분야 - 선택과 집중 - 오픈소스/커뮤니티와 사이드 프로젝트가 되겠다. 이 세가지 과정을 분명하게 하면 기술적 방황은 최소화되고 성장은 빠르다. 개발에 대한 열의와 직업의식이 더해지면 효과는 배가 될 것이다.
국비교육에서 개발을 처음 접하게 되면 백엔드의 경우 대부분이 반강제적으로 Java/Spring 이라 타의에 의한 선택과 집중은 그럭저럭 해결되지만 기술적 문제 해결 또는 창작에는 관심이 없는 경우가 많고, 오픈소스 기여는 기대조차 하기 어려우며 개발에 대한 직업의식은 고사하고 열의의 부족으로 그만두게 되는 경우가 많다. 대학생들이 겪는 개발에 대한 목적과 분야를 고민하는 과정을 생략하여 얻은 취직이라는 단순한 답이 가치없는 것으로 전락하게 된 것이다. 오히려 고민할 시간이 많고 개발에 대한 목적이 불분명한 대학생의 경우 정작 하고싶은 분야를 정하지 못해서 선택과 집중에서 헤매는 경우가 많다.
빠르게 성장하는 개발자가 되기위한 본질은 목적과 방향, 그리고 열의에 있다.