웹 서핑을 하다 흥미로운 주제를 발견하여 번역 글을 올립니다.
해당 글은 Rhea Moutafis의 Why Python is not the programming language of the future를 번역한 글입니다.
0. 앞선 글
최근 몇 년간 파이썬은 아주 핫한 언어가 아닐 수 없습니다. 직접 사용도 해보고 주변 사람들에게서 전해 들은 내용도 있으며 심지어 요즘 대학 강의에서도 가장 처음 배우는 언어 중 하나로 꼽히기도 한답니다.
실제로 스택 오버 플로우의 2015~2019년간 조사한 프로그래밍 언어의 인기도를 봐 보겠습니다.
차트에서 보듯이 C/C++, JAVA와 박빙의 승부를 벌이고 있습니다. 이러한 상황에서 왜 파이썬은 미래의 언어가 아니라고 한 걸까요? 원글의 저자는 글 제목에 "몇 년은 더 수요가 많을지라도"를 덧붙였습니다. 이 대세 언어가 왜 미래의 언어가 될 순 없는지 약간은 자극적인 제목의 글에 끌려 읽은 글의 내용을 공유해보고자 합니다.
1. 소개
프로그래밍 커뮤니티가 파이썬을 평가하는 데에는 수십 년이 걸렸습니다. 그러나 2010년 초부터 인기가 급격히 상승하며 C, C#, JAVA, JavaScript의 인기를 뛰어넘었습니다.
그런데 이러한 트렌드가 언제까지 지속될까요? 파이썬은 언제 그리고 왜 다른 언어로 교체될까요?
파이썬 세계의 정확한 만료일을 정하는 것은 공상 과학만큼 너무나도 추측일 뿐입니다. 그 대신에 현재 파이썬의 인기를 높이는 장점과 미래에 인기를 깨뜨릴 약점에 대해서 평가할 것입니다.
2. 현재 파이썬이 인기 있는 이유
파이썬의 성공은 플랫폼의 포스트에 있는 태그의 수를 측정하는 스택 오버플로우 트렌드에 반영됩니다. 스택 오버플로우의 크기로 볼 때 이는 언어 인기에 꽤나 좋은 지표입니다.
R은 수년간 정체되어 왔으며 다른 많은 언어들은 꾸준히 감소세에 있는 반면에 파이썬의 성장은 막을 수 없어 보입니다. 모든 스택 오버플로우 질문 중 거의 14%에 파이썬 태그가 붙어있으며 이러한 트렌드는 증가하는 추세입니다. 여기에는 몇 가지 이유가 있습니다.
2.1. 파이썬은 오래되었습니다.
파이썬은 1990년대부터 존재해 왔습니다. 그것은 성장에 충분한 시간이었을 뿐 아니라 대규모의 지원 커뮤니티까지 확보하였습니다.
따라서 파이썬으로 코딩하는 동안 문제가 발생하면 구글 검색 한 번으로 문제를 해결할 가능성이 높습니다. 누가 이미 문제를 겪고 문제에 대해 도움이 되는 무언가를 적어 놨을 것이기 때문입니다.
2.2. 파이썬은 초보자가 배우기 좋습니다.
수십 년은 프로그래머들이 뛰어난 튜토리얼을 만들 시간이었습니다. 그 외에도 파이썬의 문법은 사람이 읽기 쉽습니다.
시작을 위해 데이터 유형을 지정할 필요가 없습니다. 단시 변수를 선언하기만 하면 됩니다. 파이썬은 콘텍스트에서 그것이 integer인지, float인지, boolean인지 혹은 또 다른 것인지 알아서 이해합니다. 이것은 초보자에게 매우 큰 장점입니다. C++로 프로그래밍한 적이 있다면 float를 int로 바꿨을 때 프로그램이 컴파일되지 않는 게 얼마나 실망스러운지 알 것입니다.
그리고 파이썬과 C++ 코드를 비교해가며 읽어본 적이 있다면 파이썬이 얼마나 이해하기 쉬운지 알 수 있을 것입니다. C++는 영어를 염두하고 설계되었지만, 파이썬 코드와 비교하면 읽기에 더 어렵습니다.
2.3. 파이썬은 다목적으로 사용할 수 있습니다.
파이썬은 오랫동안 사용되어 왔기 때문에 개발자들은 모든 목적에 맞는 패키지를 만들었습니다. 요즘에는 거의 모든 것들을 위한 패키지를 찾을 수 있습니다.
숫자, 벡터, 행렬을 다루고 싶습니까? NumPy가 있습니다.
테크 혹은 엔지니어링에 대한 계산을 원합니까? SciPy를 사용하시면 됩니다.
데이터를 다루거나 분석하는데 관심이 있습니까? Pandas로 가십시오.
인공지능을 시작하고 싶습니까? 왜 Scikit-Learn을 사용하지 않나요?
관리하려는 계산 작업이 무엇이든 그것을 위한 파이썬 패키지가 있을 수 있습니다. 이것은 지난 몇 년간 머신러닝의 수요가 급증할 때 파이썬 최근 개발 언어에서 최고에 머무르게 하였습니다.
3. 파이썬의 단점과 치명적인지에 대한 여부.
이전의 정교함으로 완성된 작업으로 인해 파이썬이 앞으로 몇 년간은 계속될 것으로 상상할 수 있습니다. 그러나 모든 기술이 그렇듯이 파이썬에는 약점이 있습니다. 가장 중요한 결점들을 하나씩 살펴본 후 이것이 치명적인가를 평가하겠습니다.
3.1. 속도
파이썬은 느립니다. 진짜 느려요. 파이썬으로 작업을 완료하는데 드는 시간은 다른 언어보다 평균적으로 2~10배나 더 필요합니다.
느린 이유는 여러 가지가 있습니다. 그중 하나는 타입이 동적으로 정해진다는 것입니다. 앞서 적은 내용 중에 다른 언어처럼 데이터 유형을 지정할 필요가 없다는 것을 기억하시나요? 이건 프로그램이 어떤 경우에도 동작하는 변수에 대해 충분한 공간을 점유해야 하기 때문에 많은 메모리를 사용해야 함을 의미합니다. 그리고 많은 메모리 사용은 많은 컴퓨팅 시간으로 이어집니다.
또 다른 이유는 파이썬이 한 번에 하나의 작업만 수행할 수 있기 때문입니다. 이는 유연한 데이터 타입의 결과입니다. 파이썬은 각 변수에 하나의 데이터 타입만 있는 것을 보장해야 하며 병렬 프로세스는 이를 망칠 수 있습니다.
이에 비해 일반적인 웹 브라우저는 열두 개의 다른 스레드를 동시에 실행할 수 있습니다. 그리고 몇몇 다른 이론들 또한 있습니다. 그러나 날이 지나면 속도 문제는 중요하지 않습니다. 컴퓨터와 서버는 너무 저렴해져서 초단위 미만에 대해 이야기하고 있습니다. 그리고 엔드유저는 앱이 0.001초 또는 0.01초 만에 로드되는지 전혀 신경 쓰지 않습니다.
3.2. 범위(Scope)
원래 파이썬은 동적으로 범위가 지정되었습니다. 이건 기본적으로 모든 표현식을 평가하기 위해 컴파일러가 먼저 현재 플록을 검색한 뒤 연속적으로 모든 호출 함수를 검색한다는 걸 의미합니다.
동적 범위 지정의 문제점은 모든 표현식이 모든 가능한 상황에서 테스트되어야 한다는 점입니다. 그렇기 때문에 대부분의 모던 프로그래밍 언어는 정적 범위를 사용합니다.
파이썬은 정적 범위로 전환을 시도하였으나 실패하였습니다. 일반적으로 내부 범위(예를 들면 함수 내의 함수)는 외부 범위를 보고 외부 범위를 변경할 수 있습니다. 파이썬에서 내부 범위는 외부 범위를 볼 순 있지만 외부 범위를 변경할 순 없습니다. 이것은 많은 혼란을 초래합니다.
3.3. 람다
파이썬의 모든 유연성에도 불구하고 람다의 사용은 제한적입니다. 람다는 파이썬에서 표현식(Expression)에서만 사용될 수 있고 구문(Statement)에선 사용할 수 없습니다.
반면에 변수 선언과 구문은 항상 구문입니다. 이는 람다를 변수 선언에 사용할 수 없음을 의미합니다. 표현식과 구문의 구별은 약간 멋대로이며 다른 언어에서는 발생하지 않습니다.
3.4. 공백
파이썬에서 다른 레벨의 코드를 공백과 들여 쓰기를 사용하여 나타냅니다. 이는 시각적으로 매력적이고 직관적으로 이해할 수 있도록 만듭니다.
C++와 같은 다른 언어에서는 중괄호와 세미콜론에 의존합니다. 이는 시작적으로 매력적이지 않고 초보자에게 친숙하지 않지만 코드를 유지 관리하기 훨씬 쉽습니다. 대규모 프로젝트에서 이는 매우 유용합니다. Haskell과 같은 최신 언어는 이러한 문제를 다음과 같이 해결합니다: 공백에 의존하지만 공백을 대체할 문법을 제공합니다.
3.5. 모바일 개발
데스트톱에서 스마트폰으로의 움직임이 보임에 따라 우리는 모바일 소프트웨어를 구축하기 위해 견고한 언어가 필요합니다.
하지만 많은 모바일 앱들이 파이썬으로 개발되지 않습니다. 그렇다고 그것이 알 수 없다는 의미는 아닙니다. 모바일 앱 개발을 위해 파이썬은 Kivy라는 패키지를 제공합니다.
그러나 파이썬은 모바일을 염두하고 만들어지지 않았습니다. 그래서 기본적인 작업애 대해서는 적합한 결과를 얻을 수도 있지만 모바일 앱 개발을 위해 만들어진 언어를 사용하는 것이 가장 좋습니다. 모바일을 위해 널리 사용하는 프로그래밍 프레임워크에는 React Native, Flutter, Iconic, Cordova가 있습니다.
명백히 랩톱과 데스크톱 컴퓨터는 다가울 수년간 존재할 것입니다. 그러나 모바일은 오랫동안 데스크톱 트래픽을 뛰어넘었기 때문에 파이썬을 배우는 것 만으로는 숙달된 만능 개발자가 되기에는 부족합니다.
3.6. 런타임 에러
파이썬 스크립트는 먼저 컴파일된 뒤에 실행되는 것이 아닙니다. 그 대신 실행할 때마다 컴파일됩니다. 그러므로 런타임에 코딩 에러가 나타납니다. 이러한 점은 낮은 성능, 시간 소비, 많은 테스트를 요구하게 됩니다.
테스팅은 초보자에게 많은 것을 가르쳐 주기 때문에 초보자들에게는 좋습니다. 그러나 숙련된 개발자에게는 파이썬으로 된 복잡한 프로그램을 디버그 해야 하기 때문에 잘못된 결과를 만들게 합니다.
4. 언제 그리고 무엇이 미래에 파이썬을 대체할 수 있을까.
프로그래밍 언어 시장에는 몇 개의 새로운 경쟁자가 나타났습니다:
- Rust는 파이썬이 가진 것과 동일한 종류의 안전성을 제공합니다 - 실수로 덮어쓸 수 있는 변수는 존재하지 않습니다. 하지만 Rust는 소유권과 빌리는 개념으로 성능 문제를 해결합니다. 스택 오버플로우 인사이트에 따르면 지난 몇 년간 가장 사랑받는 프로그래밍 언어이기도 합니다.
- Go는 파이썬과 같이 초보자에게 좋습니다. 그리고 심지어 코드를 유지보수 하기가 매우 간단합니다. 재미있는 점은 Go 개발자는 시장에서 가장 많은 보수를 받는 프로그래머 중 하나입니다.
- Julia는 파이썬과 정면에서 경쟁하는 매우 새로운 언어입니다. Julia는 매우 큰 기술적 계산의 간극을 채웁니다: 일반적으로 파이썬 또는 Matlab을 사용하고 모든 것을 C++ 라이브러리로 패치했습니다. 이제 Julia 하나로 다른 두 언어로 저글링을 할 필요가 없어졌습니다.
시장에 다른 언어들이 존재하지만 Rust, Go, Jilia는 파이썬을 조금만 수정하는 언어들입니다. 이러한 언어들은 모두 아직 오지 않은 기술들에 있어서 뛰어납니다. 특히 인공지능 분야에서 가장 주목할만합니다. 스택 오버플로우 태그의 수에 반영된 것처럼 아직 시장 점유율은 낮지만 이러한 언어들 모두의 트렌드는 상승할 것이 명확합니다.
어디에서나 인기 있는 파이썬의 인기를 볼 때, 새로운 언어 중 하나가 파이썬을 대체할 때 까지는 분명히 5년이 걸릴 것이며 심지어는 10년이 걸릴 수도 있습니다.
Rust, Go, Julia 또는 미래의 새로운 언어 중 어떤 것이 파이썬을 대체할 것인지는 이 시점에서 말하기 어렵습니다. 그러나 파이썬 아키텍처에서 근본적인 성능 문제를 생각해 본다면 그중 하나는 반드시 파이썬을 대체할 것입니다.
5. 마무리
글을 읽으면서, 읽고 나서 여러 의문점이 떠올랐습니다. 아니나 다를까 이 글에는 분명히 논쟁의 여지가 있습니다. 원문의 댓글창에서도 많은 의견들이 올라오고 있습니다.
원 글은 올라온 지 2일 만에 8600여 개의 박수를 받았고 댓글도 120여 개에 달합니다. 그만큼 파이썬에 대한 인기와 그 문제점에 대해 명확히 지적하고 있음을 느낄 수 있습니다.
이 글이 100% 완벽하고 비판의 여지가 없다고 생각하지는 않습니다. 읽고 계시는 분들도 자신이 파이썬을 바라보는 시각과 느끼고 계신 단점이 있을 테고 파이썬을 사용하는 장점 또한 당연히 갖고 계실 겁니다. 다만 이러한 글을 읽고 새로운 시각으로 파이썬을 보게 되거나 새로운 영감이 떠오르셨으면 좋겠습니다.
'Programming' 카테고리의 다른 글
[LeetCode] [Medium] [JS] 1315. Sum of Nodes with Even-Valued Grandparent (0) | 2020.04.03 |
---|---|
[LeetCode] [Easy] [JS] 1108. Defanging an IP Address (0) | 2020.04.03 |
[GraphQL] GraphQL이란 - 2. GraphQL의 구조 (0) | 2020.03.26 |
[GraphQL] GraphQL이란 - 1. GrapgQL 소개와 REST API와의 비교. (0) | 2020.03.26 |
[SqlDeveloper] DATE에 시간 보이도록 바꾸기 (0) | 2020.03.03 |