드디어 Python에 대한 글을 쓰게 되었습니다. 2018년 6월 13일 현재 제가 가장 좋아하고, 오래 사용한(그래봤자 1년 반 쓴) 언어입니다. Flask로 인해 2017년부터 쓰기 시작했고, 지금까지 계속해서 사용해오고 있습니다.

Python은 C로 구현되었고, 1991년에 발표된 인터프리터, 동적 타이핑, 바이트코드 컴파일, 객체지향을 지원하는 멀티 패러다임 언어입니다. 파이썬은 객체지향 언어 아닌가?하는 사람들도 많지만, Python은 절차지향, 객체지향, 함수형 패러다임 모두 표현할 수 있으므로 객체지향을 지원하는 멀티 패러다임으로 봐야 한다는 입장이 많으며 저도 이와 같은 입장입니다. 애초에 Python이 class를 이용해 객체지향을 지원하지만, 클래스 없이도(객체지향적 표현 없이도) 충분히 코드를 작성할 수 있으므로 객체지향이라고 단정지을 수는 없습니다.

심심하면 작품이 나오는 공돌이들 답게, Python도 크리스마스에 연구실이 닫혀 있어서 심심한 김에 만들어졌습니다. 창시자는 네덜란드의 귀도 반 로썸(Guido van Rossum)입니다. Python은 현재 실무와 교육 양 쪽에서 엄청난 인기를 끌고 있고, 점유율도 급속도로 올라가고 있습니다. Glue language라는 특징 덕분에 다른 언어(특히 C, C++)로 작성된 코드를 바인딩할 수 있고, 그 좋은 예가 Tensorflow, Keras입니다. 문법이 쉬워 배우기는 쉽지만, 다른 언어가 다 그렇듯 잘 쓰기는 어렵습니다.

인터프리터

컴파일 언어인 C, Java에 비해 Python은 인터프리팅 언어입니다. 컴파일러는 코드 전체를 기계어로 번역하는 데에 반해, 인터프리터는 코드를 한 줄씩 읽어들여 실행합니다. Python은 코드를 한 줄씩 읽어들이는 인터프리터 방식이며, 따라서 프로그래밍을 아래처럼 대화식으로 할 수 있습니다.

문화

다른 언어들에서는 쉽게 찾아볼 수 있는 파이썬만의 독특한 매력이 있는데, 바로 문화입니다. 파이썬이 성장하며 가장 아름다운 하나의 답이 존재한다라는 파이썬의 명제가 성장해 왔습니다. 다른 언어들의 코딩 스타일은 각자의 취향에 맞게 진화하는 반면(C 계열의 중괄호 위치 등), 파이썬은 위의 철학을 만족시키는 하나의 스타일로 진화해 왔습니다. 이에 PEP8이라는 제안서(코드 스타일 가이드)가 보편적인 코딩 컨벤션으로 자리를 잡으며 파이썬스러움(Pythonic)이라는 단어가 유명해지게 되었는데, 복잡하지 않으면서 의미가 명확하고, 심플한 파이썬의 철학을 따르는 코드들을 지칭하는 개념입니다. 그래서 처음 보는 개발자 둘이 파이썬 코드를 작성하더라도, 코드의 레이아웃이나 컨벤션들이 거의 비슷합니다.

진입장벽

파이썬 코드는 프로그래밍을 한 번도 해보지 않은 사람조차도 소스 코드를 통해 프로그램이 어떤 일을 하는지 이해할 정도로 접근하기 쉬운데, 바로 가독성 때문입니다. 가독성(readability)은 파이썬 디자인의 핵심이며, 코드 작성자가 코드를 작성하는 데 소요하는 시간보다 수많은 사람이 코드를 읽는데 소요하는 시간이 훨씬 길다는 인식이 바탕에 깔려 있습니다.

파이썬 코드가 비교적 쉽게 이해되는 것은 완전한 코드 스타일 가이드라인 모음집(PEP8과 PEP20 개선 제안)과 Pythonic이라는 관용어 때문입니다. 베테랑 파이썬 개발자가 코드의 일부분을 '파이썬스럽지 않다'고 한다면, 그 부분은 일반적으로 통용되는 가이드라인에 따라 작성되지 않았으며, 가독성을 고려한 코드 작성에 실패했음을 의미합니다. 그러나 멍청한 일관성은 소인배의 발상(a foolish consistency is the hobgoblin of little minds)이긴 합니다.


사실 블로그에 글을 쓰기 전, Python을 한창 배우던 당시에 Awesome Python이라는 레포에 꾸준한 공부와 복습을 위해 코드 스니펫들을 올리곤 했었습니다. 예제를 다듬고, 순서를 바꾸고, 설명을 추가하며 그렇게 1년동안 쌓다 보니, 다른 사람들도 꽤 볼만 한 예제 저장소가 되어 있었습니다. 파이썬 기초, 여러 기법들, 빌트인 함수와 라이브러리, 쓸만 한 외부 라이브러리, Flask로 나누어 정리하고 있습니다. 코드만이 아니라 글로써 가이드를 하나 작성해보고 싶었고, Python을 가지고 '드디어'라고 말한 이유도 이것입니다.

여기선 '책' 얘기를 해보고 싶습니다. 프로그래밍 관련 서적은 대부분 한 번만 읽으면 졸업할 수 있는 책두고두고 다시 보는 책으로 나뉩니다. 첫 번째 부류의 쉬운 책은 많은데, 두 번째 부류의 비급같은 책은 적습니다. 특히 파이썬은 '쉽다'라는 특징 때문에 그런 경향이 더 많습니다. 쉽다는 장점이 의외로 단점을 가져오는데, 자유롭게 쓸 수 있는 시점이 빨리 다가오기 때문에 '다 알았다'는 느낌이 들어서 배우기에서 빨리 손을 떼는 경우가 많다는 것입니다. 프로그래밍 언어는 단순히 문제를 해결하기 위한 도구일 뿐이지만, 고급자로 올라서길 원하는 경우엔 참고할 만한 자료들이 그리 많지 않습니다. 앞으로 올라갈 글들은 두 부류에 모두 속할 수 있도록 하려고 합니다.

앞으로 올라갈 글들은 Python이라는 언어를 위주로 설명하기에 객체지향, 연산자의 우선순위, 정적 타이핑과 동적 타이핑 등 프로그래밍 자체의 배경지식에 해당하는 부분들은 많이 설명하진 않으려고 합니다. 따라서 'Python과 함께하는 프로그래밍 입문'보단 'Python 입문'같은 느낌에 더 가까우며 '기본서'와는 조금 거리가 있을 수도 있습니다. C나 Java같은 타 언어를 통해 프로그래밍 자체에 대해 조금 학습했거나, 점프 투 파이썬과 같은 튜토리얼을 통해 Python을 한 번쯤 경험해본 사람들이 읽기 쉽도록 작성할 계획입니다.


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] Iterable 자료형 - List, Tuple  (1) 2018.06.19
[Python] 변수와 기본 자료형  (0) 2018.06.18
[Python] 주석  (0) 2018.06.17
[Python] Hello World로 Python 둘러보기  (0) 2018.06.16
[Python] 설치  (0) 2018.06.15

+ Recent posts