그래 네가 드디어 개발이야기를 하는구나
네 개발이야기의 2편이 개발이야기입니다.
개발이라는 하나의 프로세스 중 하나인 코딩이 무엇인지는 알아야 개발을 설명할 수 있기 때문에 코딩을 먼저 설명했고, 개발이 무엇인지를 설명하는게 2편이다.
지난주부터 회사일과 개인적인 일들이 겹쳐 글을 쓸 정신이 정말 1도 없었다. 그러나 이제 숨을 좀 돌릴 틈이 생겨 글을 써보려고 한다.
2주에 한번 글쓰기 모임이 있기 때문에 거길 가면 억지로라도 쓰는데 아직 14일이 채 지나지 않았다.
아무튼 현장에서 뛰는 개발자로서 느끼는 개발이란 무엇인가에 대한 이야기를 해보겠습니다.
개발이란 한마디로 문제를 해결하는 과정이다. 그럼 문제란 뭘까? 영어로 직역하자면 'problem'이겠지만, 정말 큰 사고를 쳐서 이걸 어케 수습해 이런 난제로 생각할 필요는 없다. 일상속에서 느끼는 작은 불편함, 의미없이 반복되는 일들에 대해 사람 손을 덜 타도록 개선하는 것들까지 포함된다. 정말 간단하게, 클릭 몇번으로 내가 일일이 생각하고 신경쓰는 과정을 안 거치고 문제 상황을 해결 할 수 있게 해주는 것이다. 아주 풀기 어려운 난제«이런거는 너무 규모도 크고 얽힌 사람도 많고 설명하기에 이 글이 너무나 캐주얼하고 제한적인 역할밖에 할 수 없기에 일상 속 간단한 예시를 통해 접근해 보고자 한다.
출근할때 아침마다 뭘 입고 나가야할지에 대한 어려움을 겪고 있다고 생각해보자. 그러면 다음과 같이 정리할 수 있다.
문제상황: 아침에 옷을 못 고르겠어요
요구사항: 옷을 고르기 위해 내가 좋아하는 옷 위주로 최대한 다양한 스타일을 뽑아내고 싶다.
보통 이정도까지는 고객들도 술술 입밖으로 내놓는다.
그러나 개발자는 여기서 끝내서는 안된다. 문제를 해결하기 위한 과정에 대한 생각하는 과정 자체를 대신 해줄 수 있는 하나의 완결된 '생각박스'를 만들어야 하기 때문이다. 그래서 다음과 같이 고객을 붙들고 고객이 선호하는 옷 종류와 컬러 그리고 매칭하는 과정 등에 대해 추가로 물어봐야한다.
<내가 옷을 고르는 과정>
색의 가중치: 블랙>브라운>레드>그린, 블루는 제외
옷의 형태: 셔츠>맨투맨>후드
바지의 가중치: 청바지>면바지, 스키니와 핫팬츠는 제외
추가로 생각해야할 조건: 최대한 전날과 겹치지 않게 7일 내내 다른 조합, 스타일을 다양하게 매칭하고싶다.
그런데 문제는 고객들이 저 옷을 고르는 과정«저거를 곧죽어도 말을 제대로 안해준다는 것이다. 말좀 해주면 얼마나 좋아 아아악!!!!심지어 본인이 무엇을 원하는지를 모르는 고객들도 태반이고 갑갑한 고객들을 붙들고 문제상황을 해결해야 할 확률이 보통 70% 이상이다. 그래서 개발자들이 골머리를 앓는 과정의 대부분은 여기에서 온다. 고객의 요구사항과 생각하는 방법만 명확하다면 사실 구현은 굉장히 쉬운 일이다. 그래서 이 일만 대신 해주는 개발자들도 존재한다.
여기까지 틀이 잡히면 생각상자에다가 저 조건을 치밀하게 여기저기 조립하여 뚝딱뚝딱 만드는 일을 하면된다. 이 과정이 코딩이다.
그리고 프로그램을 생각상자라고 표현하는 것은, 코딩을 통해 태어난 프로그램 그 자체는 하나의 완결된 세계를 가지는 것이며, 거기에 입력값을 넣으면 생각하는 과정을 거쳐 어떠한 정형화된 형태의 결과값을 내놓기 때문이다(놀랍게도 아무것도 안 넣을수도, 아무것도 내놓지 않는 생각상자도 있다 이건 다음에 좀 더 자세히).
갑자기 어느날부턴가 내가 옷을 잘 입고 나타나자 회사 동료가 너 요즘 무슨일 있냐고 물어봐서 아 아침마다 고민하기 귀찮아서 옷 골라주는 프로그램 만들었어^^라고 대답하자 친구도 그 프로그램을 쓰고싶다고 말했다고 가정하자. 그러면 친구의 경우 선호하는 색이나 스타일 등이 다를 것이므로 입력값을 모두 다르게 설정해야 한다. 그리고 갑자기 이 프로그램이 너무 잘 나가서 인터내셔널하게 팔린다고 생각해보자(모든 스타트업의 꿈,,). 그렇기 때문에 프로그램을 완전히 뜯어고치지 않고 옆집 이웃부터 일본에 사는 야쓰다 상과 미국에 사는 스미스씨까지 모두모두 잘 쓸 수 있도록 고객이 입력값만을 넣으면 맞춤으로 쫘잔하고 결과가 나올 수 있도록 '확장성'을 반드시 고려해야 한다.
만약 내가 개발을 하지 않고 매일아침 각 고객들의 집을 일일이 방문해서 물어보고 옷을 골라줘야 한다면 아마 하루도 안돼서 포기해 버릴 것이다. 그러나 개발은 코딩이라는 도구, 온라인이라는 거대한 망을 통해 이런 일을 가능하게 만들어준다. 왜냐하면 코딩을 통해 수십분의 일초만에 아주 많은 경우의 수를 대신 생각해주고 최적의 결과를 도출해주기 때문이다.
전편에서 말했듯 요즘 웬만한 기계는 1초에 3억번의 연산을 할 수 있기 때문에 컴퓨터 세계에서 1초는 굉장히 긴 시간이다. 5초를 넘어가는 프로그램은 사용가치가 없는 실패한 프로그램이라고 판단된다(기준이 너무 가혹하다구요?기계에게 15억번의 연산을 하게 만드는 당신이 더 가혹합니다).
고객의 입장에서도 매일아침 낮선사람이 찾아와 집에 들어와서 이것저것 물어보고 귀찮게 구는 것보다 쉽고 빠르게 결정해 줄 수 있는 생각박스를 폰에다 깔아둔다면 더욱 편하고 효율도 좋게 느낄것이다.
여기서 현재 개발의 한계를 짚을 수 있다. 컴퓨터가 엄청 똑똑해보이지만 의외로 멍청하다. 계산은 빨리할 수 있긴 한데 이미 설계된 로직 즉 사람이 시키는 것 외에 다른 것은 할 수 없다. 만약 요구사항이 좀 바뀌어서 코디 설계 조건에서 신발이 추가되어야 한다면 '신발'이라는 변수를 추가로 설정해야 하고 조건 또한 추가될 것이고 또 다른 입력값과 로직이 필요해진다. 이전의 프로그램에서는 컴퓨터 입장에서 '신발'이란건 고려조차 되지 못한, 전혀알지 못했던 사항 중 하나였기 때문이다. 이 과정에서 불가피하게 사람의 손을 타게 된다.
즉 아직까지는 개발을 통해 구현된 대부분의 프로그램은 스스로 생각을 하고 결정을 내릴 수는 없다. 알파고라는 인공지능이 존재하긴 하나, 인공지능이 개발 및 도입되기 가장 쉬운 영역 중 하나인 '바둑'이라는 분야를 통해 가장 빠르게 구현된 것이고, 인공지능이 아직까지는 우리의 생활에서 광범위하게 쓰이고 있지는 않다. (물론 이것을 구현하고 활용하기 위한 시도는 엄청나게 많이 이루어지고 있다.)
개발을 통해 완성된 프로그램이 스스로 학습하고 배워갈 수 있는 '지능'을 가졌다고 판단되는 임계점은 바로 '맥락'과 '정서'를 갖는 순간부터라 할 수 있다. 어디서 많이 들어본 단어다. 그렇다 우리는 국어시간에 이 단어를 참 많이 들어봤다. 왠지 컴퓨터공학이랑은 참 멀거같은 분야인데 이런부분에서 접목이 된다.
트위터에서 한참 유명세를 펼치던 그림이 있었다. 소년 두명이 앉아 서로의 이야기를 나눈다. 그러나 대화를 들어보면 전혀 앞뒤가 맞지 않는 말을 나눈다.
- 어 뭐...난 이제 6살이야...어제 생일파티를했어
- 그래서 뭐...우리아빠는 경찰이거든..
- 음 우리형 되게 키 크다?
- 배고파 밥먹고싶어.
이런식의 대화는 아무런 정보값도 갖지 못하고 시간낭비 조음기관 낭비 공기낭비라고 할 수 있다. 우리는 이런걸 대화라조차 부르지 않는다.
인공지능이 발전하기 위한 전제조건은 바로 이 '맥락'이라는 것을 읽을 수 있는 순간부터다. 우리가 일상에서 대화를 나눌 때 그냥 막 하는것 같지만 사실 우리는 모든 대화의 순간에 아주 미묘하고 치밀하게 이 맥락이라는 것에 대해 끊임없이 의식하고 대화의 흐름을 잘 타기 위해 엄청나게 머리를 쓰고 있다. 공적이거나 많은 사람을 대상으로 한 언어활동에서는 맥락의 문제가 더더욱 중요해진다.
만약 기계가 더 똑똑해져서 전후상황 즉 맥락을 읽게 된다면, 자기가 알아서 조건을 더하거나 빼거나 수정하는 등 스스로 생각을 할 수 있게 될 것이다. 즉 '학습 알고리즘'을 탑재함으로서 사람이 입력값을 넣거나 생각하는 방식에 대한 설계나 및 수정을 하지 않아도 알아서 발전할 수 있게 된다는 의미이다. 기계가 어느정도 수준이상으로 정말 똑똑해진다면 개발자가 짤려 나가는 것도 충분히 예상해볼 만한 시나리오이다. (그래서 이 글도 인공지능 시대에서 살아남기 위한 개발자의 노력 중 하나라고 할 수 있다.)
그리고 '정서'라는 건 우리가 어떠한 대상이나 상황에 대해 좋다/싫다/별로다/기쁘다/슬프다/화난다 등의 호오와 감정에서 우러나온 생각이다.
최근에 나온 스타워즈 시리즈 중 어느 편인지는 기억이 나지 않지만, 지능을 가진 드로이드 C-3PO가 자신은 선내 반란에 참여할 수 없다며 그 순간부터 명령에 대한 복종을 거부한다. 즉 스타워즈 세계에서는 인공지능을 가진 개체(드로이드)들이 인간에게 해를 끼치지 않게 특정한 상황에서는 정서적 판단을 할 수 없도록 설계되었다는 점을 알 수 있다. (그치만 쓰리피오 하는 짓 너무 귀엽고 호들갑을 잘 떠는데 그런 정도의 감정표현은 할 수 있게 설계된 듯하다. 스타워즈에 나오는 드로이드들 다 캐릭터성 있어서 좋아하고 굉장히 매력적이라고 느껴진다. 그리고 갑자기 스타워즈 이야기 나오니까 덕심이 폭발하는데 개인적으로 스핀오프 버전인 로그원 좀 오글거리긴해도 최고ㅋㅋㅋㅋㅋㅋ스타워즈도 참 할말많은 장르인데 여기서는 이만하고 넘어가야할듯)
그러나 만약 어떤 마음씨 나쁘고 똑똑한 사람이 정말 잔혹하고 두려움과 자비가 없는 드로이드를 만들어서 인간을 멸종시키려고 한다면 어떻게 될까??이후의 이야기는 SF 소설 한편 급이 나올 것이다.
인공지능의 정서 그리고 그로 인한 가치판단에 대해 다룬 해외의 사례를 보면, 어쨌든 인공지능도 인간이 쌓아놓은 데이터를 먹고 자라는 개체이기 때문에 이상한 데이터만 넣으면 그 개체도 이상한 생각을 가진 개체로 자라게 될 가능성도 충분히 있다. 그리고 이는 인간의 평화로운 삶에 크나큰 장애물로 작용할 수 있다. 인공지능의 발전에 따른 연구자의 윤리의식 및 윤리강령에 대한 법적인 부분까지 반드시 고려되고 수반되어야 할것이다. 생명공학이 그래왔듯이 말이다.
개발 이야기를 하다가 참 많은 이야기가 나왔는데, 여기에 추가로 덧붙이거나 다른 편으로 이어쓸 수도 있고, 오늘은 일단 생각나는 부분까지만 씁니다.