Python - Python?

Python 이란? 사랑입니다.

이 포스팅은 가로 1400px 이상의 화면에 최적화 되있습니다.

저는 Python 개발자입니다. 매일 같이 Python을 사용하여 로직을 구현하고, 프로그램을 작성합니다. Python은 정말 재밌습니다. 간결한 문법, 상상을 뛰어넘는 가독성!! 무엇보다 생산성에서는 제가 접한 몇개 안되는 언어들 중 최고에 속합니다. 또한 풍부한 모듈과 내장함수들은 Python과 사랑에 빠지게 만듭니다.

그러나 Python에 대한 열정만큼 Python을 특징을 잘 파악하지 못하고, 단순히 내장함수나 모듈을 쓰는 단계에서 그치는 것이 아닌가 라는 걱정을 하게되었고, 파이썬의 특징을 집고 넘어가자는 취지로 포스팅하게 되었습니다.

포스팅 주제와 관련된 필자의 수준은 다음과 같습니다. (능력 평가는 지극히 주관적임을 밝힙니다.)

사용가능 언어
- Java7 중급
- Python3 중급
- ECMA6 중급

(하나 라도 제대로 해야할텐데 ㅠㅠ 그래서 요즘은 파이썬에 집중하려 합니다. 하지만 이놈의 호기심 때문에 함수형 언어에 기웃기웃하고 있네요.)

개요

파이썬은 1989년 귀도 반 로썸의 재미로 만들어젔습니다. 리눅스 토발즈의 리눅스도 그렇고 천재들은 심심할때 대작을 만드는 듯합니다.

파이썬은 문법이 매우 쉬워서 초보자들이 처음 프로그래밍을 배울때 추천되는 언어이며, 동시에 실사용률과 생산성도 높은 강력한 언어입니다.

2016년 5월 기준 토비 프로그래밍 언어 월간 점유율 을 확인해보시면 현재 5위에 랭크되있습니다.

범용 프로그래밍언어로서 초보자부터 전문가까지 넓은 사용자층을 보유하고 있습니다. 변수의 자료형을 선언하지 않는 동적 타이핑 언어 이며(Runtime에 자료형을 검사), 인터프리터 에 의해 해석과 동시에 프로그램이 실행되는 스크립트 언어입니다.

파이썬은 현재 지속적인 발전과 더 많은 사용자층을 확보해가고 있습니다. 구글에서는 C++, JAVA와 함께 3대 개발 언어 중 하나로 알려져 있습니다. 최근 파이썬은 deep learning, data science 등 트렌디한 분야에서 특히 많이 사용되고있습니다. machine learning에 관심 있는 분이라면 Google이 개발한 deep learning 라이브러리인 TensorFlow를 권해드립니다. 역시 구글신!!

특징

파이썬은 정말 다양한 분야에서 쓰이고있습니다. 그 이유는 파이썬의 다양한 특징때문일 것입니다. 그럼 같이 파이썬에 특징에 대해 알아볼까요. Here we go~!!

  • 높은 생산성

    Life is short, you need python (인생은 너무 짧으니 파이썬이 필요해)
    인터프린트 언어이면서 우수한 자료형과 내부 모듈 등을 제공해 개발기간을 단축시킬 수 있습니다. 또한 수많은 오픈 서드파트 라이브러리를 사용하시면 그 속도를 배가 시킬수있습니다.

    빠른 아이디어 구현이 중요한 연구소에서 각광 받고 있으며, 우리나라에서는 정부의 자바라는 큰 장벽이 존재함에도 불구하고, 스타트업에서 가장 많이 사용하는 언어 중 하나입니다. 기술트렌드에 민감한 스타트업 기업들을 위한 전문 채용 사이트 살펴본다면, Python의 인기를 실감할 수 있습니다.
    로켓펀치 - 스타트업 백과사전

    PS. 사실 파이썬은 우리나라를 제외한 다른 나라에서는 이미 오래전부터 주류 언어로 사용되고 있었습니다.

  • 간결 그리고 아름다움

    아름다움의 정의는 개개인마다 다를 수 있습니다. 하지만 다수가 인정하는 미의 기준은 한 곳에 수렴하기 마련입니다. 파이썬의 디자인 철학은 아름다움의 수렴이라는 포커스에 맞춰져있습니다.

    가장 아름다운 하나의 답이 존재한다. 앞의 명제는 파이썬의 모토이며 이와 같은 대 명제를 토대로 다음과 같은 철학을 지니게 되었습니다.

    • 아름다운 것이 추한 것보다 낫다.
    • 명시적인 것이 암시적인 것보다 낫다.
    • 간결한 것이 복잡한 것보다 낫다.
    • 정교한 것이 난잡한 것보다 낫다.

    저는 이와 같은 디자인 철학에 백퍼센트 동의하진 않지만, 복잡하지 않으면서 명확하고, 심플한 파이썬스러움은 파이썬을 사용하기에 충분히 매력적으로 다가 왔습니다. 파이썬스러움(pythonic)한 코드를 짜기 위한 몇가지 규칙이 정의 되어있는데 PEP8 이라는 코드 스타일 규정이 존재합니다.

    PEP 8 – Style Guide for Python Code
    파이썬 코딩 컨벤션

    이러한 아름다움과 간결한 문법 덕분에 파이썬은 배우기 쉬우며, 높은 가독성을 제공합니다. 덕분에 C, C++, JAVA 같은 언어로 개설 되던 대학 수업들이 Python으로 옮겨 가는 추세입니다. 우리나라 대학 중에는 연세대, 카이스트, 부산대, 국민대, 인천대에서 이미 프로그래밍 개론 수업을 Python으로 진행하고 있습니다.

  • 반복 가능한 객체

    프로그래머에게 조건문과 반복문은 컴퓨터와 소통하는 가장 중요한 도구 중 하나에 속합니다. 파이썬에는 반복 가능한 객체(iterable)가 존재하는데, 기존의 반복문이 청동무기 였다면 철무기쯤으로 업그레이드 시켜줍니다.

    이 객체는 집합, 문자열, 튜플, 딕셔너리, 그리고 함수 등 iterable한 모든 객체를 의미합니다. 이뿐만 아니라 반복 가능한 객체에는 헬퍼 메소드가 존재하여 생산성 또한 증가시킵니다. 특히 함수의 반복은 큰 장점이 됩니다. 아래 작성한 코드를 보시고 어느 로직에 응용할 수 있을지 생각해보세요~.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def multiple(n):
    x = 1
    while 1:
    yield n*x
    x += 1

    f = factorial(10)
    # print(f.__next__()) # 10
    # print(f.__next__()) # 20
    # print(f.__next__()) # 30

    print(next(f)) # 10
    print(next(f)) # 20
    print(next(f)) # 30

    위 코드의 프린트 값을 보면 함수가 값을 리턴했음에도 함수 내부 환경이 유지 됩니다. 자바스크립트를 공부하신 분이라면 클로져가 떠오를 수도 있겠지요.

    Anyway 위 함수가 종료되기 전까지 지역변수를 유지합니다. 결국 위의 함수의 계속 호출한다면 값은 지속적으로 증가하겠지요?

  • 만능 언어

    최근의 언어트렌드는 높은 생산성과 만능언어가 아닐까 생각합니다. 물론 분야마다 차이는 존재하지만 명백한 사실입니다. 인기도를 측정해볼 수 있는 척도중 하나인 Stack Over Flow의 언어 카테고리당 질문율을 살펴보면 정확한 수치도 확인할 수 있습니다.
    2016 Stack overflow - Developer Survey Results

    그렇다면 파이썬은 어떤면 때문에 만능언어일까요?

    첫번째, 이유는 Python으로 공급되는 다양한 분야의 방대한 패키지입니다.
    궁금하신분은 아래 사이트를 참고하세요.
    PyPL Ranking

    두번째, 다양한 자료구조와 글루언어(다른언어와 접착성)로서의 역할 입니다.
    이 부분을 언급하기전에 파이썬의 단점 하나를 집고 넘어가자면 속도입니다. 실행환경에서 타입을 설정하는 언어의 특성상 느릴수 밖에 없지만, 다른 동적 언어들(JavaScript, LISP …)과 비교해봐도 속도가 빠른편은 아닙니다. 하지만 다른언어들(C, JAVA 등 메인언어)과의 높은 결합성 덕분에 속도적인 이슈가 있는 부분은 C로 작성하고, 생산성이 중요한 부분은 Python으로 작성한다면 속도 이슈를 해결할 수 있습니다. 특히, Python 자체가 C로 구현되었기 때문에 C와 궁합이 잘 맞는다고 합니다.

결론

저에게 파이썬은 아름답습니다. 배우기 쉽고, 간결하며 높은 생산성을 갖고 있습니다. 그렇지만 파이썬 언어도 결국은 프로그래머의 하나의 도구에 불과합니다. 단순히 프로그래밍을 할 수 있는 것과 좋은 프로그래밍을 하는 것은 하늘과 땅 차이입니다. 결국 프로그래밍의 수준은 언어가 아닌 프로그래머의 역량입니다. 결론적으로 프로그래밍 자체를 아름답게 하기 위해서는 언어에 상관없이 프로그래밍 자체를 공부해야 합니다. 알고리즘, 디자인패턴, 아키텍처, 테스트기법, 동시성, 자료구조 등의 필요한 지식을 유기적으로 이해할 수 있다면 어떤 언어를 사용하더라도 아름다운 프로그래밍을 할 수 있는 개발자가 될 것이라 생각합니다.

PS. 부족한 하거나 잘 못된 부분에 대한 지적은 감사히 받겠습니다. 부족한 글 끝까지 읽어주셔서 감사합니다.

Reference

점프 투 파이썬 : Python의 기본을 쉽게 익히기에 좋은 사이트
파이썬 - 위키백과
파이썬 - 나무위키
rochan87@gmail.com 필자의 머릿속.