멀리 보되, 한 걸음씩 나아가자
2019년 4월. 처음으로 강원도 원주 땅을 밟았다.
건강이 안좋아져 전 직장을 퇴사한 후 요양하고 있었던 시기였다.
솔루션 개발일에 지쳐 뭔가 다른 시도를 해보고 싶다는 생각이 있었다.
그러던중 지인의 소개로 원주에 상주하는 SI 프로젝트에 투입되게 된것이다.
같이 일하게 된 회사는 원주 소재의 공공기관 SI 구축사업과 연구과제를 주로 하는 소프트웨어 개발사였다.
처음에는 '강원도에 소프트웨어 개발사가 있다고?' 의아했다.
하지만 막상 강원도에 와보니 시골만 있는것은 아니었다.
평생을 도시에서만 살아온 도시 촌놈의 착각에 불과했던것이다.
내 임무는 기존에 운영중인 모바일 앱에 사업에서 요하는 기능을 추가하는 일이었다.
관심은 있었지만 모바일 앱 개발은 한번도 해본적이 없었다.
처음에는 도저히 이해할수가 없어서 난감했다.
전 직장에도 모바일 개발자는 따로 있었고, 내 업무와 분리되어 있었다.
일을 잘못 받았나 고민했지만, 이미 저질러 놓은 일은 어쩔수 없었다.
내게 맡겨진일은 무조건 완수해야하기에 밤잠을 줄여가며 공부했다.
안드로이드는 Java개발 경험이 있어 그럭저럭 할 수 있었지만 문제는 iOS였다.
당시는 Obj-C로 만들어져 있는 프로젝트가 더 많았고 내가 맡은 iOS 앱 소스도 그랬다.
몇년간 개발자를 하면서 다양한 언어를 배우고 써왔지만 언어부터가 너무 생소했다.
게다가 UI 구성요소를 배치하는 제한조건(Constraints)도 너무 생소했다.
웹, 데스크탑 프로그램도 제작해봤지만 이런 설계사상을 가진 UI 시스템은 내가 아는한 없었다.
많은 좌충우돌이 있었지만 2개월 정도 후, 개발을 완료하고 배포할 수 있었다.
그리고 프리랜서 계약이 종료됨과 동시에 같이 프로젝트를 했던 회사에 입사하게 되었다.
그렇게 시작된 인연으로 그들과 울고 웃으며 5년이 지났다.
많은 식구들이 들어오고 나갔다. 어렵고 힘든 일도 많이 겪었다.
나는 입사하고 얼마되지 않아 몇명의 주니어 개발자를 관리하며 실무도 하는 작은 팀의 팀장이 되었다.
누군가의 위에서 일의 전체 그림을 보고 조율하는것은 정말 익숙지 않았다.
그 중 가장 어려운것은 부하직원이 실무에 적응할 수 있게끔 키우는 일이었다.
모든 지식근로자와 마찬가지지로, 개발자는 혼자서 공부하면서 성장한다.
과거에 나는 스스로를 '엔지니어'라고 칭하며 스스로 정한 목표에서 코딩 전문가가 되고자 했다.
다른 모든 개발자가 이렇게 성장하고 있을거라고 생각했고, 생산성이 떨어지는 개발자를 이해하지 못했다.
하지만 회사를 이루는 최소단위이긴 하지만 다른사람의 위에 서니, 무작정 저성과자들을 배제할 수 없었다.
좋으나 싫으나 언제까지 같이 갈 수 있을지 알 수는 없지만, 같은 배를 탄 한 식구니까.
몇년 전 부터 신입사원을 채용하면 거치는 교육 프로세스가 있다.
회사에서 개발자로서 협업을 하려면 최소한 익혀야할 기술적 소양을 증명해내는 과제다.
수습기간중 교육 프로세스를 통해 평가를 할것이라고 공지하고 정해진 절차에 의해 진행한다.
과제 하나당 한달 정도 기간을 주고 중간발표, 최종발표가 있다.
목표를 얼마나 잘 이해 했는지 기본적인 문서도 작성한다.
발표가 있는날이면 기능이 얼마나 잘 구현되었는지 멘토가 확인하여 공개한다.
신입사원을 교육시켜주는 마냥 훈훈한 자리를 생각했다면 틀렸다.
발표때 진척율이 좋지 못하거나, 스스로 하고 있는 일을 이해하고 있지 못하면 혼난다.
2차과제까지 모두 수행후, 최종 결과에 따라 정식 채용 되지 못할 수 있다.
과제 합격 이후, 신입 개발자는 수습기간이 한달 정도 남게 된다.
이때부터 실무에 투입을 시켜보는데 회사가 무슨일을 하고 있는지에 따라 경험의 질이 달라진다.
여기서부터 성장은 대부분의 소프트웨어 개발 현장에서처럼 스스로의 의지와 운에 달렸다.
평등하게 주어지는 경험의 기회는 신입 2차 과제까지다.
자연스럽게 회사에서 해야할 일과 학습 방식을 체득시키기 위한 훈련이다.
대부분 마감기간 동안 어떻게든 목표를 이루기 위해 노력하는 과정에서 빠르게 성장한다.
몇가지 요소를 제외하고는 코딩 부트캠프가 연상될것이다.
처음부터 이런 교육 프로세스를 진행했던것은 아니다.
지방 중소기업은 항상 구인난이다. 거기다 대부분 이런 교육을 할 여력이 없다.
그래서 신입은 보통 큰 기대를 하지 않고 채용하고 냅둔다. 실무를 하다 보면 알아서 적응하겠지 하고 말이다.
대부분의 중소기업 개발자는 이렇게 성장한다.
회사에서 주어지는 이런저런 실무에 치여가며 적응하기 바쁜 세월을 몇년 보내다보면 일에 익숙해지던지,
시시때때로 바뀌는 회사에 적응하던지 둘중 하나는 한다.
문제는 적응하지 못한 경우 세월만 흘려보낼 뿐이라는것이다. 회사도 당사자도 서로 좋지 않은 예다.
회사가 정말 암울한 시기가 있었다.
사업은 이리저리 벌여놨는데, 경력이 조금 있는 개발자 한두명 외에는 뽑은지 얼마 되지 않은 신입 개발자뿐.
한쪽 일을 맡겨도 답이 없으니 다른쪽으로 투입하고 싶어도 역량이 안맞으니 쓸수가 없었다.
무작정 일을 맡겨보면 답이 없거나, 어떤 방식으로든 문제가 생겼다.
심지어 할 수 있는 일을 맡겨도 1인 몫은 하는게 맞는지 검증도 할 수 없었다.
왜 이렇게 까지 상황이 안좋아졌을까. 당시에는 이해할 수 없었다.
언제부터인가 코딩 부트캠프에서 배워서 개발자가 되고자 하는 사람들이 많아졌다.
십여년전 닷넷이 유행하던 시절의 IT 직업 교육과는 관심도가 하늘과 땅차이다.
같은 개발자 입장에서 관련 업계가 활성화 되는것은 환영 할만한 일이다.
하지만 왜곡된 IT 인력시장의 피해자들이 많아지는 상황은 그리 좋아보이진 않는다.
신입이든 경력이든 회사가 원하는 인재상은 기본적으로 적은 투자를 해도 조직과 일에 잘 적응하는 사람이다.
가능하면 서류와 면접에서 이러한 인재를 찾는것이 모든 조직의 목표인데 현실적으로 쉽지 않다.
당장 급한 불이라도 끄기 위해 회사에서 필요로 하는 인재를 키우는 프로세스가 필요했다.
적응하고 학습 할 수 있는 기회를 주되, 성장하는 능력 자체를 정량적으로 평가했다.
다행스럽게 평가 결과, 회사의 기대수준과 역량이 맞지 않았던 사람은 많지 않았다.
주어진 기간내에 과제를 통과할 정도의 성장은 다들 보여주었다.
이후 모자란 성장 부분은 실무에서 어려움을 겪으면서 성장하게 된다.
예방주사를 맞고 독감을 이겨내는게 그나마 수월하듯이, 다행히 한 사람의 개발자로 성장하는 확률이 높아졌다.
플랫폼의 전체 동작 과정을 이해하는것과 못하는것은 단위업무를 익히는 효율에서 크게 차이난다.
심지어 실무를 할때 커뮤니케이션 능력에도 차이가 난다.
이 모든게 한두개의 작은 웹서비스를 혼자힘으로 처음부터 끝까지 만드는 경험이 준 결과다.
부트캠프 등에서 시간 효율을 위해 팀프로젝트로 기능을 쪼개서 단편적인 경험을 얻어가는것과는 대조된다.
개발자에게 앱과 서비스를 만들어 내기 위한 모든 지식과 기술은 재료이자 공구다.
모든 과정을 혼자서 만든다고 했을때 막연한 이유는 수준에 비해 목표를 너무 크게 잡아서이다.
1000세대 대단지 아파트를 인부 한명이서 건설 할 수는 없지만, 예쁜 우물정도는 시간을 들이면 만들 수 있을것이다.
육상을 잘 하기 위해서는 열심히 달려야하고, 수영을 잘 하기 위해서는 수영을 열심히 해야한다.
헬스로 근력을 아무리 키워도 목표가 몸을 키우는게 아니라면, 그 운동에 집중한 사람을 따라잡지 못한다.
단순한 진리다.
수련생들의 성장을 위한 프로세스는 태권도, 가라테 같은 옛날 무술에 뿌리를 두는 무도에서도 찾아 볼 수 있다.
대련할 상대가 없을 경우에도 혼자 수련 할 수 있도록 품새라는 기술 체계가 있다.
정해진 스토리대로 동작을 차례로 이어서 기술을 펼치는 것이다.
시도하기 좋은 주제로 많이 만들어 봐야한다.
모바일 앱, 웹서비스, 윈도우 프로그램 그 어떤 플랫폼도 키보드를 두들긴 시간만큼 잘하게 된다.
동서고금 모든 공부는 필기, 낭독과 같은 아날로그적인 경험을 강조하는것과 같은 이치다.
사람은 무언가 배우려면 몸을 써야하고, 결국 스스로 키보드를 두들기는 시간이 필요하다.
칼을 만들 생각이면 최소한 쇠는 달궈야 할거 아닌가.
기본을 다룰 수 있게 되면 남의 코드를 가져다 쓰거나, 생성형 ai를 이용해서 빠르게 원하는걸 시도할 수 있다.
하지만 기본도 되어 있지 않은데 이런 수단에 기대는것은 무의미하다.
오히려 과거보다 남이 짠 코드를 이해하는 능력이 더 중요해지고 있기 때문이다.
이러한 수련에 대해서 이야기하면 코딩테스트를 위한 알고리즘 공부만을 떠올릴것이다.
백준, 프로그래머스와 같은 코딩테스트 문제를 푸는것은 분명 사고력을 향상시키는데 도움이 된다.
하지만 알고리즘 문제를 푸는 능력을 '문제해결능력'이라고 착각해서는 안된다.
문제해결능력은 어려운 코딩을 해내는 능력이라기 보다는 적응력에 가깝다.
무한대의 가능성에서 문제의 해법을 내놓는게 아닌, 현실에서 주어진 환경과 자원을 가지고 최적의 답을 찾아야 하기 때문이다.
소프트웨어 개발현장에서 적응력을 발휘하기 위해서는 선수과제가 있다.
UI/UX, 소프트웨어 공학, 아키텍처, 알고리즘, 데이터 엔지니어링 등 다양한 주제가 있겠지만 최소한 정보처리기사 자격에서 요하는 능력이 필요하다.
신입 개발자가 되려면 정보처리기사 자격증이 필요하다는 이야기가 아니다.
장기적으로 개발자로서 성장하기 위해서는 해당 자격증에서 다루는 범위의 지식을 습득해야 한다는 이야기다.
개발을 하기 위해 코딩을 적당히 잘하는것은 필수고, 돈을 받는 프로라면 일의 품질을 높여야한다.
운전 면허증이 장롱면허는 의미가 없듯이, 정보처리기사의 능력을 발휘하지 못하면 자격증은 의미가 없다.
앞으로 프로그래머로서 사람의 역할은 ai가 생성한 결과물에 대해 책임을 지는것으로 바뀌어갈것이다.
ai에게 원하는 결과를 정확하게 전달하고, 내놓은 결과가 적합한지 검사하여 최종 제품을 만드는 일이다.
가까운 미래에 ai에게 대체되지 않기 위해서는 단순한 지식과 기술을 반복하는것에 그쳐서는 안된다.
지식과 경험을 융합해서 새로운 가치를 창출해야한다.
그것이 반복에서 오는 창조의 힘이다. 사람이 유일하게 ai와 함께 새 시대를 갈 수 있는 길이다.
'모든것은 기본에서 시작한다.'
흔한 격언이기도 하고, 내가 좋아하는 책의 제목이기도 하다.
세계적인 축구스타 손흥민 선수의 아버지는 젊은 시절 프로 축구선수였다.
그는 아들을 어린시절 부터 축구선수로 훈련시킬때 지겹도록 기본기를 연습시켰다 한다.
비가 오나, 눈이 오나, 컨디션이 좋으나, 나쁘나 일정하게 내가 원하는대로 공을 찰 수 있어야 그제서야 그라운드에 나갈 자격이 되는것이다.
소프트웨어 개발 현장도 마찬가지다.
사무실에서 키보드 두들기는 일이라고 항상 좋은 컨디션에서 일하지 않는다.
삶의 어떤 무대든 본 게임에서 정상 컨디션을 유지 할 수 없는 상황일때, 쌓아온 기본기가 승부를 가른다.