Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #cpp #naukaprogramowania #programowanie
- ###################
- # WSTĘP
- ###################
- Częstotliwość pytań o to jak lub z czego się uczyć programowania C++ jest wysoka. Więc dla wszystkich tych którzy zadali to pytanie, a może ktoś też podrzuci tą odpowiedź zadającym to pytanie w najbliższej (bo kiedyś i ta odpowiedź się zdezaktualizuje) przyszłości, postanowiłem napisać ten post.
- ###################
- # JAK SIĘ NIE UCZYĆ
- ###################
- Chciałbym raz na zawsze wyjaśnić pewną rzecz, nawet jeżeli część z was się ze mną nie zgodzi.
- Otóż "Symfonia C++" to nie jest dobry podręcznik,nie należy go nikomu polecać. Szczególnie w dzisiejszych czasach. Trzymam ten podręcznik właśnie w rękach. Czytałem ten podręcznik jak byłem na studiach. Ten podręcznik uczy starego stylu i wielu złych praktyk. Język C++ naprawdę się rozwinął od tamtego czasu.
- Zacznijmy od kilku podstaw:
- "Symfonia C++" to książka opisująca starodawną wersję C++ ARM. Nie brzmi strasznie, ale straszne jest w istocie:
- - Nie znajdziesz w Symfonii C++ czegoś tak potrzebnego i popularnego jak obsługa wyjątków (exception handling)
- - Nie znajdziesz przestrzeni nazw (namespaces)
- - Nie znajdziesz szablonów (templates)
- - Nie znajdziesz wielu innych rzeczy takich jak różne rodzaje rzutowań
- - Nie znajdziesz nic co doszło w standardzie ISO.
- "Symfonia C++ Standard" to nowsza wersja opisująca standard ISO zamiast archaicznego ARM. Ale. Dalej nie znajdziesz tam obsługi wyjątków i szablonów.
- Żeby być zgodnym z prawdą muszę nadmienić, że jest im poświęcona inna książka - "Pasja C++".
- Ale to wszystko umywa się przy tym, że w całej książce nazwy zmiennych (i funkcji i klas) są napisane po polsku. Nikt tak nie uczy, nawet na studiach się od tego odchodzi lub już się dawno odeszło. Tylko najbardziej przestarzali i zatwardziali w swoim konserwatyzmie wykładowcy się tego trzymają.
- Osobliwy sposób wcięć szczególnie i formatowania w ogólności to już sprawa subiektywna, ale mnie nie podszedł.
- But wait, there's more!
- Gdyby tego wszystkiego było mało, to w 2011 roku wyszła nowa wersja standardu, C++11, wnosząca bardzo dużo do języka, w tym ogromnie dużo dobrego.
- https://en.wikipedia.org/wiki/C%2B%2B11
- Można by rzec "ale kto by z tego korzystał to na pewno zaawansowane rzeczy dla wymiataczy" - ale to nie prawda. Zmiany były tak szerokie że nawet fundamentalne rzeczy używane przez początkujących programistów zostały pozmieniane. Nic z tego w tej książce (tych książkach) nie zobaczysz.
- ###################
- # JAK SIĘ UCZYĆ
- ###################
- 1. Zacznijmy od książek:
- http://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402/ - to bardzo dobra książka, bardzo dokładna, zaprowadzi się od zera do kompetencji.
- Jeżeli natomiast już coś ogarniasz, ale nie jesteś pewien swojej wiedzy, albo skończyłeś część (lub całość) powyższej książki i chcesz więcej albo inaczej:
- http://www.amazon.com/C-Programming-Language-4th/dp/0321563840/
- http://www.amazon.com/Tour-C--Depth/dp/0321958314/
- Nie jestem w stanie nawet wyrazić jak bardzo powinieneś się uczyć programowania w języku angielskim, a jak go nie znasz to powinieneś się najpierw nauczyć angielskiego. Ale, jeżeli prędzej umrzesz niż przeczytasz książkę programistyczną po angielsku to wiedz, że są dostępne te tłumaczenia:
- http://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-vi-stephen-prata,cppri6.htm
- http://helion.pl/ksiazki/jezyk-c-kompendium-wiedzy-bjarne-stroustrup,jcppkw.htm
- But wait, there's more!
- W tym roku (2014) wyszła wersja C++14.
- https://en.wikipedia.org/wiki/C%2B%2B14
- Być może niedługo po napisaniu tego wpisu, zostanie w pełni opublikowana książka Scotta Mayersa która pozwoli ci "być na bierząco".
- http://shop.oreilly.com/product/0636920033707.do
- Znajomość języka to jednak nie wszystko i jeżeli chcesz być ogólnie kompetentnym programistom 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:
- Screencasty / kursy video potrafią sporo pomóc, nie korzystaj wyłącznie z nich, to po prostu kolejna pomoc naukowa.
- http://www.pluralsight.com/courses/table-of-contents/learn-programming-cplusplus - od postaw - niemniej nie rezygnuj z książek, skorzystaj z kursu video jako dodatku do książki.
- http://www.pluralsight.com/courses/modern-cplusplus-libraries - aby poszerzyć wiedzę
- http://www.pluralsight.com/courses/introduction-qt-cplusplus-framework - nauka Qt taka biblioteka do tworzenia graficznych interfejsów
- http://www.pluralsight.com/courses/boost-cpp-libraries-introduction - popularna biblioteka wielorakiego użytku
- http://www.informit.com/store/introduction-to-c-plus-plus-concurrency-livelessons-9780134031484 - programowanie współbieżne - super ważna rzecz w dzisiejszych czasach
- Filmy z konferencji, np. najświeższe - https://www.youtube.com/user/CppCon
- 3. Wyzwania i potyczki
- TO SUPER WAŻNE żebyś podczas czytania i oglądania programował, 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
- Różnego rodzaju ćwiczenia znajdziesz też na http://www.programmr.com/zone/cpp
- 4. Pozostałe
- Korzystaj z dobrego środowiska:
- - Zapomnij o Dev-Cpp i Borland C++ Builderze, a jeżeli ich nie znałeś to nawet ich nie googluj
- - Jeżeli chcesz pisać tylko (głównie) na Windowsa to używaj Microsoft Visual Studio, tak tylko tego, yup, poważnie (http://www.visualstudio.com/)
- - Jeżeli interesuje cię wiele platform, zainteresuj się QtCreatorem (http://qt-project.org/wiki/Category:Tools::QtCreator) lub, odrobinę w ciemno, ale z dużą dozą pewności (bo JetBrains jest znane z fenomenalnych IDE) polecam też CLiona (http://www.jetbrains.com/clion/) który jest obecnie w fazie ostrej produkcji.
- Korzystaj z dobrego kompilatora:
- - Microsoft C++ Compiler (raczej tylko jeżeli wybrałeś powyżej Visual Studio)
- - GCC (https://gcc.gnu.org/)
- - Clang (http://clang.llvm.org/)
- Tyle, jeżeli nie masz naprawdę dobrego argumentu to nie zmieniaj kompilatora na jakiś niszowy.
- Nauczyć się ładnego formatowania kodu i odpowiedzi na najczęściej zadawane pytania:
- https://google-styleguide.googlecode.com/svn/trunk/cppguide.html
- http://www.stroustrup.com/bs_faq2.html
- 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
- IBM Informix i DB2 dla hipsterów - taki żart ;)
- Naucz się co to CMake i jak go używać:
- http://www.cmake.org/cmake/help/cmake_tutorial.html
- Interesuj się i bądź na bieżąco:
- https://www.reddit.com/r/cpp
- 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ł
Add Comment
Please, Sign In to add comment