모셔가는 개발자 되는 법 | 3가지 셀프 질문
여러분 안녕하세요. 꿈꾸는 개발자 입니다.
여러분, 개발자로 일을 하고 싶은데…혹은 일을 하고 있는데 어떻게 하면 개발자로서 더 성장하면서 내 커리어를 높일 수 있을까 고민해보신적 있지 않으신가요?
저는 개발자로 처음 입문했을 때 어떻게 하면 나의 커리어를 높일 수 있을까 고민을 많이 했어요.
제가 사는 동네에서 전철로 3정거장만 가면 시부야라는 번화가가 있는데 몇년전에 거기를 지나가다가 엄청 높고 삐까번쩍한 건물이 하나 눈에 띄기에 정말로 본능적으로 “아…나도 저런 건물에서 사원증 목에 걸고 개발자로 일 해보고 싶다..” 하는 말을 그냥 툭 내뱉은 적이 있어요.
건물 전체가 유리로 되어있고 그때가 마침 석양이 질 때였는데 건물 유리로 햇빝이 반사되서 제 눈에 비치는데 그 건물에서 일 하고 있을 직원들이 그렇게 부럽더라구요.
아마도 지금쯤 저 건물에서 일하고 있는 사람들은 정말 멋진 노을을 보면서 커피를 마시고 각자의 일을 하고 있겠지..하고 생각하면 그냥 마음이 행복해지더라구요.
그리고 눈을 들고 그 건물 꼭대기를 보니까 이런 간판이 있더라구요.
구글!
전 태어나서 구글 건물을 처음봤어요.
구글 회사는 엄청 좋다고 말만 들었지 실제로 본건 처음이거든요.
물론 들어가보지는 않았지만..
혹시 이 영상을 보고계신 분들 중에 구글에 다니고 계신 분이 계시다면 개인적으로 연락을 해주시면…
암튼 하늘의 노을과 건물에서 반사된 햇빛이 제 눈을 가리는데… 제가 성장해야겠다는 목표를 잡은게 그때부터였던거 같아요.
나라고 못한건 뭐있냐… 나도 할 수 있다! 돈도 없고 빽도 없고 말도 못했는데 혼자서 일본에 와서 이렇게 개발자가 되지 않았냐…
이제 구글로 가자! 라고 생각을 했어요.
근데 문제는 구글은 엄청난 실력자들만 뽑는다는데 지금도 아직 부족하지만 그때는 정말 햇병아리 개발자였거든요.
일단 실력있는 개발자가 되고 싶은데 어떻게 해야할 지를 모르겠더라구요.
그래서 저는 그때부터 정말 많은 도전과 실패를 경험해봤어요. 그리고 좋은 개발자들을 많이 만나왔습니다.
그러면서 그 분들은 어떻게 커리어를 쌓아왔고 저는 또 어떻게 해왔는지 비교를 해봤는데요.
비교를 해보니까 한가지 공통점이 하나 나오더라구요.
바로 나 스스로에게 좋은 질문을 하는 거예요. 이게 먼소리냐 하고 생각하시는 분들도 계실텐데 조금만 더 들어주세요.
저는 예전영상에서도 몇번 말씀드렸지만 저는 대학이 문과였습니다.
그중에서 교육학도 같이 공부했는데요 교육에서 중요시하는 것 중 하나가 질문이에요.
이 질문 하나로 그 교육의 질과 성장속도가 많이 달라지거든요.
그리고 그 질문의 질이 높으면 높을 수록 개인의 성장과 커리어에 놓은 영향을 미친다는 것을 알았어요.
지금까지는 이론적으로 이해만 했는데 제가 실제로 몸소 체험을 해보니깐 이제야 이해가 되더라구요.
그래서 이번 포스팅에서는 어떤 질문을 해야 우리의 개발자 커리어를 잘 쌓을 수 있는지를 알려드리도록 하겠습니다.
먼저 개발자 성장과 커리어를 위해 나 스스로에게 첫번째로 질문을 해야하는 것은 지금까지 어떤 문제를 해결했나..에요.
무슨 말인지 잘 이해가 안되시죠?
제가 예를 들어서 설명을 해 볼께요.
여러분들이 개발을 해서 어떤 기능을 하나 구현했다고 해봐요.
그 기능을 구현함으로서 어떤 문제를 해결했는지를 구체적으로 말할 수 있어야 해요.
모든 개발에는 그 목적과 이유가 반드시 존재하거든요.
목적이 없이 그냥 개발을 한다는건 말이 안되거든요.
그게 설령 튜토리얼에 나온 예시를 보고 따라했다고 하더라고 어떤 이유가 있어야 합니다.
그리고 그 행위는 문제점을 해결 할 수 있어야 해요.
이 질문의 핵심 요지는 이렇습니다.
여러분은 지금 살아가면서 그냥 넘길수 있는 부분에서도 문제점을 파악할수 있고 그 문제점을 해결하기 위해 실제로 액션을 취했으며 결국 그 문제점을 해결 했는가…입니다.
사실 “지금까지 어떤 문제점을 해결했나?” 라는 질문이 짧기 때문에 그냥 아무생각 없이 가볍게 들리겠지만
이 질문에 대답하기 위해서 여러분들은 1.문제의식, 2.실행, 3.결과확인 이라는 3번의 프로세스를 거쳐야 해요.
셋중에 하나라도 클리어하지 못하면 이 질문에 대답을 할 수가 없거든요.
자 그럼 이 질문의 의도가 이해되었으니 다시한번 질문을 해 볼께요.
여러분은 지금까지 어떤 문제를 해결하셨나요?
이제는 이 질문이 조금 심도있게 들리시나요?
이 글을 보고계시는 분들은 연령, 경력이 상당히 다양해서 사람마다 다른 대답을 할 수있을거에요.
어떤 분은 가독성을 높이면서 더 효율적인 코드를 작성하기 위해 리팩토링을 했습니다 라고 생각하시는 분들이 계시겠고 또 어떤 분들은 전체적인 서비스의 효율 향상과 유지보수의 질등 다양한 개선을 위해 아키텍쳐를 바꿧습니다…뭐 이런 대답을 하는 분들도 계실거에요.
어느 대답이든 좋습니다.
앞서 말씀드렸듯이 이 질문에서는 여러분들이 어떤 문제점을 인식했고 어떤 액션을 취했으며 어떤 결과를 봤는지를 묻는 질문이기에 대답을 할 수 있다면 다음 질문을 확인하셔도 좋습니다.
하지만 그렇지 못하신 분이 계시다면 이 질문의 어떤 부분에서 내가 대답을 못하고 있는지 정확하게 파악을 하셔야합니다.
간혹가다 이런 분들이 계셔요.
이제 막 개발공부를 하시는 단계에서 책이나 온라인 강의에 나온 예제를 그냥 따라하시는 분들말이에요.
개발을 하나도 모르는 상태에서 일단 따라하는건 어쩔수 없다 하더라도 왜 따라했는지 이유도 모르고 그냥 따라한 사람들이 계세요.
설령 이유가 있다하더라도 상당히 주관적인 이유인 경우가 있거든요.
그냥 좋아보여서… 혹은 유명한 저자가..혹은 선생님이..이렇게 하니깐… 뭐… 이런… 대답을 들으면 워낙 주관적이고 논리적이지 못해서 말문이 막히는 경우가 있어요.
우리 꿈꾸는 개발자님들은 아마 이런 분들은 안계실거라 생각하지만 혹시라도 이런 분들이 계시다면 제 youtube를 정주행 하시길….
두번째로 질문해야 할 건 그 문제를 어떻게 해결했나.. 입니다.
여러분들이 리팩토링을 했다면… 혹은 아키텍처 변경을 했다면 어떻게 그 문제를 해결했는지 말할 수 있어야 합니다.
이 질문의 진짜 의도는 문제 해결을 위한 방법을 탐색하는 능력과 베스트를 찾아내는 능력을 알아보는 질문이에요.
어떤 문제를 해결하는데 있어서 그 방법은 정말 무수히 많거든요.
꼭 A라는 방법이 아니더라도 B라는 방법으로도 문제를 해결할 수 있고 Z라는 방법으로도 해결할 수 있는게 개발의 세계잖아요.
근데 그 많은 방법 가운데 왜 그 방법을 선택했는지…
그리고 그 문제를 어떻게 해결했는지를 설명할 수 있다면 개발자로서 논리적인 사고와 문제해결능력을 갖추고 있다는 뜻이에요.
반대로 어떤 문제를 어떻게 해결했는지와 왜 그 방법으로 해결했는지를 말하지 못한다면 상당히 주관적인 의사결정과 어떤 난관에 부딪쳤을 때 차선책에는 어떤 것들이 있는지 모르기에 문제 해결능력이 낮을 수 밖에 없어요.
우리가 개발을 하면 이런 경우 참 많잖아요.
아마 처음 개발을 접하시는 분들이라면 수많은 버그와 에러에 당황하실 때가 참 많을 거에요.
하지만 조금더 개발을 하다보면 그러한 버그나 에러보다 더 큰 문제에 직면할 때가 있어요.
그때 개발자로서 어떻게 행동해야 하냐하면 그 문제를 해결할 수 있는 방법에는 어떠한 것들이 있는지 빠르게 파악하는 거에요.
그리고 각각의 장단점을 따져보고 최종적으로 어떤 방법으로 그 문제를 해결할지를 정해야 해요.
만약 우리가 한가지 방법만 알고 있고 그 방법을 누군가에게 설명을 해야 한다면 비교대상이 없기때문에 상당히 설득력이 떨어지게되요.
개발자는 논리적인 사고능력과 문제해결능력을 항상 키워나가야 합니다.
이 감각이 떨어지면 커리어가 문제가 아니라 여러분들의 개발자로서의 성장 자체가 아예 멈춰버려요.
때문에 여러분들이 정말로 빠른 성장과 커리어 관리를 하기 위해서 늘 문제 해결을 위한 방법을 탐색하는 능력과 베스트를 찾아내는 능력를 기르시기를 추천 드립니다.
세번째로 나 스스로에게 질문해야하는 것은 그 문제를 해결하고 어떤 효과가 있었나? 입니다.
이 질문의 의도는 행동한 것에 대해서 어떤 피드백을 했는지를 확인하는 것입니다.
간혹 어떤 개발자들은 한번 개발했으면 그 뒤로는 한번도 안보는 분들이 계시더라구요.
저는 개인적으로 그런 분들은 두가지 분류로 봅니다.
하나는 정말 자신감 있는 천재이거나 혹은 똥싸고 안치우는 개발자이거나…
하지만 경험상 천재라 말할 수 있는 개발자중에 이런 경우는 없었고 대부분이 후자였습니다.
개발에 정답은 없습니다. 어느정도 형식화 되어있고 패턴화 되어있는 경우는 있지만 어떠한 코드도 이것만이 정답이다라고 말할 수 없어요.
또한 시간이 지나면서 그때는 그 코드가 효율적이였지만 지금은 달라지는 경우도 있어요.
때문에 이미 짜 놓은 코드도 다시한번 뜯어보고 정말로 이 방법이 좋았는지 확인을 하고 실제로 좋든 나쁘던 어떤 효과가 있었는지를 확인하면서 다음 개선점을 알아가야합니다.
문제도 해결했으니 더이상 그 짜놓은 코드를 안봐도 된다고 생각하면 경우에 따라서는 정말 큰 폭탄을 코딩한것과 마찮가지일 수 있어요.
내가 개발한 부분이 지금은 괜찮아보이지만 다른 기능, 혹은 서비스에 악영향을 미치는 경우도 있고 성능이 급속도로 나빠지는 경우도 있어요.
이러한 문제는 개발 직후와 정기적인 확인으로 알아가면서 데이터를 축척해나가야 다음에 코드를 짤때 똑같은 실수를 저지르는것을 방지할 수 있어요.
실제로 저도 이런 문제를 직면한 적이 있었는데요.
당시에 어떤 기능을 구현했고 테스트까지 통과했고 실제로 배포까지 이루어졌어요.
그런데 배포하고나서 한두시간쯤 지나서 서포트팀에서 사진 업로드가 안된다고 연락이 왔어요.
근데 사진 업로드기능은 기능 제가 기능구현했을 때 만지지 않았던 부분이었거든요.
근데 나중에 알고 보니깐 제가 기능구현한때 만진 모듈이 사진을 업로드할때도 사용하는 모듈이었는데 그부분을 고려하지 않고 수정하는 바람에 문제가 생긴거였어요.
이렇게 당초에 목표로 했던 문제는 해결했지만 그로 인해서 다른 어떤 문제가 또 발생할 수도 있기 때문에 피드백은 정말 몇번을 강조해도 부족하지 않을 정도입니다.
때문에 여러분들이 개발을 통해서 어떤 문제를 해결했다면 그 결과가 어떠했는지도 반드시 확인을 해야합니다.
그리고 그 결과는 최대한 숫자로 표현하는 것을 추천합니다.
조금 다른 이야기이긴 하지만 피드백을 문장으로 표현하면 주관적으로 보이지만 숫자로 표현하면 객관적으로 보입니다.
그리고 숫자로 표현하면 정량화가 가능하기 때문에 어떤 부분이 얼마만큼 좋아졌거나 나빠졌는지 명확하게 알고 다음 목표를 비교적 쉽게 정할수 있어요.
마지막 네번째 질문은 바로 이겁니다.
지금은 어떤 문제를 인식하고 있나? 입니다.
제가 지금까지 개발구현에 관한 예만 들었지만 실제로 개발자가 가장 의식해야하는 부분은 비즈니스 문제를 해결하는 것 입니다.
예를들어 지식이 부족한 상태에서 어떤 기능을 구현하려고 하니 난감했다..그래서 책과 온라인 강의등을 통해서 지식을 쌓고 기능을 구현할 수 있었다…
라는 경우는 개인의 문제점을 해결한 경우이고 비즈니스 문제를 해결한 건 아니에요.
한 개인이 어떤 조직에 속해있고 개발자로서 오더가 내려온 요건을 충족시켜주는건 당연히 해야하는 거에요.
물론 난이도에 따라 이야기가 조금 달라질 수는 있지만 개발자로서 당연히 해야하는 부분이 어느정도는 존재한다는 뜻입니다.
하지만 의식이 여기서 멈추면 개인의 성장부분에서도 딱히 도움은 안되요.
개발자로서 성장을 하고 커리어를 더 잘 관리하려면 코딩실력 뿐만아니라 비즈니스 문제를 해결하는 것에 관심을 가져야해요.
지금은 어떤 문제를 인식하고 있나? 라는 질문의 의도는 현 상황에 안주하지 않고 계속해서 개선점을 찾아내고 있으며 그 난이도는 높아지고 있는지를 확인하는데 있습니다.
아마 대부분의 초보 개발자라면 기능구현 하고 알고리즘 생각하는데 더 많은 시간을 보내게 될거에요.
해결이 잘 안되면 주변 개발자분들에게 조언을 구하기도 할거구요.
근데 지금 그걸 그만두라는 뜻은 아니에요.
개발자의 역량을 높이는데 기능구현과 알고리즘 지식은 상당히 중요하고 또 높여가야 할 능력이에요.
근데 문제는 이러한 것들에만 집중을 하다보면 “지금은 어떤 문제를 인식하고 있나?”라는 질문에 기능구현과 알고리즘을 개선해야 할 문제만을 떠올리게 되요.
근데 한번 생각을 해보자구요.
애당초 여러분들이 다루고 있는 서비스의 매출이 떨어지게 되서 회사가 없어진다면 기능구현이나 알고리즘 개선이 무슨 의미가 있을까요?
조금 극단적인 예를 들었지만 제가 여기서 강조하고 싶은 것은 여러분들이 생각하는 문제의 난이도를 점점 높여가야 한다는 점입니다.
개발적인 문제에만 국한되어있지 않고 앞서 말씀드린 비즈니스 문제를 해결하는 것에 관심을 가진다면 더 넓은 시야로 많은 문제를 바라볼 수 있어요.
그리고 지금까지는 어떤 문제를 풀기 위해 개발자끼리만 대화를 했다면 이제부터는 디자이너나 기획자 유저와 직접 이야기를 할 수 있게 되요.
즉 누구와도 대화가 가능하고 개발자의 입장에서 조언이나 제안을 할수 있게 되는거에요.
그럼 이쯤해서 다시 질문을 드려볼께요.
“여러분들은 지금 어떤 문제를 인식하고 있나요?”
이 글을 보고계신 많은 개발자님들이 이 질문의 대답이 더 난이도 높은 대답이 되기를 바랍니다.
위의 질문들을 다시한번 더 정리를 하면 이렇습니다.
“지금까지 어떤 문제를 해결했나”, “그 문제를 어떻게 해결했나”, “그 문제를 해결하고 어떤 효과가 있었나”, “지금은 어떤 문제를 인식하고 있나” 이렇게 네가지입니다.
“지금까지 어떤 문제를 해결했나”라는 질문은 그냥 넘길수 있는 부분에서도 문제점을 파악할수 있고 그 문제점을 해결하기 위해 실제로 액션을 취했으며 결국 그 문제점을 해결 했는가에 있고
두번째 질문인 “그 문제를 어떻게 해결했나”에서는 문제 해결을 위한 방법을 탐색하는 능력과 베스트를 찾아내는 능력을 갖추고 있는가에 있어요.
그리고 세번째 질문인 “그 문제를 해결하고 어떤 효과가 있었나”에서는 행동한 것에 대해서 어떤 피드백을 했는지를 확인하는 것에 있고 마지막 질문인 “지금은 어떤 문제를 인식하고 있나”에서는
현 상황에 안주하지 않고 계속해서 개선점을 찾아내고 있으며 그 난이도는 높아지고 있는지에 있어요.
이상 4가지 질문은 여러분들의 성장과 커리어 관리를 위해서 꾸준히 반복적으로 스스로 질문하셔야해요.
실력자는 하루아침에 이루어 지는게 아니에요.
지금 바로 행동하는 것이 나의 삶을 바꾸는 방법입니다.
그러다보면 지금 꿈꾸고 있는 목표에 조금 더 다가가 있을겁니다.
저도 매번 위의 질문을 저 스스로에게 반복해서 묻고 있고 언젠가는 눈부셨던 그 구글에… 암튼 좋은 커리어를 가지고 있는 분들을 보면 이러한 행동이 너무나 당연하고 자연스럽게 이루어집니다.
오늘 말씀드린 4가지 질문을 항상 반복하셔서 앞으로의 여러분의 성장과 커리어 발전에 많은 도움이 되길 바랍니다.