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
@Adrian00: Nie wiem. Dowiem się jak moje dziecko trochę podrośnie. Pewnie nie każdego kilkulatka się da, ale wiem, że jest troszkę materiałów do nauki programowania w Pythonie dla dzieci:

http://www.nostarch.com/pythonforkids (teoretycznie dla 10-latków, więc uzdolniony kilkulatek spokojnie da radę).

W bibliotece standardowej jest moduł turtle i jest do niego gui w postaci http://pythonturtle.org/ - programowanie przez poruszanie żółwiem
@aseeon: cześć, nie mam nic wspólnego z informatyką, ale chciałbym zadać Ci kilka pytań:

1) gdybym chciał się przekwalifikować i zwolnił z pracy, to dysponując bardzo dużą ilością wolnego czasu ile tygodni / miesięcy musiałbym poświęcić, aby ktoś zechciał zatrudnić mnie na stanowisku osoby programującej w pythonie? dodam, że bardzo dobrze znam język angielski

2) w jakie projekty zaangażowane są osoby piszące w tym języku i jak duże jest na nie
@tobiasz22:

1) Nie da się odpowiadać na takie pytanie dokładnie. Generalnie jednak nie tygodnie/miesiące, a miesiące/lata. Jak jesteś zdolny to może i w pół roku dostaniesz pracę, a może w rok, być może zabierze ci to dwa lata.

2) Zapotrzebowanie duże, a projekty to zwykle aplikacje internetowe, programowanie sieciowe, Data Science razem z Big Data.

3) Kwestia wynagrodzenia przedstawia się tak, że zależy od tego co umiesz i jak się zaprezentujesz.
@aseeon: Czy według ciebie warto bardziej "zagłębiać" się w Pythona, jeśli traktuje się go jako język, który ma nauczyć podstaw? Na ten moment kończe kurs na codecademy i podoba mi się ta "idea" programowania, tzn. zaplanuje coś napisać i metodą prób i błędów się to udaje, jeśli czegoś nie wiem to doczytam itd, ale nie jestem pewnien czy Python to "ten" język, jednak nie wiem też kiedy będzie właściwy moment, żeby
@morsisko: Według mnie warto zagłębić się w Pythona jako pierwszy język i poznać go bardzo dobrze, nauczyć się z nim programowania obiektowego, sieciowego i baz danych. Nikt ci nie da rady powiedzieć czy to "ten język". A zacząć uczyć drugiego języka możesz wtedy kiedy będziesz miał ochotę, albo bardziej pragmatycznie, wtedy kiedy będziesz miał potrzebę, bo np Python ci do czegoś nie wystarczył.
@aseeon: u mnie problem jest tego typu, że nie potrafię sobie określić wyznaczonego celu do którego chce dążyć w danym języku. python wydaje sie być bardzo ciekawym językiem stosunkowo prostym, w samej składni do ogarnięcia, lecz nie wiem czy to co oferuje, mam na myśli rzeczy które mogę w nim tworzyć są dla mnie odpowiednie, tak jest też z każdym innym językiem za który próbuje sie zabrać..

ciągle przeczytam coś nowego
@szklane_kapcie: Spotkałem się, właśnie poszukuje "drugiego języka" na jakim chciałbym się skupić, ale przeskakuje z jednego na drugi jak pokopany - jakbym rozwiązał kiedyś ten odwieczny problem to ci dam znać ( ͡° ͜ʖ ͡°)

Tak czy siak, wygląda na to, że powinieneś sobie najpierw odpowiedzieć na pytanie co chcesz tworzyć.
@peradon: Dziękuję za link. Nie wiem, czy będę się zajmować programowaniem czy samym webdesign/webdev (na obecnym lub wyższym poziomie), ale może się przyda.
@aseeon: Kolejne świetne omówienie, dzięki że Ci się chciało :)

Ewentualne przejście z wersji 3 na 2 (jeżeli ktoś by was kiedyś zmusił) nie będzie wcale tak strasznie bolesne.


Przejście z 2 na 3 też ciężkie nie jest, a z tego co uświadczyłem masa fajnych darmowych materiałów jest właśnie przygotowana pod 2 i nie ma co zbytnio ludzi odstraszać przynajmniej na początku bo wielkich konsekwencji to nie powoduje.

Ze stronek z