programing

Python 진행 경로 - 견습생에서 구루로

kingscode 2023. 2. 1. 22:03
반응형

Python 진행 경로 - 견습생에서 구루로

저는 Python을 1년 반 동안 배우고, 일하고, 플레이하고 있습니다.생물정보학으로 서서히 방향을 틀고 있는 생물학자로서 이 언어는 제가 연구실에서 한 모든 주요 공헌의 핵심이 되어 왔습니다.저는 파이썬이 아름다운 해결책을 표현할 수 있게 해주는 방법과 생각에서 실행 가능한 코드로 자연스럽게 흐를 수 있게 해주는 언어의 의미론에 거의 반했습니다.

제가 알고 싶은 것은 이 포럼이나 다른 포럼에서는 거의 볼 수 없었던 질문에 대한 당신의 답변입니다.이 질문은 Python의 개선으로 가는 길에 있는 모든 사람에게 중요한 것으로 보이지만, Python의 다음 단계는 무엇이어야 하는지 궁금해 하는 사람에게는 중요합니다.

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

  • Python을 빨리 배우는 방법은 알고 싶지 않습니다.
  • 또한 언어를 익힐 수 있는 최선의 방법을 찾고 싶지도 않다.
  • 마지막으로, 저는 '모든 것을 할 수 있는 한 가지 기술' 접근 방식을 알고 싶지 않습니다.

당신의 의견을 알고 싶습니다.

Python 기술자에게 추천할 수 있는 단계는 무엇입니까? 견습에서 구루 지위까지(자신의 전문지식이 지시하는 모든 것을 자유롭게 중지하고) Python 기술자가 한 번에 한 단계씩 더 나은 Python 코더가 되도록 하기 위해서입니다.SO의 몇몇 사람들은 Python의 능력에 대해 거의 숭배할 가치가 있는 것처럼 보입니다. 우리를 가르쳐 주세요:)

제가 좋아하는 답변(하지만 독자층을 놀라게 해 주세요:P)의 형식은 대략 다음과 같습니다.

  • 이것을 읽고(예를 들어 python tutorial), 그런 종류의 세부 사항에 유의하십시오.
  • 많은 시간/문제/코드의 행에 대한 코드
  • 그리고 이 책(예: 이 책 또는 저 책)을 읽습니다만, 이번에는 주의해 주세요.
  • 몇 가지 실제 문제에 대처하다
  • 그런 다음 Y를 읽습니다.
  • 이러한 개념을 반드시 파악해 주십시오.
  • X시간 코드
  • 이러쿵저러쿵 기본으로 돌아가거나 더 나아가서...
  • (요점은 이해하셨을 겁니다).

항상(물론, 충분한 노력을 기울여) 진행하기 위해서, 다양한 단계에서 어떤 점에 주의할 필요가 있는지, 당신의 의견을 알고 싶습니다.특정 분야의 전문 지식을 가진 경우 이 분야에서 적절한 경로에 대해 논의합니다.

편집: 여러분의 훌륭한 조언 덕분에 Python의 개선 궤도로 돌아왔습니다!정말 감사합니다!

Python의 숙달 과정은 다음과 같다고 생각했습니다.

  1. 목록 통합 검색
  2. 생성기 검출
  3. 지도, 축소, 필터링, 반복, 범위, xrange를 코드에 자주 포함
  4. 데코레이터 검색
  5. 재귀 함수 쓰기, 많이
  6. 반복 도구 및 기능 도구 검색
  7. Real World Haskell 읽기 (온라인에서 무료로 읽기)
  8. 오래된 Python 코드를 모두 고차 함수, 재귀 등으로 다시 쓰십시오.
  9. 큐비클 친구들이 Python 클래스를 발표할 때마다 짜증나게 하세요.사전과 몇 가지 기능으로 구현하는 것이 더 나을 수 있다고 주장합니다.기능적 프로그래밍을 수용합니다.
  10. 전략 패턴재발견하고 해스켈 이후 잊으려고 애쓰던 필수 코드에서 그 모든 것들을 찾아보세요.
  11. 균형을 찾아라.

Python 지식을 넓히는 좋은 방법 중 하나는 이미 사용하고 있는 라이브러리, 플랫폼 프레임워크의 소스 코드를 조사하는 것입니다.

예를 들어, 만약 여러분이 장고에 사이트를 만들고 있다면, 장고가 문제의 기능을 어떻게 구현하는지 살펴봄으로써 여러분을 곤혹스럽게 할 수 있는 많은 질문들에 답할 수 있습니다.

이렇게 하면 새로운 관용어, 코딩 스타일, 파이썬 트릭을 계속 습득할 수 있습니다.(좋은 것도 있고 나쁜 것도 있습니다.)

그리고 출처에서 이해하지 못하는 피토니가 발견되면 #python IRC 채널로 건너가면 기꺼이 설명하는 많은 "언어 변호사"를 찾을 수 있을 것이다.

몇 년에 걸쳐 이러한 작은 명확성이 축적되면 언어 및 언어의 모든 세부 사항에 대해 훨씬 더 깊이 이해할 수 있습니다.

메모리 관리에 관한 Python의 데이터 유형과 그 역할을 보다 상세하게 이해한다.

커뮤니티에 계신 분들은 아시겠지만 저는 파이썬 강좌를 가르치고 있습니다.가장 인기 있는 강좌는 포괄적인 Intro+입니다.중급 과정 및 응용 프로그램 개발의 다양한 분야를 소개하는 "상급" 과정입니다.

저는 종종 다음과 같은 질문을 받습니다. "인트로를 들을까요, 아니면 상급 과정을 들을까요?Python을 프로그래밍한 지 1~2년이 지났습니다만, 인트로가 너무 심플하다고 생각하기 때문에, 곧바로 어드밴스로 넘어가고 싶습니다.어떤 코스를 추천하시겠습니까?

그들의 질문에 답하기 위해, 나는 그들이 이 분야에서 얼마나 강한지 조사한다. - 그것은 그들이 어떤 고급 코스에 대한 준비가 되어 있는지 측정하는 가장 좋은 방법이라는 것이 아니라, Python의 오브젝트와 메모리 모델에 대한 그들의 기본 지식이 얼마나 좋은지를 보기 위해서이다. 이것은 초보자뿐만 아니라 많은 Python 버그를 쓰는 원인이다.그걸 넘어섰어요

즉 2부 퀴즈 문제를 .Ex1: x=42; y=x; x+=1; x, y 인쇄: x=[1, 2, 3]; y=x[0]=4; x, y 인쇄

많은 경우 출력을 얻을 수 있지만, 왜 응답이 더 어렵고 더 중요한지...저는 "왜"가 80%의 신용을 얻는 동안, 그 결과물을 20%의 답으로 평가하겠습니다.Python이 어떤 경험을 가지고 있어도 이유를 알 수 없다면, 저는 항상 포괄적인 인트로+중급 코스로 안내할 것입니다. 왜냐하면 저는 출력과 그 이유에 대해 충분히 확신을 가지고 대답할 수 있는 수준까지 오브젝트와 메모리 관리에 대한 강의를 한 번 하기 때문입니다.(1-2년 후의 Python의 구문을 안다고 해서 Python이 커버 속에서 어떻게 동작하는지를 더 잘 이해할 때까지는 '초보자' 라벨을 넘어설 준비가 되지 않습니다.)

유사한 답변을 요구하는 후속 조사는 더욱 어렵다.

예 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과 같다), 그리고 마지막으로, 언어내의 다양한 타입과 구조간의 상호 관계(리스트 대 tuples, dicts vs sets, list)입니다.이온 대 발생기 발현, 반복기 대 발생기 등그러나 다른 모든 제안들은 다음 기회에 게시할 수 있습니다.그 사이에 도움이 되길 바랍니다! :-)

ps. 자기성찰과 다른 프로젝트의 소스 코드를 연구하기 위한 다른 응답에 동의하며 두 제안 모두에 강한 "+1"을 추가합니다.

pps. 좋은 질문입니다.처음에는 이런 질문을 할 정도로 똑똑했으면 좋았을 텐데, 오래 전 일이라 지금은 오랜 세월 파이썬 프로그래밍으로 다른 사람들을 도우려고 하고 있어!!

Peter Norvig의 10년 후 마스터 프로그래머가 되는 것에 대한 에세이를 보세요: http://norvig.com/21-days.html.어떤 언어에도 해당된다고 장담합니다.

Introspection의 이해

  • 를 쓰다dir()
  • 를 쓰다type()
  • 어떻게 하면 '고무'를 할 수 있는지 알아내다
  • dis

이런 것들을 하면

  • python이 어떻게 구현되는지에 대한 좋은 이론적 지식을 제공합니다.
  • 하위 레벨 프로그래밍에서 좋은 실제 경험을 제공합니다.
  • Python 데이터 구조에 대한 직관적인 느낌을 제공합니다.
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?

가장 간단하고 효과적인 조언을 드리겠습니다. 코드입니다.

코드화를 통해서만 언어를 더 잘 사용할 수 있습니다(이것은 언어를 이해하는 것을 의미합니다.코딩을 적극적으로 즐기고, 영감을 받고, 질문을 하고, 스스로 답을 찾아야 합니다.

한 시간 정도 여유가 있나요?문자열을 반전시키는 코드를 작성하여 최적의 솔루션을 찾아냅니다.무료 저녁?웹 스크랩을 해보는 건 어때?다른 사람의 코드를 읽습니다.그들이 어떻게 하는지 봐.어떻게 할지 스스로에게 물어보세요.

컴퓨터가 지루할 때는 IDE를 열고 코드 스톰을 실행합니다.흥미롭고 도전적으로 들리는 아이디어를 적어 둡니다.URL 단축기?그럼요, 할 수 있어요.아, 한 베이스에서 다른 베이스로 변환하는 법을 부작용으로 배웠어요!

이것은 스킬 레벨에 관계없이 유효합니다.당신은 배우는 것을 멈추지 않아요.여가 시간에 적극적으로 코딩함으로써 당신은 약간의 노력만으로 언어를 이해할 수 있게 되고, 궁극적으로는 전문가가 될 것입니다.당신은 지식과 재사용 가능한 코드를 쌓고 숙어를 외울 것입니다.

만약 당신이 과학을 위해 비단뱀을 사용하고 있다면(당신이 그런 것처럼 보이는) 과학 라이브러리를 배우고 이해하는 것 중 일부가 될 것입니다. 저에게 이것은 다음과 같습니다.

  • 수치
  • 삐걱거리다
  • matplotlib
  • 마야비/mlab
  • 차코
  • 시톤

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

덧붙여, 큰 수치 데이터 세트를 일반적인 피조어 방식(객체 지향 어프로치, 리스트, 반복자)으로 취급하는 것은 매우 비효율적일 수 있습니다.과학 컴퓨팅에서는 대부분의 기존 파이썬 코더가 데이터에 접근하는 방식과 크게 다른 방식으로 코드를 구성해야 할 수 있습니다.

구글은 최근 온라인 Python 클래스("학습 과정"에서와 같은 클래스")를 발표했습니다.

http://code.google.com/edu/languages/google-python-class/

이것이 당신의 질문에 대한 완전한 답변은 아니라는 것을 알지만, 저는 이것이 훌륭한 시작점이라고 생각합니다!

Twisted를 다운로드하여 소스 코드를 확인합니다.그들은 꽤 진보된 기술을 사용한다.

모든 데이터 유형과 구조를 완전히 이해하다

모든 유형 및 구조에 대해 유형 또는 데이터 구조의 모든 측면을 연습하는 일련의 데모 프로그램을 작성합니다.이렇게 하면, 각각의 블로그에 메모를 남기는 것이 좋을지도 모릅니다.그것은 많은 사람들에게 유용할 것이다!

Python 사이트에서 튜토리얼을 하는 것만으로 여름 동안 Python을 처음 배웠어요(아쉽게도, 그것을 찾을 수 없을 것 같아서 링크를 올릴 수 없습니다).

나중에 대학교 1학년 과정 중 하나에서 비단뱀을 배웠다.그 후 여름, Python Challenge와 Google Code Jam의 문제를 연습했습니다.이러한 문제를 해결하는 것은 알고리즘적인 관점뿐만 아니라 Python이 무엇을 할 수 있는지, Python을 최대한 활용하기 위해 Python을 조작하는 방법을 배우는 관점에서도 도움이 됩니다.

비슷한 이유로 코드 골프도 효과가 있다고 들었습니다만, 직접 해 본 적은 없습니다.

학습 알고리즘/산술/파일 IO/피톤 최적화

이것은 당신을 전문가로 만들지는 않지만, 시작하기 전에 프로젝트 오일러 문제를 풀어보세요. 만약 당신이 괜찮은 고등학교 수학을 가지고 있고 구글을 할 줄 안다면 처음 50개 정도는 당신에게 부담이 되지 않을 것입니다.문제를 해결하면 포럼에 들어가 다른 사람의 솔루션을 살펴볼 수 있습니다.이 포럼에서는 더 많은 것을 배울 수 있습니다.하지만 사람들이 스스로 해결하도록 장려하는 것이므로, 예의 바르게 행동하고 해결책을 게시하지 마세요.

만약 당신이 brute-force 알고리즘을 사용한다면 Python에서 억지로 일하는 것은 용서할 수 없을 것이다.이를 통해 메모리에 대용량 데이터 세트를 배치하고 사전과 같은 빠른 언어 기능을 사용하여 효율적으로 액세스하는 방법을 배울 수 있습니다.

이 일을 하면서 나는 배웠다:

  • 파일 IO
  • 동적 프로그래밍 등의 알고리즘 및 기술
  • Python 데이터 레이아웃
    • 사전/해시맵
    • 리스트
    • 튜플
    • 사전에서 튜플 목록까지 다양한 조합
  • 제너레이터
  • 재귀 함수
  • Python 라이브러리 개발
    • 파일 시스템 레이아웃
    • 인터프리터 세션 중 새로고침

그리고 또한 매우 중요한 것은

  • 포기하고 C나 C++를 사용해야 할 때!

이 모든 것이 생물정보학(Bio Informatics)과 관련되어야 한다.

그 경험에서 파이썬의 OOP 기능에 대해 배운 것은 아닙니다.

"파이썬을 이용한 생물정보학 프로그래밍"이라는 책을 본 적이 있습니까?포커스 그룹의 멤버인 것 같네요

이미 많은 읽기 자료를 가지고 계시지만, 더 많이 다룰 수 있다면 Python Enhancement Proposals, 특히 "Finished" PEP와 "Deferred, Abbanded, Rejected" PEP를 읽어보시고 Python의 진화에 대해 알아보시기 바랍니다.

언어가 어떻게 변했는지, 내린 결정과 그 이유를 보면, 당신은 Python의 철학을 흡수하고, "이성적인 Python"이 어떻게 생겨났는지 이해할 수 있을 것이다.

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

Python을 사용하여 http://challenge.greplin.com/을 시도합니다.

Python을 배우기 시작한 다른 사람에게 가르치는 것은 당신의 아이디어를 명확하게 하기 위한 좋은 방법이며, 때때로 저는 학생들로부터 Python에 대한 개념적인 것들을 다시 생각하게 하는 많은 질문들을 받습니다.

정확히 당신이 원하는 건 아니지만 좋은 조언이라고 생각해요.

다른 언어를 배우면 어느 것이든 상관없다.각각의 언어에는 여러분이 배울 수 있는 그들만의 아이디어와 관습이 있습니다.언어의 차이점 및 보다 중요한 점을 학습합니다.why그들은 달라요.Haskell과 같이 완전히 기능적인 언어를 사용해 보고, 부작용 없이 기능의 장점(과제)을 몇 가지 확인하세요.다른 언어에서 배운 내용을 Python에 적용하는 방법을 확인하십시오.

구문의 표현력을 탐구하도록 강요하는 것부터 시작할 것을 권장합니다.Python은 동일한 기능을 여러 가지 방법으로 작성할 수 있지만, 가장 우아하고 빠른 단일 접근 방식이 종종 있습니다.만약 당신이 다른 언어의 숙어에 익숙하다면, 당신은 이러한 더 나은 방법을 찾거나 받아들이지 못할지도 모른다.나는 처음 20여 개의 프로젝트 오일러 문제를 터벅터벅 읽으며 주말을 보냈고 구글 앱 엔진에서 Django로 간단한 웹 앱을 만들었다.이것은 아마도 당신을 견습생에서 초보자로 이끌지만, 당신은 계속해서 다소 더 고급화된 웹 앱을 만들고 더 고급화된 프로젝트 오일러 문제를 해결할 수 있다.몇 달 후, 저는 돌아가서 처음 20개의 체육 문제를 주말이 아닌 1시간 만에 원점에서 풀었습니다.

언급URL : https://stackoverflow.com/questions/2573135/python-progression-path-from-apprentice-to-guru

반응형