본문 바로가기
컴퓨터/전산, 그 외

스크립트 언어, 좋더라

by adnoctum 2010. 9. 29.

원본 작성일: 2006-09-30 11:08

 

주제: 스크립트 언어로 할 수 있는 일은, 정말 많아서, 내가 평소에 컴퓨터로 하는 여러 일을 효과적으로 할 수 있게 해준다.


  이야기에 앞서, 내가 어떤 순으로 프로그램 언어를 배워 왔는지를 살짝 말하면 다음과 같다. 나는 중학교 때 GW-BASIC을 배웠다, 혼자(음... 사실, 모든 언어를 혼자 배웠다). 그래서 이런 저런 프로그램을 만들었다. 고등학교 때는 안 하다, 수능 끝나고 비주얼 베이직을 배웠다. 그 때는 그림을 갖고 퍼즐을 맞추는 것을 했었는데, 속도가 느려서 고민하고 있었는데, 누나(9살 나보다 위인 누나는 전산과였다)가 델파이란 언어(엄밀히 언어는 아니지만)를 알려 주어, 델파이를 갖고 프로그래밍을 하고 있었다. 그러다 회사에 들어가서 C++을 배웠다. MFC를 주로 썼다. 내가 C/C++로 프로그래밍을 한다고 했을 때 누나는 한 마디 했는데, "너, C하면 다른 거 못할텐데. C가 너무 좋아서." 어렴풋이 그런 것을 느끼고 있을 무렵 서서히 포인터에 익숙해지고 있었다. 조금 후에는 함수 포인터와 다형성에 대해 매력을 느끼고 있었다. 그러다 어느 날 STL을 알게 되었다. 그 때가 내가 수학과에서 추상대수학(abstract algebra)를 배우고 있을 때였는데, 그래서 더더욱 STL에 대해 놀라게 되었다[각주:1].

속도와 STL, 포인터 때문에, 나는 비록 다른 언어를 종종 쓰기는 했지만, C/C++을 제일 좋아했다. 언어는 단지 도구일 뿐이라는 말을 하긴 했지만, 특히나 스크립트 언어는 별로 좋아하지 않았다.

그런데 대학원에 들어가면서 펄을 하게 되었다. 그 실험실에서 주로 사용하는 언어가 펄이었기 때문에, 나 역시 펄로 코딩을 했다. 그러면서 펄에 서서히 익숙해지고, 평소에도 펄을 가끔 쓰기는 했다. 그러면서 서서히 내가 하는 작업을 스크립트 언어로 할 수 있는지를 살피게 되었다.

이런 식으로 서서히 스크립트 언어에 대해 익숙해지고 있었는데, 어느 날 [[실용주의 프로그래머]]라는 책을 읽었다. 거기에는, 한 두 가지 스크립트 언어에 익숙해지면, 컴퓨터로 하는 작업의 양을 획기적으로 줄일 수 있는 길이 보일 것이라는 말이 있었다. 이 말을 들은 후 부터는, 내가 하는 일마다 혹시 이 일을 스크립트 언어로 할 수 있을 것인지를 항상 생각하게 되었고, 그 결과는 대만족이다.

지금은 주로 파이썬으로 코딩을 하는데, 내가 스크립트 언어를 사용하는 예는 다음과 같다. 리눅스에서 C++로 코딩을 할 때, GUI를 사용하지 않기 때문에, command line에서 일일이 파라미터를 써 주어야 했다. 이 때, 파이썬을 이용해 CGI를 만들어 이것을 C++코드를 실행시키기 위한 GUI로 사용했다.

텍스트 파일을 가지고 작업을 해야 할 때, 주로 파이썬을 사용한다. 정규표현식 때문에. 물론, boost 에도 정규 표현식이 있다. 그래서 파이썬으로 되어 있는 것을 C++로 바꾸려는데, 생각보다 코드가 길어졌다. 그래서 다음부터는 간단한 일은 주로 파이썬으로 한다. C++로 하면 항상 생각보다 프로그램이 복잡해져서, 그 전에는, 아 귀찮어, 하던 것을 이젠 파이썬으로 순식간에 끝내 버릴 수 있다는 것을 알았기 때문에, 곧바로 하게 된다. 가령, flat file의 구조를 바꿀 때, C++로 하면, 그 악몽같은 문자열 처리 때문에 꺼렸는데, 이젠 파이썬으로 순식간에 끝내버린다.

몇 천 개의 파일 이름을 어떤 일관된 규칙에 따라 바꿀 때도 파이썬을 사용한다. glob을 써서. C++로 하면, vector같은 곳에 내가 원하는 파일명만 집어 넣는 함수를 따로 만들어야 하는데(MFC로 할 때는, 이런 용도로 만든 나만의 함수가 있긴 하다, (2010년 09월 29일 추가 : 이젠 리눅스에서도 이런 용도의 함수를 만들어 사용한다)), 파이썬에서는 glob.glob(filter); 결과가 곧바로 리스트로 들어가서, 쉽게 코딩할 수 있다.


결론은 이것이다. 상대적으로 쉬운 스크립트 언어를 알게 되면서, 코딩에 대한 부담감이 많이 줄어서, 이제는 쉽게 "아, 이것도 그냥 코딩해야 겠다"란 생각을 할 수 있게 되었고, 실제로도 아주 짧은 시간에 코딩해서 일을 끝낼 수가 있다. C++이라면, 코딩하는데 너무 많은 시간을 보냈을텐데...[각주:2] 이런 일은, 이제 내가 컴퓨터로 같은 작업을 10번 이상 하게 되면, 항상 스크립트 언어로 코딩해볼까, 하는 생각을 가능하게 해주었다.

스크립트 언어, 생각보다 배울만 했다, 특히 파이썬.

참고로, 내가 연구용으로 작성한 코드의 줄 수를 심심해서 간단히 확인해 보았다.


[adnoctum@bioism Research]$ find . -name '*.h' -exec more {} \; | wc -l
466
[adnoctum@bioism Research]$ find . -name '*.cpp' -exec more {} \; | wc -l
55590
[adnoctum@bioism Research]$ find . -name '*.py' -exec more {} \; | wc -l
5207
[adnoctum@bioism Research]$


참고로 윈도우즈 용은 제외한 코드다. 그것까지 포함하면 C++ 코드가 1~2만줄은 더 추가가 되겠지... 





  1. 추상대수학을 배우면서, 수학에 대한 생각이 완전히 바뀌었다. 이제는 공간이란 개념을 단지 숫자로 표현된 것 뿐만이 아니라, 그 어떤 것으로도 생각할 수 있게 되었다. 또한 연산이라는 것도 사실은 정의에 의존한다는 것을 알게 되었다. 그래서 나는 사람끼리도 곱할 수 있고, 컴퓨터 용품으로 된 공간에 어떤 연산을 적용할 수도 있다는 것을 안다. STL은 이런 개념의 프로그램화였다. [본문으로]
  2. 물론, 스크립트 언어로 10분간 코딩해서 10분동안 실행시켜서 결과를 얻을 것인지, C++로 1시간 코딩해서 1초만에 결과를 얻을 것인지는 항상 생각한다. 나는 일단 파이썬으로 해서 너무 오래 걸리지 않으면 파이썬으로 한다. 예전 파이썬으로 코딩해서 돌려 놓고, 잠시 나갔다 왔는데(30분 정도), 그 때도 돌아가고 있길레, C++로 바꿔서 3초 정도에 끝낸 적은 있다. 그 이후로도 종종 파이썬 스크립트로 실행 시켜 놓고, 너무 오래 걸려서 Control+C로 멈추게 하는 적은 있긴 하다. 에러난 줄 알고... 나중에 안 것인데, 너무 오래 걸려서 계속 실행되고 있던 것이었더군..>.<'' [본문으로]