※ 「Why Python is not the programming language of the future」을 각색하여 작성되었습니다.
지난 몇 년 동안 파이썬에 대한 수요가 급격하게 증가하면서, 그 인기가 식을 줄 모르고 있습니다. PYPL에서는 2019년의 프로그래밍 언어 1순위로 파이썬을 선정했고, 스택오버플로(StackOverflow)도 개발자들을 대상으로 한 설문조사에 따라 2번째로 인기 있는 언어로 파이썬을 손꼽았는데요. 2009년부터 2020년까지 파이썬, C#, C++, 자바, 자바스크립트, R의 인기를 나타낸 도표를 보면 2018년부터 파이썬이 계속해서 최고의 위치를 차지하고 있는 것을 볼 수 있습니다.
R은 지난 몇 년 동안 정체되어 있습니다. 다른 많은 언어들도 꾸준히 감소하는 추세에 있지요. 그래서 파이썬의 오름세는 막을 수 없는 것처럼 보입니다. 스택오버플로 질문 게시판에 올라온 14%의 글에는 ‘파이썬’이라는 태그가 달려 있습니다. 이 트렌드는 계속해서 지속되고 있지요.
그렇다면 지금의 파이썬을 인기 언어로 만든 요인은 무엇일까요? 그 요인으로 몇 가지를 꼽아 보겠습니다.
오래되었다
파이썬은 90년대부터 존재해왔습니다. 이 말은 단순히 파이썬이 개발 언어로 성장하기 위한 시간이 충분했다는 것만을 의미하지는 않습니다. 거대한 커뮤니티에서 파이썬에 힘을 실어주기도 했다는 것을 뜻하죠. 파이썬으로 코딩하다 문제가 생기면, 구글 검색 한 번으로 금방 해결할 수 있을 만큼 관련 정보가 방대합니다. 개발자들은 자신이 마주했던 문제와 해결 방법을 공유했고, 그 과정에서 다양한 데이터가 축적되며 사용자가 늘어났습니다. 이 선순환은 파이썬의 성장을 가져왔죠.
사용자 친화적이다
파이썬의 문법은 사람이 읽기에 매우 편하다는 장점을 가지고 있습니다. 우선, 데이터 타입을 지정할 필요가 없습니다. 그저 변수를 선언하기만 하면 됩니다. 그러면 파이썬은 변수의 데이터 타입이 정수(integer)인지, 부동소수점(float)인지, 불(boolean)인지, 아니면 다른 것인지 등등을 문맥을 파악해서 이해합니다. 이 점이 초보자들에게는 엄청난 매력이죠. 여러분이 만약 C++로 프로그래밍을 해본 적이 있다면, 변수의 데이터 타입을 부동소수점에서 정수로만 바꾸어도 이곳저곳에서 컴파일 에러가 생기는 경험을 해보셨을 것입니다.
파이썬과 C++의 코드를 나란히 놓고 읽어본 적이 있다면, 파이썬이 얼마나 이해하기 쉬운 지도 이해하실 겁니다. C++는 영어를 염두에 두고 만들어진 언어임에도 불구하고, 파이썬의 코드에 비하면 도무지 해석하기가 쉽지 않습니다.
다재다능하다
오랜 세월 동안 개발자들은 수없이 많은 용도로 사용할 수 있는 패키지를 만들었습니다. 그래서 거의 모든 것을 만들 수 있는 패키지를 찾을 수 있습니다.
- 숫자와 벡터, 행렬을 완벽하게 정복하고 싶다면? 넘파이(NumPy)가 여러분을 도와줄 것입니다.
- 과학기술과 공학을 위한 복잡한 계산을 원한다면? 사이파이(SciPy)를 써보세요.
- 빅데이터 조작과 분석을 해야 한다면? 판다스(Pandas)를 사용해보세요.
- 인공지능을 시작해보고 싶다면? 사이킷런(Scikit-Lean)을 사용해볼 수 있습니다.
여러분이 컴퓨터를 이용해서 어떤 작업을 하고 싶든, 그것을 위한 파이썬 패키지가 어딘가에는 있을 것입니다. 최근 몇 년 동안 머신러닝(Machine Learning)이 급증하고 있는 것에서 볼 수 있듯이 말입니다.
앞에서 자세히 살펴본 내용을 기반으로, 여러분은 파이썬이 앞으로도 오래오래 정상의 자리에 머물 것이라 생각할 겁니다. 그러나 다른 모든 기술과 마찬가지로, 파이썬에도 약점은 있습니다. 파이썬의 주요한 결점들을 하나씩 살펴보고, 이것들이 얼마나 치명적인지 평가해보세요.
속도
파이썬은 느립니다. 사실 매우 느립니다. 다른 언어들보다 파이썬을 사용해서 업무를 처리하면 평균적으로 2-10배는 더 오랜 시간이 걸립니다. 여기에는 여러 가지 이유가 있습니다. 그중 하나는 ‘동적인 데이터 타입’입니다. 다른 언어에서처럼 변수의 데이터 타입을 지정할 필요가 없다는 점을 생각해보세요. 이는 프로그램이 변수의 데이터 타입에 관계없이 작동할 수 있게 하기 위해 훨씬 더 많은 메모리를 필요로 한다는 것을 의미하는데요. 메모리를 많이 사용하게 되면 결국 컴퓨팅 시간이 오래 걸리게 됩니다.
또 하나의 이유는 파이썬이 한 번에 오직 한 개의 작업만을 실행할 수 있다는 것입니다. 이는 파이썬의 유연한 데이터 타입 때문입니다. 파이썬은 각각의 변수가 오직 하나의 데이터 타입만 가지고 있어야 합니다. 만약 병력적인 다른 프로세스가 있다면 엉망이 될 수도 있습니다.
하지만 속도는 어떻게 보면 전혀 문제가 되지 않을 수도 있습니다. 컴퓨터와 서버가 아주 저렴해졌기도 하고, 우리는 지금 1초도 안 걸리는 속도를 두고 이야기하고 있기 때문입니다. 그리고 최종 사용자들도 앱의 로딩 시간이 0.001초인지 0.01초인지에 대해서는 거의 신경 쓰지 않습니다.
변수의 범위
원래 파이썬에서는 변수의 범위가 아주 넓었습니다. 이는 기본적으로 표현식을 평가하기 위해서 컴파일러가 우선 현재의 블록을 검색한 다음, 그곳에서 호출하는 모든 함수들을 차례로 검색한다는 것을 의미합니다. 이러한 동적인 범위의 문제는 모든 표현식들이 가능한 모든 맥락에서 검사 되어야 한다는 것이며, 이는 상당히 지루한 작업입니다. 그래서 대부분의 현대적인 프로그래밍 언어들이 정적인(stastic) 변수 범위를 사용하고 있는 이유입니다.
파이썬도 정적인 범위로 전환하려고 시도했지만, 실패하고 말았습니다. 일반적으로 내부(inner) 범위에서는 외부에서 선언된 변수를 보고 그 값을 바꿀 수도 있습니다. 파이썬에서는 외부의 변수를 참조할 수는 있지만, 그 값을 바꿀 수는 없습니다. 이것이 많은 혼란을 초래하죠.
람다(Lambdas)
파이썬의 유연성에도 불구하고, 람다 사용에 있어서는 다소 제한적입니다. 파이썬에서 람다는 표현식(expression)이 될 수 있을 뿐 구문(statement)이 될 수는 없습니다. 반면에 변수는 선언하든 구문으로 표현하든 언제나 구문입니다. 이는 람다가 변수에서는 사용될 수 없다는 것을 의미합니다. 파이썬에서 이렇게 표현식과 구문을 나누는 것은 다소 자의적이며, 다른 언어에서는 보이지 않는 특징입니다.
공백
공백은 코드를 읽기 쉽게 만들어 주지만, 유지 보수는 어렵게 만듭니다. 파이썬에서는 공백과 들여 쓰기를 사용해서 코드의 레벨을 구분합니다. 따라서 시각적으로도 보기 좋고 직관적이어서 이해하기 쉽죠. 다른 언어들을 예로 들면, C++은 중괄호”{ }”와 세미콜론”;”을 사용해야 합니다. 이것은 시각적으로도 복잡하고 초보자들이 보기에도 쉽지 않지만, 코드를 유지 보수하기에는 훨씬 더 좋습니다. 대형 프로젝트에서는 이것이 훨씬 더 유용합니다.
하스켈(Haskell)과 같은 새로운 언어에서는 이런 문제를 해결하고 있습니다. 이런 새로운 언어들도 공백에 의존하고 있기는 하지만, 이런 단점을 커버할 수 있는 다른 대체적인 문법도 제공하고 있습니다.
모바일 개발
데스크톱에서부터 스마트폰으로의 전환이 일어나고 있지만 파이썬으로 개발되고 있는 모바일 앱은 많지 않습니다. 그렇다고 불가능하다는 것은 아닙니다. 파이썬으로 앱을 개발하기 위한 키비(Kivy)라는 패키지가 있기 때문입니다.
하지만 파이썬은 모바일을 염두에 두고 만들어진 언어가 아닙니다. 그래서 기본적인 기능들을 만들어낼 수는 있겠지만, 모바일 앱 개발을 할 거라면 용도에 맞는 다른 언어를 사용하는 것이 좋습니다. 모바일 용도로 널리 사용되는 프로그래밍 프레임워크로는 리액트 네이티브(React Native), 플러터(Flutter), 아이코닉(Iconic), 코르도바(Cordova) 등이 있습니다.
런타임 에러(Runtime Errors)
파이썬 스크립트를 실행하려면 먼저 컴파일할 필요가 없습니다. 대신에 실행될 때마다 매번 컴파일을 하기 때문에, 혹시나 코딩 에러가 있다고 하더라도 런타임에서 나타나게 됩니다. 이는 성능 저하와 시간 소모로 이어지며, 수많은 테스트가 필요합니다. 정말 많은 테스트를 해야 하기 때문에 초보자들에게는 좋을 수도 있지만 노련한 개발자들에게는 파이썬에서 복잡한 프로그램을 디버깅(debug)한다는 것은 매우 번거로운 일이 아닐 수 없죠.
파이썬을 대체할 수 있는 것은 무엇일까?
- 러스트(Rust)는 파이썬만큼의 안전성을 제공하며, 어떤 변수도 우연히 중복해서 작성되지 않습니다. 하지만 러스트는 소유(ownership)와 차용(borrowing)이라는 개념으로 성능과 관련된 이슈를 해결하고 있습니다. 그리고 스택오버플로 인사이트(insight)에 따르면, 러스트는 지난 몇 년 동안 가장 사랑받고 있는 프로그래밍 언어라고 합니다.
- 고(Go)도 파이썬처럼 초보자에게 좋은 언어입니다. 그리고 아주 간단해서 코드를 유지 보수하는 일도 훨씬 더 쉽습니다. 재미있는 점은 고(GO) 개발자들이 취업시장에서 가장 많은 연봉을 받는다는 것입니다.
- 줄리아(Julia)는 파이썬과 정면으로 경쟁하는 아주 새로운 언어입니다. 대규모로 기술적인 컴퓨팅에서의 단점을 메워주는데요. 줄리아가 아니라면 보통은 파이썬이나 매트랩(MatLab)을 사용해서 C++ 라이브러리로 완전히 패치했을 텐데, 그 자체가 대규모의 작업이 필요한 것입니다.
시장에는 다른 언어들도 있기는 하지만, 파이썬의 약점을 보완할 수 있는 언어들은 러스트, 고, 줄리아입니다. 이 언어들은 아직 발전하고 있는 기술들, 특히 인공지능(AI)에서 뛰어난 활약을 보이고 있습니다. 스택오버플로의 태그 개수에 반영되어 있는 것처럼, 이들의 시장 점유율은 아직 미미하기는 하지만, 모두 뚜렷한 성장세를 보이고 있습니다.
어디에서나 볼 수 있는 파이썬의 인기를 감안할 때, 적어도 앞으로 5년 동안, 어쩌면 2020년대가 끝날 때까지도 새로운 언어가 파이썬을 대체하기는 쉽지 않습니다. 지금은 미래의 새로운 언어들 중에서 어떤 것이 파이썬을 대체할 수 있을지에 대해서 명확하게 말하기 힘들기 때문에 앞으로도 더욱 지켜봐야 할 것입니다.