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

컴퓨터 언어를 배워 볼 필요

by adnoctum 2010. 10. 6.

2009-08-27 19:43

   만약 한 개의 엑셀 파일에 1,000 개의 데이터가 있고, 그 중 원하는 특징을 갖는 데이터만 추려 내서 특정 문서 형식으로 만들고 싶다면, 프로그래밍을 하나 배우는 것이 좋다.

   일반적으로, 반복되는 작업을 10분 동안 아무 생각없이 클릭하는 기계처럼 해야 하는 일을 하게 되는 경우가 잦다면, 그렇다면 당신은 프로그래밍 언어를 배워야 한다.

  비슷한 패턴의 반복. 이것이 핵심이다. 이 때, '비슷하다'는 것은 무엇을 의미할까? 일정한 규칙이 있으면 된다. 그 규칙이 명확해서 중학생한테 설명해 주고 그대로 하게 했을 때 성공적으로 할 수 있는 일이라면, 그것은 컴퓨터가 해야 한다.

   매우 다른 두 문화의 접점 - 생물학과 컴퓨터 - 에 있다보니,
 
1. 이러한 일을 컴퓨터로 이렇게 쉽게 할 수 있었구나!
2. 이러한 일을 왜 손으로 하고 있지?

하 는 경우를 자주 보아 왔다. 컬러로 찍은 그림 파일 하나하나 열어서 흑백으로 바꾸고 있을 것인가, 아니면 포토샵의 배치 기능을 사용할 것인가? 100개의 엑셀 파일을 하나하나 열어서 분산형 그래프를 그리고 있을 것인가, 아니면 그누 플랏이나 R 등의 스크립트 언어(툴)을 사용할 것인가? 수백개의 데이터 파일을 일일이 열어서 t-test 를 하나하나 돌릴 것인가? 파일 이름을 하나하나 바꾸고 있을 것인가?

  중요한 것은, 혹시 이 일을 프로그래밍 등의 작업을 통해 좀 더 쉽게 할 수는 없을까? 하는 의문을 가져 보는 것이다. 아예 그런 의문을 갖지 못하면, 손가락은 아파 오고 눈은 피로해지고 어깨는 결려 오기 시작하는 것이다.

   이러한 예를 보여줄 수 있는 예 중의 가장 극단적인 것은, 정규 표현식 인데, 이것은 고전적으로 C/C++ 과 파스칼처럼 정규 표현식을 (표준에서는) 제공해 주지 않는 언어를 사용해 온 사람도 흔히 모르고 완전100 쌩 노가다로 하는 경우가 종종 있는 것으로 보인다.

   정규 표현식은, 문자열 비교에 있어, '정확히 맞는 것'을 찾는 것이 아니라, 어느 정도 규칙을 갖고 있는 것을 찾기 아주, 정말 아주아주 쉽게 되어 있는 것이다. 예를 들면,

'우리 나라는 3면이 바다로 되어 있고, 면적은 20,405,939km2, 인구는 대략 4,000천만명 이며, 이 중 남자는 2,200만 명 정도 된다.'

라는 문자열에서 수치 데이터를 뽑기 위해서는 어떻게 해야할까? 이런 거 C/C++로 하려면... 삶이 고달프다. 정규 표현식으로 하자면,

\d\+\|\,

이것이고, vi 에서 이것을 사용한 예는 다음과 같다.




' 숫자 여러 개가 연이어 나오거나 콤마'를 표현한 식이다. 왜 굳이 정규 표현식을 지금 얘기 하느냐 하면, '비슷한 작업'에서, 문자열을 '일정한 기준'으로 나눌 수 있다면 그것 역시 비슷한 작업으로 간주할 수 있는데, 정규 표현식을 알면 그렇게 동일한 패턴의 일로 간주할 수 있는 경우의 수가 급격히 증가한다는 것을 말하려 함이다. 웹 프로그래밍의 경우, 전화 번호나 주민등록 번호를 뽑아 내는 것 - 주민등록 번호는 \d{6}-\d{7} 정도로 뽑을 수 있는데, 중간의 대쉬 앞뒤에 공백이 들어갈 수도 있으니 \d{6}\w\*-\w\*\d{7} 정도가 나을 듯-, html tag 날려 버리는 것 - vi 에서는 :%s/<.\+>//g - 등을 아주 간단하게 처리할 수 있다.


파이썬이나 펄, 루비와 같은 언어가 기본적으로 정규 표현식을 지원하며, C++의 경우 이제는 표준으로 된 boost 에 정규 표현식이 있다. 이밖에 linux의 command line 명령어인 grep 이나 sed, awk 역시 정규 표현식을 사용할 수 있다.





   주위에 전산 직종에 있는 사람이 있다면, 포멧이나 인터넷이 안될 때 불러서 랜선 꼽아 달라고 하지 말고, 이러저러한 일을 하는데 눈 빠질 것 같아서 그러는데 혹시 프로그래밍 언어를 배우면 이런 일도 쉽게 할 수 있느냐고 물어 보도록 하자. 사회복지학과를 나오고 지금 관련 기관에서 일하는 내 친구는 비주얼 베이직을 배우더니 - 그 땐 나도 그 녀석에게 '니가 그걸 왜 배워?' 했다 -, 전국에 있는 사회복지관련 기관 정보(너무 많아서 엑셀 파일 하나에 안 들어갔다)를 정리해서 뭔가를 하더군.



  
   정리하면, 만약 자신이 뭔가 클릭질만 해대느라 기계처럼 일을 해서 비효율적으로 일을 하고 있다는 느낌이 든다면, 프로그래밍 언어를 배워야 한다는 말이다. 그리고, 만약 배울 생각이 든다면, 나는 파이썬을 강력 추천한다. 

참고:

프로그래밍을 할 수 있어 좋은 점

C/C++을 처음에 하지 마라. 이 글을 쓴지 5년이 다 되어 가는데, 여전히 같은 생각이다. 오히려 파이썬을 더 좋아하게 되었다. 물론 지금까지 작성한 코드의 95% 이상이 C/C++ 이지만. C++은 한 2만 라인이 넘는데, 파이썬으로 한 것은 대략 400줄 정도밖에 안된다. 그런데, 이것은 파이썬으로 하면 한두줄로 되는데 C++로 하면 5줄 10줄이 되기 때문에 그런 면도 있다. 살짝(?) 배워도 혼자서 쓰기엔 그럭저럭 괜찮은 프로그램 뚝딱뚝딱 만들기에는 비주얼 베이직이나 델파이가 괜찮아 보이기는 하는데, 난 별로 사용하진 않는다.

스크립트 언어, 좋더라

ps2. 헐, 이 글을 쓴 다음 날 처음으로 위키피디아의 파이썬 페이지에 가 보았는데... 저 페이지, 파이썬 추종자가 쓴 것 아닌가 할 정도군.

ps. 쪼잔하게 문자열조차 없어서 그 지겨운 포인터를 이해해야 비로소 문자를 제대로 다룰 수 있게 된다는, 그리고 자바처럼 객체지향적인 면이 잘 되어 있는 것도 아닌, C++. 이런 C++ 사용자들의 삶을 행복하게 해주는, 그리고 이것에 별로 토를 달 수 없는(물론 초보들은 토를 달더군), 우리들의 STL!! C++이 워낙 익숙해지는데 오래 걸리는 언어라 별로 추천하진 않는데, 그럴 때마다 이 STL 을 사용하는 즐거움을 알려줄 수 없다는 사실이 조금 걸리곤 한다. (음... 전형적인 STL 신봉자... >,<"" 는 아니다. 단지, generic 이라는 개념과, 그것의 멋진 적용인 STL이 좋을 뿐).

   그리고 내가 파이썬이나 펄, 델파이 등을 얘기하면서 항상 C++ 을 가장 많이 사용한다는 말을 같이 하는 이유는, 어느 언어가 좋다는 식의 쓸데 없는 논란을 미연에 방지했으면 하는 바램 때문이다. 왜 C++ 을 많이 쓰는가? 속도와 STL 때문이지, 결코 C++ 을 최고의 언어라 생각해서 그런 것은 아니다. 오히려 내 성격엔 (object) 파스칼이 더 맞을지도 모르겠다, 암묵적인 형변환 따위는 결코 허용하지 않는. 그리고 haskell과 erlang 을 배워 보고 싶은 마음이 굴뚝인데...



펄 의 정규 표현식이 가장 강력한 것으로 알려져 있는 것 같다, 주서 들은 바로는. 개인적으로는 펄 자체의 '너무' 자유로움 때문에 펄을 안 쓰긴 하는데, 파이썬을 쓸 때도 가끔 펄의 정규 표현식에서 지원해 주는 기능이 아쉬울 때가 있다. boost 의 정규 표현식은, default mode가 펄의 정규 표현식이다. 더구나 최적화된 C++ 코드의 정규 표현식이 펄에서의 정규표현식과 속도가 비슷하다는 출처가 불분명한 소문도 있으니, 정규 표현식은 펄이 강력한 것 같기는 하다. 자바는 정규 표현식이 지원은 되는 것 같은데 자바를 사용하지 않기 때문에 자세한 것은 모르겠다.



파이썬은 스크립트 언어라 속도 면에서 C++보다 느릴 수밖에 없는데(하지만 역시나 맨손으로 클릭클릭 백만번 하고 copy&paste 백번 하는 것보다는 훨씬 빠르다), 개인적으로 이 언어 매우 좋다고 생각한다. 나랑 같은 과를 나왔으나 전산을 부전공 하고 외국계 회사의 소프트웨어 엔지니어로 있는 친구는, 서버 쪽 테스트 모듈을 python 으로 작성해 놓았다고 한다. 그 회사 사람들은, 아무래도 의료 장비에 들어가는 소프트웨어를 다루다 보니 주로 C/C++을 사용하던 사람들이라 파이썬을 잘 몰랐고, 윈도우즈 계열에서 일하다 보니 커맨드 라인(도스처럼)으로 구동하는 것을 보며 별로 기대하지 않았었는데, 녀석이 다 만들어서 커맨드 라인과 스크립트 언어의 장점을 발휘해 보여주니 나름 괜찮은 반응을 보였더라는. GUI는 너무 융통성이 없어... 그리고 코딩도 괜히 지저분해지고. 가끔은 글자를 쓰기 위해 어느 정도의 크기가 필요한지를, 문자열을 입력 받아서 직접 그 수치를 계산해서 뭔가를 할 때가 있다. 뭐하는 짓인지... >,<""

'컴퓨터 > 전산, 그 외' 카테고리의 다른 글

아... STL의 algorithm  (0) 2011.02.09
프로그램에 익숙해지기  (1) 2010.11.05
스크립트 언어, 좋더라  (0) 2010.09.29
C/C++ 을 처음에 하지 마라  (65) 2010.09.08
프로그래밍을 할 수 있어 좋은 점  (0) 2010.08.31