Power of Python

현재의 소프트웨어들은 날이 갈수로대형화 되고 있다.

과거Standalone인개발시대도 있었지만 지금은 거의 불가능한 상황이다.

프로그램의 설계와 개발 단계에 있어서오픈소스나 라이브러리, 프레임웍 등을

적극 사용하게 되었는데 이로 인해서 프로그램 개발환경은 극적으로 바뀌고 있다.

지금은순수한 코딩보다는 레고블럭을 조합하는 듯한 개발방식이 주로 사용되고

있다.

단, 이런 경우에도 코더의 "조합능력(리팩토링, 패턴화 등등)"이 좋지 않게되면,

향후 새로운 외부 라이브러리의 도입을 하게 될 때,대규모의 재 코딩이

필요하게 되며 이것은 불필요한 시간 손해를 가져온다.

거의 모든 프로그래머는대부분의 개발 시간을UI 개선과 버그패치, 포팅

등으로 보내고 있다.

따라서,수정하기 용이하고 조합이 쉽게 되는툴들이 각광을 받게 되었는데

그중에 하나가 Python 이다.

충분히 빠른 CPU 와 메모리를 확보한요즘은 과거와 달리 "속도" 위주의

프로그램 보다는 사용편의성과 다양한 기능확장성으로 승부하는 시대다.

개발자에 있어 파이썬은 정말 대단한 도구임에 틀림 없다.

현재는 opengl 을 이용하는일종의 3d 시뮬레이션 프로젝트에 적용중인데..

opengl 을 비롯한 Window UI 와 그래픽기능 등을 잡다하게 집어넣는 과정에

전혀 문제가 없다. (사실 파이썬에서 미리 다 제공하고 있는 것들이다)

단, 폴리곤의 수에 맞춰백만번 이상 실행되는 실시간 랜더링에 있어서는

파이썬 자체의 오버헤드로 인해 속도저하가 발생하여 어쩔수 없이 외부

C 확장모듈을 만들어서 써야만 했었다.

이 경우에도 미리 파이썬으로 코딩을 해서 완전하게 랜더링 되는 것을 확인한

후 C 로 포팅하였으므로 금방 끝나는 작업이었다.

만약 C/C++ 였다면,라이브러리(혹은 오픈소스)의 선정과 포팅, 테스트,

그리고 재작업에 한달이상 소요 됐을 것이다

현재 개발속도는 C/C++ 대비 4-5 배(특정 부분에 있어서는 10배 이상)이상 빠르다.

그래서.. 개발이 왜 빠른가 생각해 보았다.

1. 구문이 잘못 정의되었거나,빠졌다고 하더라도 실행을 시키는 것에 전혀 문제가 없다.

그 부분이 실행 될 때 에러가 발생한다.

C/C++ 에서는 특정 오브젝트가 없다면, 그것을 참조하는모든 곳(실행이 되든 안되든)

에서 에러를 낸다. 컴파일은 가능하지만, 링크는 불가능, 실행도 불가능하다.

따라서 개발 도중에 실행을 해보려면어떤 식으로든 컴파일러를 속이는 트릭(짜맞추기)

가필요한데, 이것은 또 다른 버그를 양산하는 원인이 된다.

(이런 이유로 C 나 C++ 에서는반드시 Bottom-UP설계/개발을 적용한다)

파이썬은대충 붙여 넣은 껍데기만 가지고도 잘 돌아간다.

일단실행해서 결과를 보면서하위 루틴들을 하나씩 완성해 나가는 것이 가능하다.

(완성되지 않은 루틴은, 호출을 안하면 그만이다)

2. 동작 자체가 디버그 모드라고 볼 수 있다. 말하자면 프로그램은 항상 "안전모드" 에서 실행

중이다.

C 나 C++ 에서 포인터를 쓰다가실수하여 발생하는스택이나 메모리 침범에 의한 오류는

원천차단(보고)되며, 확실한 동작을 보장 받을 수 있다.

이 의미는, 파이썬으로 만든 코드는안전하다, 즉 검증됐다는 것이다.

C/C++ 로 정확하게 포팅하면 완벽하게 작동한다.(자동으로 포팅해주는 툴도 있다, 안추천)

3. 필요한 라이브러리(모듈)들이 미리 잘 갖춰져 있고, 잘 문서화 되어 있다.

예컨데, 특정 주소의 url 을 긁어온다던가 jpg 로 화면을 저장한다던가

ftp 를 접속하거나 하는 일련의 일이 단순히 해당 모듈을 포함하고,

단 한줄의 코딩으로 끝나버린다.

4.확장 및 임베딩이 용이하다.

개발하는 프로그램에 Python 을 임베딩 시키거나, Python 으로 개발하고 특정 모듈을

C 나 C++ 로 개발해서 넣는 것이 비교적 손쉽다.

개발시에 프로파일링 해보면 대부분 특정루틴 한두개에서 대부분의 클럭을 소모한다.

따라서, 그러한 루틴 한두개만C 로 개발해서 넣으면 속도 차이는 거의 없다.

결과적으로 미래의 프로그래밍 언어 현태를 보여주고 있는 셈이다.

MS 계열 툴과 크게 다른 점이라면..

1. 오픈소스. 일체의 모든 소스가 제공된다. 단, 상용모듈의 경우는 예외.

- 상용 모듈도 존재하나 상식 수준의 가격에서 제공된다.

- 오픈소스로 돌아다니는 모든 것(xml,http,ftp,telnet,md5,ssl,mail 따위)이

별도의포팅이 필요 없이 기본 모듈로 지원 되고 있다.

2. 상용과 비상용을 구분하지 않는 확실한멀티플랫폼..

windows 는 기본이고DOS(눈에 보이지 않지만, 많은 소형기계들이 이걸 쓴다)용과

Linux x-windows, WINCE, mac-os 등에서수정없이 바로 실행된다.

내가 생각하는 이상적인 파이썬 적용 분야

- 알고리즘개발 및 검증

-복잡한 기능을 요구하는프로그램(실행속도 보다는 기능 위주의 프로그램)

- 소량 사용자를 위한 주문 형태의 단순 프로그램개발

- 소수 개발자팀에서 개발 경쟁력 확보(요즘은 개발속도가 빠른게대세다)

즉.... 파이썬은특화된(Customize) 개발에 아주 최적이라는 얘기다.