Od półtora roku uczę się, pracuję i bawię się w Pythonie. Jako biolog powoli przechodzący na bioinformatykę, język ten stanowi rdzeń wszystkich głównych wkładów, jakie włożył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 myśli od sprawnego kodu.
Chciałbym poznać twoją odpowiedź na pytanie, które rzadko widywałem na tym lub innych forach. To pytanie wydaje mi się kluczowe dla każdego, kto jest na drodze do ulepszenia Pythona, ale kto zastanawia się, jakie powinny być jego kolejne kroki.
Pozwólcie, że podsumuję to, czego NIE chcę najpierw zapytać;)
- Nie chcę wiedzieć, jak SZYBKO nauczyć się języka Python
- Nie chcę też znaleźć najlepszego sposobu na zapoznanie się z językiem
- Wreszcie, nie chcę znać podejścia „jedna sztuczka, która robi wszystko”.
Chcę poznać Twoją opinię:
Jakie kroki poleciłbyś czeladnikowi Pythona, od stażu do statusu guru (zachęcamy do zatrzymania się tam, gdzie wymaga tego twoja wiedza), aby stale ULEPSZYĆ, stając się coraz lepszym koderem Python, krok po kroku. Niektórzy ludzie na SO wydają się prawie godni czci ze względu na swoją sprawność w Pythonie, proszę oświeć nas :)
Odpowiedzi, które podobałyby mi się (ale mogą zaskoczyć czytelników: P), są sformatowane mniej więcej tak:
- Przeczytaj to (np. Samouczek Pythona), zwróć uwagę na tego rodzaju szczegóły
- Kod dla tak wielu razy / problemów / linii kodu
- Następnie przeczytaj to (np. Tę lub tę książkę), ale tym razem zwróć na to uwagę
- Podejmij kilka rzeczywistych problemów
- Następnie przejdź do czytania Y.
- Zapoznaj się z tymi pojęciami
- Kod na czas X.
- Wróć do takich i takich podstaw lub przejdź dalej do ...
- (dostajesz punkt :)
Naprawdę zależy mi na poznaniu Twojej opinii na temat tego, na co dokładnie należy zwracać uwagę na różnych etapach, aby STAŁO postępować (oczywiście przy należytym wysiłku). Jeśli pochodzisz z określonej dziedziny wiedzy, omów ścieżkę, którą uważasz za odpowiednią w tej dziedzinie.
EDYCJA: Dzięki twojemu wspaniałemu wkładowi wróciłem do ścieżki poprawy Pythona! Naprawdę doceniam!
Jednym dobrym sposobem na pogłębienie wiedzy o języku Python jest kopanie w kodzie źródłowym 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ą nas zaskoczyć, możesz odpowiedzieć, patrząc, jak Django implementuje tę funkcję.
W ten sposób będziesz nadal zbierać nowe idiomy, style kodowania i sztuczki w języku Python . (Niektóre będą dobre, a niektóre złe).
A kiedy zobaczysz w Pythony coś, czego nie rozumiesz w źródle, przeskocz na kanał IRC #python, a znajdziesz wielu „prawników językowych” chętnych do wyjaśnienia.
Kumulacja tych drobnych wyjaśnień przez lata prowadzi do znacznie głębszego zrozumienia języka i wszystkich jego tajników.
źródło
Zrozumieć (głębiej) typy danych Pythona i ich role w odniesieniu do pamięci mgmt
Jak niektórzy z Was wiedzą, uczę kursów Pythona , z których najpopularniejsze to kompleksowy kurs Intro + Intermediate oraz kurs „zaawansowany”, który wprowadza różnorodne obszary rozwoju aplikacji.
Dość często zadaje mi się pytanie podobne do: „Czy powinienem wziąć udział w kursie wstępnym lub kursie zaawansowanym? Programuję Python już od 1-2 lat i myślę, że wprowadzenie jest dla mnie zbyt proste, więc chciałbym jak skakać prosto do zaawansowanych ... co oczywiście byłoby wy polecacie?”
Aby odpowiedzieć na ich pytanie, badam, czy są silni w tym obszarze - nie dlatego, że jest to naprawdę najlepszy sposób, aby zmierzyć, czy są gotowi na kurs zaawansowany, ale sprawdzić, jak dobrze ich podstawowa wiedza na temat obiektów Pythona i model pamięci, który jest przyczyną wielu błędów Pythona napisanych przez tych, którzy są nie tylko początkującymi, ale i tymi, którzy wykroczyli poza to.
Aby to zrobić, wskazuję je na to proste 2-częściowe pytanie quizu:
Wiele razy są w stanie uzyskać wynik, ale dlaczego jest to trudniejsze i ważniejsze od odpowiedzi ... Zważę wynik jako 20% odpowiedzi, podczas gdy „dlaczego” dostaje 80% kredytu. Jeśli nie potrafią zrozumieć, dlaczego, bez względu na to, jakie mają doświadczenie w Pythonie, zawsze poprowadzę ludzi do kompleksowego wstępu + kursu pośredniego, ponieważ spędzam jeden wykład na temat obiektów i zarządzania pamięcią do tego stopnia, że powinieneś być w stanie odpowiedzieć wydajność i dlaczego z wystarczającą pewnością. (Tylko dlatego, że znasz składnię Pythona po 1-2 latach, nie sprawia, że jesteś gotów wyjść poza etykietę „początkującego”, dopóki nie uzyskasz lepszego zrozumienia, w jaki sposób Python działa pod przykryciem).
Kolejne zapytanie wymagające podobnej odpowiedzi jest jeszcze trudniejsze, np.
Przykład 3
Kolejne tematy, które zalecam, to dobre zrozumienie liczenia odniesień, poznanie znaczenia „internowania” (ale niekoniecznie jego użycie), poznanie płytkich i głębokich kopii (jak w przykładzie 3 powyżej), a także wzajemne powiązania między różnymi typami i konstrukcje w języku, tj. listy vs. krotki, dykty vs. zbiory, interpretacja list a wyrażenia generatora, iteratory vs. generatory itp .; wszystkie te sugestie są jednak kolejnym postem na inny czas. Mam nadzieję, że tymczasem to pomaga! :-)
ps. Zgadzam się z innymi odpowiedziami na to, aby uzyskać bardziej intymną introspekcję, a także studiować kod źródłowy innych projektów i dodać mocne +1 do obu sugestii!
pps. Świetne pytanie BTW. Chciałbym być na tyle mądry na początku, żeby zapytać o coś takiego, ale to było dawno temu, a teraz staram się pomagać innym w moim wieloletnim programowaniu w języku Python !!
źródło
print
nie jest to stwierdzenie.Sprawdź esej Petera Norviga na temat zostania głównym programistą za 10 lat: http://norvig.com/21-days.html . Założę się, że dotyczy to każdego języka.
źródło
Zrozumienie introspekcji
dir()
ekwiwalenttype()
ekwiwalentdis
modułu, aby zobaczyć, jak działają różne konstrukcje językoweRobienie tych rzeczy będzie
źródło
type()
odpowiednik”, co byłoby bardzo trudne, jeśli weźmiesz pełną specyfikację metaclassytype
!źródło
Dam ci najprostszą i najskuteczniejszą radę, którą, jak sądzę, każdy może ci dać: kod .
Możesz być lepszy w posługiwaniu się językiem (co oznacza jego zrozumienie) poprzez kodowanie . Musisz aktywnie cieszyć się kodowaniem, czerpać inspirację, zadawać pytania i znajdować odpowiedzi samodzielnie.
Masz godzinę do stracenia? Napisz kod, który odwróci ciąg, i znajdź najbardziej optymalne rozwiązanie. Wolny wieczór? Dlaczego nie spróbować skrobania stron internetowych? Przeczytaj kod innych ludzi. Zobacz, jak oni to robią. Zadaj sobie pytanie, co byś zrobił.
Kiedy nudzę się przy komputerze, otwieram IDE i burzę szyfrów. Zapisuję pomysły, które brzmią interesująco i stanowią wyzwanie. Skracacz URL? Jasne, mogę to zrobić. Och, nauczyłem się konwertować liczby z jednej bazy na drugą jako efekt uboczny!
Jest to ważne bez względu na poziom umiejętności. Nigdy nie przestajesz się uczyć. Aktywnie kodując w wolnym czasie, bez większego wysiłku, zrozumiesz język i ostatecznie staniesz się guru. Zdobędziesz wiedzę i kod wielokrotnego użytku oraz zapamiętasz idiomy.
źródło
Jeśli używasz Pythona do nauki (wydaje się, że nim jesteś), częścią tego będzie nauka i rozumienie bibliotek naukowych, dla mnie byłyby to
umiejętność korzystania z odpowiednich bibliotek i wektoryzowania kodu jest niezbędna w obliczeniach naukowych.
Chciałem dodać, że obsługa dużych liczbowych zestawów danych w typowych pythonowych sposobach (podejścia obiektowe, listy, iteratory) może być wyjątkowo nieefektywna. W informatyce naukowej może być konieczne ustrukturyzowanie kodu w sposób drastycznie różniący się od sposobu, w jaki większość konwencjonalnych koderów pythonowych podchodzi do danych.
źródło
Niedawno Google wypuściło internetową klasę Python („klasa” jak w „toku studiów”).
http://code.google.com/edu/languages/google-python-class/
Wiem, że to nie odpowiada na twoje pełne pytanie, ale myślę, że to świetne miejsce na rozpoczęcie!
źródło
Pobierz Twisted i spójrz na kod źródłowy. Stosują dość zaawansowane techniki.
źródło
Dokładnie poznaj wszystkie typy i struktury danych
Dla każdego typu i struktury napisz serię programów demonstracyjnych, które wykorzystują każdy aspekt struktury typu lub danych. Jeśli to zrobisz, warto umieścić na blogu notatki o każdym z nich ... może być przydatne dla wielu osób!
źródło
Nauczyłem się Pythona po raz pierwszy przez lato, wykonując samouczek na stronie Pythona (niestety, nie jestem już w stanie go znaleźć, więc nie mogę opublikować linku).
Później nauczono mnie pytona na jednym z kursów pierwszego roku na uniwersytecie. Następnego lata ćwiczyłem z PythonChallenge i problemami z Google Code Jam . Rozwiązanie tych problemów pomaga z perspektywy algorytmicznej, a także z perspektywy uczenia się, co potrafi Python, a także sposobów manipulowania nim, aby w pełni wykorzystać możliwości Pythona.
Z podobnych powodów słyszałem, że golf działa również, ale nigdy nie próbowałem go sam.
źródło
Uczenie się algorytmów / matematyki / optymalizacji plików IO / Pythonic
To nie sprawi, że poczujesz się jak guru, ale na początek spróbuj przepracować problemy z Project Euler . Pierwsze 50 osób nie powinno cię opodatkowywać, jeśli masz przyzwoitą matematykę i wiesz, jak Google. Po rozwiązaniu jednego z nich wchodzisz na forum, na którym możesz przeglądać rozwiązania innych osób, które nauczy Cię jeszcze więcej. Bądź jednak przyzwoity i nie publikuj swoich rozwiązań, ponieważ chodzi o to, aby zachęcić ludzi do samodzielnego wypracowania.
Zmuszenie się do pracy w Pythonie będzie bezlitosne, jeśli zastosujesz algorytmy brute-force. Nauczy Cię to, jak układać duże zestawy danych w pamięci i uzyskiwać do nich skuteczny dostęp dzięki szybkim funkcjom językowym, takim jak słowniki.
Z robienia tego sam nauczyłem się:
A także bardzo ważne
Wszystko to powinno odnosić się do bioinformatyki
Trzeba przyznać, że z tego doświadczenia nie dowiedziałem się o funkcjach OOP Pythona.
źródło
Czy widziałeś książkę „ Programowanie bioinformatyczne przy użyciu Pythona ”? Wygląda na to, że jesteś dokładnym członkiem jego grupy fokusowej.
źródło
Masz już dużo materiałów do czytania, ale jeśli możesz poradzić sobie z większą ilością, zalecamy zapoznanie się z ewolucją Pythona, czytając Propozycje ulepszeń Pythona, zwłaszcza „Zakończone” PEP i „Odroczone, porzucone, wycofane i odrzucone” PEP.
Widząc, jak zmienił się język, podjęte decyzje i ich uzasadnienia, wchłoniesz filozofię Pythona i zrozumiesz, jak powstaje „idiomatyczny Python”.
http://www.python.org/dev/peps/
źródło
Spróbuj http://challenge.greplin.com/ używając Pythona
źródło
Nauczanie kogoś, kto zaczyna się uczyć języka Python, jest zawsze świetnym sposobem na wyjaśnienie twoich pomysłów, a czasami zazwyczaj otrzymuję wiele ciekawych pytań od studentów, które zmuszają mnie do ponownego przemyślenia koncepcyjnych zagadnień dotyczących Python.
źródło
Nie dokładnie o to prosisz, ale myślę, że to dobra rada.
Naucz się innego języka, który nie ma większego znaczenia, który. Każdy język ma swoje własne pomysły i konwencje, z których możesz się uczyć. Dowiedz się o różnicach między językami, a co ważniejsze,
why
są one różne. Wypróbuj czysto funkcjonalny język, taki jak Haskell, i zobacz niektóre zalety (i wyzwania) funkcji wolnych od skutków ubocznych. Zobacz, jak możesz zastosować w Pythonie niektóre rzeczy, których uczysz się z innych języków.źródło
Polecam zacząć od czegoś, co zmusza cię do zbadania ekspresyjnej mocy 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, przeszukując około 20 pierwszych problemów z Project Euler i stworzyłem prostą aplikację internetową z Django w Google App Engine. Może to tylko poprowadzić od ucznia do początkującego, ale możesz nadal tworzyć nieco bardziej zaawansowane aplikacje internetowe i rozwiązywać bardziej zaawansowane problemy z Project Euler. Po kilku miesiącach wróciłem i rozwiązałem pierwsze 20 problemów WF od zera w godzinę zamiast w weekend.
źródło