파이썬 진행 경로-견습생부터 전문가까지


659

저는 1 년 반 동안 파이썬을 배우고, 일하고, 놀고있었습니다. 생물학자가 천천히 생물 정보학으로 전환하면서,이 언어는 실험실에서 내가 한 모든 주요한 공헌의 핵심이었습니다. 파이썬이 저에게 아름다운 해결책을 표현할 수있게하는 방식과 생각에서 실행 가능한 코드로 자연스럽게 흘러 갈 수있게하는 언어의 의미론에 어느 정도 사랑에 빠졌습니다.

내가 알고 싶은 것은이 포럼이나 다른 포럼에서 거의 보지 못한 질문에 대한 당신의 대답입니다. 이 질문은 파이썬 개선의 길을 가고 있지만 그의 다음 단계가 무엇인지 궁금한 사람에게는 나에게 중심적인 것 같습니다.

내가 먼저 묻고 싶지 않은 것을 요약 해 보겠습니다.)

  • 파이썬을 빨리 배우는 법을 알고 싶지 않습니다.
  • 언어에 익숙해지는 가장 좋은 방법을 찾고 싶지도 않습니다
  • 마지막으로, 나는 '모든 것을 수행하는 하나의 트릭'접근법을 알고 싶지 않습니다.

내가 당신의 의견을 알고 싶은 것은 :

한 번에 한 단계 씩 더 나은 파이썬 코더가 되려면 지속적으로 개선하기 위해 견습에서 전문가 상태 (전문가가 지시하는 위치를 자유롭게 중지)에 이르기까지 Python 여행사에게 권장하는 단계는 무엇입니까? SO에있는 사람들 중 일부는 파이썬 능력을 숭배 할 가치가있는 것처럼 보입니다.

내가 즐길 수있는 종류의 답변 (하지만 독자를 놀라게 할 것 : P)은 다음과 같이 다소 형식이 지정됩니다.

  • 이것을 읽으십시오 (예 : python tutorial), 그런 종류의 세부 사항에주의하십시오.
  • 많은 시간 / 문제 / 코드 라인을위한 코드
  • 그런 다음이 내용을 읽으십시오 (예 :이 책 또는 해당 책).
  • 몇 가지 실제 문제 해결
  • 그런 다음 Y를 읽으십시오.
  • 이러한 개념을 파악하십시오
  • X 시간 코드
  • 그런 기초로 돌아가거나 더 나아가십시오 ...
  • (당신은 요점을 얻는다 :)

나는 진심으로 (진정한 노력으로) 지속적으로 발전하기 위해 다양한 단계에서 정확히 무엇에주의를 기울여야하는지에 대한 당신의 의견을 아는 것이 정말로 중요합니다. 특정 분야의 전문 분야 출신이라면이 분야에서 적절하다고 생각되는 경로를 논의하십시오.

편집 : 당신의 큰 입력 덕분에 나는 파이썬 개선 트랙으로 돌아 왔습니다! 정말 고맙습니다!

답변:


471

파이썬 마스터 프로세스가 다음과 같이 진행되었다고 생각했습니다.

  1. 발견의 지능형리스트
  2. 발견의 발전기
  3. 맵에 맵 통합 , 축소, 필터링, 반복, 범위, xrange를 자주 코드에 통합
  4. 디스 커버 장식
  5. 재귀 함수를 많이 작성하십시오.
  6. 발견의 itertoolsfunctools
  7. 읽기 실제 세계 하스켈 ( 무료 온라인 읽기 )
  8. 수많은 고차 함수, 재귀 및 기타를 사용하여 모든 이전 Python 코드를 다시 작성하십시오.
  9. 그들이 당신에게 파이썬 클래스를 제시 할 때마다 큐비클을 귀찮게하십시오. 그것이 사전과 일부 기능으로 더 잘 구현 될 수 있다고 주장하십시오. 기능적 프로그래밍을 수용하십시오.
  10. 전략 패턴을 재발견하고 Haskell 이후 잊어 버리기 위해 노력했던 명령형 코드의 모든 것을 다시 발견하십시오 .
  11. 균형을 찾으십시오.

@ wheaties 슈퍼 좋은 목록, 그것을 사랑해! 함수형 프로그래밍에 대한 편견이 있고 객체 지향과는 거리가 있습니다. 특별한 이유가 있습니까? 하스켈 경험이이 접근 방식으로 당신을 다시 연결 시켰습니까?
Morlock

8
예, 아니오 함수형 프로그래밍에 가까워 질수록 더 좋고 간결한 코드를 작성합니다. 즉, 사물을보다 명확하게 표현할 수있는 곳이 많이 있습니다. Real World Haskell이 Python 컨벤션에서 매진 된 이유는 더 나은 프로그래머입니다. 내 조언, 가능한 한 많은 파이썬 측면을 탐색 한 다음 기능적 언어를 사용해보십시오.
wheaties

@wheaties는 요청한 형식에 가까워지고 매우 고무적이기 때문에 답장을받습니다. 답장을 보내 주셔서 감사합니다.
Morlock

1
초보자 : 사전 다음에 ... Mastery : 메타 프로그래밍
gath

>> 사전과 몇 가지 기능으로 "더 나은"구현을 할 수 있을지도 모릅니다. <<?
Koobz

108

파이썬 지식을 발전시키는 좋은 방법 중 하나는 이미 사용하고있는 라이브러리, 플랫폼 및 프레임 워크의 소스 코드파헤치는 것입니다.

예를 들어 Django에 사이트를 구축하는 경우 Django 가 문제의 기능을 구현하는 방법을 살펴보면 많은 질문에 답할 수 있습니다.

이렇게하면 새로운 관용구, 코딩 스타일 및 Python 트릭을 계속 선택할 수 있습니다. (일부는 좋을 것이고 어떤 사람은 나쁠 것입니다.)

그리고 소스에서 이해하지 못하는 Pythony를 발견하면 #python IRC 채널 로 이동하면 설명 할 수있는 "언어 변호사"가 많이 있습니다.

수년에 걸쳐 이러한 작은 설명이 누적되면 언어와 모든 언어에 대해 더 깊이 이해하게됩니다.


1
django 확장 / 플러그인을 단순히 설치하는 대신 git 브랜치를 사용하여 수동으로 코드를 추가하십시오. 이렇게하면 프로젝트에 추가 할 코드 를 실제로 읽게 됩니다.
g33kz0r

14
우리 중 나머지 사람들이 질문으로부터 혜택을 볼 수있을 때 왜 IRC를 사용 하는지 궁금 하십니까?
tshepang

1
"이디엄, 스타일 및 트릭"에 +1 접촉하는 실제 사람들에 의해 만들어진 실제 문화를 사는 것은 (이 접촉이 대부분 서로의 코드를 읽는 것을 의미하더라도) 시간이 지남에 따라 인간의 지식을 발전시킨 것입니다.
heltonbiker

92

메모리 관리와 관련하여 파이썬의 데이터 유형과 그 역할 이해

커뮤니티의 일부 사용자가 알고 있듯이, 나는 가장 인기있는 코스 인 포괄적 인 인트로 + 중급 코스와 다양한 응용 프로그램 개발 영역을 소개하는 "고급"코스 인 파이썬 코스를 가르칩니다 .

아주 자주, "입문 또는 고급 과정을 수강해야합니까? 이미 1-2 년 동안 Python을 프로그래밍 해 왔으며 소개가 너무 단순하다고 생각합니다. " 고급으로 바로 건너 뛰고 싶습니다 ... 어떤 코스 추천 하시겠습니까?"

그들의 질문에 대답하기 위해, 나는이 분야에서 그들이 얼마나 강했는지를 조사합니다. 실제로 그들이 어떤 고급 과정에 대한 준비가되어 있는지를 측정하는 가장 좋은 방법이 아니라, 기본 지식이 파이썬의 객체와 메모리 모델은 초보자뿐만 아니라 그 이상을 겪은 사람들이 작성한 많은 파이썬 버그 의 원인 입니다.

이를 위해 간단한 2 부 퀴즈 문제를 제시합니다. Ex1 : x = 42;  y = x;  x + = 1;  인쇄 x, y Ex2 : x = [1,2,3]; y = x; x [0] = 4; 인쇄 x, y

여러 번, 그들은 결과를 얻을 수 있지만 응답이 더 어려워지고 더 중요한 이유무엇입니까 ? 나는 "왜"가 80 %의 신용을 얻는 동안 나는 결과의 20 %로 답을 낼 것입니다. 그들이 왜 파이썬 경험에 관계없이 그 이유를 알 수 없다면, 나는 객체와 메모리 관리에 대해 한 번의 강의를 통해 당신이 대답 할 수있는 시점까지 사람들을 포괄적 인 인트로 + 중급 코스로 안내합니다. 충분한 자신감을 가지고 결과와 그 이유. (1-2 년 후에 파이썬의 구문을 알고 있기 때문에 파이썬이 어떻게 작동하는지에 대해 더 잘 이해할 때까지 "초보자"레이블을 넘어 설 준비가되지 않습니다.

비슷한 답변을 요구하는 후속 문의는 더욱 어렵습니다.

실시 예 3

x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y

다음으로 추천 할 주제는 참조 횟수를 잘 이해하고, "인터 닝"이 의미하는 바를 이해하는 것 (그러나 반드시 사용하지는 않음), 얕고 깊은 사본 (위의 예 3에서와 같이)에 대해 배우고 마지막으로 다양한 유형과 언어로 구성, 즉리스트 대 튜플, 딕트 대 세트,리스트 이해 대 생성기 표현, 반복자 대 생성기 등; 그러나 다른 모든 제안은 다른 시간에 대한 또 다른 게시물입니다. 그 동안 도움이 되길 바랍니다. :-)

추신. 나는 다른 프로젝트의 소스 코드를 연구 할뿐만 아니라 내성에 더 친밀 해지기위한 다른 응답에 동의하고 두 제안에 강력한 "+1"을 추가합니다!

pps. 좋은 질문 BTW. 나는 처음에 이런 식으로 뭔가를 물었을 정도로 똑똑했으면 좋았지 만, 그것은 오래 전 일이었고, 지금은 수년간의 풀 타임 파이썬 프로그래밍으로 다른 사람들을 돕기 위해 노력하고 있습니다!


웨슬리 천! Morlock, 이것은 당신이 당신의 질문의 대담한 부분에서 이야기하고있는 사람입니다. 매우 재능있는 교사이자 깊이 알고있는 사람인 나는 책에서 큰 힘을 얻었습니다.
마운트 해제

thx @bvmou! 다른 사람들처럼이 학습 과정을 거쳐야했기 때문에이 질문에 대답 할 수있었습니다. :-) corepython.com 연결 용 thx ! :-)
wescpy

@wescpy example3의 결과를 설명하거나이 자료를 배울 수있는 좋은 자료를 알려줄 수 있습니까? 감사합니다.
Sankalp

1
비결은 객체 자체가 아니라 객체 참조 만 복사한다는 것입니다. 그것이 전부입니다 ... 도움이되기를 바랍니다! 나는 실제로 몇 주 전에 OSCON에서 이것에 대해 이야기했습니다. 누군가가 회의에서 가장 높은 등급의 Python 토크라고 말했을 때 나는 놀랐습니다! 여기에서 슬라이드를 다운로드 할 수 있습니다. oscon.com/oscon2013/public/schedule/detail/29374
wescpy

출력은 SyntaxError입니다 : 잘못된 구문입니까? 왜? 파이썬 3을 사용했기 때문에 print진술이 아닙니다.
Konrad Borowski


59

내성 이해

  • dir()동등한 것을 쓰십시오
  • type()동등한 것을 쓰십시오
  • "원숭이 패치" 하는 방법을 알아
  • dis모듈을 사용하여 다양한 언어 구성이 어떻게 작동하는지 확인하십시오

이런 일을한다면

  • 파이썬이 어떻게 구현되는지에 대한 좋은 이론적 지식을 제공하십시오.
  • 저수준 프로그래밍에 대한 실질적인 경험을 제공합니다
  • 파이썬 데이터 구조에 대한 직관적 인 느낌을줍니다

1
type()메타 클래스의 전체 스펙을 취하면 매우 어려운 "등가 쓰기 " type!
asmeurer 2016 년

48
def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?

4
guru ()가 전달되어야합니다. 전문가를 설명 할 수있는 것은 없습니다.
inv

1
당신이 GIL를 해결한다면 나는 수준에서 그 박았 당신이 생각하는 고등 전문가보다는,하지만 단지 자비로운 독재자 아래. ;)
Adam Parkin

41

내가 당신에게 줄 수있는 가장 간단하고 효과적인 조언을 줄 것입니다 : code .

코딩 만하면 언어를 이해하는 데 도움이됩니다 . 적극적으로 코딩을 즐기고, 영감을 얻고, 질문하고, 스스로 답을 찾아야합니다.

한 시간 남았나요? 문자열을 바꾸는 코드를 작성하고 가장 최적의 솔루션을 찾으십시오. 무료 저녁? 웹 스크래핑을 시도해보십시오. 다른 사람들의 코드를 읽으십시오. 그들이 어떻게하는지보십시오. 무엇을할지 스스로에게 물어보십시오.

컴퓨터가 지루할 때 IDE와 코드 스톰을 엽니 다. 흥미롭고 도전적인 아이디어를 적었습니다. URL 단축기? 물론 할 수 있습니다. 아, 나는 부작용으로 숫자를 한 염기에서 다른 염기로 변환하는 방법을 배웠습니다!

기술 수준에 상관없이 유효합니다. 당신은 학습을 멈추지 않습니다. 여가 시간에 적극적으로 코딩하면 약간의 추가 노력으로 언어를 이해하고 궁극적으로 전문가가 될 수 있습니다. 지식과 재사용 가능한 코드를 구축하고 관용구를 암기합니다.


24

과학에 파이썬을 사용하고 있다면 (그것이 당신처럼 보입니다) 그중 일부는 과학 라이브러리를 배우고 이해하는 것이 될 것입니다.

  • numpy
  • scipy
  • matplotlib
  • mayavi / mlab
  • 차코
  • 사이 톤

올바른 라이브러리를 사용하고 코드를 벡터화하는 방법을 아는 것은 과학 컴퓨팅에 필수적입니다.

나는 일반적인 파이썬 방식 (객체 지향 접근법, 목록, 반복자)으로 큰 숫자 데이터 세트를 처리하는 것이 매우 비효율적이라고 덧붙이고 싶었습니다. 과학 컴퓨팅에서는 대부분의 기존 파이썬 코더가 데이터에 접근하는 방식과 크게 다른 방식으로 코드를 구성해야 할 수 있습니다.


감사. 대용량 데이터 세트의 메모리 사용 효율성을 높이려면 numpy와 scipy를 배우는 데 시간이 걸릴 것입니다!
Morlock

1
아마도 팬더와 IPython을 목록에 추가하십시오.
Eric Wilson



12

모든 데이터 유형 및 구조를 철저히 이해

모든 유형과 구조에 대해 유형 또는 데이터 구조의 모든 측면을 다루는 일련의 데모 프로그램을 작성하십시오. 이렇게하면 각각의 블로그 노트를 작성하는 것이 좋습니다. 많은 사람들에게 유용 할 것입니다!


이것은 파이썬뿐만 아니라 추상적 의미에서도 유용합니다.
Humphrey Bogart

1
이것은 또한 새로운 구조를 찾을 때마다 그것을 사용하는 방법을 보여주는 장난감 프로그램을 작성합니다. 그리고 github 저장소에 온라인으로 넣으십시오 : github.com/pzelnip/MiscPython
Adam Parkin

10

파이썬 사이트에서 자습서를 수행하여 여름에 파이썬을 먼저 배웠습니다 (슬프게도 더 이상 찾을 수없는 것 같아서 링크를 게시 할 수 없습니다).

나중에, python은 대학에서 첫 해에 강의를 받았습니다. 그해 여름에 PythonChallengeGoogle Code Jam의 문제로 연습했습니다 . 이러한 문제를 해결하는 것은 알고리즘 관점뿐만 아니라 파이썬이 무엇을 할 수 있는지 배우는 관점뿐만 아니라 파이썬을 최대한 활용하기 위해 그것을 조작하는 방법에서도 도움이됩니다.

비슷한 이유로 코드 골프 도 잘 작동 한다고 들었지만 직접 시도한 적이 없습니다.


3
이 튜토리얼을 의미합니까? 파이썬 2 : docs.python.org/tutorial/index.html ; 파이썬 3 : docs.python.org/py3k/tutorial/index.html .
Humphrey Bogart

10

학습 알고리즘 / 수학 / 파일 IO / Pythonic 최적화

이것은 당신에게 전문가가 될 수는 없지만 시작하기 위해 Project Euler 문제를 해결해보십시오 . 처음 50 정도는 고등학교 수학이 괜찮고 Google에 대한 방법을 알고 있다면 세금을 부과해서는 안됩니다. 하나를 풀면 더 많은 것을 가르 칠 다른 사람들의 솔루션을 살펴볼 수있는 포럼에 들어갑니다. 사람들이 스스로 해결하도록 장려하는 아이디어이므로 괜찮은 태도를 취하고 솔루션을 게시하지 마십시오.

무차별 대입 알고리즘을 사용하면 파이썬에서 일하도록 강요하는 것은 용서되지 않을 것입니다. 이를 통해 메모리에 대용량 데이터 세트를 배치하고 사전과 같은 빠른 언어 기능을 통해 효율적으로 액세스 할 수 있습니다.

이 일을 직접 통해 나는 배웠습니다.

  • 파일 IO
  • 동적 프로그래밍과 같은 알고리즘 및 기술
  • 파이썬 데이터 레이아웃
    • 사전 / 해시 맵
    • 기울기
    • 튜플
    • 튜플 목록에 대한 사전과 같은 다양한 조합
  • 발전기
  • 재귀 함수
  • 파이썬 라이브러리 개발
    • 파일 시스템 레이아웃
    • 통역사 세션 중에 다시로드

또한 매우 중요

  • C 또는 C ++를 포기하고 사용할 때!

이 모든 것은 생물 정보학과 관련이 있어야합니다

분명히 나는 ​​그 경험에서 파이썬의 OOP 기능에 대해 배우지 못했습니다.


3
나는 PE 사이트를 좋아하지만 솔직하게 말하면 프로그래밍 사이트가 아닌 수학 사이트입니다. 대부분의 문제 (또는 내가 한 것 중 적어도 대부분)는 실제로 프로그래밍 언어와 관련된 것보다 약간의 수학 요령을 아는 것으로 요약됩니다. 종종 포럼의 좋은 솔루션은 순진한 솔루션 등으로 인해 익사합니다.
Adam Parkin

반대로 나는 프로그래밍과 수학 기술의 적용과 실제 문제를 해결하기 위해 가장 중요한 두 가지조합을 포함한다는 것을 알았습니다 . 수학 기술이 열악한 경우 PE를 사용하여 Python 프로그래밍을 배울 수는 없지만 언어를 사용하여 언어를 사용하는 방법 만 배우면 수학이 충분할 때 이상적입니다.
Captain Lepton

7

" Python을 사용한 생물 정보학 프로그래밍 "책을 보셨습니까 ? 포커스 그룹의 정확한 멤버 인 것 같습니다.


2
얼마 전에이 책을 빠르게 살펴본 후에이 책이 그리 흥미롭지 않다는 것을 알게되었습니다. 그것은 초보 Python 사용자를 대상으로하며 문제 자체는 그리 흥미롭지 않습니다. 너무 나쁘다. 이것은 분명히 파이썬 사용이 증가하고있는 영역이다. 더 자극적 인 책은 좋았을 것입니다.
Morlock

6

이미 많은 독서 자료를 가지고 있지만, 더 많이 다룰 수 있다면, 파이썬 개선 제안서, 특히 "완료된"PEP 및 "지연, 포기, 철회 및 거부 됨"을 읽고 파이썬의 진화에 대해 배우는 것이 좋습니다. PEP.

언어가 어떻게 바뀌 었는지, 내려진 결정과 그 이론적 근거를 살펴보면 파이썬의 철학을 흡수하고 "아이디 오틱 파이썬"이 어떻게 발생하는지 이해할 것입니다.

http://www.python.org/dev/peps/



3

파이썬을 배우기 시작한 다른 사람에게 가르치는 것은 항상 아이디어를 명확하게 이해하는 좋은 방법이며 때로는 파이썬에 대한 개념적인 생각을 다시 생각하게하는 학생들로부터 많은 깔끔한 질문을받습니다.


2

정확히 당신이 요구하는 것은 아니지만 좋은 조언이라고 생각합니다.

다른 언어를 배우십시오. 너무 중요하지 않습니다. 각 언어에는 배울 수있는 고유 한 아이디어와 규칙이 있습니다. 언어의 차이점에 대해 배우고 더 중요 why하게 다릅니다. Haskell과 같은 순전히 기능적인 언어를 사용해보고 부작용이없는 기능의 이점 (및 과제)을 확인하십시오. 다른 언어에서 배운 것들 중 일부를 파이썬에 어떻게 적용 할 수 있는지 살펴보십시오.


1
Haskell은 흥미롭고 Lisp에 관심이 있지만, 계속 나아 가기 전에 파이썬 세계에서 여전히 발견해야 할 것이 많다고 생각합니다.
Morlock

2
landoflisp (.com)이 최근에 관심을 끌었습니다.
Jiaaro

리스프에 대한 사람들의 생각, 내가 계획하는 것이 좋습니다 경우
Tharindu Rusira

2

구문의 표현력을 탐색하도록 강요하는 무언가로 시작하는 것이 좋습니다. 파이썬은 동일한 기능을 작성하는 여러 가지 방법을 허용하지만 가장 우아하고 빠른 단일 접근 방식이 종종 있습니다. 다른 언어의 관용구에 익숙하다면, 더 나은 방법을 찾거나 받아들이지 않을 것입니다. 주말에 처음 20 개 정도의 프로젝트 오일러 문제를 해결하고 Google App Engine에서 Django를 사용하여 간단한 웹앱을 만들었습니다. 이것은 당신을 도제에서 초보자로 데려다 줄 것입니다. 그러나 더 고급 웹 응용 프로그램을 계속 만들고 더 고급 프로젝트 오일러 문제를 해결할 수 있습니다. 몇 달 후 나는 주말 대신 한 시간 만에 처음 20 개의 PE 문제를 처음부터 다시 해결했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.