Perl vs. Python

perl이라는 일종의 인터프리터? 내지는 script processor?는 거의 아버지 시대에서나 쓰던 것이 아닐까 하는 시절이 되었다. PHP라고 여태도 쓰이고 있는 웹용 언어(라고 하면 아니다 범용 언어다 라고 하는 시대다만)의 PHP라는 말이 PERL + HTML + processor로 나는 받아들일 정도로 PHP 이전의 시절에 사람들이 cgi-bin이란 것을 썼고 그 때 HTML에 PERL을 곁들여 쓰다가 마침내는 별도의 프로세서 (PHP)를 만들어서 html 파일 하나에서 perl을 같이 혼용해서 쓸 수 있게 만든 것이 php라고 이해하고 있을 정도니까.

어쩄든 지금 perl을 쓴다는 사람들은 쉽게 보기 어려울 뿐더러 이와 정반대로 python을 못한다는 사람을 쉽게 보기 어렵다. 아무리 컴퓨터에 잼병이 소릴 듣는 애들도 python을 쓸 수 있다는 소릴 지껄인다. 사실 알고 보면 아무것도 잘 하는 게 없지만 python은 못 하면 안될 것 같으니 책이라도 좀 들여다보고 예제 좀 실행시켜봤다는 소리가 맞다.

big data/deep learning 시대라 월급 좀 올려 받을 생각으로 여기 저기 인터뷰 보고 다녔다고 하는 놈들은 python으로 잘 알려진 deep learning foundation을 좀 써봤다는 (예제 몇 개 실행시켜봤다는) 얘기가 되겠다.

이 둘 중에 뭐가 좋냐라고 따지는 사람도 있다는 것 같은데, 내가 생각하기에는 이렇다.

perl은 C/C++에 상당히 가깝고 regex를 쓰기에 편리한데다 어디서든 (윈도우즈만 아니라면) 뭔가 좀 조건이 붙어야 되는 스크립트 작업을 할 때 대단히 편리하다. 어차피 문법이야 거기서 거기인데 모듈들을 외부에서 불러다 설치해야 되는 번거로움이 좀 있긴 하지만 혼자서 모든 걸 다 만드는 것에 비하면 비교도 안될 정도로 편리하다.

python은 python으로 사람들이 만들어놓은 모듈을 가져다 쓰기 유리할 때만 유리하다. 범용으로 쓰기에 불편한 것은 그 문법이라든가 문장 구성이 python외의 언어에 익숙한 이들에게 그다지 편리하지 않다. 그러니까 python으로 시작해서 하고 있는 사람들은 그게 내내 익숙하겠지만 옛날 언어들에 익숙한 이들은 예약어라든가 문장 구성이 낯설다. 원래 언어라는 걸 배우고 쓰는 것은 본인이 아쉬워야 하는 것이라 python쪽으로 아쉬울 게 없으면 배울 필요가 없다. deep learning을 하겠다면 이미 나와있는 파운데이션을 경험해보는 것이 좋으니까 울며겨자먹기로 배우고 쓰고 하는 것이지만 이게 native language처럼은 될 수 없는 것이다.

예를 들어서 python으로 deep learning을 하는 것을 perl로 하겠다고 치면 당연히 쉽지 않다. 쓰는 사람이 없으니 모듈을 구할 수도 없고. 아니 처음부터 고려하지도 않을 것이다.

반대로 python으로 간이 webserver를 만들고 이런 저런 웹 인터페이스를 스크립트 짜겠다고 하면 이것 보단 nodejs를 택하게 되듯 말이다.

nodejs와 비교하면 perl은 옛날 식이라 느리고 답답한 구석이 많다. 그렇다고 perl로 하는 일 (일반적으로 파일들을 뒤져서 문자열을 치환한다든가 좀 복잡한 파일 작업들을 한다든가 메일을 쓴다든가 등등의 복합작업)을 nodejs로 하라고 하면 이 역시도 불편하다. 그러니까 일반적인 linux 배포판 혹은 MacOS에 기본으로 따라오는 perl은 매우 흔해서 내가 배포하는 소프트웨어의 일부분으로 만들어놔도 적어도 고객이 뭐가 안된다며 불평할 일이 없는데, nodejs만 되도 뭔가 이것저것 설치해야 되고 필요한 모듈이 없으면 문제가 생기니까 귀찮은 문제가 발생한다.

Python도 요즘 보면 기본적인 유틸리티로 따라붙긴 하지만, 막상 사람들이 많이 쓰는 모듈은 여전히 가져다 써야되고 버전의 파편화가 있어서 2.x냐 3.x냐의 구분이 가끔씩 피곤하게 만들 때가 있다.

그래서 하고 싶은 말이 뭐냐고?

무슨 언어를 배우는 일이 대단한 일인양, 또 한 번 배워놓으면 다른 것을 배우기가 어려운 것인 양, 또는 괜히 잘 못 배워놓으면 시간 낭비가 되는 양, 그래서 한번 결정할 때 매우 신중해야 한다라고 생각하는 경향이 있다.

내가 받아들이기엔 글쎄 어쩌다 여행가서 인사말 한 두 개 배우는 거 보단 복잡하긴 하지만 그렇다고 그 나라 초등학생들이 구사하는 언어의 수준에는 훨씬 못 미치는 난이도의 구사 능력만 있어도 하고 싶은 일은 다 할 수 있다고 생각한다. 문제는 나의 생각을 컴퓨터에 전달하는 방법이지 그 수단인 언어는 최소한 2020년대에 와서는 거의 1회용까지라고는 못해도 그만큼이나 단발성에 가까와졌다고 생각한다.

무슨 말이냐고?

요새 컴퓨터로 뭔가 하나 하자고 하면 언어 1개로 끝낼 수 있는 일은 없다고 본다. 어거지로 하면 그렇게 할 수도 있지만 그렇게 하면 쓸데없이 불편하고 결과물도 좋지 못하기 때문이다. 이를테면 어떤 데이터들을 가져다 처리하고 그 결과를 그래프와 복잡한 포멧의 문서로 출력시키는 일을 모두 자동화하겠다고 하면 최소 2-3개의 언어를 쓰게 되는 것은 흔하다. 왜냐면 내가 여기 관련된 모든 것을 전부 다 프로그래밍하지 않고 누군가 만들어놓은 모듈을 가져다 쓰는 것이 좋은 결과를 가져올 뿐더 개발 시간도 확실히 줄여주니까 말이다.

다시 말해 perl이냐 python이냐 구분하고 좋다 나쁘다 이야기할 이유가 없다. 뭐가 나에게 편리하고 작업 시간을 줄여줄 수 있느냐 (좋은 결과를 가져다 주느냐)만 중요할 뿐이다. 그런데 한 번도 사용해 본 적이 없다면 (또 뭐가 나쁘다는 이유로 아예 거들떠 본적도 없다면) 뭐가 진정 나에게 좋은지 아닌지 알 수 없다. 되든 안되든 이것 저것 많이 경험해보는 것이 가장 좋다는 말을 하고 싶다. 어차피 사람이 쓰는 언어는 다 거기서 거기다. 어떤 장단점이 있느냐의 차이만 있을 뿐.