Ścieżka rozwoju Pythona - od ucznia do guru

Od półtora roku uczę się, pracuję i bawię się Pythonem. Jako biolog powoli przechodząc do bioinformatyki, język ten był podstawą wszystkich głównych wkładów, jakie wniosłem w laboratorium. Mniej więcej zakochałem się w sposobie, w jaki Python pozwala mi wyrażać piękne rozwiązania, a także w semantyce języka, który pozwala na tak naturalny przepływ od myśli do wykonalnego kodu.

To co chciałbym wiedzieć to twoja odpowiedź na takie pytanie rzadko widziałem na tym lub innych forach. To pytanie wydaje mi się kluczowe dla każdego, kto jest na drodze do poprawy Pythona, ale kto zastanawia się, jakie powinny być jego kolejne kroki.

Podsumuję to, czego nie chcę najpierw zapytać;)

  • nie chcę wiedzieć, jak szybko nauczyć się Pythona
  • nie chcę też znaleźć najlepszego sposobu na zapoznanie się z językiem
  • wreszcie, nie chcę znać 'jednej sztuczki, która robi wszystko' podejdźcie.

Chcę poznać Twoją opinię na temat:

Jakie kroki poleciłbyś podróżnikowi Pythona, od stażu do statusu guru (możesz zatrzymać się tam, gdzie dyktuje to twoja wiedza), aby stale się doskonalić, stając się coraz lepszym koderem Pythona, krok po kroku. Niektórzy ludzie na tak prawie wydają się godni kultu za swoje umiejętności pytona, proszę oświeć nas :)

Takie odpowiedzi bym enjoy (ale nie krępuj się zaskoczyć czytelników :P), jest sformatowany mniej więcej tak:

  • przeczytaj to (np: samouczek Pythona), zwróć uwagę na tego rodzaju szczegóły
  • Code for so manytime/problems / lines of code
  • następnie przeczytaj to (np.: tę lub tamtą książkę), ale tym razem zwróć na to uwagę
  • rozwiązać kilka rzeczywistych problemów
  • Następnie przejdź do czytania Y.
  • pamiętaj, aby zrozumieć te pojęcia
  • Kod czasu X
  • wróć do takich i takie podstawy lub przejść dalej...
  • (rozumiesz:)

Naprawdę zależy mi na tym, aby poznać Twoją opinię na temat tego, na co dokładnie należy zwracać uwagę, na różnych etapach, aby stale się rozwijać (oczywiście z należytym wysiłkiem). Jeśli pochodzisz z określonej dziedziny wiedzy, omów ścieżkę, którą widzisz jako odpowiednią w tej dziedzinie.

EDIT: dzięki Twojemu wspaniałemu wkładowi, wróciłem do ścieżki ulepszania Pythona! Naprawdę doceniam!

 659
Author: Morlock, 2010-04-04

19 answers

Myślałem, że proces opanowania Pythona przebiegł tak:

  1. Odkryj składanie listy
  2. Odkryj Generatory
  3. Włącz map, reduce, filter, ITER, range, xrange często do kodu
  4. Odkryj Dekoratorzy
  5. zapis funkcji rekurencyjnych, wiele
  6. Odkryj itertools i functools
  7. Read Real World Haskell (Czytaj za darmo online )
  8. Przepisz cały swój stary kod Pythona za pomocą mnóstwa funkcji wyższego rzędu, rekurencji i tak dalej.
  9. Denerwuj swoich kolegów z boksu za każdym razem, gdy prezentują Ci zajęcia z Pythona. Twierdzić, że może być "lepiej" zaimplementowany jako słownik plus niektóre funkcje. Wykorzystaj programowanie funkcjonalne.
  10. Odkryj na nowo strategię wzór, a następnie wszystkie te rzeczy z kodu imperatywnego, o którym tak bardzo starałeś się zapomnieć po Haskell.
  11. Znajdź równowaga.
 471
Author: wheaties,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 10:28:40

Dobrym sposobem na pogłębienie wiedzy w Pythonie jest zagłębienie się w kod źródłowy bibliotek, platform i frameworków, których już używasz.

Na przykład, jeśli budujesz witrynę na Django, na wiele pytań, które mogą cię dręczyć, możesz odpowiedzieć patrząc na to, jak Django implementuje daną funkcję.

W ten sposób będziesz nadal podnosić nowe idiomy, style kodowania i sztuczki Pythona. (Niektóre będą dobre, a inne złe.)

I kiedy zobaczysz coś Pythony, czego nie rozumiesz w źródle, wskocz na kanał IRC # python, a znajdziesz mnóstwo "prawników językowych" chętnie wyjaśni.

Nagromadzenie tych małych wyjaśnień na przestrzeni lat prowadzi do znacznie głębszego zrozumienia języka i wszystkich jego tajników.
 108
Author: dkamins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 01:16:40

Zrozumieć (głębiej) typy danych Pythona i ich role w odniesieniu do pamięci mgmt

Jak niektórzy z Was w społeczności są świadomi, prowadzę kursy Pythona , z których najpopularniejsze to kompleksowy kurs Intro+Intermediate oraz kurs "advanced", który wprowadza różne obszary rozwoju aplikacji.

Dość często zadawane mi jest pytanie podobne do: "Czy powinienem wziąć twój kurs intro czy zaawansowany? I ' ve already been programowanie Pythona przez 1-2 lata, i myślę, że intro jest dla mnie zbyt proste, więc chciałbym przejść od razu do zaawansowanego... który kurs poleciłbyś ?"

Aby odpowiedzieć na ich pytanie, sprawdzam, jak silni są w tej dziedzinie - nie to, że jest to naprawdę najlepszy sposób, aby zmierzyć, czy są gotowi do dowolnego zaawansowanego kursu, ale aby zobaczyć, jak dobrze ich podstawowa wiedza jest o obiektach i modelu pamięci Pythona, który jest przyczyną wielu błędów Pythona napisanych przez ci, którzy nie są tylko początkujący, ale ci, którzy wyszli poza to.

Aby to zrobić, wskazuję im na proste 2-częściowe pytanie quizowe: Ex1: x=42; y = x; x+=1;print x,Y Ex2: x=[1,2,3]; y=x;x[0]=4; print x, y

Wiele razy są w stanie uzyskać wyjście, ale dlaczego jest trudniejsze i znacznie ważniejsze od odpowiedzi... Ważyłbym wynik jako 20% odpowiedzi, podczas gdy "dlaczego" dostaje 80% kredytu. Jeśli nie mogą zrozumieć dlaczego, niezależnie od tego, jak mają doświadczenie w Pythonie, zawsze będę kierować ludzi do kompleksowego intro + intermediate course ponieważ spędzam jeden wykład na temat obiektów i zarządzania pamięcią do punktu, w którym powinieneś być w stanie odpowiedzieć z wyjścia i dlaczego z wystarczającą pewnością. (Tylko dlatego, że znasz składnię Pythona po 1-2 latach, nie sprawia, że jesteś gotowy wyjść poza Etykietę "początkującego", dopóki nie będziesz miał dużo lepszego zrozumienia, jak działa Python pod okładkami.)

Kolejne zapytanie wymagające podobnej odpowiedzi jest jeszcze trudniejsze, np.

Przykład 3

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

Następne tematy, które polecam, to zrozumienie dobrze liczenia odniesień, poznanie co oznacza "interning" (ale niekoniecznie jego używanie), poznanie płytkich i głębokich kopii (jak w przykładzie 3 powyżej), a na koniec wzajemne powiązania między różnymi typami i konstrukcjami w języku, tj. listy vs krotki, dikty vs zestawy, składanie list vs wyrażenia generatorów, Iteratory vs Generatory itp.; jednak wszystkie te inne sugestie są kolejnym postem dla innym razem. Mam nadzieję, że to pomoże w międzyczasie! :-)

Ps. Zgadzam się z innymi odpowiedziami za coraz bardziej intymne z introspekcją, a także studiowanie kodu źródłowego innych projektów i dodanie silnego "+1" do obu sugestii!

Pps. Świetne pytanie BTW. Chciałbym być na tyle mądry, że na początku poprosiłem o coś takiego, ale to było dawno temu, a teraz staram się pomóc innym w moim wieloletnim pełnym wymiarze czasu programowania w Pythonie!!

 92
Author: wescpy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 17:19:00

Zobacz esej Petera Norviga o zostaniu mistrzem programowania w ciągu 10 lat: http://norvig.com/21-days.html założę się, że to prawda dla każdego języka.

 67
Author: twneale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 21:14:21

Zrozumieć Introspekcję

  • napisz dir() odpowiednik
  • napisz type() odpowiednik
  • dowiedzieć się, jak "monkey-patch"
  • użyj modułu dis, aby zobaczyć, jak działają różne konstrukcje językowe

Robienie tych rzeczy będzie

  • daje Ci dobrą wiedzę teoretyczną na temat implementacji Pythona
  • daje Ci trochę praktycznego doświadczenia w programowaniu niższego poziomu
  • daje dobre intuicyjne uczucie for python data structures
 59
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 17:45:47
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?
 48
Author: amit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 06:22:54

Dam ci najprostszą i najskuteczniejszą radę, jaką chyba każdy może Ci dać: code.

Możesz być lepszy tylko w użyciu języka (co oznacza zrozumienie go) przez kodowanie . Musisz aktywnie korzystać z kodowania, inspirować się, zadawać pytania i znaleźć odpowiedzi samodzielnie.

Masz godzinę wolnego? Napisz kod, który odwróci ciąg znaków i znajdź najbardziej optymalne rozwiązanie. Wolny wieczór? Dlaczego nie spróbować skrobania sieci? Czytaj inne narody kod. Zobacz, jak to robią. Zadaj sobie pytanie, co byś zrobił.

Kiedy nudzę się przy komputerze, otwieram IDE i code-storm. Zapisuję pomysły, które brzmią interesująco i wyzywająco. Skracacz adresów URL? Jasne, mogę to zrobić. Nauczyłam się jak przeliczać liczby z jednej bazy na drugą jako efekt uboczny!

Jest to ważne niezależnie od poziomu umiejętności. Nigdy nie przestajesz się uczyć.Dzięki aktywnemu kodowaniu w wolnym czasie, przy niewielkim wysiłku, zrozumiesz języka, a ostatecznie stać się guru. Będziesz budować wiedzę i Kod wielokrotnego użytku i zapamiętywać idiomy.

 41
Author: Humphrey Bogart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 23:14:34

Jeśli jesteś i używasz Pythona do nauki (a wydaje się, że jesteś) częścią tego będzie nauka i zrozumienie bibliotek naukowych, dla mnie będą to

  • numpy
  • scipy
  • matplotlib
  • mayavi / mlab
  • chaco
  • Cython

Umiejętność korzystania z odpowiednich bibliotek i wektoryzacji kodu jest niezbędna dla obliczeń naukowych.

Chciałem dodać, że obsługa dużych liczbowych zbiorów danych w zwykły sposób pythoniczny (obiekt podejścia zorientowane, listy, Iteratory) mogą być niezwykle nieefektywne. W informatyce naukowej konieczne może być skonstruowanie kodu w sposób, który drastycznie różni się od sposobu, w jaki większość konwencjonalnych programistów Pythona podchodzi do danych.

 24
Author: user503635,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 16:31:12

Google niedawno wydał internetową klasę Pythona ("class" jak w "a course of study").

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

Wiem, że to nie odpowiada na twoje pytanie, ale myślę, że to świetne miejsce na początek!

 23
Author: dkamins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 00:32:10

Pobierz Twisted i spójrz na kod źródłowy. Stosują dość zaawansowane techniki.

 20
Author: Jason Christa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 01:38:56

Dokładnie zrozumieć wszystkie typy danych i struktury

Dla każdego typu i struktury, napisz serię programów demonstracyjnych, które ćwiczą każdy aspekt typu lub struktury danych. Jeśli to zrobisz, może warto blogować notatki na temat każdego z nich... to może być przydatne dla wielu ludzi!

 12
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 04:08:54

Sam nauczyłem się Pythona w wakacje, po prostu robiąc samouczek na stronie Pythona (niestety, nie wydaje mi się, aby być w stanie znaleźć, więc nie mogę umieścić link).

Później Pythona uczono mnie na jednym z moich pierwszych kursów na Uniwersytecie. W lecie, które nastąpiły, ćwiczyłem z PythonChallenge i z problemami z Google Code Jam . Rozwiązywanie tych problemów pomaga zarówno z perspektywy algorytmicznej, jak i z perspektywy uczenia się co może zrobić Python, jak również jak nim manipulować, aby uzyskać pełnię z Pythona.

Z podobnych powodów, słyszałem, że code golf działa również, ale nigdy nie próbowałem go dla siebie.

 10
Author: inspectorG4dget,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 02:32:21

Uczenie się algorytmów / matematyka/file IO / Optymalizacja Pythoniczna

To nie będzie dla Ciebie guru-hood, ale aby zacząć, spróbuj przepracować Problemy z projektem Euler Pierwsze 50 lub więcej nie powinno cię opodatkować, jeśli masz przyzwoitą matematykę w szkole średniej i wiesz, jak wygooglować. Kiedy rozwiążesz jeden, trafisz na forum, gdzie możesz przeglądać rozwiązania innych ludzi, które nauczą cię jeszcze więcej. Bądź jednak przyzwoity i nie publikuj swoich rozwiązań, ponieważ ideą jest zachęcanie ludzi do sami się tym zajmą.

Zmuszanie się do pracy w Pythonie będzie niewybaczalne, jeśli użyjesz algorytmów brute-force. Nauczy cię to, jak układać duże zbiory danych w pamięci i uzyskiwać do nich wydajny dostęp dzięki szybkim funkcjom językowym, takim jak słowniki.

Z samego robienia tego nauczyłem się:

  • plik IO
  • algorytmy i techniki takie jak programowanie dynamiczne
  • dane Pythona układ
    • Słowniki / hashmaps
    • listy
    • krotki
    • różne ich kombinacje, np. słowniki do list krotek
  • Generatory
  • funkcje rekurencyjne
  • tworzenie bibliotek Pythona
    • układ systemu plików
    • przeładowanie ich podczas sesji interpretera

A także bardzo ważne

  • kiedy zrezygnować i używać C lub C++!

Wszystko to powinno być istotne dla bioinformatyki

Przyznaję, że nie dowiedziałem się o funkcjach OOP Pythona z tego doświadczenia.

 10
Author: Captain Lepton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-18 11:15:08

Czy widziałeś książkę "Programowanie bioinformatyczne za pomocą Pythona "? Wygląda na to, że jesteś dokładnym członkiem tej grupy.

 7
Author: Tim Pietzcker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 06:39:57

Masz już dużo materiałów do czytania, ale jeśli potrafisz obsłużyć więcej, polecam dowiedz się więcej o ewolucji Pythona, czytając propozycje ulepszeń Pythona, w szczególności "gotowe" Pepsy i" odroczone, porzucone, wycofane i odrzucone " Pepsy.

Widząc, jak zmienił się język, podjęte decyzje i ich uzasadnienie, przyswoisz filozofię Pythona i zrozumiesz, jak powstaje "Python idiomatyczny" około.

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

 6
Author: Greg Ball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-10 00:40:41
 5
Author: Nam Ngo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-04 11:50:55

Nauczanie kogoś innego, kto zaczyna uczyć się Pythona jest zawsze świetnym sposobem, aby Twoje pomysły były jasne i czasami zazwyczaj dostaję wiele ciekawych pytań od uczniów, które każą mi ponownie przemyśleć koncepcyjne rzeczy na temat Pythona.

 3
Author: Marc-Olivier Titeux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 22:25:39

Nie dokładnie o to prosisz, ale myślę, że to dobra rada.

Naucz się innego języka, nie ma większego znaczenia, który. Każdy język ma swoje własne pomysły i konwencje, z których można się uczyć. Dowiedz się o różnicach w językach, a co ważniejsze why są różne. Wypróbuj język czysto funkcjonalny, taki jak Haskell i zobacz niektóre korzyści (i wyzwania) związane z funkcjami bez skutków ubocznych. Zobacz, jak możesz zastosować niektóre z rzeczy, których nauczysz się od innych języki do Pythona.

 2
Author: Davy8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-04 01:13:33

Polecam zacząć od czegoś, co zmusza do odkrywania ekspresyjnej siły składni. Python pozwala na wiele różnych sposobów pisania tej samej funkcjonalności, ale często istnieje jedno najbardziej eleganckie i najszybsze podejście. Jeśli jesteś przyzwyczajony do idiomów innych języków, możesz nigdy nie znaleźć lub zaakceptować tych lepszych sposobów. Spędziłem weekend na przerabianiu pierwszych 20 problemów projektu Euler i stworzyłem prostą webapp z Django na Google App Engine. To może tylko zabierze cię od ucznia do nowicjusza, ale możesz kontynuować tworzenie nieco bardziej zaawansowanych aplikacji internetowych i rozwiązywać bardziej zaawansowane problemy Eulera projektu. Po kilku miesiącach wróciłem i rozwiązałem pierwsze 20 problemów z WF od podstaw w godzinę zamiast w weekend.

 2
Author: hus787,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-03 05:46:34