당신은 어떤 전문가입니까?
투다다다다. 경쾌한 키보드 소리가 사무실에 울려 퍼진다.
남주인공의 뒤로 하나둘 사람들이 모여들고 대단하다는듯 감탄한다.
그는 한창 코딩을 하다가 나지막하게 한마디 한다.
"한줄로 짤 코드를 왜 10줄로 만들어 놨어요? 에러 찾기 힘들게."
그 한마디에 뒤에서 병풍처럼 서 있던 두 직원들의 얼굴에 난감한 표정이 떠오른다.
남주인공은 무심한듯 모니터를 계속 응시하며 손을 놀린다.
"코드가 길어서 프로그램만 무거워졌지않습니까. 이러니까 서비스가 버벅대지."
남주인공의 시니컬한 대사로 이 장면은 마무리된다.
국내 멜로드라마의 한 장면으로 남주인공이 열심히 쳤던 코드가 사실 구구단 코드였다는 걸로 유명했던 밈이다.
아는 사람은 태클을 걸 부분이 한두군데가 아니겠지만, 드라마는 드라마일뿐 심각해지지 말자.
다만 이 장면에서 주목해야 할게 있다.
꽤 많은 사람들이 가지고 있는 개발자로서의 전문성에 대한 환상을 잘 표현했다.
1. 다른 사람들이 우러러보는 독보적인(빠른) 코딩 실력
2. 단시간에 혜성처럼 나타나 문제를 뚝딱 해결
3. 대화가 아닌 문제점을 통보
개발자가 아닌 사람이 생각하는 '천재 개발자'라는 이미지는 이렇다고 볼 수 있다.
뭘 하는지는 모르겠지만 빠르게 코딩하는 사람. 어디선가 나타나 문제를 해결해주고 가는 사람. 사회가 개발자에게 요구하는 모습이기도 하다.
이것은 개발자의 실력의 척도가 100미터 달리기와 같이 빠른 코드생산에 있다는 것이다.
주어진 단위 기능을 바쁘게 개발해야하는 주니어 개발자에게는 명확한 목표점일지도 모르겠다.
그러나 실제 소프트웨어 개발에서 코딩은 일의 일부에 지나지 않는다.
회사에서 벌여놓은 여러 프로젝트 때문에 진행하지 못하고 있던 연구과제 소프트웨어 개발건이 있었다.
나무의사처방제 시행으로 주거공간의 조경용 나무를 포함한 모든 임야에 농약을 사용하기 위해서는 처방전이 필요하게 된것을 기회로, 국내 최초 수목 서비스 매칭 플랫폼 및 나무의사 EMR 서비스를 만드는 일이었다.
원래 내 일이 아니었는데 기한이 다 되서 일이 넘어오는 바람에 급하게 하느라 고객과 의견충돌도 있었고, 급하게 하느라 나도 힘들고 주위를 힘들게 했다.
상주 프로젝트에 투입되어 있지 않았지만 난장판이 되어있던 유지보수 사이트들을 정리하고 있던 시기라 몸도 마음도 지쳐있는 상태였다.
고객의 기획이 실제 서비스를 구현하기에는 논리적인 구멍이 않아서 개발을 하면서 개념적으로 빠져있는 부분을 소통해 가면서 만들어야 했다.
이런 경험을 하면서 고객이 제품에 의지가 있고 개발사와 소통이 잘 되야 일이 잘 진행된다는걸 배우게 되었다.
수익화를 위한 장치라던지 서비스 프로세스의 구멍나는 부분, 사용자를 유인하기 위한 정책적인 결정 등 많은 부분이 실제 서비스를 만들고 나서야 드러났다.
개발자이기 이전에 한 사람의 사용자로서 너무 이상한건 수정을 권유하거나, 내가 기획한 방안 중에서 결정을 하도록 해서 억지로 진행했지만, 결국 서비스에 고객이 애정이 없으면 일정 이상 퀄리티를 끌어올리기는 힘들다는걸 경험했다.
플랫폼이든 개발사를 통하든 소프트웨어 개발을 의뢰했을때, '나는 손님이니까 알아서 나를 만족시켜라'는 좋은 태도가 아니다.
서로 발전적 파트너십 관계로서 서비스의 성공을 목표로 집중해야한다.
노력도 많이 했고 잘 되었으면 하는 서비스였지만, 기대와는 달리 그리 활성화 되지는 못했던 모양이다.
쇼핑몰 기능 추가 등 추가적인 플랫폼 발전에 대한 계획이 있었던것으로 보이지만 결국 진행되지는 못했다.
연구개발을 통한 스타트업이 원래 성공하기 쉽지 않지만, 내가 성공사례를 만들지 못한것은 아쉬울 뿐이다.
소프트웨어는 사용할 사람의 문제를 해결하기 위해 만들어진다.
업무용 소프트웨어를 만든다 했을때, 관련 업무에 대한 체계와 지식을 기반으로 만들어 질 수 밖에 없다.
그 과정은 느리고 복잡하다. 사람이 일하는 방식을 전산으로 담아내는것이 쉽지만은 않은 탓이다.
전체 소프트웨어 개발에서 코딩은, 건축으로 비유했을때 벽돌을 옮기고 쌓는 작업에 가깝다.
이러한 일을 능숙하게 하기 위해서도 충분한 연습이 필요하지만, 코드에 집중하다 보면 일의 목적을 종종 잊어버리게 된다.
소프트웨어 개발은 A지점에서 B지점으로 빠르게 벽돌을 옮기는 작업과는 본질적으로 다르다.
고객이 무엇이 필요한지 사람의 언어로 이해하고, 컴퓨터의 언어로 옮긴 결과물이 사람을 위한것이어야 한다.
이러한 일에는 단순히 코딩을 빠르게 하는것이 경쟁력이 되지 못한다.
어떤 일이든 시작하면 문제가 눈에 보이기 시작한다. 사람이 생각하는 이상과 현실간의 차이에서 오는 문제다.
개발자가 소프트웨어를 개발하면서 해결하는 문제들은 이러한 문제들이다.
생각보다 '상식적으로 이건 이렇게 될것이다'가 컴퓨터의 세계에서는 통하지 않는다.
'A는 B이다'라는 논리로 기능을 만들어 놨는데, 소프트웨어를 확장시키다 보니 A와 B가 서로 달라야했던 것이다.
설문조사를 받는 기능을 포털에서 사용할 수 있도록 공통 모듈로 만들라고 해서 그리 했더니, 커뮤니티 안에 들어가는 설문 기능은 확장된 전혀 다른 스펙의 기능을 요구하는것과 같다.
비전문가 입장에서는 '그냥 붙여 넣으면 되는 기능'이지만 개발자 입장에서는 난감할 따름이다.
데이터나 여러 논리적 장치들을 재배치하여 해결이 가능한 문제가 있는 반면에 그렇지 않은 문제도 많다.
이러한 문제를 해결하기 위해서는 컴퓨터가 아닌 사람과 대화가 필요하다.
코드를 분석하면 어떤 구조를 가지고 있고 어떤 문제가 있는지는 쉽게 식별되지만, 왜 이렇게 짤 수 밖에 없었는지는 알 수 없다.
누구든 남이 둔 체스판에 훈수는 둘 수 있지만, 훈수 한번으로 이미 결정난 승패를 뒤집을 수는 없다.
공동의 목표를 가지고 일을 한다면 많은 대화를 통해 서로의 목표에 대한 이해가 어긋나지 않도록 노력해야한다.
개발자들은 일하는중에 흔히 자신만의 세계에 빠져들곤 한다.
몰입하는것은 좋은일이고 고도의 사고를 통해 목표를 달성하는것이 지상과제인 지식근로자에게는 꼭 필요한 역량이다.
하지만 몰입하기 위해 사람간의 소통을 우선순위에서 미루다못해 아예 하지 않는 개발자를 종종 볼 수 있다.
최악의 경우 몰입해서 완수한 그 결과물이 쓸모없어질 수 있는데도 말이다.
앞으로 소프트웨어 개발 현장에서는 일일히 코드를 작성하는 작업 자체는 중요도가 떨어질것이다.
물론 이미 스택오버플로우나 구글에서 검색되어 나온 코드를 복사 & 붙여넣기만으로 업무를 하는 개발자가 많다.
이러한 작업도 어느정도 경험과 코딩에 대한 숙련도가 필요했던 반면에, 이제는 생성형 AI가 질문 한번이면 완성된 코드를 제공해준다.
단위 기능을 구성하는 코드를 분석하고 이해하는것은 중요하지만, 전체 소프트웨어를 구성하는 목표에 집중해야 하는 이유다.
4차 산업혁명을 통해 다가올 미래를 예측하려면 기존 산업화의 영향을 보면 된다.
자동차나 선박을 만드는 현장을 보면 사람손으로 해야할 일이 많다.
사람은 조립 공정을 맡아 최종 제품의 품질을 확인하고 책임지는 역할을 맡는다.
과거에는 부품 하나하나 깎는 일부터, 모든 조형을 사람 손으로 했을 것이다.
이제는 수작업 공정으로는 자동화 로봇의 생산성을 따라 갈 수 없다.
가격대가 높아지니 대부분의 사람들이 핸드메이드 자동차를 원하지 않는다.
소프트웨어 개발 현장에서 일 하는 방법도 많이 변화될것이다.
AI 도구는 지금 이상으로 적극적으로 사용될것이고, 개발자는 더욱 코딩할 필요가 줄어들것이다.
고객들이 일반적으로 원하는 소프트웨어는 전체 생산공정이 자동화될수도 있다.
이러한 발전속에 개발자는 사라지기 보단, 제품 책임자로서 계속 필요로할것이다.
AI를 통해 생산성이 늘어나더라도 제품이나 서비스에 대한 책임을 지기 위해서라도 사람은 필요하다.
AI가 만능인것으로 생각하기 쉽지만, 사람은 생각보다 AI의 결과물이나 판단에 만족하거나 신뢰하지 않는다.
사람의 감각과 감정은 예민하다. 지금은 '컴퓨터가 한 일'에 대한 놀라움으로 AI의 결과물을 받아들이지만, 이내 식상하고 지루해할것이다. 수익성을 이유로 무인카페나 자판기 사업을 하는 사업자가 많지만, 생각보다 매출이 나지 않는 이유가 이것이다.
당장 블로그나 유튜브를 보더라도 AI를 통해 생성된 결과물을 별다른 수정없이 올린것으로 보이는 컨텐츠들을 어렵지 않게 찾아볼 수 있다. 다양한 데이터를 통해 학습을 하긴 했지만 AI가 내놓은 창작의 결과물은 결국 일정한 패턴을 넘을 수 없다. 이렇게 쉽게 만들어낸 결과물들은 가치가 계속해서 떨어져갈것이고, 사람의 욕구를 AI가 완전히 충족할 수 있는 날은 오지 않을것이다. 그래서 'AI를 잘 활용하는 사람의 작업물'이 계속해서 필요한것이다.
결국 사람은 사람을 위한 일을 해야하고, 이러한 역할을 잘 하기 위한 전문성을 쌓아야한다.
소프트웨어 공학이라고 하면 너무 광범위 하지만, 개발자라면 고객의 요구사항을 설계로 풀어낼줄 알아야한다.
그러기 위해서는 관계된 분야의 코딩을 제외한 지식을 습득할 필요가 있다.
사용자가 사용하는 앱이나 서비스를 만드는 전문가라면 UI/UX를 알아야한다.
데이터를 다루는 전문가라면 어떻게 시각화를 통해 인사이트를 제공 할 수 있을지 고민해야한다.
공장 자동화 전문가라면 생산 공정, 금융업무 소프트웨어 전문가라면 관련 업무를 알아야한다.
사실 '소프트웨어 개발'하나만 보더라도 설계 및 개발만이 일의 전부가 아니다.
제안서 작성, 프로젝트 관리, 개발 이후 품질 활동 등 해야할 일이 많다.
우리가 제공하는 첫번째 가치가 '고객이 필요한 소프트웨어를 만드는것'이라는것에는 변함이 없지만, 좀 더 많은 역할을 수용할 줄 알아야한다.
기술적 자신감은 무엇과도 바꿀 수 없는 보물이다. C++을 30년간 했다거나, 백엔드 개발만 20년 했다거나 하는 개발자로서의 '자존심'이 있을지 모른다. 그러나 시대가 더 이상 개발자를 코더로 놔두지 않을것이고, 우리는 미래를 준비해야한다.