Jak dobrze nauczyć się programować w C++?

0

Witam.
Mam dziś pewnie takie trochę oczywiste pytanie. Niestety jest tak oczywiste, że przerasta mnie ono ;).
Problem brzmi tak, jak nauczyć się PROGRAMOWAĆ? Chodzi mi o to jak Wy zaczynaliście, żeby dojść do wysokiego poziomu. Bo składnię C++ znam, przerobiłem 2 książki na ten temat, ale mam taki problem, że nie wiem co z tym zrobić dalej. No bo potrafię posortować tablicę, stworzyć klasę, czy też jakąś funkcję, ale mam po prostu ogromny problem, żeby zrobić coś z wiedzą teoretyczną. Chciałem poszukać jakichś programów w C++ open source, z tym, że pojawia się problem natury takiej, że kod rozumiem(zazwyczaj są to niewielkie programy), ale jakbym miał napisać coś takiego to zaliczę "WTF". Czy są jakieś strony z prostymi ćwiczeniami, którymi stopniowo mógłbym uczyć się samego programowania w praktyce? Wiem, że należy ćwiczyć takich odpowiedzi nie oczekuję, ja oczekuję takich w jaki sposób to robić i gdzie zasięgać pomocy przy tym.

Bardzo pięknie dziękuję, jeśli ktoś zdecyduję się pomóc jeszcze niezbyt rozgarniętemu użytkownikowi forum :).

3
Slashy napisał(a):

Bo składnię C++ znam, przerobiłem 2 książki na ten temat, ale mam taki problem, że nie wiem co z tym zrobić dalej.

Jeżeli jedną z tych książek nie był dokument standaryzacyjny C++, to nie byłbym taki pewny że znasz składnię.

Slashy napisał(a):

Chciałem poszukać jakichś programów w C++ open source, z tym, że pojawia się problem natury takiej, że kod rozumiem(zazwyczaj są to niewielkie programy), ale jakbym miał napisać coś takiego to zaliczę "WTF".

Może opisz czym jest to WTF:
a) Nie wiesz od czego zacząć.
b) Piszesz prototyp i po kompilacji dostajesz mnóstwo błędów, tak że zniechęcasz się do dalszego pisania.
c) Piszesz program, ale po pewnym czasie nie jesteś w stanie odnaleźć się w kodzie, naprawa jakiegoś bugu automatycznie tworzy dwa inne.
d) Program napisałeś i pokazałeś przyjaciołom, którzy zaczęli się dziwnie zachowywać: nie odbierają twoich telefonów, na ulicy odwracają wzrok i udają że cię nie znają, usuwają ze znajomych na facebooku.
e) Nie znasz bibliotek np. graficznych do napisania gry, bądź uważasz że trzeba je znać na pamięć.
f) Coś innego, bądź bardziej szczególny przypadek powyższych punktów.

1

Pewnie chodzi ci o to, że oprócz robienia sekwencji kodu, potrzebujesz jeszcze umiejętności układania tych sekwencji w złożony program. Takie układanie nazywa się tworzeniem architektury oprogramowania. Jeśli to jest to, czego szukasz, to potrzeba ci wiedzieć o wzorcach projektowych (na przykład z książki Bandy Czworga), o UML (Unified Modelling Language), o OOD (Object Oriented Design).

0

Może opisz czym jest to WTF:
a) Nie wiesz od czego zacząć.
b) Piszesz prototyp i po kompilacji dostajesz mnóstwo błędów, tak że zniechęcasz się do dalszego pisania.
c) Piszesz program, ale po pewnym czasie nie jesteś w stanie odnaleźć się w kodzie, naprawa jakiegoś bugu automatycznie tworzy dwa inne.
d) Program napisałeś i pokazałeś przyjaciołom, którzy zaczęli się dziwnie zachowywać: nie odbierają twoich telefonów, na ulicy odwracają wzrok i udają że cię nie znają, usuwają ze znajomych na facebooku.
e) Nie znasz bibliotek np. graficznych do napisania gry, bądź uważasz że trzeba je znać na pamięć.
f) Coś innego, bądź bardziej szczególny przypadek powyższych punktów.

To punkty a, b, e :D.
Nie wiem zbytnio od czego zacząć, chociażby pisząc kółko i krzyżyk zacząłem od projektu. Zaprojektowałem sobie jak taka gra powinna wyglądać, no i pojawia się problem, że nie za bardzo wiem co z tym wszystkim zrobić, żeby miało ręce i nogi. Jak już napiszę to pojawia się masę błędów, ale zazwyczaj nie mam jakichś wielkich problemów ze znalezieniem błędu - powiem więcej błędy znajduję dużo lepiej niż kodzę, chociażby pomagam koledze ze studiów przy programach - on pisze to w C, ja tłumaczę na C++ i poprawiam błędy ;). Bibliotek graficznych też nie znam i przez to mam też problem, bo mam dylemat, czy takie kółko i krzyżyk warto pisać w konsoli, czy jednak nauczyć się biblioteki graficznej i dopiero wtedy działać. Na pewno biblioteka graficzna uprościłaby założenia, tylko sam kod byłby pewnie znacznie trudniejszy.

Więc podsumowując znam poszczególne elementy języka, wiem do czego służą, ale nie wiem jak się z nich korzysta w jakimś pożytecznym i dłuższym programie. Czyli wracając do Kółka i krzyżyka wiem co i jak trzeba zrobić, ale nie potrafię projektu przekształcić w działający kod.

Nie czytałem dokumentacji, bo jakoś tak nie mogłem znaleźć jakiejś ładnie napisanej (za ładną rozumiem w jakimś pdf'ie, bo niezbyt lubię czytać coś na komputerze, a długie teksty będące w przeglądarce mnie dosyć mocno denerwują), a w "Symfonii C++" było napisane, żeby raczej nie czytać jej na początku, bo jest pisana bardzo fachowym językiem. Może to był mój błąd, ale stwierdziłem, że na razie wystarczy mi to co umiem, a gdy już się tego nauczę dobrze to przeczytam. W tej chwili planuję jeszcze wzbogacić się o wiedzę z STL, bo to ponoć jedna z największych zalet C++.

@norma O dziękuję, tego też mi brakuje :).

1

@lukas_gab
@MJay
Ależ Wy pieprzycie za przeproszeniem...
Symfonia dla idiotów?

Czyli idiotą jest ktoś, kto chce się nauczyć programowania od podstaw? No to może niech taki totalny lajk zacznie od Thinking in C++ albo jeszcze lepiej...dokumentu standardu C++11?
No bo przecież Symfonia jest dla idiotów.

Obrażasz tym nie tylko niektórych użytkowników tego forum - w tym mnie - ale też autora tej książki Jerzego Grębosza.
Symfonia nie opisuje szablonów i wielowątkowości ale tylko to więcej jest w Thinking in C++ (mam obie i czytałem obie).
Tych rzeczy mozna douczyć się z internetu bo przecież po to on jest. Programowania z książki nawet najlepszej się nie nauczysz.

Sory @lukas_gab ale patrząc na poziom większości Twoich wypowiedzi myślałem, że jesteś bardziej rozsądnym i inteligentym człowiekiem. Jak widać myliłem się.

0

Czytając komentarze / posty / książki:
Po pierwsze czytaj ze zrozumieniem.
Po drugie czytaj uważnie.
Po trzecie analizuj to co przeczytałeś.

Przeczytałeś ledwo Symfonię i wypowiadasz się na temat THCPP? Tylko szablony i wielowątkowości są rozszerzeniem Symfonii? A metaprogramowanie? A wykorzystanie STL? A obsługa wyjątków? A wzorce projektowe czy wielokrotne dziedziczenie? Ehh.. Jeszcze raz przeczytaj pierwsze cztery linijki mojego postu.

4

Napisz grę roguelike w konsoli na klasach ;)

1

Pisanie prostych gier jest najlepszą formą praktyki połączonej z nauką i dobrą zabawą ;]

9
Slashy napisał(a):

Nie wiem zbytnio od czego zacząć, chociażby pisząc kółko i krzyżyk zacząłem od projektu. Zaprojektowałem sobie jak taka gra powinna wyglądać, no i pojawia się problem, że nie za bardzo wiem co z tym wszystkim zrobić, żeby miało ręce i nogi.

Zaczynaj od zrozumienia problemu. Ale na serio to jest mnóstwo różnych metodyk które mówią od czego powinno się zaczynać.
Jedne mówią zacznij od napisania testów które sprawdzą czy program działa. To metodyki agille TDD(test driven development)/BDD(behaviour driven development). Inne, też agile, DDT(design driven test)/ICONIX mówią najpierw minimum projektowania, z projektu wyprowadź testy itd. Poszukaj na google ich dokładniejszych opisów.
Jedną z nich TDD masz tutaj w zastosowaniu do prostego kata http://www.objectmentor.com/resources/articles/xpepisode.htm

Slashy napisał(a):

Jak już napiszę to pojawia się masę błędów, ale zazwyczaj nie mam jakichś wielkich problemów ze znalezieniem błędu - powiem więcej błędy znajduję dużo lepiej niż kodzę, chociażby pomagam koledze ze studiów przy programach - on pisze to w C, ja tłumaczę na C++ i poprawiam błędy ;).

Mimo wszystko nie pisz całości na pałę. Podziel to na mniejsze części. Wiecej info http://www.cprogramming.com/tutorial/incremental_testing.html

Slashy napisał(a):

Bibliotek graficznych też nie znam i przez to mam też problem, bo mam dylemat, czy takie kółko i krzyżyk warto pisać w konsoli, czy jednak nauczyć się biblioteki graficznej i dopiero wtedy działać. Na pewno biblioteka graficzna uprościłaby założenia, tylko sam kod byłby pewnie znacznie trudniejszy.

Bibliotek graficzna niczego nie uprości. I tak dalej musisz napisać logikę gry która w żadnym stopniu nie zależy od sposobu w jaki wyświetlasz, bądź pobierasz od użytkownika dane. To one będą się musiały dostosować do modelu(stanu gry itd.).

Nauczenie się biblioteki to nie wkuwanie na pamięć nazw funkcji i ich parametrów. Tylko sprawne posługiwanie się dokumentacją. Czyli wiesz gdzie co jest i co możesz przy pomocy biblioteki zrobić. Także w przypadku błędów szybko jesteś w stanie ustalić(np. z pomocą wyszukiwarki) co jest błędem i jak go naprawić.

Slashy napisał(a):

Więc podsumowując znam poszczególne elementy języka, wiem do czego służą, ale nie wiem jak się z nich korzysta w jakimś pożytecznym i dłuższym programie. Czyli wracając do Kółka i krzyżyka wiem co i jak trzeba zrobić, ale nie potrafię projektu przekształcić w działający kod.

Od samego czytania książek na temat pływania nie nauczysz się pływania. Potrzebna jest praktyka. Tak samo w programowaniu, nie nauczysz się go dobrze bez praktyki. Nie bój się też popełniać błędów, bo to one najwięcej uczą. Im więcej ich popełnisz to tym łatwiej ich unikniesz np. w pracy zawodowej.

Slashy napisał(a):

Nie czytałem dokumentacji, bo jakoś tak nie mogłem znaleźć jakiejś ładnie napisanej (za ładną rozumiem w jakimś pdf'ie, bo niezbyt lubię czytać coś na komputerze, a długie teksty będące w przeglądarce mnie dosyć mocno denerwują), a w "Symfonii C++" było napisane, żeby raczej nie czytać jej na początku, bo jest pisana bardzo fachowym językiem.

To niedobrze.

0

@FAN bswierczynskiego

Od samego czytania książek na temat pływania nie nauczysz się pływania. Potrzebna jest praktyka. Tak samo w programowaniu, nie nauczysz się go dobrze bez praktyki. Nie bój się też popełniać błędów, bo to one najwięcej uczą. Im więcej ich popełnisz to tym łatwiej ich unikniesz np. w pracy zawodowej.

Tak mi się właśnie wydaje, dlatego próbuję z tym, że na razie nic wielkiego nie stworzyłem, ot gierka do zgadywania pseudo-losowych liczb, taką prostą tekstową przygodówkę, czy też zgadywanie słów, ale mam zamiar ćwiczyć tyle, żeby w końcu się nauczyć robić coś większego. Dziękuję Ci bardzo za rady, dziękuję też za rady innych. Zaraz siądę i postaram się przeczytać to co jest w linkach i o metodach nauki.

To niedobrze.

Dlatego mam zamiar kupić tablet lub e-book-reader, żeby to zmienić. Chodzi o to, że jak jeszcze jest w pdf'ie plik to jakoś mi idzie to czytanie (zazwyczaj jest to czcionka przyjemna dla oka), przeczytałem tak wiele tutoriali do Unity Engine i nie było większych problemów. Natomiast jak mam siedzieć na przeglądarce i czytać to wszystko to jakoś nie mogę się skupić. Wtedy najchętniej położyłbym się na łóżku i to przeczytał leżąc, przy komputerze niestety jeszcze się tak nie da ;). Przez to nie przeczytałem chociażby "Thinking in C++" w wersji internetowej. Uzupełniałem tylko informację o to czego nie znalazłem w Symfonii. Z tym, że tam była też utrudniona nawigacja po stronie, więc robiłem to bardzo pobieżnie.

@lukas_gab Ja tak nie uważam :). Jestem w tej chwili (czyli od września) w ll klasie liceum, a Symfonię zakupiłem jeszcze przed pójściem do l LO. Jedyną styczność z programowaniem jaką kiedykolwiek miałem to Visual Basic i to dosyć słabo uczony (wklejanie i przepisywanie kodu z podręcznika było jedynym zdaniem), zawsze mnie to interesowało, tylko miałem problemy z matematyką przez co w pewnym momencie z tego zrezygnowałem (pierwszy raz ogólnie z C++ zetknąłem się w 6 klasie podstawówki i spodobało mi się, z tym, że mało co rozumiałem, więc pisałem programy do liczenia pola kwadratu i wypisywania jakiegoś tekstu - no i taki program dla żartu, który pytał o liczbę robił jej inkrementacje i ogłaszał, że wygrał), ale z problemów się wyzbierałem i idzie mi bardzo dobrze, dlatego odgrzebałem stare plany i znów chcę być programistą. Z tutorialów internetowych było ciężko się czegoś nauczyć, jedynie "od zera do gier kodera" się pod tym względem jakoś bardziej wybijało, więc wybór padł na "Symfonię C++". I muszę przyznać, że książka jest bardzo przyjemna, bez niepotrzebnego na samym początku fachowego słownictwa. Fajnie wprowadziła mnie do języka. Po wskaźnikach mnie jedynie zaczęła trochę męczyć swoim przesadnym upraszczaniem wszystkiego, ale przeczytałem całość i stwierdzam, że na początek był to dobry wybór.
No, ale minus tej książki był taki, że właśnie nie nauczyła mnie wykorzystywania tego w praktyce. Wiem, że tego muszę nauczyć się sam, ale większość programów z książki była "dla picu", nie robiąca niczego konkretnego, wyświetlały one zazwyczaj jakiś tekst, czy liczby. Dlatego zapytałem, gdzie mógłbym się tego nauczyć :). No i trochę zadań było w niej mało, gdzie na początku - funkcje, nie funkcje, wskaźniki - były zasypane zadaniami to później nie było praktycznie w ogóle zadań.

3
Slashy napisał(a):

Zaraz siądę i postaram się przeczytać to co jest w linkach i o metodach nauki.

Zainteresuj się też tym linkiem: http://blog.y3ti.pl/2009/12/jak-szybciej-sie-uczyc-i-zdobywac-doswiadczenie/

1 użytkowników online, w tym zalogowanych: 0, gości: 1