흔하지 않고 좋은 웹 개발자가 되는 방법

들어가며

2018년 새해가 밝았습니다. 늘 맞이하는 새해지만 이번 년도에는 더 특별한 한 해를 보냈으면 하는 바람이 다들 크시겠죠? 전 올해로 5년 차를 맞이하는 웹 개발자로서 항상 어떻게 성장해야 하는지 고민하고 있습니다. 올 한 해는 이번 블로그 글을 염두에 두고, 더 좋은 개발자, 더 좋은 동료가 되보려고 합니다.

아래 글은 “흔하지 않은, 좋은 웹 개발자가 되는 방법(How to be an uncommonly good web developer)”이라는 미디엄 기사를 번역한 글입니다.

7년의 경력을 가진 비전공 웹 개발자가 겪은 경험과 생각을 글로 잘 풀어냈죠. 훌륭한 웹 개발자가 되려면 어떤 자질이 필요할까?라고 했을 때 다들 프로그래밍 실력을 떠올리실 텐데요. 저도 마찬가지로 그렇게 생각했습니다. 하지만 아래의 글을 읽는 순간, 이번 년도에 주변 동료들에게 어떤 태도와 마음가짐을 갖고 업무에 임해야 할지를 다짐하게 되었습니다.

지금 이 글을 읽는 여러분에게도 좋은 영향이 있었으면 좋겠네요. 2018년도 우리 대한민국의 웹 개발자 생태계에 무궁한 발전을 기원합니다!

Happy Coding!
Captain Pangyo

머리말

좋은 웹 개발자가 되려면 어떻게 해야 할까요?

당신이 만약 신입 프로그래머라면 위 사실이 쉽지 않다는 것을 금방 깨닫게 될겁니다.

우리가 흔히 알고 있는 한 가지 방법은 코딩 튜토리얼을 보고, 프로그래밍 책을 읽고, 포트폴리오 사이트를 만드는 거죠. 그리고 다른 방법은 스펙에 기준하여 웹 사이트를 만들고, 마감 기한을 맞추고, 무엇보다도 당신의 팀장님과 고객을 행복하게 하는 겁니다!

이뿐만이 아닙니다. 기술은 날이 갈수록 엄청 빠르게 변화하고 있습니다. 그래서 지금 최신 기술을 쫓고 있지 않으면 내년에는 완전히 도태될 것 같죠.

비밀을 알고 싶으시죠? 걱정하지 마세요.

어떤 일이든 열심히 하다 보면 자연스럽게 경험을 쌓게 됩니다. 마찬가지로, 코딩을 배우고 일을 하다 보면 업무에서 끝내주는 개발자가 될 수 있겠죠.

좋은 웹 개발자가 되는 것은 가능합니다. 그리고 나아가서 더 좋은 웹 개발자가 될 수 있죠.

나의 첫 직업

저는 컴퓨터 공학을 전공하지 않고, 독학으로 프로그래밍을 배운 웹 개발자입니다. 이 분야에서 일한 지 7년 됐어요. 물론, 지금까지 새로운 기술들을 배우기 위해 안간힘을 써왔죠.

그 과정 속에서 가치 있는 경험과 기술들을 많이 배웠습니다. 아마 이 글을 보고 있는 당신도 비슷한 경험을 해보셨을거에요.

제가 맨 처음 주니어 웹 개발자로 커리어를 시작했을 때 너무 즐거웠습니다. 하지만 정말 솔직하게 말하면, 첫 2년 동안은 겁에 질렸었어요.

매일매일, 뭘 해야 하는지도 정확히 모르면서 그냥 뭔가를 했거든요. 그리고 심지어 어디서부터 시작해야 하는지도 몰랐었습니다.

제 무능함을 매번 느꼈어요.

감사하게도 모든 게 잘 풀렸습니다. 저에게 호의적인 상사와 동료들이 저를 구원해줬죠. 그리고 다행히 전 마감 기한을 다 지킬 수 있었습니다.

시간이 갈수록 이전처럼 스트레스를 받지 않았죠.

그리고 4,5년이 지나자 이제는 제 코딩에 자신이 붙기 시작했습니다. 아마 당신이 이제 시작하는 신입 프로그래머라면 5년이 좀 길게 느껴질 수도 있겠네요.

하지만 이것만은 꼭 기억하세요:

성공은 하루아침에 일어나지 않는다. 하지만 몇 일, 몇 주, 몇 달 혹은 몇 년 동안 포기하지 않고 열심히 하면 성공한다.

제 짧은 경력에서도 많이 배운 것 같습니다. 그래서인지 힘들게 직업을 구해 웹 개발자로 새로 시작하는 분들에게 도움을 주고 싶습니다.

많은 사람들 가운데서 돋보이는 개발자가 되는 몇 가지 원칙이 있는데요. 이 원칙들을 잘 적용하면 회사와 고객에게 중요한 자산이 될 수 있을 겁니다.

만약 이 글을 읽는 당신이 설령 아직 일을 하고 있지 않더라도, 아래의 원칙들을 학습 과정에 적용할 수 있을 겁니다.

흔하지 않은 훌륭한 웹 개발자가 되고 싶나요? 그럼 그 비밀을 지금부터 알아보겠습니다.

1. 특정 기술을 숙달하는 것은 스프린트가 아니라 마라톤입니다.

대학이나 코딩 부트캠프를 졸업하고 바로 직업을 구했다면 잘하신 겁니다. 이제 당신의 코딩 여정은 시작된 거니까요.

웹 개발은 상당히 넓은 분야입니다. 다른 기술들과 마찬가지로 정말 잘하려면 오랜 시간이 걸리죠. 지금 이 순간에도 아직 모르는 게 많을 겁니다. 앞으로 갈 길이 많이 남은 거죠.

그래도 괜찮습니다. 이제 겨우 시작했으니까요. 지금 당장 모든 것에 능숙한 전문가가 될 수는 없죠.

지금 모든 것을 알아야 한다고 생각하지 마세요. 그건 현실적으로 불가능합니다. 그리고 아마 스트레스를 많이 받을거에요.

한 가지 확실한 건 당신이 더 웹 개발을 잘하고 싶고 배우고 싶다는 거에요. 그렇다면, 지금 현재 위치를 현실적으로 인지하고, 성장하는 과정을 넓게 바라보세요. 커리어를 단기적인 관점이 아니라 장기적인 관점에서 바라봐야 합니다. 너무 일찍 포기하면 안돼요.

2. 누군가에게 도움을 요청하기 전에 최대한 스스로 먼저 해보세요.

오래 전에는 미지의 영역을 탐험하는 것이 불안과 스트레스를 가져다줬습니다. 이와 비슷하게, 저는 제가 알지 못하는 것을 해결해야 할 때 이와 유사한 압박감을 느꼈죠.

도움을 요청해야 할 시점을 알기

앞과 같은 상황에서 2개의 선택지가 있었습니다. 팀장님한테 가서 “죄송한데 제가 이거 어떻게 하는지 잘 모르겠습니다. 어떻게 해야 하나요?”

이렇게 하면 단기적으로는 심적인 압박을 좀 덜 받을 수 있습니다. 그러나, 장기적으로는 제게 도움이 되지 않았죠. 왜냐하면 스스로 해결책을 찾을 줄 모르는 직원은 결국 남들의 시간을 모두 뺏어가기 때문입니다.

다른 선택지는 스스로 할 수 있는 선에서 최대한 많이 알아보는 것이었습니다. 결국에는 제가 최대로 이해할 수 있는 것까지 알아보게 되었죠.

설령 문제를 풀지 못하였더라도, 이번엔 팀장님한테 가서 이렇게 말합니다. “팀장님, 죄송한데 제가 이걸 잘 모르겠습니다. 일단 여기까지는 조사해봤는데요. 정확하게 이 부분이 잘 이해가 안가는 것 같아요.”

차이점이 느껴지시나요?

일찌감치 포기하고, 다른 사람에게 내 일을 대신해달라고 말하기 전에 제가 할 수 있는 최선을 다한거죠. 누군가에게 물어볼 때는 당신이 물어보기 전에 얼마만큼의 노력을 했는지 보여주는 것이 중요합니다.

스스로 터득하는 방법 배우기

스스로 조사하고 직접 해보면서 문제를 풀어나가면 아래와 같은 이점이 생깁니다.

먼저, 직무에서 새로운 기술을 배웁니다. 달리 말하면 돈 받으면서 배우는 거죠. 스스로 해결할 수도 있는 문제들을 상사와 동료들에게 질문하느라 시간을 낭비하지 않아도 됩니다. 그러므로 당신이 회사의 마이너스가 아니라 플러스가 되는 거죠.

물론 물어보면 금방 해결될 문제를 스스로 해결하려다가 몇 날 며칠을 보내는 것도 아깝습니다. 특정 문제에 너무 많은 시간을 소모하면 아무래도 효율이 떨어지니까요.

여기서부터는 여러분 스스로 밸런스를 맞추셔야 합니다. 어느 정도까지 스스로 찾아보다가 물어볼 건지를요. 아마 몇 번 해보면 아주 좋은 밸런스를 찾게 될 겁니다.

3. 호기심 가지기

제가 프로그래머로 처음 일을 시작했을 때, 매번 긍정적인 피드백을 받았고 새로운 정보들을 스펀지처럼 흡수했습니다. 어떻게 해야 하는지 잘 몰라도 무엇이든 해보려고 했죠. 그리고 정말 프로그램이 어떻게 동작했는지 궁금했습니다.

프로그램이 어떻게 동작하는지 알고 싶어 하는 욕구는 모든 엔지니어들에게 있습니다. 당신의 호기심으로 그 욕구를 커지게 만드세요.

그냥 빨리 일 처리하려고 어떻게 돌아가는지 확인도 안하는 것은 바보 같은 짓입니다. 왜냐하면 이게 왜 동작하는지를 아는 것은 매우 중요하기 때문이에요.

특정 문제를 해결하기 위해 스택 오버 플로우에서 돌아가는 코드를 찾았다고, 복붙으로 끝내면 안됩니다. 정말 빠듯한 마감기한이 아니라면, 시간을 좀 더 들여서 코드가 어떻게 돌아가는지 그리고 당신의 코드와 어떻게 통합되는지 한번 살펴보세요. 왜 당신의 예전 코드는 안 돌아갔고, 지금은 왜 돌아가는지도요.

설령 100%를 다 이해 못했더라도 괜찮습니다. 그냥 전체적인 개념을 잡도록 노력해보세요. 이번에 다 이해 못해도 다음 번 유사한 문제를 만났을 때는 더 이해하기 쉬울 겁니다.

4. 항상 성장하기

이 주제는 웹 개발뿐만 아니라 요리, 운전 등 다른 영역에도 적용됩니다.

실수를 분석하고, 실수로부터 배우기

특정 문제가 잘 안 풀릴 때는 잠시 물러나서 다른 관점에서 생각해보세요. 그리고 이런 질문을 해보는 건 어떨까요? “내가 무엇을 하고 싶었었는지?”
“그리고 왜 그게 잘 안되었는지?”

만약 당신의 코드가 웹 사이트를 고장 냈다면, 무슨 일이 일어난 걸까요? 그리고 앞으로는 이 문제를 어떻게 방지할 수 있을까요?

아래의 절차를 따라보세요.

  • 뒤로 돌아가서 바람직하지 않은 상황을 분석해보세요.
  • 무슨 일이 일어난 건지 파악해보세요.
  • 다음번에는 이 문제를 피할 수 있는 실행 절차를 세워보세요.

이건 꽤 시간이 걸립니다. 그리고, 솔직하게 모든 문제들에 대해서 돌아가 파악할 시간은 없죠. 하지만, 실수에서 배우지 않고 계속 잘못 이해한다면 다시 그 실수를 저지르는 건 뻔합니다.

물론 꽤 어려운 작업이죠. 왜냐하면 한번 힘든 경험을 하고 나면 본능적으로 다시 들춰보고 싶지 않아 하니까요.

그렇다면 이걸 디버깅으로 보면 어떨까요? 만약 코드에 반복적으로 같은 오류를 발생하면 꽤 비효율적일 겁니다. 이는 다시 그 오류가 재발하지 않게 개선할 여지가 남아있다는 걸 의미합니다.

정말 작은 실수와 오류라도 위와 같은 방법들로 분석하고 교훈을 얻으려고 한다면, 장기적으로는 안목 있는 엔지니어가 될 수 있을거에요.

5. 문제 해결의 달인 되기

웹 개발자로서 대부분의 업무는 문제를 해결하는 것입니다. 새로운 코드를 작성하든 기존 코드를 디버깅하든 최종 목표는 내가 원하는 동작을 하게 만드는 거죠.

그럼 어떻게 코드에서 발생하는 문제들을 잘 해결할 수 있을까요?

먼저, 코드가 어떻게 동작해야 하는지를 정확하게 이해해야 합니다. 그리고 그 동작과 관련된 모든 부분도요. 문제가 생기는 원인을 찾아보세요. 원인을 찾고 나면 금방 그 문제를 해결할 수 있을거에요.

램프 고치기

더 쉽게 설명하기 위해 고장 난 램프를 고치는 작업을 비유로 들어보겠습니다.

램프를 고치려면 먼저 램프의 정상 동작이 뭔지 알아야 합니다. 다 알고 있다시피 램프는 전원을 켜면 불이 들어와야 하죠.

만약 우리의 예상대로 동작하지 않으면 단계 별로 차근차근 살펴보면 됩니다. 그리고 뭐가 잘못된 건지 알아내면 되죠.

살펴봐야 할 단계는 아래와 같습니다.

  1. 집에 전기가 들어오는지 확인합니다. 그리고 전기 콘센트에 전기가 흐르는지도 확인합니다.
  2. 램프가 콘센트에 꽂혀져 있는지 확인합니다. 그래서 전기가 램프에 흐르는지 확인하세요.
  3. 콘센트에 흐르는 전기가 램프의 선과 스위치를 통해 전달되는지 확인하세요. 선과 스위치가 제대로 작동하나요?
  4. 램프 스위치가 켜졌을 때, 램프의 전구가 켜지는지 확인합니다. 전구는 제대로 켜지나요? 깨지진 않았죠?

이렇게 각 단계를 확인해보면 문제가 발생한 범위를 좁힐 수 있습니다. 위와 같은 방식을 모든 문제에 적용할 수 있죠.

디버깅 : 웹 개발자에게 최고의 삶이자 최악의 삶

코드에서 에러를 발견하고 고치는 일은 물론 전구를 고치는 일보다 어렵습니다. 하지만 과정은 비슷하죠.

솔직하게 말해서 코드를 디버깅하고 이슈와 에러를 해결하는 일은 정말 어려운 일입니다. 전 특정 문제에 몇 일, 몇 주를 쓴 적도 있었거든요. 이게 바로 웹 개발자의 삶에서 최악인 부분입니다.

하지만 반대로 몇 번의 고군분투 후에 해결책을 찾아내면 놀라운 성취감을 느낍니다. 이 순간만큼은 굉장한 자신감을 느끼죠. 의심할 여지없이 이 환희의 감정이 바로 웹 개발자가 느끼는 최고의 순간입니다.

비 기술적인 부분들을 간과하지 마세요.

마지막 2개의 팁은 여태까지 다룬 주제들과 성격이 다릅니다. 최고의 웹 개발자가 되기 위해서는 코딩과 관계없는 자질도 필요합니다.

흔히 소프트 스킬 또는 대인관계 능력 부르죠.

대인관계 능력은 프로그래밍 능력만큼이나 중요합니다.

우리는 코드로 일하긴 하지만 궁극적으로는 사람들과 일합니다. 웹 사이트와 애플리케이션 모두 사람을 위해 만들어졌죠. 당신의 직업이 무엇이든 간에 당신은 고객, 손님, 동료와 일하게 됩니다.

최고의 웹 개발자는 단지 코딩만 잘하는 게 아닙니다.
큰 그림을 잘 이해하고, 사람들과 잘 어울려 협업할 수 있어야 합니다.

다음 2개의 팁을 숙달하기는 쉽지 않을 겁니다. 왜냐하면 기존과는 다른 종류의 사고방식을 요구하기 때문입니다. 많은 웹 개발자들은 이러한 비 기술적 자질들을 중요하게 생각하지 않습니다. 따라서, 이 자질들을 발달시키면 돋보이는 웹 개발자가 될 수 있습니다.

6. 다른 사람에 대한 공감 능력 기르기

공감은 감정, 요구 사항, 그리고 다른 사람의 관점을 이해하는 것과 관계가 있습니다. 짧게 말해서 역지사지로 다른 사람의 입장을 먼저 생각해보는 거죠.

옳고 그름을 따지기 보다..

저는 제 남편과 싸우고 나면, 둘 사이가 금방 어색해집니다. 내가 100% 맞는데?라고 생각하지만, 실상은 절대 그렇지 않죠. 그래서 힘들고 하기 어렵더라도, 우리는 항상 솔직하게 감정들과 생각을 털어놓습니다.

결국에 깨닫는 사실은 우리가 서로 오해를 했다거나 둘 중 한 명이 그날 그냥 기분이 나빴던거에요. 그 때서야 다른 사람의 입장, 즉 서로의 입장을 이해하게 됩니다.

옳고 그름을 따지자는 문제가 아닙니다. 다른 사람의 말을 듣고 공감하고 이해하자라는 거죠.

직장에서 공감하기

같은 방식으로 직장에서 누군가와 일을 하다 보면, 결국에는 의견 충돌과 반대 의견이 일어납니다. 그때 바로 결론을 내려 하지 말고, 그리고 그 사람을 비난하지도 마세요. 아마 언쟁 중에 그 사람이 한 행동이나 한 말은 고의가 아니었을 겁니다.

그에게 대화를 시도하고 생각을 이해하려고 해보세요.

아마 너무 바빠서 이메일 하는 것을 깜박한 것일 수도 있습니다. 혹은 아마 정말 스트레스받는 회의를 갔다 왔거나, 업무에서 스트레스를 너무 많이 받아 당신에게 화풀이 한 것일 수도 있어요.

다른 사람들을 존중하기

공감은 다른 사람의 업무량과 상황을 인지하고 존중해주는 것이기도 합니다.

예를 들어, 당신의 동료 한 명이 빠듯한 마감 기한에 맞춰 미친 듯이 일을 하고 있다고 칩시다. 그 동료가 크런치 모드에 있을 때 정말 급한 게 아니면 필요 없는 일로 안 건드리는 게 맞아요.

그리고 나서 그 동료가 일을 잘 처리한 다음에, 바쁜 거 잘 처리했냐고 물어보는 건 좋은 행동입니다.

7. 수동적이지 않고 능동적으로 행동하기

개인적으로 생각하기에는 수동적이지 않고 능동적으로 행동하는 것이 성공하는 사람들의 특징인 것 같습니다.

수동적인 태도

수동적인 직원은 주어진 일만 처리합니다. 절대 주어진 일 이상은 하지 않죠. 만약 뭔가 잘못되면 고치기는 할 겁니다. 다만, 그 문제가 발생하지 않도록 미리 예방하는 노력은 하지 않겠죠.

수동적인 사람은 큰 그림을 고려하지 않고 시스템의 연동된 부분들을 고민해보지 않습니다. 수동적인 사람들의 마음은 대개 “나한테만 영향 없으면, 내 문제는 아니지”입니다.

이건 정말 좁은 시야의 생각입니다. 아 여기서 수동적인 사람들이 잘못되었다고 얘기하는 건 아닙니다. 단지 그들이 더 할 수 있는 무언가를 놓치고 있다는 것을 얘기하는 거죠.

능동적인 태도

위와는 반대로 능동적인 직원들은 주어진 일만 하지 않습니다. 항상 작게나마 개선하려고 노력하죠.

만약 뭔가 잘못되면, 무슨 일이 일어났는지를 분석하여 개선할 겁니다. 그래서 그 오류는 다시 안 일어나겠죠. 그들은 항상 회사에서 업무 절차를 효율화하려고 합니다.

짧게 말해, 능동적인 사람들은 현재에 당면한 일을 해결함으로써 미래의 작업을 개선합니다.

능동적인 사람들은 큰 그림도 잘 보고, 더 많은 노력을 기울여 개선하려고 하죠. 능동적인 사람이 되고 싶나요? :) 능동적인 태도를 갖기 위해서는 먼저 더 많이 시도하고 실패해봐야 합니다. 그리고 많이 관찰해야 해요. 일단 한 번 감이 오면 당신의 삶의 많은 부분에 좋은 영향이 생길 겁니다.

마무리

좋은 웹 개발자가 되는 것에 대한 제 개인 생각을 읽어주셔서 감사합니다. 혹시 웹 개발을 처음 시작하신 분이라면, 이 글이 도움이 되었으면 좋겠네요 :)