Wpis z mikrobloga

#python #naukaprogramowania #programowanie

###################

# WSTĘP

###################

Pod wpisem o C++ część osób życzyła sobie podobnego wpisu o tematyce Pythona. Niniejszym więc, prośbę tą spełniam.

Disclaimer - W tym wpisie NIE poruszam tematyki tworzenia aplikacji internetowych, bo najpierw się trzeba nauczyć samego języka.


###################

# JAK SIĘ NIE UCZYĆ

###################

Nie korzystać z materiałów które dotyczą wyłącznie pythona 2.5 lub wersji poprzednich

Ostrożnie korzystać z materiałów które dotyczą tylko pythona 2.6

###################

# TYLE PYTHONÓW

###################

Zanim przejdę do materiałów trzeba sobie kilka rzeczy uświadomić.

1. Istnieje wiele wersji Pythona

2. Najnowsze wersje Pythona (z serii 3.x) nie są kompatybilne wstecznie z serią 2.x

3. Seria 2.x jest ciągle popularniejsza niż 3.x

4. Część biblioteki standardowej jest wspólna, nowe części są dodawane tylko do serii 3.x

6. Część bibliotek dodatkowych działa tylko na 2.x, część działa na obu wersjach, a część tylko na 3.x


Teraz trochę wyjaśnień. Na czas pisania tego wpisu istnieją dwie główne wersje pythona:

2.7.8 i 3.4.2. Stało się tak dlatego, że pewnego pięknego dnia deweloperzy postanowili usunąć funkcje i elementy, które od dawna uznane były jako szkodliwe. Zreorganizować część biblioteki standardowej w pewnych miejscach, ujednolicić jej działanie w innych. Ogarnąć mnogość kodowań tekstu i wymusić na programiście dobre praktyki w przetwarzaniu właśnie takiego tekstu. I pozmieniać wszystkie rzeczy które sekretnie chcieli pozmieniać, ale wcześniej się bali.


To był pamiętny dzień 3 grudnia 2008 roku w którym…

WAIT...

WAIT...

WAT? ( http://img4.wikia.nocookie.net/__cb20140501150431/walkingdead/images/3/3d/Wat.jpeg )

Tak. Od 6 lat jest problem z której wersji korzystać i jeszcze nie minął. To powiedziawszy, wtedy było znacznie gorzej niż jest teraz.

Obecnie problem ten jest wyolbrzymiany ponad wszelkie granice godności.

Na dzień 14 października 2014 roku 165 z pośród 200 najpopularniejszych bibliotek do pythona wspiera Pythona 3. Z pozostałych 35, część nie jest już rozwijana bardzo długo (nie żyją) więc i tak nie należy ich używać, część ma lepsze zamienniki (które wspierają Pythona 3), więc należy używać tych zamienników, a część po prostu nie ma zamiaru nigdy przejść na Pythona 3, bo nie.

Liczba bibliotek wspierających Pythona 3 przekroczyła 4000, więc śmiało można mówić, że sytuacja z bibliotekami do Pythona jest już bardzo dobra.

Python 3 ma też bardzo wiele usprawnień, drobnych zmian zwiększających przyjemność kodowania każdego dnia oraz nowych bibliotek otwierających nowe możliwości.

A będzie tylko lepiej.

TLDR Jeżeli jeszcze się nie zorientowaliście - jeżeli ktoś teraz zaczyna naukę Pythona, powinien zdecydowanie zaczynać od wersji 3.4.2

Ewentualne przejście z wersji 3 na 2 (jeżeli ktoś by was kiedyś zmusił) nie będzie wcale tak strasznie bolesne. Są biblioteki (nawet takie wbudowane w wersję 2.7.8) które pomagają pisać kod bardziej kompatybilny i podobny do wersji 3. Na dzień dzisiejszy trzeba (w pracy) znać i wersję 2.7 i 3.4, ale możliwe, że gdy dojdziecie do tego etapu rozwoju/kariery to takiego wymagania już w ogóle nie będzie.

###################

# JAK SIĘ UCZYĆ

###################

W C++ był generalnie wybór i jak ktoś się bardzo uparł to mógł uczyć się tylko po polsku. W Pythonie teoretycznie taki wybór istnieje, ale robisz sobie jeszcze większą krzywdę ucząc się po polsku niż w przypadku C++. Więc albo uczysz się po angielsku, albo strzelasz sobie w stopę. Jak również w drugą stopę, kolana i lewy łokieć.

Chciałbym również napisać na początku, bo co mniej ogarnięci gubili się chyba w poprzednim wpisie (o C++) i zarzucali mi rzeczy które nie były prawdą:

Samo czytanie książek i oglądanie screencastów nie uczyni z nikogo programisty, a nawet nie nauczy dobrze składni. Trzeba, absolutnie i kategorycznie, dużo programować (przeklajanie kodu się nie liczy). Trzeba realizować swoje projekty i analizować kod napisany przez innych programistów.


1. Zacznijmy od podstaw:

Wybór pierwszej książki:

http://www.amazon.com/Learning-Python-Edition-Mark-Lutz/dp/1449355730/

to podstawowa pozycja, dobra, do nauki Pythona. Jednocześnie uczy/pokazuje Pythona 2 jak i 3. Jeżeli ktoś chce mieć, w miarę, wszystko w jednym miejscu, to warto się w tą książkę zaopatrzyć. Ważne żeby to było wydanie 5, a nie wcześniejsze.

http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/

Ci którzy znają już jakiś język bardzo dobrze lub studiują informatykę mogą chcieć zamiast książki Lutza wybrać tą pozycję. Jest krótsza, zwięźlejsza i tłumaczy znacznie mniej, szczególnie rzeczy podstawowych. Wydanie drugie zostało zaktualizowane na potrzeby Pythona 3.

http://inventwithpython.com/

Jeżeli jesteś #cebula i nie chcesz wydać ani złotówki na pierwszą książkę, jest dla ciebie nadzieja. Al Sweigart napisał książki uczące programować w Pythonie przy okazji tworzenia prostych gier lub poznawania podstaw kryptografii. Oprócz sprzedawania ich na Amazonie, udostępnia je też za darmo na swojej stronie.

Pozycje obowiązkowe (numer 2, 3 i 4):

http://www.amazon.com/Python-Cookbook-David-Beazley/dp/1449340377/

To jest książka która powinna się znaleźć u każdego na półce niezależnie od obranej drogi nauki. Pozycja absolutnie obowiązkowa. Zawiera tonę (kilkaset?) gotowców, podzielonych na kategorię z wyjaśnieniem jaki problem rozwiązują oraz dlaczego tak a nie inaczej. Wydanie trzecie, wspiera oczywiście Pythona 3.

https://www.jeffknupp.com/writing-idiomatic-python-ebook/

Ebook z kategorii obowiązkowych. Uczy jak pisać kod uważany za Pythonowy i unikać szkodliwych kalek np. z C++. Jest wersja dla Pythona 3.

http://www.amazon.com/Python-Practice-Concurrency-Libraries-Developers/dp/0321905636/

Dobre praktyki, wzorce projektowe, programowanie współbieżne. Warta każdej złotówki.

Tyle jeżeli chodzi o pozycje obowiązkowe, jest jednak jeszcze parę ciekawych pozycji, które mogę polecić:

http://learnpythonthehardway.org/book/ - darmowa wersja książki złożonej z praktycznie samych ćwiczeń

http://anandology.com/python-practice-book/index.html - jeszcze więcej ćwiczeń

http://www.amazon.com/Python-3-Object-Oriented-Programming/dp/1849511268/ - książka ucząca (i skupiająca się tylko na tym) koncepcji programowania obiektowego na konkretnych przykładach Pythona 3

http://shop.oreilly.com/product/0636920032519.do - pozycja w trakcie tworzenia, zapowiada się na dobrą książkę o zaawansowanym pythonie.

Znajomość języka to jednak nie wszystko i jeżeli chcesz być ogólnie kompetentnym programistą polecam poniższe książki:

Algorytmy:

http://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844/

http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/

Wzorce obiektowe:

http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/

Bazy danych:

http://www.amazon.com/Database-Design-Mere-Mortals-Hands-/dp/0321884493/

http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/

Pozycje nieobowiązkowe, ale najdogłębniejsze - http://www.amazon.com/C.-J.-Date/e/B000AQ6OJA/

Dobre praktyki i inne:

http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/

http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/

http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/

http://www.amazon.com/The-Mythical-Man-Month-Engineering-Anniversary/dp/0201835959/

Nie trzeba przeczytać wszystkiego (ale MOŻNA), niemniej należałoby przeczytać przynajmniej po jednej książce z każdej grupy.

2. Video (i inne):

Screencasty / kursy video potrafią sporo pomóc, nie korzystaj wyłącznie z nich, to po prostu kolejna pomoc naukowa.

http://shop.oreilly.com/product/110000448.do - Dobra seria filmów dla bardzo początkujących, świetny materiał do oglądania na zmianę z czytaniem pierwszej książki i eksperymentowaniem z pierwszymi programami.

http://learnpythonthehardway.org/ - jest książka złożona z praktycznie samych ćwiczeń oraz seria screencastów pokazujących rozwiązania tych ćwiczeń.

http://shop.oreilly.com/product/110000667.do - wstęp do algorytmów z użyciem pythona, należy uważać - prezenter pisze sporo kodu który jest uważany za nie-pythoniczny

http://www.pluralsight.com/tag/python - wiele godnych uwagi serii screencastów ( między innymi uczących podstawowego i zaawansowanego pythona, pisania aplikacji GUI w Qt), ale najważniejsza z nich:

http://www.pluralsight.com/courses/python-developers-toolkit - to bardzo krótka seria uczący najważniejszych i niemal niezbędnych każdemu programiście pythona narzędzi

Filmy z ostatnich konferencji (dużo tego, każdy znajdzie coś dla siebie)

https://www.youtube.com/playlist?list=PLBGl1tVyiWQSVwxne3yOH79uaSqgbnCqL - Kiwi Pycon 2014

https://www.youtube.com/playlist?list=PLE7tQUdRKcybbNiuhLcc3h6WzmZGVBMr3 - Filmy z DjangoCon 2014

https://www.youtube.com/channel/UC45KSayx_kwQAnhpaPAuVkw/videos - Filmy z PyGotham 2014

http://pyvideo.org/category/56/pycon-australia-2014

http://pyvideo.org/category/55/pydata-berlin-2014

http://pyvideo.org/category/54/europython-2014

http://pyvideo.org/category/52/pyohio-2014

http://pyvideo.org/category/51/scipy-2014

http://www.codecademy.com/en/tracks/python - to interaktywny kurs pythona w przeglądarcę, nie trzeba nic instalować, wystarczy wykonywać polecenia. Jest całkiem w porządku, ale nie polecam go jako “jedynego” źródła wiedzy o Pythonie, oraz (ostatnio gdy sprawdzałem) nie wspierał Pythona 3.

3. Wyzwania i potyczki

TO SUPER WAŻNE żebyś podczas czytania i oglądania programował i nie kopiował gotowego kodu z paczek źródłowych do książek tylko ręcznie pisał, starając się zrozumieć co piszesz. Musisz eksperymentować, wprowadzać własne zmiany, pisać własne projekty i realizować własne pomysły.

https://warosu.org/data/g/img/0441/94/1410874830625.png - zbiór 100 pomysłów na projekty treningowe aby nauczyć się na nich programowania

Strony z zadaniami i zagadkami algorytmicznymi, poćwiczą twoje myślenie i niejednokrotnie optymalizację kodu. Miłe oderwanie od innej nauki. Uwaga - nie przesadzać, bo wpadniesz w złe praktyki i spiralę przedwczesnej optymalizacji.

http://pl.spoj.com/

http://codeeval.com/

https://www.hackerrank.com/

http://www.codechef.com/

https://www.reddit.com/r/dailyprogrammer

4. Pozostałe

Korzystaj z dobrego IDE (lub edytora):

W kategorii IDE jest PyCharm i później długo długo nic. Należy się z tym pogodzić i nie zaprzeczać rzeczywistości, ponieważ ani Wingware ani Komodo IDE (konkurencja) nie grają w tej samej lidze. Darmowa wersja “Community Edition” powinna jak najbardziej wystarczyć do nauki Pythona.

Jeżeli IDE uważasz za coś potwornego i zbędnego - to się mylisz, ale nie mam zamiaru cię w tym miejscu przekonywać. Dla takich ludzi jak ty też jest nadzieja. Zarówno dobrze skonfigurowany vim jak i Sublime Text 3 mogą posłużyć za dobry edytor do nauki Pythona.

Korzystaj z dobrego interpretera:

Pobierz najnowszą wersję z serii 3 (w tej chwili to 3.4.2) bezpośrednio z:

https://www.python.org/downloads/

Znaj narzędzia potrzebne do pracy w dobrym środowisku pythona:

(uczy tego wyżej już wymienione http://www.pluralsight.com/courses/python-developers-toolkit )

Pomocny może okazać się też taki podręcznik:

http://docs.python-guide.org/en/latest/

Pip - http://pip.readthedocs.org/en/latest/index.html

Virtualenv - http://virtualenv.readthedocs.org/en/latest/

Debugger - http://pymotw.com/2/pdb/

Nauczyć się ładnego formatowania kodu i odpowiedzi na najczęściej zadawane pytania:

To niezmiernie ważne, szacuje się że ponad 80% kodu napisanego w Pythonie stosuje się do poniższych zasad.

http://legacy.python.org/dev/peps/pep-0008/

https://code.google.com/p/google-styleguide/

Poznaj filozofię Pythona:

http://legacy.python.org/dev/peps/pep-0020/

https://gist.github.com/evandrix/2030615

Naucz się GITa (system kontroli wersji):

http://git-scm.com/book

https://try.github.io/

https://www.atlassian.com/git/

http://www.git-tower.com/learn/ebook/command-line/introduction

Publikuj swój kod i czytaj kod innych:

https://github.com/

https://bitbucket.org/

Naucz się języka SQL i opanuj przynajmniej jeden system zarządzania bazą danych:

O SQL jest 4 tony całkiem niezłych książek, kursów i tutoriali, łatwo znaleźć więc nic konkretnego nie podam.

PostgreSQL - gorąco polecam - http://www.postgresql.org/

MySQL (MariaDB) - https://www.mysql.com/

Oracle - http://www.oracle.com/pl/products/database/overview/index.html

Interesuj się i bądź na bieżąco:

https://www.reddit.com/r/learnpython

https://www.reddit.com/r/python

https://www.reddit.com/r/learnprogramming

https://www.reddit.com/r/programming

Jeżeli prosisz kogoś o pomoc pamiętaj żeby:

- Wkleić kod na jakieś pastie - np. http://dpaste.com/ , http://hastebin.com/

- Sprawdzić czy kod faktycznie nie działa -u siebie i np na http://ideone.com/

- Wklejając fragmenty kodu na wykop używać http://wykop-code.appspot.com/ w celu zachowania czytelności i wcięć

- Opisać zrozumiale z czym masz problem i czego już probowałeś żeby temu zaradzić

- Wkleić pełną treść błędu (jeżeli jest długo to na pastie) jeżeli takowy wystąpił

###################

# WOŁAM

###################

Bo zaplusowaliści komentarz o planowaniu tego wpisu


  • 122
  • Odpowiedz
@aseeon: Dla użytkowników Visual Studio istnieje darmowa wtyczka Python Tools, która działa również z darmowymi wersjami Express (2013 for Desktop, for Web); najważniejsze ficzery to podpowiadanie składni, debugowanie, wsparcie dla klasycznego Pythona i IronPythona oraz Django.
  • Odpowiedz
Jeśli ktoś zaczyna nieoceniony jest interaktywny kurs na udacity.com i profesor Dave. Coś podobnego do codeacademy tyle, że o 2 ligi wyżej jeśli chodzi o interaktywność, ogrom przekazanej wiedzy i poziom nauczania. Bardzo mocno wciąga.
  • Odpowiedz
@silverm: A ten kurs na udacity jest bezpłatny? Zalogowałem się z ciekawości, ale z tego co widzę większość rzeczy jest płatna, a cena nie jest mała (no chyba że weźmiemy to słynne 15k pln/mies po ukończeniu kursu... ( ͡° ͜ʖ ͡°) )
  • Odpowiedz
@botul: To ten kurs: https://www.udacity.com/course/cs101

Faktycznie teraz jest płatny i to nie tani, ja go ukończyłem w zeszłym roku, wtedy jeszcze było za free.

Kurs był naprawdę wysokiej jakości, nie do porównania z żadnym innym typu codacademy czy coursera. Czy warty $199/month? Jak na polskie warunki ekonomiczne to według mnie stanowczo za dużo.

Lepiej zarejestrować się na udemy.com czy PluralSight i poczekać na jakieś promo, często mają SALE 90% OFF itp.
  • Odpowiedz
@botul:

@Kadwa ma rację, kursy są jednak nadal bezpłatne, także nie zastanawiaj się i zacznij działać - 15k pln/mies nigdy nie było tak blisko w zasięgu ręki ( ͡° ͜ʖ ͡°)
  • Odpowiedz
Wtrącę swoje 3 grosze.

Pythona uczyłem się sam, i sam się uczyłem jak się go NIE uczyć. Może komuś się przyda.

-jak ktoś Ci mówi, żeby używać jakiegokolwiek IDE, zastrzel go. Najlepsze, co istnieje do pythona (do małych i średnich projektów), to Sublime Text 3 + Anaconda + Git. Nie ma potrzeby używania niczego więcej. I nie jest to tylko moje zdanie, wiem to od lepszych od siebie. IDE jest fajne do
  • Odpowiedz
jak ktoś Ci mówi, żeby używać jakiegokolwiek IDE, zastrzel go


@Ribelo: Okropna bzdura, na szczęście reszta twojego wpisu to prawda

polecasz jakieś video tutorial na youtube


@ruski_88: Niestety nie znam żadnej serii uczącej Pythona, a wartej zachodu na youtube. Jest seria jak pisać pythonowy kod, ale to jest dla ludzi którzy już coś w Pythonie potrafią.

https://www.youtube.com/playlist?list=PLHb-tUHjtzRCMeC5IjbJOjNLiJ28982NJ
  • Odpowiedz
@aseeon: Mówię z perspektywy amatora i hobbysty. Nigdy nie miałem do czynienia z żadnym większym komercyjnym projektem. Przy <10k loc IDE jest zbędne. W ogóle nadal bardzo popularny w świecie jest vim/neovim czy Emacs i o czymś to świadczy. Pisanie "Hello World" w IDE to jak strzelanie z armaty do muchy.
  • Odpowiedz
@Ribelo: Kategoryczność twojego twierdzenia mnie połowicznie bawi i połowicznie przeraża. Bawi bo to jak powtarzanie bez zastanowienia czegoś usłyszanego od kuzyna bo on się zna na programowaniu - wyolbrzymiam oczywiście, ale takie hasła mają bardzo często takie początki. Przeraża mnie - bo ktoś ci kiedyś uwierzy i zrobi sobie straszną krzywdę nie sprawdzając jakie ma możliwości.

Każdy powinien programować w tym co w czym mu wygodniej i co powoduje że jest
  • Odpowiedz
@aseeon: Dzieki za polecenie IDE, ale widzę, że z softów JetBrains możnaby się doktoryzować. 30 minut zajęło mi dodanie projektu z remote host :), a do tej pory nie wiem jak podpiąc inną ścieżkę z remote host jako uzupełnienie projektu (czy wogóle jest to możliwe) - masakra po prostu. A to zapewne początek imprezy :).
  • Odpowiedz
@aseeon: Ludzie pracujący jako programiście Pythona klepią:

1. Aplikacje internetowe w Django

2. Aplikacje internetowe we Flasku

3. Aplikacje internetowe w Pyramidzie

4. RESTowe API w Django

5. RESTowe API we Flasku

6. RESTowe API w Pyramidzie

7. Programy przetwarzające Dane

8. Uczenie maszynowe

9. Wizualizacja danych

10. Web scraping

11. Testy, systemy testów i testerki programów

12. Skrypty automatyzujące zadania na serwerach

13. Programy sieciowe i asynchroniczne na Tornado

14.
  • Odpowiedz
@aseeon: Pojawiła się jeszcze jedna warta uwagi pozycja książkowa, tym razem od MIT Press (dopiero teraz, bo wymagała tony poprawek):

http://www.amazon.com/Introduction-Computation-Programming-Using-Python/dp/0262525003/

Warto też popatrzyć na poniższe kursy

https://www.udacity.com/course/ud036 - relatywnie nowa sprawa, skupia się na programowaniu obiektowym

https://www.udacity.com/course/cs101 - ten znany kurs (jest dalej dostępny za darmo - przycisk Access Course Materials) - o programowaniu i wielu rzeczach wokół

https://www.coursera.org/course/interactivepython - chyba najpopularniejszy kurs internetowy Pythona, każda edycja przyciąga zdaje się
  • Odpowiedz