파이썬에 대한 환상

ydhoney의 이미지

파이썬 소개를 하는 페이지를 보거나 하면 항상 하는 말이

Quote:
모 언어로 하는 개발의 몇분의 1밖에 개발시간이 들지 않고

또 뭣이 어쩌고 한데, 하여간에 이러쿵저러쿵한 이유로 개발시간이 빠르다.

이지요.

이상한게 파이썬만 보면 나도 모르게

왠지 1분내로 간단한 뭔가를 만들어낼수 있다는 환상이 심어지고 있어요. -_-;

한시간 내로는 뭔가 간단하면서 유용하게 쓸 수 있는걸 만들수 있다는 환상이..

하루 내로는 꽤나 괜찮은걸..

일주일 내로는 대단한걸 만들것만 같은~! 환상이 생겨나고 있어요.

그러나..막상 파이썬으로 뭘 할려니 앞이 캄캄해지면서..-_-;

버벅..버벅..결과적으로 아무것도 못하는군요. ㅠ.ㅠ;

내공부족이겠습니다만..헐헐~

자꾸 내 안의 커다란 환상과 안타까운 현실이 충돌하는군요.

아직 저에겐 C/C++이 더 빠른 개발작업속도를 보이고 있습니다. -_-;;;

와룡서생의 이미지

파이썬을 소개하는 책들을 보면 한결같이 파이썬은 쉽고 강력하고 이식성이 좋고 빠른 시간에 작업을 끝낼 수 있다는 광고성 멘트로 도배가 되어있습니다.

허나 이 말을 전부 믿어서는 않됍니다.

첫째, 파이썬은 쉽다.
어느정도는 맞는 말입니다. 언어가 상당히 직관적입니다. 책에 나온 간단한 예제만 보면 그렇습니다. 허나 좀더 복잡한 레벨로 들어가면 다른언어에서 느끼는 복잡성과 그리 다르지 않다는 것을 느끼게 됩니다.
이는 비주얼 베이직이 쉽지만 복잡한 레벨로 들어가면 더 어려워지는 것과 비슷합니다.

둘째, 파이썬은 이식성이 좋다.
이것은 실로 뻔뻔한 거짓말이 아닐 수 없습니다. 여기서 말하는 이식성이라는 것은 파이썬코드에 C/C++를 비롯한 다른 언어를 이식하는 것을 말합니다. 즉 파이썬이 메인이고 다른언어의 코드를 모듈식으로 파이썬에 이식하는 것이 그네들이 말하는 강력한 이식성의 진실입니다. 허나 대부분의 사용자들이 파이썬에 기대하는 것은 그 반대입니다. 기존 언어로 작성하던 코드에 작고 간단한 모듈은 파이썬으로 작성하여 이식하고 싶어합니다. 그러나 파이썬에서는 그런 이식성은 지원하지 않고 있습니다. 즉 파이썬으로의 이식은 지원하지만 다른 언어로의 이식은 지원하지 않는 일방적인 이식성입니다. 작년까지만해도 C/C++코드에 파이썬을 이식하고자 백방으로 수소문해보았지만, DLL로 만들어 이식하는 방법외에는 다른 도리가 없어 포기한 적이 있습니다. (그것도 완전하고도 안전한 방법이 아닌 개인이 개발해낸 솔루션에 의존해야 했습니다...ㅡ.ㅡ;;)
(치명적인 이식성의 한계가 문제가 됐는지 몰라도 작년까지만해도 불었던 파이썬의 바람이 요즘 잠잠해진듯 하네요...)

파이썬은 나름대로 장점이 있는 언어입니다만, 본인의 목적에 맞는지 확인을 하고 시작하는 것이 좋습니다.
파이썬만으로 간단한 스크립트를 작성하고자 한다면 괜찮겠지만 C/C++등 다른 언어에서 지원하지 않는 기능을 파이썬으로 간단하게 작성하여 이식하고자 파이썬을 시작하겠다면 말리고 싶군요.

남들이 좋다고 하니까 무작정 공부하기 보다는 언어를 배우기에 앞서 언어의 장점과 더불어 언어의 단점과 한계를 명확히 알고 공부를 시작하는 것이 시간과 노력낭비를 줄이는 왕도가 아닐까 생각합니다.

차리서의 이미지

ydhoney wrote:
내공부족이겠습니다만..헐헐~

타이핑이 느린걸지도 모릅니다. 타자 연습을 해보셔요. :P

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

pynoos의 이미지

와룡서생 wrote:

둘째, 파이썬은 이식성이 좋다.
이것은 실로 뻔뻔한 거짓말이 아닐 수 없습니다. 여기서 말하는 이식성이라는 것은 파이썬코드에 C/C++를 비롯한 다른 언어를 이식하는 것을 말합니다. 즉 파이썬이 메인이고 다른언어의 코드를 모듈식으로 파이썬에 이식하는 것이 그네들이 말하는 강력한 이식성의 진실입니다. 허나 대부분의 사용자들이 파이썬에 기대하는 것은 그 반대입니다. 기존 언어로 작성하던 코드에 작고 간단한 모듈은 파이썬으로 작성하여 이식하고 싶어합니다. 그러나 파이썬에서는 그런 이식성은 지원하지 않고 있습니다. 즉 파이썬으로의 이식은 지원하지만 다른 언어로의 이식은 지원하지 않는 일방적인 이식성입니다. 작년까지만해도 C/C++코드에 파이썬을 이식하고자 백방으로 수소문해보았지만, DLL로 만들어 이식하는 방법외에는 다른 도리가 없어 포기한 적이 있습니다. (그것도 완전하고도 안전한 방법이 아닌 개인이 개발해낸 솔루션에 의존해야 했습니다...ㅡ.ㅡ;;)
(치명적인 이식성의 한계가 문제가 됐는지 몰라도 작년까지만해도 불었던 파이썬의 바람이 요즘 잠잠해진듯 하네요...)

파이썬은 나름대로 장점이 있는 언어입니다만, 본인의 목적에 맞는지 확인을 하고 시작하는 것이 좋습니다.
파이썬만으로 간단한 스크립트를 작성하고자 한다면 괜찮겠지만 C/C++등 다른 언어에서 지원하지 않는 기능을 파이썬으로 간단하게 작성하여 이식하고자 파이썬을 시작하겠다면 말리고 싶군요.

남들이 좋다고 하니까 무작정 공부하기 보다는 언어를 배우기에 앞서 언어의 장점과 더불어 언어의 단점과 한계를 명확히 알고 공부를 시작하는 것이 시간과 노력낭비를 줄이는 왕도가 아닐까 생각합니다.

대개 언어가 이식성을 언급할 때는 플랫폼에 대한 이식성을 말합니다. 다른 언어에서 가져와서 이식하는 마치 접붙이기하는 이식을 말하는 것이 아닙니다.

파이썬은 많은 플랫폼에 인터프리터가 이식되어 있기 때문에 그러한 표현이 있는 것입니다. python 코드의 컴파일된 오브젝트인 .pyc 가 그러하죠.

어쨌거나, 언어를 쉽게 배울수 있다는 것과 언어의 심화된 부분까지 쉽다는 것은 별개입니다. 쉽게 배운언어일수록 깊이 들어가는데 어려운 것은,
컴퓨터 언어 전반적인 이해가 없이는 어떤 걸 해도 어렵습니다.

와룡서생의 이미지

언어가 쉽다는 것은 그만큼 직관적이기 때문입니다.
직관적인 것과 표현력의 범위에는 trade-off가 있다고 생각합니다.
흔히들 언급하는 레고블럭의 세밀함의 정도랄까요.

파이썬이 쉬운 반변에 블럭의 덩어리가 큰만큼 직관성이 크지만 복잡한 레벨로 접어들면 세세한 콘트롤이 힘들어지기 때문에, 어려움을 느끼는 정도는 다른 언어와 비교할 때 크게 달라지지 않았다는 개인적인 경험에서 비롯된 것입니다.

수치연산 같은 궁극으로 가면 결국 C모듈의 힘을 빌릴 수 밖에 없습니다.
(물론 속도문제도 있습니다)

그리고, 사람들이 파이썬에 기대하는 이식성은 윈도우에서 리눅스로 옮기는 그런 것이 아닙니다. 적어도 제 경우에는 그렇습니다. 그런 플랫폼 이식성을 원했더라면 굳이 파이썬을 사용할 필요가 없습니다.

파이썬을 사용하는 중요한 이유는 기존 언어로 표현하기 힘들거나 복잡한 것들, 그리고 라이브러리가 존재하지 않는 부분을 쉽게 구현하여 모듈로 만들어 기존코드에 이식하고자 함입니다. 예를 들어 C언어에서 정규표현식을 사용하려면 사용법이 복잡한 라이브러리를 이용해야 하지만 파이썬에서는 펄처럼 정규표현식이 아주 간단하게 구현가능 합니다. 이처럼 필요한 부분만 모듈로 만들어 C나 다른 언어의 코드레벨에서 호출할 수 있기를 기대하는 것입니다. (VB에서 DLL을 이용하여 C/C++함수를 호출하는 것처럼 말이죠. 플랫폼의 이식성이란 이런것이 아닐까요) 님의 언급처럼 코드에 접붙이기(?)를 말하는 것이 아닙니다. 물론 님이 말하는 것처럼 어셈블리어와 같이 inline 형식으로 코드 접붙이기(?)를 지원해준다면 더욱 쉬워지니 고맙겠지만 말입니다.

생각치도 않게 말이 길어졌군요...조금만 더 이야기하고 끝내겠습니다.
파이썬은 쉽다로 시작해 쉽다로 끝나는 언어입니다. 파이썬은 C/C++/Java처럼 언어에 대한 전반적인 심오한 이해를 요구하지 않습니다. 쉽고 간편하고 빠르게...그게 그들이 내세우는 모토이자 언어로서의 파이썬이 생겨난 이유입니다.

사용자들에게 장미빛 약속을 하지만 실제 들여다보면 그렇지 않다는데에 대한 의문과 실망은 당연한 것이고, 그런 허실을 미리 파악하여 쓸데없는 시간낭비를 줄이는 것이 언어에 대한 전반적인 이해보다 급선무라 생각합니다. 귀중한 시간을 할애하여 공부에 투자해야하는 사람에게는 적어도 그렇습니다.

ydhoney의 이미지

에구..-_-a;

뭐 그런부분을 말하려던건 아니고 그런부분은 어느정도 감안을 하고 있긴 하지만, 생각외로 기대보다 진도가 너무 심하게 안나가는 자신에 대한 한탄이었는데..-_-;;; 이상한 토론들이 갑자기 이어져 버리는군요. 헴헴~

greatkgc의 이미지

와룡서생 wrote:

즉 파이썬으로의 이식은 지원하지만 다른 언어로의 이식은 지원하지 않는 일방적인 이식성입니다. 작년까지만해도 C/C++코드에 파이썬을 이식하고자 백방으로 수소문해보았지만, DLL로 만들어 이식하는 방법외에는 다른 도리가 없어 포기한 적이 있습니다. (그것도 완전하고도 안전한 방법이 아닌 개인이 개발해낸 솔루션에 의존해야 했습니다...ㅡ.ㅡ;;)

음.. 저에게 충격적인(?) 이야기인 것 같은데요. 저도 최근 한달
사이에 파이썬을 배워 업무에 적용하려 하고 있습니다. 현재 있는
다양한 윈도우 클라이언트에 파이썬 엔진을 내장하여 로우 레벨의
바이너리 명령어 대신에 바이너리 명령어에 대응되는 파이썬 함수
들을 호출하려고 합니다.
(바이너리 명령어의 히스토리를 가끔 재활용해야 하는데 바이너리
명령어가 이해도 힘들고, 단순 재활용밖에는 안되었기 때문이죠)

그런데 말씀하시는걸 들어보니 이 방법에 큰 문제가 있다는 듯이
쓰셨네요. DLL을 만들어 이식하는게 문제가 되나요?? 파이썬
엔진이 임베딩되려면 DLL이나 LIB로 되어 있거나 둘 중에 하나
라고 생각했는데.. 뭐가 문제가 되는지요??

멀뚱이의 이미지

http://wikidocs.net/mybook/read/page?pageid=47

"점프 투 파이썬"에서 저자 박응용님의 설명입니다.

"프로그램을 막 시작하려는 사람이 처음 느끼는 벽은 아마도 다음과 같을 것이다. “문법도 어느 정도 알겠고, 책의 내용도 대부분 다 이해하는데, 이러한 지식을 바탕으로 내가 도대체 어떤 프로그램을 만들 수 있을까?” 라는 의문이다. 이럴 때는 무턱대고 “어떤 프로그램을 짜야지”라는 생각보다는 다른 사람들의 프로그램 파일들을 구경하고 분석하는데서 시작하는 것이 좋다. 그러면서 다른 사람들의 생각도 읽을 수 있고 거기에 더해 뭔가 새로운 아이디어가 떠오르기도 하는 것이다. 하지만 여기서 가장 중요한 것은 자신의 수준에 맞는 소스를 찾는 일이다."

남의 프로그램을 분석해 보라네요. :)

d3m3vilurr의 이미지

파이썬으로 검색이라도 하신건지 옛날글이 죽 올라와있네요.

C/C++에 파이썬을 또는 파이썬에 C/C++을 붙이는 방법은 많은 변화가 있어왔습니다만.
일단 파이썬에 C/C++을 붙이는데는 이제 ctypes의 도움으로 더 쉽게 가능해 졌습니다.
정확히는 dll이나 lib에 대한 별도의 python wrapper를 만들지 않고 직접 해당 라이브러리의 함수가 호출 가능합니다.
반면 C/C++에 파이썬을 붙이는 것은 쉽게는 PyRun_Simple 계열의 함수가 있지만 일반적으로는 여전히 귀찮은 wrapper를 만들어야 할겁니다.

사실 일반적으로 이런 목적이 주가 된다면(즉 단순한 스크립트를 구동하기 위한 목적) 파이썬 보다는 lua같은 것을 붙이는 것이 더 쉽지 않을까 생각됩니다.

select99의 이미지

근데 환상을 주장하신분은..

대체 뭘 만드셧기에.. 그런 소문이 퍼진걸까요?

Darkcircle의 이미지

멈칫 "할 뻔"한 1人 . . .
I'm keeping my mind to continue . . .

---------------------------------------------------------------
실수하지 말아야 하는데 . . . Orz

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

Juhyun Lee@Google의 이미지

뭔가 완성된 패키지를 만들어야 하는 입장에서는 파이썬 같은 스크립트 언어보다는 컴파일이 가능한 언어가 좋다고 봅니다. 반면에 간단히 뭔가 뚝딱뚝딱 코딩을 해서 급히 원하는 일을 수행하고 끝내려면 파이썬이 백배 좋다고 봅니다. 물론 C/C++에 너무도 익숙하고, 거의 모든 일을 할 수 있는 라이브러리들도 다 갖추고 있고, 파이썬이 익숙하지 않다면 아예 비교가 되질 않겠지만요.

제목에서와 같이 개인적으로 C/C++은 어느정도 심각하게 쓴 것은 20여년, 처음 배우기 시작은 애플2 CP/M 시절이니까 30년 정도인데 비해 파이썬을 좀 써 보자 하고 시작한 것은 3년이 채 되지 않았습니다.

지난 이년여간 해 온 일들을 보면 저는 패키지 소프트웨어를 만드는 일이 업이 아닌 관계로 딱 한번 C/C++ 이 아닌 VisualBasic.Net 으로 완성품의 소프트웨어를 만들었던 데 반해 (속으로 엄청 짜증내며 일했습니다. 파이썬이면 너무 쉽게 할 일들을 오로지 윈도우즈 상에서 Visual/GUI 구현땜시 VB.Net 을 사용했었으니까요. 저는 여러 언어를 마구 섞어 쓸 - 특히 파이썬의 경우 - 수준은 못됩니다) 그 외의 거의 모든 일과 취미관련 코딩 등은 완전히 파이썬으로 돌아섰습니다. 한동안 광학 실험/모델링 데이터 분석, 시뮬레이션 등에서는 C++ 을 주력으로 사용했지만 시뮬레이션의 코어 부분을 빼고는 특히 데이터 처리는 완전히 파이썬으로 바꾸었네요. 자바도 써 봤고, 옛날에는 파스칼도 꽤 써 봤었지만 이제는 파이썬이 아니면 손 대기도 싫을 정도입니다. 정말이지 C++ 백줄 쓸 것을 파이썬은 딱 1/2 ~ 1/3 수준이면 다 되더군요. 저는 파이썬의 경우도 가급적이면 새로운 라이브러리를 배워서 하는 것 보다는 생코드로 스크래치부터 작성하는 것을 더 좋아하는 편인데도요.

때문에 저는 원글님의 환상이 환상이 아니라고 느끼는 한 사람입니다. (다시한번 말하지만 파이썬을 완성된 패키지 제품 개발에 사용하겠다는 것은 아닙니다)

ydhoney의 이미지

굉장히 예전 글이 끌어올려지긴 했는데;; 저야 뭐 지금은 주로 파이썬으로 먹고 삽니다. 데이터 과학자의 native language처럼 되어버린 경향도 있고, 데이터 분야로 먹고 사니 이래저래 파이썬만 주구장창 하고 사네요. 일반 언어, 혹은 프로그래밍 언어 학습의 문제일텐데 결국 얼마나 노출되고 얼마나 반복적으로 학습하는가 라는 필요충분한 학습량의 문제가 아닐까 라고 생각합니다. 저때는 사실 좀 그리 많이 접하지 않았을 때긴 하거든요.

Juhyun Lee@Google의 이미지

사실 한동안은 C++ (윈도우즈 상에서 무료인 Borland C++ 5.5 커맨드라인 컴파일러와 EditPlus 사용) 에 미쳐서 거의 모든 코드를 다 C++ 로 작성하던 시절도 있었습니다. 코드의 양과는 관계 없이 어떤 일을 하더라도 C++ 이 편하게 느껴지던 시절이었고요. 한 2-3년 파이썬을 많이 쓰다 보니 지금은 C++ 로 뭔가를 하려면 많은 것을 잊어버려서 레퍼런스를 자꾸 뒤적이게 되네요. 이런 경험 때문이라도 말씀하신 학습량의 문제라는 것에 대해서는 동감합니다.

다만 양쪽 언어에 대한 경험을 바탕으로 한가지 첨언하고 싶은 것은 프로그래밍을 새로 배우는 입장에서는 아무래도 쉽게 배우고, 적은 양의 코딩으로도 같은 결과를 얻을 수 있는 언어가 나을 듯 하다 라는 정도네요. 그런 면에서는 파이썬이 괜찮은 언어인 것 같습니다만 '파이썬이면 뭐든 쉽게 된다' 라는 수준은 약간의 환상도 포함된 수준이 아닌가 싶습니다.