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

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

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

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

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

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

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

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

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

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

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



답변

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

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

답변

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

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

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

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

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


답변

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

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

아주 자주, “입문 또는 고급 과정을 수강해야합니까? 이미 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. 나는 처음에 이런 식으로 뭔가를 물었을 정도로 똑똑했으면 좋았지 만, 그것은 오래 전 일이었고, 지금은 수년간의 풀 타임 파이썬 프로그래밍으로 다른 사람들을 돕기 위해 노력하고 있습니다!


답변

: 10 년 마스터 프로그래머가되기에 피터 노빅의 에세이를 확인 http://norvig.com/21-days.html을 . 모든 언어에 적용됩니다.


답변

내성 이해

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

이런 일을한다면

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

답변

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?


답변

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

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

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

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

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