totalrecall
21
2021-01-02 19:46:12 작성 2021-01-02 19:55:37 수정됨
19
1501

Python은 가고 Julia가 와야 합니다


회원님들 새해 복 많이 받으십시오


파이썬이 현재 널리 사용되고 있지만, 단점들이 있습니다


1. 들여쓰기(indent) : 심각합니다

자주 불편하게 하며, 대규모 소스 개발에는 부적합합니다

예를 들어서, 100줄짜리 subroutine을 들여쓰기하려면

다른 언어에서는 { } 괄호만 치거나,

아니면 아무 작업을 안해도 되지만

파이썬은 각 라인마다 100번 들여쓰기를 변경해야 합니다
특히 다른 사람이 만든 소스를 가져와서 붙여넣기 하려면

이만 저만 짜증 나는게 아닙니다

근본적으로 indent로 subroutine를 구성하는 방식이

바보스럽습니다


2. 속도가 느립니다. 근본적으로 for loop를 돌리지 못합니다

numpy 써도 마찬가지입니다

이중 삼중 for loop 돌리면 수행 시간이 몇시간 심지어 며칠 걸리는 경우도 있습니다

파이썬은 기본적인 프로그래밍 패턴인 for loop 사용이 권장되지 않습니다


그 반면


Julia는 속도가 C/C++처럼 빠릅니다

근본적으로 Julia는 파이썬의 pandas나 R의 data.table처럼

for loop를 안쓰겠다고 별의 별 연구와 별의 별 잔대가리 굴릴  필요가 없습니다

그냥 알고리즘을 for loop로 설계해서 for 루프 돌리면

이중 삼중 loop도 어지간하면 몇초, 몇분 안에 끝납니다


예를 들어서 파이썬으로 3중 루프 1억번을 돌렸더니

수행 시간이 며칠 걸리더군요


Julia로 똑같은 3중 루프 1억번을 돌리니까 5~8분만에 수행이 끝나더군요


Julia는 굳이 속도를 위해 C/C++, Rust를 사용할 필요가 없으며

파이썬과 유사한 문법 구조로 C/C++ 성능을 내게 합니다


그리고 Julia는 변수명, 함수명을 유니코드로 작성할 수 있습니다

그래서 수학 논문이나 TeX 문서처럼 유니코드를 변수명, 함수명으로 해서

시각적으로 가독성을 높입니다


그러면서 C/C++과 같은 꼼꼼한 Type 설정을 가능하게 합니다


그리고 macro, GPU 사용, multi-thread, 병렬 프로세싱

모두 지원합니다


또한 C++의 단점인 template같은 문법보다 더 간결한 방법으로

generic programming을 지원합니다

-4
0
  • 댓글 19

  • Doneky
    1k
    2021-01-02 19:56:13

    1. IDE 툴 이용하면 사실 그게 문제인가 라고 할정도로 간단한 이슈입니다.


    2. 파이썬은 연산속도를 빠르게 하기 위해서 쓰는 언어가 아닙니다. 또한 말한대로 for loop만 이용하면 

    느리지만 파이썬은 파이썬스럽게(파이토닉) 코딩하면 다른 컴파일러 언어에도 속도가 뒤쳐지지 않습니다.

    for loop가 느리니 파이썬은 느려라고 생각하는건 위험한 발상이라 생각되네요.


    또한 파이썬은 "생산성"에 목표를 두고있는 언어입니다. 그렇기에 라이브러리도 엄청나게 방대하죠.

    그러한 라이브러리 없어도 julia를 써야하는 큰 이유가 있나요?


    3. 어차피 소프트웨어는 MSA로 발전했기 때문에 필요에 따른 부분만 필요에 따른 언어로 코딩하면 됩니다. 

  • totalrecall
    21
    2021-01-02 20:00:27 작성 2021-01-02 20:02:15 수정됨

    1. IDE를 쓰지 못하는 경우가 많이 있습니다

    예를 들면, 정부  관공서 프로젝트를 하면, 프로그램 설치를 마음대로 하지 못하며

    라이브러리 설치조차 마음대로 못합니다. 거기는 인터넷 사용도 안됩니다

    그럴 경우 파이썬을 쓰면 주로 Jupyter를 사용하는데, 다른 사람 소스 붙여 넣기 할 때

    indent는 매우 신경질 나게 만들며

    수백줄 이상 indent 수정하는 것은 사실상 무리입니다

    파이썬의 indent 문법은 한마디로 "쓰레기"라고 보면 됩니다


    파이썬을 써야 하는 이유는 오로지 라이브러리과 구글링 도움말 때문입니다


    파이썬이 널리 사용되는 것이 약 10년 되었는데요


    앞으로 10년 후면 또 어떻게 될 지 모르겠네요

    -3
  • totalrecall
    21
    2021-01-02 20:05:31

    2. 그리고 Python은 데이터 사이언스에 딱 맞는 언어인데요


    관공서 프로젝트를 할 경우, 데이터 규모가 보통 ROW수 수백만개 이상인 경우가 많습니다


    문제는, 데이터 사이언스, 분석 작업에서는 데이터 가공과 전처리가 가장 중요한 단계인데요

    파이썬은 데이터 전처리 속도가 너무 너무 느리다는 것입니다

    근본적으로 FOR 루프를 쓰지 못하고

    PANDAS같은 걸 써야 하는데요, 그렇다 하더라도 생산성이 너무 떨어집니다

    그리고 deep learning (tensorflow, pytorch)를 돌려도 학습 시간이 많이 걸리는 것을 알수 있습니다


    Julia로 데이터 전처리를 하거나 deep learning( 아직은 안 됩니다)하면 속도가 엄청 빠릅니다


    데이터 전처리에는 Julia가 최고입니다. 그냥 무식하게 for 루프 돌려도 몇분 안에 작업이 끝나는 경우가

    대부분이거든요

    -3
  • Doneky
    1k
    2021-01-02 20:09:41

    파이썬의 indent는 사람의 취향마다 호불호가 갈릴 수는 있다고 생각합니다만.


    라이브러리와 구글링이라는 방대한 문서가 마치 평가절하되는 느낌이네요.

    개발언어에서 그것보다 중요한게 있나요?

  • totalrecall
    21
    2021-01-02 20:13:24 작성 2021-01-02 20:21:12 수정됨

    10년전만 해도 파이썬이 별로 사용되지 않았던 거 처럼


    앞으로 10년 후에는 어떻게 될 지 알 수 없겠죠

    -1
  • anydog
    769
    2021-01-02 20:45:46

    결국 개발자의 취향문제입니다.

    데이터 사이언스 하는 쪽에서도 파이썬이 느린건 충분히 이해하고있고

    사람 뽑을때부터 파이썬에서의 연산 가속을 위해 cFFI나 ctypes 경험이 있는 사람을 선호하기도 합니다.

    말씀하신건 누구나 인정하는 사실이고, 남은건 개발자나 기획자의 선택밖에 없습니다.

    아직까지는 라이브러리와 문서화가 잘 되어있는 파이썬쪽을 더 선호할 것 같긴 합니다.


    그리고 딥러닝에서 파이썬은 프론트엔드에 불과합니다.

    어차피 코어는 모두 C/C++입니다.

    줄리아라고 다를건 없을 겁니다.

  • totalrecall
    21
    2021-01-02 20:57:06

    저는 전산전공이 아니고 통계학이라서

    IT에 밝지는 못하지만

    Julia는 내부 코드가 전부 Julia로 되어 있다고 하네요

    JIT, LLVM 기반이라고 들었습니다

    C/C++ 부분은 아마 없을 겁니다


    파이썬은 C/C++로 되어 있겠죠

  • totalrecall
    21
    2021-01-02 21:06:28

    파이썬은

    indent 문법 대신에

    { } 또는 begin ... end 문법으로 바뀐

    Python2가 나와야 한다고 생각합니다


    그러면 Python2를 적극적으로 사용할 생각이 있습니다

  • frente
    94
    2021-01-02 21:09:11

    파이썬의 한계나 단점이 당연히 여러가지가 있지만, 

    언급하신 문제들은 동의하기 어렵네요. 

    더닝 크루거 곡선, 내 자신감의 위치는


  • anydog
    769
    2021-01-02 21:19:16

    이게 논쟁할 만한 여지가 있는건진 모르겠지만 라이브러리를 어떻게 만드느냐는 별개의 문제입니다.

    줄리아라고 모든 라이브러리가 다 줄리아로 만들지도 않고 그렇게 할 이유도 없습니다.

    참고로 줄리아에서도 딥러닝 프레임워크의 양대산맥인 tf와 pytorch는 wrapper로 개발됩니다. (코어는 C/C++입니다)


    제가 말씀드린 핵심은 줄리아의 장점은 많고 명확하지만 그게 반드시 파이썬을 대체할 이유가 되는 것은 아니라는 겁니다.

    현업에 종사하면서도 줄리아를 사용하려는 시도는 주변에도 많이 있었습니다.

    다만 아직까지 파이썬을 사용하는덴 명백한 효율상의 그리고 금전적인 이유가 있습니다.

    말씀하시는 건 알겠지만 어조가 조금 강하지 않으셨나 싶습니다.

  • totalrecall
    21
    2021-01-02 21:22:47 작성 2021-01-02 21:23:47 수정됨

    Julia로 pytorch 연동이 되나요? 그건 몰랐는데요

    알아 보겠습니다^^


    그리고 말씀 드렸듯이, 파이썬의 indent 문제로 난감한 경우가 자주 있어서

    그래서 Python을 싫어하게 되었습니다^^

  • 최심바
    305
    2021-01-02 22:54:26

    1번 문제에 이렇게 민감하실 필요가 있나 싶습니다. 조금 과한 듯 싶은데요.

    사용하고 계신 Jupyter도 일괄 indent나 format기능을 지원할 텐데요?


    그리고 복사 하시려는 코드가 어떤 상태(?)의 코드인 지는 모르겠습니다만..

    동일한 파이썬 코드면 indent는 정상적으로 다 먹힌 상태 일텐데, 왜 일일이 다 수정해야 하는지가 조금 의문입니다.


    python이 indent 규약이 있긴 하지만, 어짜피 다 코딩하면서 기본적으로 신경써야 하는 것들 입니다.

    설마 코딩 컨벤션의 기본인 indent 조차 무시하고 개발 중이신건 아니죠?

  • totalrecall
    21
    2021-01-02 23:05:39

    저의 생각은

    indentation은 가독성 차원에서 다루어야지

    그 자체가 subroutine을 구분하는 문법이 되어서는 안된다고 봅니다


    Julia 써 보니까 subroutine 구성하기 좋습니다

    전부 begin ... end 스타일로 되어 있습니다

    가독성 좋고 문법도 간단합니다

    다만 고급 과정 들어가면  문법이 좀 복잡해지더군요

  • totalrecall
    21
    2021-01-02 23:07:49 작성 2021-01-02 23:18:09 수정됨

    jupyter notebook에서 다른 사람 소스 붙여 넣기 하면

    자동 인덴트 처리가 되나요?

    안되는 걸로 알고 있는데요


    다른 사람 소스를 붙여 넣기 할 때, indent가 안 먹어서

    에러 나고 동작 안하는 경우가 자주 있는데요

    아마 encoding 문제인 거 같습니다

    tab, space가 이상하게 서로 안 맞더군요

    그 뿐만 아니라. 함수 내부에 enter키 (빈 라인)이 있어도

    문법 오류가 나더군요



  • 난나나난
    136
    2021-01-03 00:54:54

    제가 알기로는 세상 어떤 언어도 인터넷도 안되고 라이브러리도 설치할 수 없는 극한 상황을 염두에 두고 만들지 않습니다. 그런 상황에서 불편해서 쓰레기 문법이라니 어처구니가 없어서 한숨이 나올 정도네요.

  • request
    35
    2021-01-03 01:37:29

    용도에 맞게 언어를 선택하시면 되는 문제인 듯 합니다.

    글쓴이분이 말한 단점은, 파이썬의 장점으로 설명할 수도 있습니다.

    1. 들여쓰기: 중괄호보다 좋은 가독성과 일관성 때문에 도입되었습니다.
    2. 속도: 파이썬은 속도와 편리함의 트레이프-오프에서 편리함을 취한 케이스입니다. 예를 들어, 파이썬의 정수 자료형은 arbitrary precision 방식으로 인해 오버플로우가 발생하지 않아 관리할 포인트가 줄어들게 되죠. 
    일반적으로 퍼포먼스에 민감한 경우 파이썬이 적합한 언어는 아닙니다. numpy 라이브러리를 이용해서 그런 퍼포먼스도 극복하고 있지만요. 참고로 numpy core는 최적화된 C 코드로 구현되었기 때문에 매우 빠릅니다.

  • allinux
    1k
    2021-01-03 02:26:46

    devpia 에서 보던 분 같군요.(devpia 는 현재 문 닫음)

    1. indent 문제는 불평불만은 할 수 있겠으나 파이썬의 문법이라 우회할 방법이 없습니다. 

    2. 저도 파이썬을 오랫동안 즐겨 사용합니다만 현재 컴퓨팅 환경에서 그렇게 적합한 언어나 환경은 아니라고 생각합니다. 멀티코어 시대에 GIL 에 묶여있는 VM이 그렇고 jit 도 없어서 성능도 문제입니다. 단점이 뚜렷한만큼 차세대 언어들에 의해 시장의 파이를 뺏길 가능성도 농후합니다. 일예로 GO언어가 발표되고 기존의 파이썬 개발자들이 많이 넘어갔었습니다. 파이썬 개발자 입장에서는 GO의 goroutine, 성능, 단일 바이너리로 빌드 이런것들이 굉장히 매력적이니까요. 더구나 GO도 문법이 굉장히 간결하다는 점도 한몫했겠지요

    파이썬은 레거시 코드들이 원체 많아서 짧은 시간내에 사라지거나 하진 않을 겁니다. 사용자도 계속 유입될거고 기존 사용자들의 GO나 JULIA 등의 언어로 이탈도 많을 겁니다. python vm을 현대에 맞게 고치려면 기존의 레거시 코드를 포기해야 하는데...이미 python 3 때 경험해봤죠...쉽지 않은 문제입니다. 

  • fender
    20k
    2021-01-03 06:15:18 작성 2021-01-03 11:03:45 수정됨

    개인적으로 파이썬을 끔찍하게 싫어하는데 본문의 이유와 겹치는 부분이 별로 없는 것이 신기하네요. 본문이 틀렸다기 보단 언어에 대한 선호의 문제엔 다양한 기준이 있다는 걸 느끼게 되는 예인 것 같습니다.

    전 들여쓰기에 대해선 큰 불만은 없습니다만 그렇다고 그게 파이썬의 장점이란 주장에 딱히 납득을 하는 편도 아닙니다.

    중괄호를 생략해봐야 꼴랑 두 글자를 줄이는 것인데, 파이썬 문법은 그보다 훨씬 장황한 코드를 강제하는 구석이 많으니까요.

    람다 한 번 쓸 때 마다 "lambda:"를 꼬박 꼬박 붙여야 한다던가, 삼항식을 if else로 써야 한다던가, 표현식 개념이 없어서 임시 변수와 return을 명시 해야 한다던가 하는 부분 이야기 입니다.

    반면 괄호는 가독성 면에서 들여 쓰기 보단 조금 나은 점도 있으니 파이썬의 선택이 장점이 아니라는 점에는 어느 정도 동의합니다.

    반복문의 경우 저는 성능도 그렇지만 무엇보다 함수형 관련 지원이 끔찍하게 장황한 점부터 고쳐야 한다고 봅니다.

    예를들어 스칼라 같은 언어로 customers.filter(_.age > 30).map(_.name)으로 끝날 문제를 파이썬으로 오면 이렇게 됩니다:

    map(lambda c: c.name, filter(lambda c2: c2.age > 30, customers))

    고작 filter, map 한 번 씩 했다고 가독성이 저렇게 처참하게 떨어져 버렸습니다.

    for-comprehension으로 개선할 수 있다고 말씀하실 분이 계시겠지만, 위는 예시일 뿐 보통 filter나 map을 사용하면 저 보다 훨씬 복잡한 체인을 구성하는 경우는 흔하고, 그런 걸 파이썬으로 표현하면 보기에도 끔찍한 코드가 됩니다.

    무엇보다 파이썬은 람다를 쓰는 순간 타입 정보가 날아가 버리기 때문에 typing이고 mypy고 IDE 자동완성이고 다 무용지물이 되버립니다.

    그리고 위의 예시에 깨알 같이 "c2"로 인자를 바꾸어 쓴 부분이 있는데, 메서드 체이닝을 안 하고 중첩을 해버리니 스코프가 겹쳐서 저런 문제가 생깁니다. 여기에 파이썬 특유의 이상한 스코프 규칙까지 더하면 저 구문 윗 쪽 어딘가의 if 문 안에서 c 변수를 썼다해도 IDE에선 인자의 shadowing에 대한 경고가 발생합니다.

    flatMap/bind에 대한 문법도 존재하지 않기 때문에 스칼라나 C# 처럼 간결한 표현이 불가능합니다.

    파이썬은 분명 배우기 쉽고 방대한 생태계가 존재한다는 장점이 있는 언어이고, 그런 이유로 입문용, 또는 머신러닝이나 데이터 사이언스 같이 스크립트가 보조적인 역할을 하는 분야의 경우 장점이 극대화 될 수 있는 것 같습니다.

    하지만 파이썬으로 무언가 복잡한 걸 설계하고 유지보수해야 한다면 그보다 더 끔찍한 언어도 드물 것 같습니다.

    어쩔 수 없이 계속 파이썬을 써야하는 입장에서 제발 다른 대안이 나왔으면 좋겠다는 생각을 매일 하고 있습니다.

  • totalrecall
    21
    2021-01-03 14:25:41
    allinux 님, fender님


    좋은 지적 및  설명 감사 드립니다^^


    Julia가 앞으로 5년 후에
    데이터 전처리, 머신 러닝, 딥 러닝 분야에
    널리 사용되기를 바라고 있습니다


    ETRI같은 연구소에서 Julia를 수치 분석 도구로
    도입한다면
    우리나라 공공기관, 사기업 프로젝트에
    Julia가 쓰일 날도 머지 않아 올 것으로 기대하고 있습니다


  • 로그인을 하시면 댓글을 등록할 수 있습니다.