저자: 카메론 레어드(Cameron Laird), 역 전순재
이전에 파이썬으로 프로그램해 본적이 없는데 지금이라도 프로그램을 시작해야 하는가?
물론이다. 테크놀로지 경주에 참여하려고 한다면 프로그래밍은 확실한 승리를 보장하는 승부수이다. 파이썬 프로그래밍 언어가 주는 혜택은 너무나 많은데 비해 비용은 너무나 적게 들기 때문에 여러분은 거의 확실히 승리할 것이기 때문이다.
파이썬의 힘은 그의 범용성에 있다. 일단 파이썬을 익혀만 두면 거의 모든 프로그래밍에 파이썬을 사용할 수 있다는 것을 알게 될 것이다. 언론 보도 때문에 여러분은 파이썬이 ‘단지 웹을 위한 스크립트 언어’이거나 또는 교육기관에서만 사용하는 언어라고 생각할 수도 있다. 그렇지만 파이썬은 당연히 그러한 역할도 훌륭하게 소화해낼 뿐만 아니라, 그 보다도 더 많은 역할을 한다는 것을 알 수 있다. 무엇보다도, 파이썬의 특징은 다음과 같다고 할 수 있다. 파이썬은 프로그램을 처음 시작하는 사람에게 적합한 언어이며, 신축성이 있어 방대하고 전문적인 프로그램에 적용할 수 있다. 또한 그래픽도 다룰 수 있으며 윈도우에서까지 실행된다!
초보자의 언어
처음 프로그래밍을 시작하는 사람에게 파이썬은 정말로 이상적인 입문 언어이다. 파이썬은 1980년대 초보자를 위한 언어를 디자인하려는 프로젝트에서 기원하였다. 그 프로젝트의 유지보수자들은 항상 ‘일을 올바르게 처리하려는(do things right)’ 의지를 보여 주었다. 파이썬 세계가 이해하는 그 문구의 의미는 그들이 파이썬 언어를 논리적으로, 매력적으로, 그리고 간결하게 만들고자 한다는 것이다. 가끔씩 산업계의 전통과 충돌하는 희생을 감수하면서까지도 말이다.
파이썬에 정통한 사람들이 그저 말로만 프로그래밍을 모르는 사람들에 대해 ‘관심을 가지는 것’은 아니다. 파이썬 공동체는 ‘모든 사람을 위한 프로그래밍’ 특별 관심 그룹(Special Interest Group)을 적극적으로 지원해 준다. 같은 주제에 관한 프로젝트를 현재 파이썬의 설립자 귀도 반 로섬(Guido van Rossum)이 미 국방성(Department of Defense"s Advanced Research Project Agency)의 기금지원을 받아서 진행하고 있다.
다음은 대부분의 입문자들이 칭송하는 파이썬의 특징들이다.
- 파이썬의 사용가능성: 파이썬을 사용하는데 따르는 비용이 청구되지 않는다. 게다가 동일한 파이썬 버전을 윈도우, 맥 OS, 리눅스, BeOS, 기타 유닉스 시스템을 비롯한 다른 많은 운영체제에서 사용할 수 있다.
- 파이썬의 상호대화성: 일단 설치되기만 하면 파이썬을 사용하여 즉시 작업을 풀어볼 수 있다. 소스 코드를 한 줄 타자하라. 그리고 여러분이 ‘엔터키’를 치자 마자 파이썬은 그 줄을 처리하여 준다. 그런 짧은 피드백 루프 특히 초보 프로그래머들에게는 중요하다.
- 파이썬의 단순성: 다음이 무엇을 하는 코드인지 추측해 보아라.
current = 2000
start = 1990
elapsed = current - start
print elapsed
여러분의 추측이 맞다. 방금 여러분은 처음으로 파이썬 프로그램을 읽은 것이다. 파이썬에서는 유쾌하지 못한 당황과 ‘트릭’이 거의 없다.
- 파이썬의 힘: 파이썬 개발자들이 전형적으로 보고하는 바에 의하면 C와 같은 언어로 할 때 들어가는 시간의 절반에서 10분의 1정도의 시간이면 파이썬 애플리케이션을 개발할 수 있다고 한다. ‘힘’과 ‘표현력’이라는 것이 양으로 잴 수 없는 주관적인 요소이기는 하지만, 다른 언어들 이상으로 파이썬이 ‘강력한 힘’과 ‘풍부한 표현력’을 가진다는데 전문가들은 일반적으로 동의한다.
신축성
신축성(Scalability)이란 ‘변동에 잘 견디며 나를 실망시키지 않는 이라는 뜻’의 전문은어(nerdspeak)이다. 파이썬은 초보자에게 훌륭하기도 하지만, 또 전문가들의 요구도 만족시켜 준다. 교육적 환경으로 인기 있는 언어들은 너무 느리고, 기존의 자원들에 접속할 수 없으며, 너무 경직되어 있다는 이유로 현업에 종사하는 개발자들은 교육용 언어를 무시해 왔다. 누구도 이러한 관점에서 파이썬을 불평하지 않는다. 초보자의 한-줄짜리 코드에서부터 방대하고 엄격한 컴퓨터 프로그램에 이르기까지 파이썬의 힘은 도처에 뻗친다. 예를 들어 금속 골절에 대한 대단히 복잡한 수퍼컴퓨터 분석에도 파이썬이 부분적으로 사용된다.
우리는 파이썬이 가진 ‘최고 수준의(on the high end)’ 능력을 이해하는데 필요한 여러 주요 개념에 대해 주의할 필요가 있다. 방금 언급한 금속 구조 애플리케이션은 파이썬을 아주 핵심적으로 사용한다. 정말이지 그 프로젝트의 참여자들에 의하면 파이썬이 없었다면 그 프로젝트가 쉽게 성공하기는 힘들 정도였다고 한다. 그렇지만 이 애플리케이션을 포함한 파이썬으로 코딩된 대부분의 프로그램들은 소스의 대부분이 포트란(FORTRAN), 자바(Java), C, C++과 같은 다른 언어들로 작성되어 있다.
이러한 언어들 각각은 속도, 과학 계산, 그래픽 처리 등 특정 분야에서 탁월하지만 또한 눈에 띄는 약점도 있다. 복잡한 프로젝트에 사용하기 위한 진정한 언어를 딱 한 가지만 찾는다면 그것은 실수이다. 좀 더 이성적인 접근법은 언어들을 올바르게 혼용하는 방법을 찾는 것이고 파이썬으로 그 언어들을 ‘접착하는’ 것이다. 파이썬을 사용해 각 언어들의 장점들을 결합한다면, 더욱 효율적이고, 에러가 없으며, 유지보수가 쉬운 코드를 얻게 될 것이다.
파이썬은 다른 언어들과 잘 어울리므로 파이썬에는 막다른 골목(dead-ends)이 없다. 이 개념을 정확하게 표현하기는 힘들지만, 경험 많은 프로그래머들은 이 말이 무슨 말인지 알 것이다. 파이썬으로 시작한 프로그램은 건강하다. 파이썬 프로그램들은 속도 또는 알고리즘의 복잡한 표현에 제한이 없으므로 자유롭게 성장할 수 있다. 따라서 파이썬 프로그램은 여러분의 능력과 필요에 따라 성장한다. 그래서 나는 거의 매번 안정감을 가지고 프로젝트에 파이썬을 선택한다. 처음에 미처 알지 못했던 정보가 그 프로젝트를 진행하는 도중에 새로 나타날지라도, 파이썬의 유연성이 새로운 요구와 제한 사항들을 해결하여 줄 것이라고 나는 확신한다.
또한 기술적인 이유로, 파이썬의 ‘객체지향형’ 구문은 팀 작업에 탁월하다는 것이 증명되었다. 경험에 의하면 다른 영역에서 일하는 공학자들도 처음 본 파이썬 소스 코드를 편안하게 읽을 수 있으며, 심지어는 같은 프로그래머 조차도 예전 프로그램으로 되돌아 오면 친숙하게 보이지 않을 파이썬 소스 코드를 편안하게 읽을 수 있다는 것을 알 수 있다. 파이썬의 가독성은 나의 작업에서 가장 큰 힘이 되어 준다. 파이썬은 표현이 고도로 풍부하고, 객체 지향적이며, 잘 구조화되어 있고, 상호협동적인 언어이기 때문에 다른 언어에서는 찾아 볼 수 없는 방법으로 방대하고 복잡한 프로젝트의 성공 가능성을 높여준다.
그래픽에 뛰어나다!
한-줄짜리 코드, 교육, 중대한 임무를 띤 애플리케이션, 이 모든 것으로도 아직 파이썬의 능력을 가늠하지 못한다. 또 파이썬은 그래픽 사용자 인터페이스(GUIs, graphical user interfaces)를 개발하는 사람들에게 비할데 없는 이점도 있다.
C/C++, 자바 프로그래머들이 사용하는 GUI 도구들 때문에 GUI 개발은 본질적으로 어렵고 지겨운 작업이라는 평판을 얻게 되었다. 파이썬 덕분에 일은 더욱 쉬워지고 생산성은 더욱 높아진다. 제일 작으며 완벽한 GUI 스크립트를 보이자면 다음과 같이 될 정도로 작다.
from Tkinter import *
Label(text="Alert! Your first Python GUI application works!").pack()
mainloop()
파이썬의 신축성은 구이 개발에까지도 확장된다. 파이썬은 이와 같이 작은 프로그램에서부터 방대한 구이 애플리케이션까지 다양하게 그 세력을 미친다. 여기에서 파이썬의 ‘상호호환성(interoperability, 다른 언어와 어떻게 작동하는가) 역시 도움이 된다. 파이썬은 C, C++, 자바 프로그래머가 사용하는 모든 그래픽 도구모음에 접속할 수 있다. 더구나 파이썬 덕분에 이 어렵고 지겨운 도구모음들을 훨씬 더 쉽게 다룰 수 있다.
이러한 유연성은 때로 파이썬 언어에 새로 들어오는 입문자들을 압도한다. 예를 들어 자바 프로그래머는 자바로 구이를 개발하기 위한 방법으로 한가지 도구 모둠만 배운다. 대조적으로 파이썬은 적어도 프로젝트에 수십 개의 서로 다른 도구모음을 제공한다. 그렇지만 범용목적의 작업에 대해서는 분명히 표준이 있다. 파이썬의 기본 배포본에는 맥 OS, 유닉스, 윈도우 하에서 작동하는 Tkinter 그래픽 확장이 포함되어 있다.
결론적으로 애플리케이션 개발자들이 구이를 작성할 때 C 또는 C++과 싸워야 할만한 이유가 거의 없다. 파이썬은 생산성의 향상을 10배(† 역자 주: order of magnitude, 한자리수의 크기, 십진법이므로 10배)까지도 보장한다.
윈도우에서 실행된다
많은 파이썬 초보자들이 놀라는 마지막 사실 하나는 마이크로소프트 윈도우 프로그래밍에 대한 파이썬의 잠재 능력이다. 사람들은 보통 파이썬과 같은 스크립트용 언어들은 ‘오직 유닉스 용’ 또는 ‘웹 애플리케이션용’으로 한정된다고 생각한다. 사실 파이썬의 첫 번째 구현이 설치된 곳은 다름아닌 바로 매킨토시였다. 그런 역사적 사실을 제쳐 놓고라도, 이식성은 파이썬이 진화하는데 항상 가장 중요한 위치를 차지했다. 수 년 동안 파이썬 홈페이지에서 내려 받는 파이썬의 상당수가 윈도우용이다.
이는 파이썬이 그저 윈도우에서 실행될 수 있다는 의미가 아니다. 파이썬은 윈도우에서도 잘 실행된다는 의미이다. 파이썬은 COM 자동화에 대하여 서버와 클라이언트 모두에서 뛰어난 언어이다. COM(Common Object Model)은 마이크로소프트 테크놀러지로서 이 기술을 사용하면 파이썬은 다음과 같은 작업을 효율적으로 처리할 수 있다. 예를 들어 파이썬은 ‘일련의 파일들을 엑셀 전자계산표로 열어서, 특정 셀들을 업데이트 하고 그 결과 보고를 인쇄할 수 있다’ 또는 ‘파이썬으로 계산을 하여 요약 문서를 준비해주는 워드 마크로를 구축할 수 있다’는 의미이다.
GUI 도구모음에 대하여 바로 전에 언급한 바와 같이, 파이썬은 마이크로소프트가 팔고 있는 비주얼 C++과 비주얼 베이직보다 윈도우 애플리케이션 프로그래밍 인터페이스(APIs)에 대해 여러 모로 더 좋은 언어이다. 이것이 가능한 이유는 윈도우용 파이썬을 유지보수하는 크랙 프로그래머들이 약간 난잡한 ‘고유(native)’ APIs를 간략화하고 교정했기 때문이다. 예를 들어 윈도우 프로그래머가 파이썬을 사용하면 더욱 표현이 풍부한 구문과 더욱 일관적인 예외 처리라는 혜택을 누릴 수 있다.
파이썬은 마이크로소프트 개발자 네트워크(MSDN) 기사에서 자주 파이썬을 인용할 정도로 윈도우 세계에서 상당히 중요해졌다. 그 기사에서 파이썬은 동적인 HTML (DHTML), Windows Scripting Host (WSH), Active Server Pages (ASP)와 같은 마이크로소프트 기술에 사용할 수 있는 언어의 한 예로서 자주 인용된다.
숨어있는 결점은 무엇인가?
별다른 숨겨진 결점은 없다. 이 기사의 처음에서 약속한 그대로일 뿐이다. 파이썬 언어 하나면 모든 작업을 할 수 있을 정도로 파이썬은 상당히 많은 능력이 있다. 그뿐만 아니라 파이썬은 무료로 사용할 수 있으며, 내려받을 파일의 양은 자바의 양보다 훨씬 더 작다. 게다가 라이센스도 상당히 자유롭다. 자바나 C++에 비해 출판된 책들은 얼마 안되지만, 출간된 책들의 품질 또한 우수하다. 예를 들자면 오라일리에서 출간된
『Python Programming on Win32』을 들 수 있다. 이책의 선임 저자는 다름 아닌 마크 해몬드(Mark Hammond)로 그는 파이썬의 특징을 윈도우에 최초로 상당부분 프로그램한 사람이다.
파이썬에 대한 지원이나 훈련을 원하는가? 파이썬 지원과 훈련에 전문화된 여러 회사들이 미국과 전 세계에 걸쳐있다. 게다가 파이썬만이 가지는 매력중의 하나는 메일링 리스트와 뉴스를 통해 언제든 자유롭게 도움을 받을 수 있다는 것이다. 많은 프로그래머들이 나에게 말해 준바에 의하면 파이썬을 처음으로 확신을 가지고 시험해 보게된 이유가 바로 이렇게 풍부한 자원 때문이었다고 한다.
무엇보다도 확실한 것은 여러분이 나의 말을 액면 그대로 믿을 필요가 없다는 것이다. 파이썬과 관련 문서를 내려 받아서, 온라인 튜토리얼 중의 하나를 탐독해 보자. 한시간도 채 되지 않아, 파이썬으로 어떻게 프로그래밍하는 것인지 스스로 감이 올 것이다.
카메론 레어드(Cameron Laird)는 Phaseit, Inc.사의 부사장으로 오픈 소스 테크놀러지에 대한 글을 자주 쓴다.