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