본문 바로가기

해외취업이야기

뛰어난 소프트웨어 개발자의 요건

지금 전 세계적으로 좋은 소프트웨어 엔지니어의 수요가 엄청납니다. 곧 포화상태가 올 것만 같았던 소프트웨어 엔지니어 잡 마켓은 끊임없이 성장 해 왔으며, 아직까지도 좋은 소프트웨어 엔지니어는 너무나 찾기 어렵고 찾더라도 붇들어 놓기도 어렵습니다. 앞으로도 좋은 소프트웨어 엔지니어의 수요는 계속해서 늘어날 것입니다. 빅4 IT 회사들은 좋은 소프트웨어를 찾기위해 인터뷰에 어마어마한 돈을 투자 해 왔고, 앞으로도 그 경쟁은 점점 치열해 질 것입니다.


아마존도 예외는 아니어서, 좋은 소프트웨어 엔지니어를 채용하기 위해서 엄청난 노력을 기울이고 있습니다. 현실적으로 탑 레벨 졸업생이나 경력자들은 구글, 페이스북을 선호 하기 때문에 아마존은 그 나머지를 데리고오는 분위기입니다. 회사의 네임벨류가 좋기 때문에 지원자는 언제나 차고 넘치지만, 회사 내에서는 언제나 소프트웨어 엔지니어가 부족해서 팀 곳곳에서 불평이 나올 정도입니다. 스탠다드가 높아 아무나 뽑을 수는 없다보니 프로젝트에 필요한 소프트웨어 엔지니어를 충분히 채우지 못하는 것이 현실입니다.




이렇게 소프트웨어 엔지니어가 많이 필요함에도 스탠다드에 타협을 하지 못하고 인력난에 허덕이는 이유는, 한명을 잘못 뽑으면 나머지 소프트웨어 엔지니어들에게 피해가 가고, 결과적으로는 기존에 잡고있던 엔지니어들까지 놓칠 수 있기 때문입니다. 페이스북, 구글, 아마존은 엔지니어가 갑입니다. 그중에서도 뛰어난 소프트웨어 엔지니어는 프로젝트의 향방을 좌지우지 할 능력을 가지고 있기 때문에 무엇보다 중요한 리소스입니다. 그렇기 때문에 회사는 위험을 감수하면서 까지 기준 미달의 엔지니어로 확충하기 보다는 최대한의 경쟁을 통해서 소수라도 좋은 소프트웨어 엔지니어를 확보하려고 합니다. 그 결과로, 매우 까다로운 인터뷰 과정을 통해 선별합니다.


이렇게 까다로운 과정을 통해 입사한 사람들은 자연히 서로의 수준을 예상할 수 있고, 다들 만만치 않다는 것을 서로가 인지하고 있습니다. 그 덕분에 내가 A를 이야기 했는데 못알아들으면 그사람이 멍청해서 못알아들은것이 아니라 내 설명에 문제가 있을 수도 있다는 생각을 자연스럽게 하게 되고, 서로가 발빠르게 보완하는 식의 토론이 이루어 집니다. 토론 도중 감정적으로 부딛힌다거나 하는 경우보다는 문제 해결에 집중하는 경향이 있어 진행 속도가 엄청나게 빠릅니다. 이렇듯, 평범한 소프트웨어 엔지니어가 섞여있는 상황과, 뛰어난 소프트웨어 엔지니어들만 모여있는 상황의 퍼포먼스는 체감상으로도 엄청나게 다릅니다.


이런 환경에서 일하는것은 개개인의 발전에도 지대한 영향을 끼칩니다. 물론 가끔은 대충 넘어갈 수 있는 일이 없어 숨막히기도 합니다. 이렇게 하겠다 하면 그래 그러자 하는 분위기가 아니라, "왜 그렇게 하는지", "대안은 없는지", "그렇게 안했을때의 문제는 무엇인지" 으로 시작해서 끊임없이 파고들기 때문에 스스로도 조금 더 치밀하게 변할 수 밖에 없습니다. 사서 고생하는 것 같지만, 장기적으로는 소프트웨어 엔지니어로써의 역량을 빠르게 키울 수 있는 길이라고 생각합니다.


그렇다면 좋은 소프트웨어 엔지니어들과 협업하고 경쟁하기 위해서는 어떤 역량이 필요할까요?


기본 지식

학부때 배운 기본 지식들은 엄청나게 중요합니다. 컴퓨터 알고리즘, 데이터구조, 컴퓨터구조, 운영체제 등은 소프트웨어 설계나 구현 그리고 토론 전반에 걸쳐서 끊임없이 활용됩니다. 복잡한 알고리즘이나 아키텍처를 논의하는데 당연한 것을 이해 못하면 토론에서 배제 될 수 밖에 없습니다. 그렇기 때문에 인터뷰 과정에서도 이런 부분을 확인 하는 과정이 녹아들어 있습니다. 물론 업무중에도 직 간접적으로 활용됩니다. 현재 학부생이라면 이 과목들의 공부에 전력을 다 해야 합니다.


새로운 기술에 뛰어들어 익히는 능력

나는 C++ 전문가야 라고 하면서 다른 것들을 배척할 수 있는 시대는 지났습니다. 좋은 엔지니어들이 모인 집단에서는,"이 부분에는 XX를 써보자" 라는 의견이 나왔을때 "그건 안써봤는데" 라는 말보다는 "그걸 사용하면 단점과 장점이 뭔지"를 논의합니다. 제가 최근 일한 두 회사와 면접을 볼때도, "xx 언어를 할줄 아냐"고 전혀 묻지 않았습니다. 좋은 소프트웨어 엔지니어라면 필요 없는 질문이기 때문입니다. 아마존에서는 새로운 언어를 익혀서 사용한다, 새로운 프레임워크를 사용하는 것은 당연한 것으로 인식하는 경향이 있습니다. 구글이나 페이스북도 물론 마찬가지일 것입니다.


반대 의견을 수용할 수 있는 관용과 반대할 용기

소프트웨어를 설계할 때, 최상의 결론에 도달하기 위해서는 수많은 반대의견이 나오게 마련입니다. "I disagree"를 입에 달고사는 아마존 애들은, 마치 그 말을 하기 위해서 노리고 있는것처럼 보이기도 합니다. 상대의 이야기를 비판적으로 수용하고, 이해가 되지 않는 부분은 이해 될때까지 설명을 요구하고, 자신을 수긍시키지 못하면 "I disagree"을 내밷습니다. 하지만 설득 시키는 순간, 언제 그랬냐는듯이 "ok, makes sense" 로 바뀝니다.


뛰어난 소프트웨어 엔지니어들은, 일에 개인적인 호불호나 감정을 담기 보다는 해결 지어야 하는 타겟을 보고 동의와 반대를 합니다. 이런 문화는 한국 사람들에게는 불편하고 힘듭니다. 저 또한 적응하는데 너무나 힘들었습니다. 상대의 동의하지 않음을 감정적으로 받아들이지 않을 수 있게 되면, 상대의 의견에 "I disagree" 하는것도 점차 쉬워집니다. 이 부분이 팀의 퍼포먼스에 굉장히 큰 차이를 만듭니다.


솔직함

모르는것을 솔직히 인정하지 않고, 빙빙 둘러댄다거나, 말을 돌린다거나, 우긴다거나 하는 사람은 최악의 구성원입니다. 아무리 1번 2번 3번이 완벽해도, 솔직함이 없으면 좋은 소프트웨어 엔지니어가 될 수 없습니다. 아는척 하거나 우기는것은 본인에게도, 다른 팀원들에게도, 프로젝트에도 100% 부정적인 영향을 미칩니다. 그리고 아는척 하는것은 다른 동료들도 모두 알고 있습니다. 그냥 거론 하지 않는 것 뿐이지요.


모르는것은 모른다고 최대한 빨리 이야기하고, 질문을 하거나, 더 잘 알고 있는 사람에게 주도권을 넘겨줘야 합니다. 그것은 지는것, 쪽팔리는 것이 아니라 팀의 효율을 높혀주는 매우 발전적인 행동입니다. 그렇기 때문에 좋은 소프트웨어 엔지니어는 반드시 솔직해야 합니다.



소프트웨어 엔지니어라는 직업은 정말 축복 받은 직업입니다. 시대를 잘 만난 덕분에 선택 할 수 있는 일이 너무나도 다양하고, 대우도 좋으며, 프로젝트에서 가장 중요한 존재로 당당하게 일할 수 있습니다. 경쟁력 있는 소프트웨어 엔지니어가 됨으로써, 더 많은 기회를 얻게 되시길 빕니다.