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
@aseeon: To nie jest kwestia niedbalstwa - kodu jest na tyle, że trzeba by co najmniej tygodni na dostosowanie tego do nowszej wersji, a ze względu na posuchę na rynku nie ma kto się tym zająć :) Poza tym - ja nie narzekam.
@aseeon: Nie narzekam, nie zniechęcam ( ͡° ͜ʖ ͡°)

Uważam, że najlepiej uczyć się 3.x, ale jednocześnie zdawać sobie sprawę z różnic, żeby w razie potrzeby (a kodu pod 2.x jest jeszcze całe mnóstwo) umieć sobie poradzić. Dziękuję za uwagę :)
Ponownie pierdyliard plusow, wykopow i @wykop'owe odznaczenie nalezy sie @aseeon :) gj

Sorry, ze tak wcinam we wpisie dot. Pythona, ale jezeli kiedykolwiek zdecydowalbys sie na chociaz male "rozwiniecie" poprzedniego wpisu z C++ o jezyk C, to bylbym bardzo tym zainteresowany, zapewne jak czesc info-Mirkow majacych na pierwszych semestrach wlasnie ten jezyk.

Mam nadzieje, ze polecana kiedys na mirku ponizsza ksiazka jest dobra do nauki od zera:
s.....r - Ponownie pierdyliard plusow, wykopow i @wykop'owe odznaczenie nalezy sie @a...

źródło: comment_x1y47ZBQnPb0zrUn1SxHcDNAegRW3Quv.jpg

Pobierz
@aseeon: A ja napiszę, że twój poradnik może tylko zrazić do Pythona i doprowadzić do frustracji.

Początkujący powinien na początku korzystać wyłącznie z kursów. Na początku oczywiście trzeba skorzystać z codecademy.com, żeby nauczyć się składni. Dzięki Coursera.com złapałem mocne podstawy, a także nauczyłem się pisać aplikacje okienkowe i Udacity, które jest bardzo przydatne, bo nauczyło mnie podstawy programowania obiektowego - lepiej wytłumaczone niż na codecademy.com.

Z książek na razie przeczytałem najwyżej
@aseeon: Przerobiłeś wszystkie materiały z tych linków? Przeraża mnie wizja otworzenia ich wszystkich ;) Moja przygoda wyglądała trochę "od dupy strony", jednak wydaje mi się, że najłatwiej jest uczyć się jeśli mamy jakiś cel. Od zawsze miałem pomysły na aplikacje/serwisy www jednak nigdy ceny wdrożeń nie były na moją rękę.

Moja przygoda z programowaniem zaczęła się od Pythona, no znałem podstawy JS, a raczej jQuery. Wybrałem Pythona bo Django, znalazłem poradnik
@aseeon: czy twoim zdaniem nauka pythona ma sens jeżeli zawsze mocno siedziałem w javie i raczej tutaj starałem się rozwijać od dłuższego czasu? Chodzi mi o to czy znajdę w pythonie coś czego nie ma w javie i na odwrót czy java ma coś czego nie ma python? Chciałbym znać kilka narzędzi, ale nie wiem czy w tym wypadku nie zdubluję jednego z toolsów;d