배경
🥊
에세이 •  • 읽는데 8분 소요

넓고 얕게 알기 vs 좁고 깊게 알기

신입 개발자가 다양성과 전문성 중 어떤 것을 추구하는 것이 더 유리할지에 대해 고찰합니다.

#Etc


강연

지난 3월 11일, 한국대학생IT경영학회(큐시즘) 에서 오프라인 초청 강연을 하고 왔습니다. 기획자, 디자이너, 개발자 세션이 있었는데 저는 개발자 세션의 강연자로 참석했고, ‘내가 개발자로서 추구하는 3가지 가치’ 라는 주제로 발표했습니다. 발표 자료는 지난번 자료를 조금 수정해서 쓴 거라 거의 비슷합니다.

개발자에 대한 대학생들의 관심이 높아진 것을 증명하듯, 사전 질문과 현장 질문이 정말 많이 들어왔습니다. 거의 20개 정도의 질문을 받은 것 같은데, 시간 관계상 모든 질문에 대답을 해드리지는 못했지만 그래도 많은 사람들 앞에서 개발에 대한 제 가치관을 이야기할 수 있어서 재미있었습니다.

그중 기억에 남는 질문이 있었는데, 이를 인용하자면 다음과 같습니다.

“이미 어느 정도 사용 할 수 있는 기술을 고도화하는 것과 새로운 기술을 익히는 것 중 어떤 것이 우선시 되어야 하는지 궁금합니다.”

저는 이 질문을 보자마자 ‘다양한 기술을 넓고 얕게 아는 것 vs 특정 기술을 깊고 좁게 아는 것’ 이라는 맥락으로 해석을 했습니다. 각 선택지에서의 핵심을 뽑아낸다면 다양성(generality)전문성(specialty) 중 어떤 것을 추구하는 게 나을지 정도가 될 것 같네요.

딱 정해진 정답이 없는 질문인만큼 신입 개발자들이 많이 고민하는 포인트인 것 같습니다. 물론 둘 다 추구해야 한다고 말하면 가장 좋겠지만, 그럴 거면은 밸런스 게임을 하는 이유가 없죠… 그래서 제가 나름대로 생각하고 있는 것을 정리해 답변해 드렸습니다.

그래서 오늘은 당시의 질문이었던 신입 개발자가 넓고 얕게 알기 vs 좁고 깊게 알기 둘 중 어떤 것을 추구하는 게 더 유리한지에 대한 답변을 정리해 공유하고자 합니다. 이번 글을 통해 이와 비슷한 고민을 하시는 신입 개발자 분들께 도움이 되었으면 좋겠습니다.

TL;DR

넓고 얕게 알기 vs 좁고 깊게 알기

생존자의 확증 편향일 수도 있지만, 결론부터 말씀드리자면 저는 좁고 깊게 아는 것이 더 유리하다고 생각합니다. 그렇게 생각하는 이유 4가지를 정리해 보았습니다.

시장은 전문성을 갖춘 개발자를 우대한다

풀스택 예전에는 풀스택 개발자가 선망의 대상이기도 했지만, 요즘은 오히려 의심의 눈초리를 사는 단어이기도 하다

현대의 소프트웨어 산업은 매우 고도화되었습니다. 하루가 멀다 하고 이전 기술을 대체하는 새로운 기술과 패러다임이 나오고 있죠. 덕분에 우리는 예전보다 편리하게 문제를 해결할 수 있게 되었지만, 이로 인해 좀 더 복잡하고 전문 지식을 요구하는 문제를 맞닥뜨리게 되었습니다. 이러한 과정들이 반복되면서 예전처럼 한 사람이 소프트웨어 개발의 라이프사이클 전반을 아우르는 지식을 모두 갖추기는 현실적으로 불가능해졌습니다.

제너럴리스트 vs 스페셜리스트 애매한 제너럴리스트보다는 확실한 스페셜리스트를 뽑자

이는 풀스택 개발자라는 단어에 대한 신용이 점점 떨어져 가고 있다는 이유와도 연관됩니다. 어중간하게 프론트엔드 0.7인분, 백엔드 0.7인분을 하는 개발자를 두 명 뽑을 바에는 차라리 프론트엔드를 1.3인분 할 수 있는 사람과 백엔드 1.3인분 할 수 있는 사람을 각각 뽑는 게 더 낫다는 것이죠.

분명히 전자의 경우가 낼 수 있는 퍼포먼스의 총량이 더 많지만, 소프트웨어의 규모가 커지고 구조가 복잡해지다 보면 특정 분야에 대한 깊은 기술적 이해가 필요한 순간이 결국 오게 됩니다. 이런 경우에는 전문성을 가진 사람이 모인 조직이 더 뛰어난 성과를 낼 수 있겠죠.

웹 개발을 예로 들자면, 사실 10년 전까지만 하더라도 프론트엔드와 백엔드가 분리되어 있지 않은 경우가 많았습니다. 하지만 요즘은 직군을 분리한 경우가 더 많이 보이죠. 브라우저의 발전과 웹 표준 등장에 따라 프론트엔드의 역할이 단순히 화면을 렌더하는 것에서 벗어나 엄청나게 많은 일을 할 수 있게 되었고, 이 기술들을 잘 활용하기 위해서는 전문 지식이 필요해졌기 때문입니다.

제 개인적인 느낌상 요즘 브라우저는 거의 가상 OS 라고 생각해도 될 정도로 엄청나게 발전하고 진화했습니다. 지금 당장 떠오르는 브라우저와 웹 API들만 해도… 요구하는 배경 지식의 수준이 상당합니다.

  • 웹 애플리케이션을 네이티브 앱처럼 사용할 수 있게 만들어주는 PWA
  • 클라이언트 간 실시간 P2P 통신을 가능하게 해주는 WebRTC
  • 브라우저에서도 GPU를 이용한 인터렉티브한 3D 그래픽을 사용할 수 있게 해주는 WebGL
  • IndexedDB, WebSQL, LocalStorage 등의 브라우저 내장 DB
  • 웹에서도 멀티스레딩을 사용할 수 있게 해주는 Web Worker
  • 이 외에도 HTML5에서 표준이 된 정말 정말 많은 API들

기존의 기술적 문제가 해결된다면 그보다 더 세분화되고 어려운 문제에 집중하는 것이 기술 발전의 자연스러운 흐름이기 때문에, 선택과 집중을 통해 전문성을 갖추는 것이 시장에서 더 유리한 선택을 받을 수 있다는 사실은 자명합니다.

잠재성을 증명하기에 더 유리하다

잠재성 개발자에게 있어 잠재성이란 더 가치 있고 어려운 문제를 풀어낼 수 있다는 것

회사에서는 개발자를 채용할 때 그 사람의 문제 해결 경험에 집중합니다. 그러다 보니 보통 서류 전형이나 면접에서 이에 관한 질문을 하곤 합니다. 개발자로서 맞닥뜨린 가장 어려웠던 문제는 무엇이며, 그 문제를 해결하기 위해 어디까지 깊게 생각했고, 결론적으로 어떻게 해결해 냈는지를 살펴봅니다.

이러한 질문을 통해 이 사람이 어떻게 논리적으로 문제를 해결해 나가는지 그 과정을 살펴보기도 하지만, 여기서의 답변을 통해 이 사람이 가진 잠재성을 유추해볼 수도 있습니다.

개발자로 일을 하게 되면 언젠가는 정답이 없는 문제를 풀어야 할 때도 있고 원인을 알 수 없는 문제를 해결해 내야 할 때가 있습니다. 그러다 보니 인내심과 끈기, 집중력은 빼놓을 수 없는 요소인데요, 이것들은 개발자로서의 성장에 있어서 꼭 필요한 요소인 동시에 한 분야를 좁고 깊게 파고 들어가는데 필요한 능력과도 일맥상통합니다.

특히 신입 개발자라면 현재의 퍼포먼스보다는 팀에 합류하고 나서 얼마나 빠르게 잠재 능력을 발휘할 수 있는지를 중요한 요소로 평가하곤 합니다. 만약 한 분야를 좁고 깊게 파고 들어간 경험이 있다면 이렇게 이야기할 수 있을 것입니다.

“엇, 이 사람은 이 분야에서 깊게 파고들어서 어려운 문제를 해결해 낸 경험이 있네? 그렇다면 우리 팀에서 함께 일하며 성장한다면 그 이상의 성과를 낼 수 있지 않을까?”

이와 비슷하게 저 역시도 넓고 얕게 아는 것 보다 좁고 깊게 아는 것 을 추구하는 게 더 어렵고 끈기를 요구하는 일이기 때문에, 개발자로서는 더 가치 있는 경험이라고 생각합니다.

냉정히 말해 넓고 얕게 아는 것 은 충분한 시간만 주어진다면 누구나 가능하다고 생각합니다. 낮은 난이도의 문제 여러 개를 풀어나가는 것과 같다고 생각하는데요, 그 자체가 의미 없는 일은 아니지만 그렇다고 해서 가치 있는 일 역시 아니기도 할뿐더러 높은 난이도의 문제를 만날 때 대처할 수 있는 능력이 전혀 검증되지 않았기 때문입니다.

하지만 좁고 깊게 아는 것 은 높은 난이도의 문제 하나를 푸는 것과 비슷하다고 생각합니다. 시간이 주어진다고 해서 누구나 가능한 것도 아니며, 그 문제를 해결함으로써 얻어지는 가치도 훨씬 큽니다. 이것이 회사가 개발자에게 기대하는 바이며, 개발자로서의 경쟁력과 잠재성을 증명해 내는 요소이기도 하죠.

전문성을 추구하는 과정에서 다른 분야에 대한 지식도 습득된다

고드름 깊게 파고드는 과정에서 주위에 있는 뿌리까지 두꺼워진다는 점에서 고드름이랑 비슷한 것 같다

분업화와 전문화로 인해 개발자들이 역할을 나눠가지게 되다 보니 자연스럽게 협업할 일이 많이 생기게 됩니다. 즉, 협업을 하는 그 과정 속에서 다른 분야에 대해 자연스럽게 알게 되는 지식들이 있습니다.

제가 프론트엔드 개발자로 일을 하면서 협업한 상대 직군은 주로 백엔드 개발자와 앱 개발자였는데요, 백엔드 개발자와의 협업은 주로 API 통신을 위해서였고 앱 개발자와의 협업은 인앱 웹뷰에 띄워지는 웹 애플리케이션 개발과 관련된 일들이었습니다.

협업 전 저는 백엔드와 네이티브 앱에 대한 사전 지식이 거의 없었습니다. 하지만 협업을 하면서 문제가 생겼을 때, 내가 모자란 부분은 공부하고 직접 코드도 수정해 봤고, 정말 이해가 안 되는 부분은 직접 만나 설명을 듣다 보니 협업에 필요한 지식 정도는 어깨너머로라도 배울 수 있겠더라구요. 이러한 경험들이 누적되다보니, 프론트엔드에서 해결할 수 없는 문제의 원인을 다른 직군의 코드 베이스를 살펴보며 원인을 유추해 해결해 낸 경험도 많았습니다.

물론 상대 직군에 대한 이해도가 전혀 없었던 개발자 초창기에는 힘든 경험이 많았었긴 한데요, 협업하는 상대방에 대해 이해하려는 노력과 제품에 대한 책임감을 갖고 일을 하게 된다면 협업에 필요한 지식 정도는 자연스럽게 습득할 수 있을 것이라 생각합니다. 즉, 좁고 깊은 분야 를 파게 되면 자연스럽게 다른 분야의 지식을 넓고 얕게 학습할 계기가 마련됩니다.

심리적으로 더 안정감이 있다

갈팡질팡 전문성이 없다는 것은 자칫 커리어의 갈피를 잡지 못하는 상태로 이어질 수 있다

좁고 깊게 아는 것 은 아무나 할 수 있는 것이 아니라는 점 때문에 심리적인 안정감에도 어느 정도 영향을 미치는 것 같습니다. 즉 전문성을 추구한다는 것은 내 커리어의 방향성을 확신할 수 있다는 의미이기도 합니다.

주변의 경험을 바탕으로 한 지극히 개인적인 이야기긴 한데요, 얕고 넓은 공부 를 한 사람들이 취업이나 이직을 준비할 때 더 불안해하거나 혼란스러워하는 경향이 있었던 것 같습니다. 첫 취업을 준비하는 사람들이 직무를 정하지 못해 갈팡질팡하는 모습도 봤고, 본인의 직무 외적으로 다양한 일을 하는 사람들이 스스로를 잡부라고 자조(?)하는 모습도 엄청 많이 봤거든요.

이처럼 불안감을 느끼는 이유는 결국 본인이 개발자로서 가진 특출 난 무기 하나를 내세우기가 어렵기 때문에 생기는 일일 것입니다. 결국에는 내가 갖고 있는 능력이 시장에서 얼마나 희소한가에 따라 가치가 결정될 텐데, 내가 얕게 건드린 분야들을 누군가는 또 전문적으로 파온 사람들도 있을 것이니까요. 여기에서 비롯된 간극은 시간이 흘러 연차가 쌓일수록 더욱 커지게 될 테고, 그러다 보니 불안감을 느끼는 것 같습니다.

한편으로는 한 분야에 대해 깊게 알고 있기 때문에 새로운 분야를 시도하는 것에도 사실 더 부담이 적습니다. 만약 새로운 시도를 하다가 생각만큼 잘 안된다고 하더라도 원래 하던 분야로 다시 돌아가면 되니까요. 내가 돌아갈 수 있는 고향(?)이 있다는 느낌이랄까요.

이러한 점에서 한 분야에 대해 좁고 깊게 알아두는 것 은 심리적으로 더 안정감을 주는 것 같습니다.

마무리

둘 다 잘하기

넓고 얕게 알기깊고 좁게 알기 둘 중에 반드시 하나를 골라야 한다면 후자를 선택해야 한다고 말했지만, 그렇다고 해서 넓고 얕게 알기 가 무의미한 경험이라고 생각하지는 않습니다. 다른 분야에서의 풍부한 경험을 기반으로 한 창의적인 접근이 가능하기도 하고, 전문성을 쌓을 분야를 잘 선택하기 위해서는 결국 다양한 경험들을 해보는 것이 필요하거든요.

취업을 희망하는 회사 규모와 분야에 따라서도 각 선택지의 장단점이 갈릴 것 같습니다. 예를 들어 소규모의 스타트업에서는 한 사람이 여러 직무를 담당하여 빠른 속도로 제품을 개발하고 검증하는 것이 필요하기 때문에, 넓고 얕은 지식 을 갖고 있는 것이 더 유리할 수 있기 때문이죠. 또한 팀 리드나 매니저 역할의 경우에는 아주 구체적인 문제 해결보다는 팀이나 회사의 전반적인 기술 전략을 세우는 것에 집중해야 하기 때문에 넓고 얕은 지식 을 갖고 있는 것이 유리할 수 있습니다.

한편으로는 깊고 좁게 알기 역시 극단까지 가게 된다면 오히려 단점이 될 수도 있습니다. 다른 직군과의 협업과 커뮤니케이션에 어려움을 겪을 수 있고, 새로운 기술에 대한 탐구나 도전이 없다 보니 (나쁜 의미의) 고인 물이 될 수도 있습니다. 이는 기술 트렌드의 변화가 잦은 분야일수록 더 도드라지겠죠. 내가 깊고 좁게 알고 있는 지식이 새로운 기술에 의해 대체된다면 나 역시도 도태되고 말 것이니까요.

마무리를 지으려다 보니 결국에는 밸런스를 잘 맞추는 것이 중요하다라는 이야기가 나올 수밖에 없네요. 😅 뭐 어쨌든 오늘 글은 요 정도로 해서 글을 마무리하려 합니다. 앞으로는 이렇게 간단한 Q&A 글도 자주 써봐야겠다는 생각이 드네요.

이 포스트가 유익하셨다면?




프로필 사진

👨‍💻 정종윤

글 쓰는 것을 좋아하는 프론트엔드 개발자입니다. 온라인에서는 재그지그라는 닉네임으로 활동하고 있습니다.


Copyright © 2024, All right reserved.

Built with Gatsby