brunch

You can make anything
by writing

C.S.Lewis

by 김창현 Jan 04. 2021

파이썬? 저도 해야 하는 건가요?  

지리학 박사가 파이썬에 빠진 현실적 이유 

>>>


위 기호를 보면 어떤 생각이 들어요? 

아마 Python을 배우신 분이라면 피식~ 하는 웃음이 나왔을 겁니다. 

>>> 이 기호는 파이썬이 우리에게 명령을 내려주기를 기다리고 있다는 신호거든요. 


최근 저는 아주 작은 홈페이지를 하나 개설했어요. 참 개설했다고 말하기도 민망하게 못생긴 홈페이지입니다. 심지어 반응형도 아니기 때문에 모바일로 보면 봐주지 못할 정도의 흉한 인터페이스를 자랑합니다. 

이 홈페이지를 만든 이유는 '웹 크롤링'에 대한 강의를 어딘가에서 해야 했기 때문입니다.

사실 HTML언어를 약간을 읽을 수 있지만, 제 손으로 홈페이지 디자인이 나오도록 만들지는 못했거든요. 화면 레이아웃도 잡을 지 모르면서 크롤링 강의를 하는 건 사기다, 싶어서 급하게 배우기 시작했습니다.  HTML, CSS, 무료 도메인 구하는 방법, 호스팅하는 방법 등 부랴부랴 검색해서 겨우 저 정도의 방을 하나 만들었습니다. 그러나 네이버나 티스토리같은 블로그 플랫폼을 빌리지 않고서도 제 힘으로 저런 페이지 하나를 호스팅했다는 게 뿌듯하기도 합니다. 


모든 것의 출발은 파이썬이었던 것 같아요. 


>>>


이 꺽쇠가 제 인생을 상당히 바꿔놓은 셈이죠. 

솔직한 이야기를 하나 해드릴까요? 

저의 전공은 지리학입니다. 영어로는  geography라고 합니다. 그 중에서도 저는 financial geography라는 키워드로 논문을 썼습니다. 논문 제목에  financial geography라고 아얘 딱 박아놓았죠. 그 땐 몰랐죠. 이것이 제 발목을 엄청나게 잡을 줄을... 

보통 때, 제가 financial geography를 전공했다고 하면, 사람들의 반응은 두가지로 나뉩니다. 


1. 지리학은 진짜 별 걸 다 하는구나.

2. 그게.. 뭐죠? 


대부분 후자죠. 그리고 경제학과 재무/회계를 전공한 사람일수록, "당신이 뭘 했는지는 모르겠지만, 거기에 감히 financial을 갖다 붙이다니 기분 나쁘다"는 표정을 짓습니다. 이건 정말 많은 사람들에게 경험했죠. 물론 자격지심일 수도 있습니다. 

여하간, 저는 졸업을 하는 그 순간부터 제 전공을 어디에서 들먹이는 것이 쉽지 않다는 것을 너무 잘 알고 있었죠. 


노벨 경제학상을 받은 팃포탯(Tit for tat)이라는 이론이 있습니다. 상대가 배신하면, 나도 배신하고, 상대가 신뢰하면 나도 신뢰한다는 전략이죠. 이 전략은 단순해보이지만, 죄수의 딜레마 상황을 이겨낼 수 있는 최선의 방책이라고 간주됩니다. 이 전략이 가장 훌륭하다는 것은 컴퓨터 시뮬레이션을 통해 이뤄졌죠. 이 이론을 접하면서 저는 생각했습니다. 컴퓨터 프로그래밍이라는 무기가 있으면 financial geography를 개척해나가는데 큰 힘이 되겠구나. 


그런 이론적인 관심도 있었지만, 파이썬을 공부하게 된 가장 큰 이유는 재밌다는 것이었습니다. 뭔가 파이썬은 일 잘하는 비서같다는 생각이 듭니다. 그러나 이 녀석은 너무 유도리가 없어서 시키는대로만 한다는 장점이자 단점이 있죠. 


>>> for i in range(10):

    print(i)


이렇게 명령하면 파이썬은 0부터 9까지의 숫자를 출력합니다. 이건 매번 똑같습니다. 컴퓨터는 매번 똑같은 반응을 하기 때문에 우리가 컴퓨터의 사고방식에 익숙해지기만 한다면, 컴퓨터는 엄청난 생산성을 발휘해냅니다. 그 전에는 귀찮아서 생각지도 못했던 일을 해낼 수 있는 것이죠. 

예전에 어떤 카이스트 학생이 공익시절 우체국에서 6개월동안이나 해야 할 단순노동을 프로그램으로 하루만에 끝내버렸다는 이야기를 기사로 접한 적이 있었습니다. 좀 미안한 이야기이지만, 저는 대단한 프로그래머도 아닌 취미로 하는 프로그래머이지만, 피식 웃지 않을 수 없었습니다. 그런 일이야말로 6개월씩이나 걸린다는 것이 요즘 세상에 말이 안되는 일이거든요. 


그런데 지금 이 순간에도 정말 많은 곳에서 사람은 컴퓨터가 할 일을 대신합니다. 반복작업을 하면서 손가락 연골이 나갑니다. 사실 그 일은 사람이 할 일이 아니라 컴퓨터에게 시킬 일인데 말이죠. 

사람이 하는 일은 100% 실수가 나옵니다. 데이터 갯수가 100개가 넘어가면 out of control상태가 됩니다. 그리고 데이터를 통제하지 못하는 집단은 서로 내가 맞네 , 네가 맞네 하면서 싸우게 되어 있죠. 

그렇게 사람의 손을 타면서 왜곡된 데이터는 결국 믿지 못할 존재가 되어버리고 맙니다. 물이 오염되면 먹을 수 없듯이, 사람의 손을 타면서 왜곡된 데이터는 아무도 믿을 수 없게 되어버린 것이죠. 

그런데도, 여전히 아주 많은 사람들이 

"이건 프로그램을 시킬 일이 아니라, 그냥 엑셀로 하는 것이 빨라"라고 생각하고 더 이상의 전산화를 포기합니다. 전산화라는 것은 공돌이, 프로그래머, 고수 들이나 하는 것이라고 생각하면서 말이죠. 

'내 이름은 김창현입니다. 내 전화번호는 010-1111-2233이고, 제 생년월일은 1888년 11월 11일입니다."라고 되어있는 문장이 있다고 합니다. 이런 문장에서 이름과 전화번호, 생년월일만 뽑아서 만들려고 하면 

김창현, 010-1111-2233, 1888년 11월 11일

이런 식으로 가볍게 만들어볼 수 있습니다. 그런데 이런 문장이 1000개 있다면요? 이럴 때 저라면 이런 간단한 함수를 만들 겁니다. 


>>>import re

>>>for a in r:

    name = re.search('[가-힣]+입',a)

    tel = re.search('\d{3}-\d{4}-\d{4}',a)

    birth = re.search('\d{4}년.+일',a)

    print(name.group()[:-1] , tel.group(), birth.group())


약간의 공부와 훈련을 필요하지만, 제가 짠 7줄짜리 코드는 이름과 전화번호, 그리고 생년월일을 훌륭하게 뽑아냈습니다. 만약, 이 문장이 500개 있다고 생각해보면 어땠을까요? 이걸 사람이 한다고 생각하면 얼마나 짜증나는 일일까요? 

위와 같은 수준은 거의 20세기 초 수준이고, 이제 자연어 처리에 대해서 컴퓨터가 해낼 일은 무궁무진합니다. Grammarly와 같은 글쓰기 앱은 이제 문법적 오류를 거의 95% 이상 정확도로 짚어냅니다. 그리고 문장을 쓰면서도 제가 다음에 어떤 영단어를 쓰면 좋을지를 예측해버리는 수준에 이르렀죠. 

코딩의 힘은 인간의 지적 능력의 일부분을 극대화시키는데 있습니다. 어떤 정보들 사이에서 규칙에 맞는 정보만 걸러내고 그것을 우리가 보기 좋게 정리하는 능력은 컴퓨터에게 가장 최적화된 능력이죠. 

한가지 더 좋은 점은 코딩이야 말로 우리의 뇌를 훈련시키는 정말 좋은 방법이라는 겁니다. 사실 인간은 논리적인 동물이라기보다는 감정적인 동물에 가깝다고 생각합니다. 인간에게는 합리성도 있지만, 분노, 고마움, 기쁨, 슬픔과 같은 정서들이 우리 판단에 아주 많은 영향을 미치죠. 컴퓨터는 우리에게 감정이 아닌 논리 그대로 사고하는 습성을 길러줍니다. 화를 내도 소용 없죠. 

우리는 가령 '대'가 들어간 도시에서만 반응하게 하고 싶습니다. 

>>>region = ['서울','대전','대구','부산']

>>>for i in region:

    if '대' in i:

        print(i,"대가 들어있군요")


실행시켜보니 다음과 같은 결과물이 나옵니다. 

대전 대가 들어있군요

대구 대가 들어있군요

대가 없는 도시는 그냥 출력하고 싶습니다. 실수로 이렇게 적었습니다. 


>>>for i in region:

    if '대' in i:

        print(i,"대가 들어있군요")

    print(i) #그냥 출력해라.


이렇게 했더니 결과는 이렇게 나오네요. 


서울

대전 대가 들어있군요

대전

대구 대가 들어있군요

대구

부산 


파이썬 문법을 읽으시는 분이라면 눈치챘겠죠? 이미 반복문 for에서 i에 '대'가 있을 경우에 출력을 했으니, 우리가 원하는 것은 "그렇지 않은 경우에는" 그냥 도시명만 출력하라는 것이었죠. 


>>>for i in region:

    if '대' in i:

        print(i,"대가 들어있군요")

   else:

        print(i) #그냥 출력해라.


이렇게 하면 우리는 우리가 생각한 답을 얻습니다. 


서울

대전 대가 들어있군요

대구 대가 들어있군요

부산


논리적으로는 '대'가 있는 경우에는 '대가 들어있군요'를 출력하고 그렇지 않은 경우에는 도시명만 출력하라고 해야 하는데, 우리는 가끔 생각속에서 else를 빼먹기도 합니다. 그래서 오류를 찾다보면, 와 진짜 컴퓨터는 거짓말을 안 하는구나!라는 생각을 하게 되죠. 


처음엔 금융지리학을 했다는 자격지심에서 시작하고, 두번째는 재밌어서 빠져들었는데, 하다 보니 이제 뇌 훈련까지 된다는 점을 알고 나니, 코딩을 하는 것이 인생을 풍요롭게 살게 하는 길이라는 생각마저 들었습니다. 나중엔 치매예방 코딩 프로그램도 나올 판이죠. 


HTML로 홈페이지를 꾸미다보니, 결국 이런 생각이 들었습니다. 이건 쇼핑몰 각인데?

맙소사! 재미와 자격지심으로 시작했는데, 뇌훈련도 되고, 나중에 돈 벌 길까지 열릴 수 있다고 생각하면 이제 안할 이유가 거의 없어진 셈이죠. 


요즘 너도 나도 코딩을 하니 파이썬으론 별로 경쟁력이 없다고 생각하시나요? 


마지막으로 이 생각에 대해서는 꼭 드리고 싶은 말씀이 있습니다. 제 주변엔 제법 똑똑한 사람이 많은 편인데요. 그 똑똑한 사람들조차 아무런 설명 없이 파이썬(python)이라고 하면 알아듣지를 못하거나, 아주 공부 잘하는 사람인 경우에는 '뱀'으로 생각하거나 하는 경우가 많습니다. 특히 문과라면 아직도 파이썬을 적극적으로 배워보려는 사람보다도 조금은 미적지근하게 바라보고 있는 사람들이 더 많을 수 있습니다. 파이썬을 한다는 것은 엄청난 경쟁력인 셈이죠. 


생각해보면, 저도 20대때는 그랬던 것 같습니다. 뭔가 컴퓨터를 몰라야 지적인 지식인이 된 것 같은 느낌도 들었어요. 그래서인지 30대 파이썬을 영접한 이후, 저는 스스로가 여러 가지로 많이 달라졌다는 것을 느낍니다. 


특히 파이썬으로 책을 내고 난 이후에는 문돌이 주제에 뭔가 대단한 걸 했다는 시선까지 가끔 느끼곤 합니다. 물론 전 제 실력을 잘 압니다. 하하하


하지만, 저는 과거 문돌이였기 때문에 문장과 단어와 형태소에 대해서 빅데이터분석을 해보고 싶은 충동이 많았습니다. 어떻게 하는 것인지 몰라 마냥 손 놓고 있었을 뿐이죠. 파이썬을 배우고 나서는 내가 문과 대학원생이었던 시절에 했었던 수많은 사고 실험들을 다 해볼수 있을 것만 같다는 생각이 듭니다. 웬지 이 사고실험을 파이썬으로 다 구현해내고 나면, 폴 크루그만보다 위대한 학자가 될 것 같은 생각에 가슴이 두근두근 뛰기도 합니다. 


여하간 그렇습니다. 


>>>


와 친해질 이유는 무궁무진합니다. 갑자기 python이라는 이름이 저 >>>표시와 비슷하다고 해서 지은 이름이 아닐까 하는 생각이 드네요. 아니면 말구요. 

자, 그렇다면 지금이라도 아무런 설치도 필요 없는 코랩으로 이동해서 파이썬 명령어 몇 개를 실행해보는 것은 어떨까요? 1+2 혹은 print('Hello, world!') 도 좋습니다. 




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari