>  기사  >  백엔드 개발  >  인생은 짧다. 나는 파이썬을 사용한다

인생은 짧다. 나는 파이썬을 사용한다

伊谢尔伦
伊谢尔伦원래의
2016-11-25 09:56:571134검색

Python은 제가 가장 좋아하는 언어입니다. 간단하고 아름답고 사용하기 쉽습니다. 이틀 전, 저는 친구들에게 Python의 이점을 열성적으로 홍보했습니다.

 “그래, 파이썬이 좋은 건 인정하는데 왜 파이썬이라고 부르지?”

 “글쎄요, TV 시리즈 이름인 것 같아요.” > “그렇다면 귀도는 미국인인가요? "

" 구글에서 드롭박스로 옮겼는데 이름이 네덜란드인 것 같네요 "

"확실히 친숙해요. 파이썬으로?

그래서 부끄러운 마음에 복수하기 위해 파이썬의 역사를 알아보는 시간을 가져봤습니다. 나는 Python의 많은 기능의 기원과 Python의 디자인 철학, 프로그래밍 언어의 진화 역사, Python과 오픈 소스 운동 사이의 놀라운 연결을 보았습니다. 파이썬의 역사를 통해 오픈소스 개발의 아이디어와 성과를 엿볼 수 있다.

이는 제가 작성한 빠른 Python 튜토리얼의 서문으로도 사용할 수 있습니다.

유래

Python의 저자인 Guido von Rossum은 그야말로 네덜란드인입니다. 1982년에 Guido는 암스테르담 대학교에서 수학과 컴퓨팅 석사 학위를 받았습니다. 그러나 그는 수학자였지만 컴퓨터를 더욱 좋아했습니다. 그의 말에 따르면, 그는 수학과 컴퓨터의 이중 자격을 가지고 있음에도 불구하고 항상 컴퓨터 관련 작업을 하는 경향이 있으며 프로그래밍과 관련된 모든 일에 열중하고 있습니다.

그때 귀도는 파스칼, C, 포트란 등의 언어를 접하고 사용하게 됐다. 이러한 언어의 기본 설계 원칙은 기계를 더 빠르게 실행하는 것입니다. 1980년대에는 IBM과 Apple이 개인용 컴퓨터의 물결을 시작했지만 이러한 개인용 컴퓨터의 구성은 매우 낮았습니다. 예를 들어 초기 매킨토시는 CPU 주파수가 8MHz에 불과했고 RAM은 128KB에 불과했습니다. 모든 컴파일러의 핵심은 프로그램이 실행될 수 있도록 최적화하는 것입니다. 효율성을 높이기 위해 언어는 프로그래머가 컴퓨터처럼 생각하도록 강제하여 기계의 취향에 더 맞는 프로그램을 작성할 수 있도록 합니다. 그 시대에 프로그래머들은 손으로 컴퓨터의 모든 능력을 쥐어짜내고 싶어했습니다. 어떤 사람들은 C 언어 포인터가 메모리 낭비라고 생각하기도 합니다. 동적 타이핑, 자동 메모리 관리, 객체 지향... 생각하지 마세요. 컴퓨터가 마비될 것입니다.

이런 프로그래밍은 귀도를 괴로움으로 만듭니다. Guido는 C 언어로 함수를 작성하는 방법을 알고 있지만, 이미 구현 방법을 정확히 알고 있더라도 전체 작성 과정에는 많은 시간이 걸립니다. 그의 또 다른 옵션은 껍질입니다. Bourne Shell은 오랫동안 UNIX 시스템용 인터프리터로 존재해 왔습니다. UNIX 관리자는 정기적인 백업, 파일 시스템 관리 등과 같은 일부 시스템 유지 관리 작업을 수행하기 위해 쉘을 사용하여 몇 가지 간단한 스크립트를 작성하는 경우가 많습니다. 쉘은 UNIX의 많은 기능을 함께 연결하는 접착제와 같을 수 있습니다. 수백 줄의 C 언어로 구성된 많은 프로그램을 셸에서 단 몇 줄만으로 완료할 수 있습니다. 그러나 셸의 핵심은 명령을 호출하는 것입니다. 그것은 실제로 언어가 아닙니다. 예를 들어, 쉘에는 숫자 데이터 유형이 없으며 추가 작업이 매우 복잡합니다. 즉, 쉘은 컴퓨터의 기능을 완전히 동원할 수 없습니다.

Guido는 C 언어처럼 컴퓨터의 기능적 인터페이스를 완벽하게 호출할 수 있고, 쉘처럼 쉽게 프로그래밍할 수 있는 언어를 갖고 싶어합니다. ABC 언어는 귀도에게 희망을 주었습니다. ABC는 네덜란드의 수학 및 컴퓨팅 연구소에서 개발되었습니다. Guido는 연구소에서 근무하며 ABC 언어 개발에 참여했습니다. ABC 언어는 교육 목적으로 사용됩니다. 당시 대부분의 언어와 달리 ABC 언어의 목표는 "사용자의 기분을 좋게 만드는 것"이었습니다. ABC Language는 읽기 쉽고, 사용하기 쉽고, 기억하기 쉽고, 배우기 쉬운 언어를 만들어 프로그래밍 학습에 대한 사람들의 관심을 자극하는 것을 목표로 합니다. 예를 들어, 다음은 Wikipedia의 ABC 프로그램입니다. 이 프로그램은 텍스트에 나타나는 총 단어 수를 계산하는 데 사용됩니다.

HOW TO는 함수를 정의하는 데 사용됩니다. Python 프로그래머는 이 프로그램을 쉽게 이해해야 합니다. ABC 언어는 콜론과 들여쓰기를 사용하여 프로그램 블록을 나타냅니다. 줄 끝에는 세미콜론이 없습니다. for 및 if 구조에는 괄호()도 없습니다. 할당에서는 보다 일반적인 등호 대신 PUT을 사용합니다. 이러한 변경으로 인해 ABC 프로그램이 텍스트처럼 읽혀집니다.
HOW TO RETURN words document:
 
   PUT {} IN collection
 
   FOR line IN document:
 
      FOR word IN split line:
 
         IF word not.in collection:
 
            INSERT word IN collection
 
   RETURN collection

ABC 언어는 좋은 가독성과 사용 용이성에도 불구하고 결국 대중화되지 못했습니다. 당시 ABC 언어 컴파일러를 실행하려면 상대적으로 고급형 컴퓨터가 필요했습니다. 이러한 컴퓨터의 사용자는 일반적으로 컴퓨터에 능숙하며, 학습의 어려움보다 프로그램의 효율성을 더 고려합니다. 하드웨어적인 어려움 외에도 ABC 언어의 디자인에는 몇 가지 치명적인 문제가 있습니다.

확장성이 좋지 않습니다. ABC 언어는 모듈형 언어가 아닙니다. 그래픽 지원 등 ABC 언어에 기능을 추가하려면 여러 곳을 변경해야 합니다.

IO를 직접 수행할 수 없습니다. ABC 언어는 파일 시스템을 직접 운영할 수 없습니다. 텍스트 스트림과 같은 방법을 통해 데이터를 가져올 수 있지만 ABC는 파일을 직접 읽고 쓸 수 없습니다. 입출력의 어려움은 컴퓨터 언어에 치명적이다. 문이 열리지 않는 스포츠카를 상상할 수 있나요?

과도한 혁신. ABC는 위 프로그램의 HOW TO와 같이 자연어를 사용해 프로그램의 의미를 표현합니다. 그러나 프로그래머의 경우 함수를 정의하기 위해 함수를 사용하거나 정의하는 데 더 익숙합니다. 마찬가지로 프로그래머는 변수를 할당하기 위해 등호를 사용하는 데 더 익숙합니다. ABC 언어는 매우 특별하지만 배우기도 매우 어렵습니다.

확산이 어렵습니다. ABC 컴파일러는 크기가 커서 테이프에 저장해야 했습니다. Guido가 방문했을 때 그는 다른 사람들을 위해 ABC 컴파일러를 설치하기 위해 큰 테이프를 가지고 있어야 했습니다. 이런 식으로는 ABC 언어가 빠르게 확산되기 어렵습니다.

1989년, 크리스마스 휴가를 보내기 위해 귀도는 파이썬 언어용 컴파일러를 작성하기 시작했습니다. Python이라는 이름은 Guido가 사랑한 TV 시리즈 Monty Python's Flying Circus에서 따왔습니다. 그는 Python이라는 새로운 언어가 C와 셸 사이에서 포괄적이고, 배우기 쉽고, 사용하기 쉽고, 확장 가능한 언어를 만드는 그의 이상을 충족할 수 있기를 바라고 있습니다. 언어 디자인에 열광하는 Guido는 이미 언어 디자인을 시도한 적이 있습니다. 이번에는 순수한 해킹 행위에 지나지 않았습니다.

언어의 탄생

1991년, 최초의 Python 컴파일러가 탄생했습니다. C언어로 구현되어 C언어 라이브러리 파일을 호출할 수 있습니다. Python은 탄생부터 클래스, 함수, 예외 처리, 테이블 및 사전을 포함한 핵심 데이터 유형, 모듈 기반 확장 시스템을 갖추고 있습니다.

Python 구문의 대부분은 C에서 유래했지만 ABC 언어의 영향도 많이 받았습니다. 강제 들여쓰기와 같은 ABC 언어의 일부 규칙은 오늘날까지도 논란의 여지가 있습니다. 그러나 이러한 구문 규칙을 사용하면 Python을 쉽게 읽을 수 있습니다. 반면에 Python은 등호 할당 되돌리기와 같은 일부 규칙, 특히 C 언어의 규칙을 따르는 것을 현명하게 선택합니다. 귀도는 어떤 것이 "상식"에 기초하여 확립되면 그것에 너무 매달릴 필요가 없다고 믿습니다.

Python은 처음부터 확장성에 특별한 관심을 기울였습니다. Python은 여러 수준으로 확장될 수 있습니다. 높은 수준에서는 .py 파일을 직접 가져올 수 있습니다. 내부적으로는 C 라이브러리를 참조할 수 있습니다. Python 프로그래머는 Python을 사용하여 .py 파일을 확장 모듈로 빠르게 작성할 수 있습니다. 그러나 성능을 고려해야 할 중요한 요소인 경우 Python 프로그래머는 하위 계층에 깊이 들어가서 C 프로그램을 작성하고 이를 .so 파일로 컴파일한 다음 Python에 도입하여 사용할 수 있습니다. Python은 강철을 사용하여 집을 짓는 것과 같습니다. 먼저 큰 프레임을 정의합니다. 프로그래머는 이 프레임워크에서 매우 자유롭게 확장하거나 변경할 수 있습니다.

원래 Python은 전적으로 Guido가 직접 개발했습니다. Python은 Guido의 동료들 사이에서 인기가 높습니다. 그들은 빠른 피드백을 제공하고 Python 개선에 참여합니다. Guido와 몇몇 동료들은 Python의 핵심 팀을 구성합니다. 그들은 여가 시간의 대부분을 Python을 해킹하는 데 보냅니다. 그 후 Python은 연구소를 넘어 확장되었습니다. Python은 많은 기계 수준의 세부 사항을 숨기고 컴파일러가 처리하도록 남겨두고 논리적 수준의 프로그래밍 사고를 강조합니다. Python 프로그래머는 구체적인 구현 세부 사항 대신 프로그램의 논리에 대해 생각하는 데 더 많은 시간을 할애할 수 있습니다. 이 기능은 많은 프로그래머의 관심을 끌고 있습니다. 파이썬이 인기를 얻었습니다.

인생은 짧다, 나는 파이썬을 쓴다

시간이 영웅을 만든다

우리는 파이썬 시간을 멈추고 끊임없이 변화하는 컴퓨터 산업을 살펴봐야 한다. 1990년대 초, 개인용 컴퓨터가 일반 가정에 들어오기 시작했습니다. 인텔은 486 프로세서를 출시했고, 윈도우는 윈도우 3.0부터 일련의 윈도우 시스템을 출시했다. 컴퓨터 성능이 크게 향상되었습니다. 프로그래머들은 그래픽 인터페이스와 같은 컴퓨터의 사용 편의성에 주목하기 시작했습니다.

인생은 짧다. 나는 파이썬을 사용한다

Windows 3.0

컴퓨터 성능의 향상으로 인해 소프트웨어의 세계도 변화하기 시작했습니다. 하드웨어는 많은 개인용 컴퓨터에 충분합니다. 하드웨어 제조업체는 하드웨어 업그레이드를 추진하기 위해 수요가 많은 소프트웨어의 출현을 열망하고 있습니다. C++와 Java가 차례로 인기를 얻었습니다. C++ 및 Java는 객체 지향 프로그래밍 패러다임과 풍부한 객체 라이브러리를 제공합니다. C++와 Java는 어느 정도의 성능을 희생하면서 프로그램 출력을 크게 향상시켰습니다. 언어 사용의 용이성이 새로운 차원으로 향상되었습니다. 또한 ABC가 실패한 중요한 이유는 하드웨어의 성능 제한이었다는 것을 기억합니다. 이런 점에서 Python은 ABC보다 훨씬 운이 좋습니다.

조용히 일어나고 있는 또 다른 변화는 인터넷이다. 1990년대는 여전히 개인용 컴퓨터의 시대였으며, 윈도우와 인텔은 PC로 한동안 큰 인기를 끌었습니다. 인터넷 기반 정보 혁명은 아직 도래하지 않았지만, 많은 프로그래머와 숙련된 컴퓨터 사용자는 이미 이메일, 뉴스그룹 등을 사용하여 통신하기 위해 인터넷을 자주 사용하고 있습니다. 인터넷은 정보 교환 비용을 크게 줄였습니다. 새로운 소프트웨어 개발 패러다임이 인기를 얻기 시작했습니다. 바로 오픈 소스입니다. 프로그래머는 여가 시간을 사용하여 소프트웨어 및 오픈 소스 코드를 개발합니다. 1991년에 Linus는 comp.os.minix 뉴스 그룹에 Linux 커널 소스 코드를 공개하여 수많은 해커들의 관심을 끌었습니다. Linux와 GNU는 함께 작동하여 활발한 오픈 소스 플랫폼을 형성합니다.

하드웨어 성능이 병목 현상이 되지 않고, 파이썬이 사용하기 쉬워서 많은 사람들이 파이썬으로 눈을 돌리고 있습니다. Guido는 메일 목록을 유지 관리하고 Python 사용자는 이메일을 통해 통신합니다. Python 사용자는 다양한 분야 출신이고 배경도 다르며 Python에 대한 요구도 다릅니다. Python은 상당히 개방적이고 확장이 용이하므로 사용자가 기존 기능에 만족하지 못할 경우 Python을 확장하거나 변환하기가 쉽습니다. 그런 다음 이러한 사용자는 Python 또는 표준 라이브러리에 새로운 기능을 추가할지 여부를 결정하는 Guido에게 변경 사항을 보냅니다. 코드가 Python 자체나 표준 라이브러리에 통합될 수 있다면 큰 영광이 될 것입니다. 귀도의 최고 의사결정권으로 인해 그는 "평생 자비로운 독재자"로 알려져 있습니다.

Python은 "배터리 포함"이라고 불리며 이는 Python과 해당 표준 라이브러리가 강력하다는 것을 의미합니다. 이는 전체 커뮤니티의 기여입니다. Python 개발자는 다양한 분야에서 왔으며 다양한 분야의 장점을 Python에 적용합니다. 예를 들어 Python 표준 라이브러리의 정규식은 Perl을 참조하고, 람다, 맵, 필터, 축소 등의 함수는 Lisp를 참조합니다. Python 자체의 일부 기능과 대부분의 표준 라이브러리는 커뮤니티에서 제공됩니다. Python 커뮤니티는 계속해서 확장되고 있으며 자체 뉴스 그룹, 웹 사이트 및 기금을 보유하고 있습니다. Python 2.0부터 Python도 메일리스트 개발 방식에서 완전한 오픈 소스 개발 방식으로 변경되었습니다. 커뮤니티 분위기가 형성되었고, 커뮤니티 전체가 작업을 공유하며 Python의 개발 속도도 빨라졌습니다.

오늘부로 Python의 프레임워크가 확립되었습니다. Python 언어는 객체를 핵심으로 하여 코드를 구성하고, 여러 프로그래밍 패러다임을 지원하고, 동적 유형을 사용하고, 자동으로 메모리를 재활용합니다. Python은 해석된 실행을 지원하고 확장을 위해 C 라이브러리를 호출할 수 있습니다. Python에는 강력한 표준 라이브러리가 있습니다. 표준 라이브러리 시스템이 안정화된 이후 Python 생태계는 타사 패키지로 확장되기 시작했습니다. Django, web.py, wxpython, numpy, matplotlib 및 PIL과 같은 패키지는 Python을 종이 풍부한 열대 우림으로 업그레이드합니다.

계시

Python은 우아함, 명확성, 단순성을 옹호하며 우수하고 널리 사용되는 언어입니다. Python은 TIOBE 순위에서 8위를 차지하고 있으며 Google의 세 번째 개발 언어이자 Dropbox의 기본 언어이며 Douban의 서버 언어입니다. Python의 개발 이력은 대표적으로 활용될 수 있으며 나에게 많은 영감을 줍니다.

Python 개발 과정에서 커뮤니티는 중요한 역할을 합니다. Guido는 자신이 만능 프로그래머가 아니기 때문에 프레임워크 공식화에만 책임이 있다고 생각합니다. 문제가 너무 복잡하면 그는 그 문제를 우회하는 것, 즉 모퉁이를 자르는 것을 선택할 것입니다. 이러한 문제는 궁극적으로 커뮤니티의 다른 사람들에 의해 해결됩니다. 커뮤니티의 재능은 매우 풍부합니다. 웹사이트를 만들고 자금을 모으는 등 개발과 조금 거리가 있는 일이라도 기꺼이 처리하려는 사람들이 있습니다. 오늘날의 프로젝트 개발은 점점 더 복잡해지고 규모가 커지고 있습니다. 협력과 열린 마음이 프로젝트의 궁극적인 성공의 열쇠가 되었습니다.

파이썬은 역사에 들어간 ABC부터, 아직까지 사용되고 있는 C와 Perl 등, 나열되지 않은 많은 다른 언어들로부터 많은 것을 배웠습니다. Python의 성공은 Python이 파생하는 모든 언어의 성공을 의미한다고 할 수 있습니다. 마찬가지로 Ruby는 Python에서 차용한 것이며, Ruby의 성공은 어떤 측면에서는 Python의 성공을 의미하기도 합니다. 모든 언어는 강점과 약점을 지닌 하이브리드입니다. 동시에, 언어의 "좋음과 나쁨"에 대한 판단은 플랫폼, 하드웨어, 시대 등과 같은 외부 요인에 따라 달라지는 경우가 많습니다. 프로그래머들은 많은 언어 전쟁을 경험해 왔습니다. 실제로 다양한 언어를 열린 마음으로 받아들이면 언젠가는 프로그래머도 귀도처럼 자신의 언어를 섞어 쓸 수도 있을 것이다.

파이썬의 미래 운명이 어떻게 되든 파이썬의 역사는 이미 매우 흥미로운 소설이다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Python 객체지향다음 기사:Python 객체지향