Utopijna wizja nauki programowania

0

Witajcie :)
Moją naukę programowania zacząłem w Maju 2011 roku pod namową mojego znajomego, który polecił mi zacząć od C++ i zakupić w tym celu Symfonię C++ Standard. Tak też zrobiłem.
Przerobiłem sumiennie cały pierwszy tom jednak na drugim się już zatrzymałem ponieważ można powiedzieć, że takie podejście do nauki programowania jest troszkę utopijne (tj. czytanie książki i przerabianie przykładów). Spotkałem się z opinią człowieka, który twierdzi, że najlepiej uczyć się programowania na projektach tj. obrać sobie jakiś projekt (program do stworzenia), technologię, w której chcemy to zrobić i dążyć po prostu do zrobienia tego - tym sposobem uczymy się najlepiej a nie ciągle czytając coraz to nowsze książki ponieważ tak daleko nie zajdziemy. Co Wy o tym myślicie? Jest to prawdziwe i skuteczne?
Jedną z osób, które tak twierdzą jest właśnie mój nauczyciel ze szkoły średniej, kolejną natomiast pewien programista. Ja chciałbym znać też Wasze zdanie na ten temat :)

0

Zacząłeś mniej więcej jak ja(na poważnie) zgadzam się ciągłe czytanie książki i przerabianie zamieszczonych w niej przykładów jest cholernie nudne przeszło do tego, że przerabiam 1-2 działy dziennie.

Projekty? Fajnie. Mi się jednak wydaje, że wpierw ogarnąć dobrze zagadnienia z książki i wtedy się wziąć za jakiś projekt.
No chyba, że chodziło ci o takie w miarę łatwe programiki.
Ostatnio napisałem program do zliczania znaków w tekście;p Chciałem to przenieść na okienka(windows forms) ale odpuściłem sobie do czasu aż zacznę się go uczyć.
Do tego robię sobie jeszcze co 2-3 dni takie ogólne przypomnienie z ostatnich rozdziałów jakie przeczytałem w książce czyli jeden program wykorzystujący przedstawione tam zagadnienia. Do tego jeszcze czasem próbuje coś rozwiązać z http://projecteuler.net/problems
No ale nie ukrywam przydała by się jakaś lista programów do napisania na różne poziomy trudności;d

0

A jeśli można wiedzieć to jaką książkę przerabiasz?
Wiesz..ja jestem w szkole średniej a Ty na studiach pewnie to też masz więcej materiału iwgl..

Hmm trudniejsze przykłady? A widziałeś SPOJ? Albo to http://phppp.gajdaw.pl/projekty/25-03/index.php?id=20 ?

0

Przerabiałem 1 tom Symfonii c++ i gdzieś po +- roku przerwy przeniosłem się na c# i pierwsza książka Język c# 2008 i platforma net 3.5.
Nie, nie, nie. Jestem w 2 klasie technikum informatycznego ;p

0

Podasz jakiś kontakt do Ciebie? For example - GG:) Chciałem pogadać trochę ;)

0

Z samych książek niczego się nie nauczysz, to fakt. Trzeba pisać. Ale (!) nie można pisać nie znając podstaw! Oba tomy symfonii omawiają PODSTAWY języka. Absolutne podstawy! Tam nie ma właściwie nic ponad składnię i konstrukcje języka. Co więcej Symfonia nie omawia nawet całej składni bo nie mówi nic o szablonach.
Tak więc:

  • najpierw uczymy się podstaw
  • potem piszemy projekty
    Ja wiem ze każdy by chciał po tygodniu napisać już mega grę i się chwalić kolegom, ale tak się nie da. Potem są takie kwiatki na forum że ktoś wstawia 1000 linijek wielokrotnie skopiowanego kodu bo "nie doszedł jeszcze do pętli i ich nie umie, ale zabrał się za pisanie gry". Tak się robić nie da i zapewniam cię ze taki "projekt" przyniesie więcej szkody niż pożytku.
0

Książki to cenne źródło wiedzy, ale bezużyteczne bez praktyki. Pisanie bez posiadania podstaw prowadzi do odkrywania koła na nowo i utrwalania złych praktyk, które w mniejszych projektach mogą przejść niezauważone. Najpierw książka, tutorial (ale oficjalny dla danej technologii, nie rushofy wpisik z blogaska jakiegoś Ziutka czy Staszka), dokumentacja, bezpośrednio potem (lub obok) praktyczne wykorzystanie nowej wiedzy.

0

Ja mam lepszy pomysł na naukę na początku: grzebanie w gotowym przykładowym dobrze napisanym kodzie. Postępowanie jest takie:

  1. Dłubiemy w kodzie nie rozumiejąc podstaw. Chcemy jednak dodać/ zmienić jakąś funkcjonalność.
  2. Takie dłubanie zwykle kończy się rozpieprzeniem programu i szeregiem exceptionów, segfaultów, etc
  3. Wtedy bierzemy manual/ książkę i zastanawiamy się co źle poszło.
  4. Z pomocą wiedzy z owego manuala/ książki próbujemy naprawić program - oczywiście nie naprawiamy metodą przywracania do poprzedniej wersji; chcemy mieć nową/ zmienioną funkcjonalność, więc kombinujemy tak, żeby do tego dojść.

Powyższą metodą nauczyłem się WinAPI pod czystym asemblerem, co było moim pierwszym językiem/ platformą, którą się nauczyłem (nie licząc liźniętego wcześniej JavaScriptu, którego i tak do dzisiaj niezbyt dobrze znam i BASICa na Commodore 64, którego w zasadzie prawie nie znam).

0

Kiepski pomysł , ja kiedyś tak chciałem się nauczyć win32 api tzn. w praktyce w sumie co chciałem to napisałem, ale raz że odkrywałem koło na nowo czego potem bardzo żałowałem bo kuupe czasu mi to zajęło a dwa że mimo tego iż program był olbrzymi to i tak nic się nie nauczyłem bo wszystko to były copy / paste bez zrozumienia zagadnienia. Chcesz się czegoś nauczyć to opanuj się trochę weź się za lekturę.

0

Ja zacząłem rok temu i również jestem w 2 klasie TI naukę rozpocząłem od książki "C++ dla każdego", zeszytu i długopisu. Czytałem rozdział po rozdziale zapisując według mnie najważniejsze informację w zeszycie, w między czasie pisałem proste programy, trochę liznąłem o SPOJ, i tak co jakiś czas brałem ten zeszyt i go oglądałem tak dla przypomnienia. Kiedy wiedziałem już nieco więcej zacząłem więcej kodować, mniej czytać (do dziś nie skończyłem tej książki, ale mam zamiar to zrobić) i tak jakoś już się skończyło, że przychodzę ze szkoły to muszę odpalić 4p, następnie IDE i coś popisać, chociażby małą funkcje :D A przy odrobinie więcej czasu wracam do książki. Oprócz tego dużo można nauczyć się na tym forum, czytam tematy na których nie znam odpowiedzi, ale ktoś inny ją zna i się nią dzieli przez co i ja mogę troszkę się poduczyć :)

0

Możecie polecić jakiś projekt właśnie do takich celów z source, który ma więcej niż 1000 linijek kodu, gdzie mógłbym dodawać różne funkcje itp ? Próbowałem jak na razie na różnych silnika (TFS od Tibii) do gier ale ogarnięcie tak dużej ilości kodu jak na razie mi nie idzie. Tak więc szukam cały czas jakiejś gierki/programu w którym mógłbym podłubać i zobaczyć efekty mojego dłubania. Najlepiej "czysty" c++ bez zbędnych bibliotek ;o

1

Przejrzałem pobieżnie napisane tu posty i nie zauważyłem nigdzie metody, której ja używałem na samym początku.
Jednak zacznijmy od wyjaśnienia:
Samo czytanie książki i przerabianie przykładów jest - tak jak już wspomniano - niezbyt wydajnym sposobem nauki. Krótko mówiąc: wydaje nam się, że coś już potrafimy i wiemy, ale w rzeczywistości w realnych warunkach kompletnie nie potrafimy tego zastosować w życiu. Rzecz to jak najbardziej normalna - podobna do tej z nauki matematyki: jeśli nie przerobisz zadań na własną rękę, a jedynie zatrzymasz się na podanych na tacy przykładach to nie nauczysz się niczego.

Z tego też powodu moja rada jest taka: Czytaj dział po dziale i z każdego działu spróbuj napisać jakiś prosty program. Absolutnie nie powinien być to projekt, a jedynie mini program. Będą to najczęściej kompletnie bezużyteczne programy, ale nauczą Cię one zastosowania wspomnianych w rozdziałach zagadnień.
Poza tym jeśli naprawdę Cię to kręci to będziesz miał nie lada radochę z tworzenia to coraz dziwniejszych / śmieszniejszych / bardziej zaawansowanych aplikacji. Zauważysz też w ten sposób, że pewne zaawansowane zagadnienia języka się faktycznie przydają (częsty problem początkujących - "A po co wskaźniki?"), a nie zauważysz tego w żaden inny sposób jak pisać pisać i jeszcze raz pisać. Do tego dorzuciłbym jeszcze, aby dużo pisać ;)

Po przerobieniu materiału z książek (najlepiej kilku, ale po przerobieniu jednej kolejne książki lecą bardzo szybko) i opanowaniu zagadnień z omawianych rozdziałów, można zacząć pisać jakiś tam projekt, ale też nie rzucałbym się na głęboką wodę od razu. Ot prosty edytor tekstu, odtwarzacz muzyki / filmów, albo przeglądarka internetowa lub klient FTP, IRC, albo jeszcze na sam koniec klient poczty e-mail.
Do tego jednak potrzebna jest przynajmniej ta podstawowa wiedza z książek bo inaczej cały projekt będzie napisany po prostu brzydko. Już nie chodzi o same zagadnienia związane z "czystym kodem", ale o zastosowanie tych składni języka, które w danym miejscu faktycznie są najbardziej pożądane.

Krótko mówiąc: czytaj czytaj czytaj, a potem pisz pisz i pisz. Dział po dziale w ten sposób kontynuuj swoje prace, po każdym dziale pisz jakieś mini programy, a na pewno się to opłaci z czasem. Efekty nie będą widoczne od razu, ale po roku wiedza będzie już na tyle duża, żeby spokojnie móc się zabrać za jakiś tam mniejszy (ale nie mały) projekt i szlifować już wtedy wiedzę w całkowicie praktycznych warunkach.

Takie jest moje zdanie i taka jest moja rada :)

0
Wibowit napisał(a)

Ja mam lepszy pomysł na naukę na początku: grzebanie w gotowym przykładowym dobrze napisanym kodzie. Postępowanie jest takie:

  1. Dłubiemy w kodzie nie rozumiejąc podstaw. Chcemy jednak dodać/ zmienić jakąś funkcjonalność.
  2. Takie dłubanie zwykle kończy się rozpieprzeniem programu i szeregiem exceptionów, segfaultów, etc
  3. Wtedy bierzemy manual/ książkę i zastanawiamy się co źle poszło.
  4. Z pomocą wiedzy z owego manuala/ książki próbujemy naprawić program - oczywiście nie naprawiamy metodą przywracania do poprzedniej wersji; chcemy mieć nową/ zmienioną funkcjonalność, więc kombinujemy tak, żeby do tego dojść.

Powyższą metodą nauczyłem się WinAPI pod czystym asemblerem, co było moim pierwszym językiem/ platformą, którą się nauczyłem (nie licząc liźniętego wcześniej JavaScriptu, którego i tak do dzisiaj niezbyt dobrze znam i BASICa na Commodore 64, którego w zasadzie prawie nie znam).

Mam podobny pomysł, ale bardziej rozsądny. Moim zdaniem podstawowym błędem nauczania wszystkich jeżyków programowania jest uczenie samego języka.
Nie uczą, ze jest coś takiego jak debugger co jest podstawowym narzędziem i doskonałą platformą do nauczania!
Książka do nauki powinna wyglądać mniej więcej tak:

#Kretyński wstęp (nie da się uniknąć)
#Instrukcja jak zainstalować IDE
#Instrukcja jak pobrać i zainstalować przykładowe projekty książki
#instrukcja skąd wziąć dokumentację
#Zacznij od projektu nr 1
#Otwórz projekt i-ty.
#wyjaśnienie co projekt prezentuje
#debugguj projekt
#zadnie wprowadź proste modyfikacje do projektu
#debugguj projekt
#następny projekt (do jakiejś części) - skok do 6
#omówienie zarządzania pamięcią
#narzędzie do wykrywania mem-leak-ów itp.
#Iteracja po kolejnych przykładach zarządzania pamięcią (debbuging usuwanie błedów)
#Wysłanie na SPOJ-a
#Jakiś framework

0

Przykładowy kod zwykle nie jest mocno skomplikowany i o taki mi chodziło. Gdy brałem na warsztat program złożony z wielu dziesiątek/ setek klas/ plików bez przygotowania do tematu to zwykle kończyło się to failem, gdyż się po prostu poddawałem walcząc w ten sposób. A więc im mniej się wie, tym mniej skomplikowane programy trzeba brać na warsztat.

Na początek polecam zrobienie jakiegoś notatnika na sterydach (na wzór jakiegokolwiek popularnego zamiennika MS Notepada na przykład), albo nawet edytora HTML. Wzięcie jakiegoś sprawdzonego przykładowego kodu i dłubanie w nim, aż wyjdzie coś ciekawego.

0

Jako autor tematu teraz ja się wypowiem. Chciałbym się szczególnie ustosunkować do wypowiedzi polaczka.
Otóż... przeczytałem sumiennie cały pierwszym tom Symfonii c++ standard a teraz przerabiam sobie inną książkę o C++ również w miarę sumiennie.
Dorwałem się kilka dni temu do dokumentacji MSDN i widzę tam całkiem przyzwoite tutoriale C#. Chciałbym coś na tym poziomie sobie napisać. Na początku myślę, że zacznę od zaimplementowania w C# tych programów, które napisałem sobie w C++. Jakieś tam proste algorytmy a te języki są przecież do siebie bardzo zbliżone. Jak to zrobię to mam zamiar napisać w C# coś okienkowego i najprawdopodobniej będzie to prosty odtwarzacz muzyki. :)
Myślę, że dam rade :)

0

Mam jeszcze pytanie od siebie, które trochę uzupełnia się z tym tematem. Mianowicie od jakiegoś czasu wznowiłem naukę C++ (kiedyś coś tam liznąłem z tutoriala xiona), kupiłem książkę Szkoła Programowania Język C++ S. Praty. Teraz trafiłem na tę stronę: http://darkcult.nazwa.pl/wiki/index.php/Strona_główna i jakoś się wydaje ciekawsza licząc ilość do treści konkretnej. Tylko mam pytanie czy ten kurs trzeba jakoś uzupełniać treścią zawartą w książce ? Spis macie tu: http://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-v-stephen-prata,cpprim.htm Czy wystarczy w kwestii samego języka to co jest w tym kursie ? Przykładowo rozwaliło mnie to, że w tej książce pętle na 45 stron są opisane... Wiem, że można sobie porównać spis z tym co jest, ale chciałbym już kogoś zapytać kto w tym dłużej siedzi.

0

Jeszcze odnośnie nauki. IMO potwornym błędem, który popełniałem w liceum, kiedy zaczynałem była marna znajomość działania komputera. Proces działania wskaźników i referencji był dla mnie tyleż abstrakcyjny co nieistotny. Z wiedzą, którą mam dzisiaj zabrałem się znów do programowania i o ile praktyka jak wiadomo zrobi pewnie swoje o tyle błędy kiedyś przeze mnie popełniane wydają mi się teraz nieco śmieszne.
Inną kwestią jest sama świadomość tego, po co uczę się danych rozwiązań - przerabiając zadania za SPOJa (chyba już tego nie ma) - człowiek dochodził w końcu po co właściwie są struktury danych, a przy bardziej złożonym programie klasy.
Zawsze irytowało mnie, że człowieka, który mało co w życiu napisał i nie stawił czoła problemom, które mogą być rozwiązane przez wprowadzenie obiektowości, dziedziczenia lub na przykład takich szablonów, pcha się do głowy z uporem maniaka tą samą definicję klasy opartą na rozważaniach o żarówce czy innym samochodzie.
Zamiast nauczyć człowieka, jak kombinować przy zadaniach obliczeniowych czy innych grafach uczy się go "na zaś" rozwiązań, których i tak jeszcze nie użyje. A jak złapie bakcyla to nawet sam ich będzie szukał prawda?

zxcb: Jeżeli masz zrobiony kurs c++ to wypada zaznajomić się z biblioteką standardową, co pozwoli ci rozwiązać multum różnych zadań algorytmicznych.

0

No dzięki, tylko nadal nikt mi nie odpowiedział na pytanie. Czytam sobie powoli ten kurs i powtarzam wiadomości już kiedyś nabyte. Ale czy wiedzę z tego kursu będę musiał uzupełniać treścią zawartą w książce ?

0
Zjarek napisał(a)

"Czysty" C++ stosuje się rzadko, bo bibliotekę standardową ma naprawdę biedną
tą z 1998 roku rzeczywiście ma biedną.

0

Czyli wychodzi na to, że tylko ja się uczyłem w inny sposób programować. Już kiedyś to tu opisywałem ale mogę przypomnieć. Programowaniem zainteresowałem się dopiero w szkole kiedy zauważyłem że dużo szybciej umiem zrozumieć dany algorytm, znaleźć rozwiązanie problemu niż inni w klasie. Nie wiem może to trochę dziwne ale mam coś takiego, że ja po prostu widzę dany algorytm, układa on mi się sam w głowie często bez większego wysiłku. Po pół roku nauki w szkole ( a wiadomo jak uczy się w technikum programowania) postanowiłem napisać mój pierwszy projekt w Delphi. Miał on kilka dziesiąta linii kodu. Od tego momentu zacząłem czytać sobie kompendium programisty zawarte na tym portalu i wykorzystywać nowe elementy nie w drobnych programach tylko w tym zaczętym projekcie oraz jeszcze w kilku innych bodajże 5 projektach które powstawały w czasie nauki Delphi i były rozwijane wraz z nowymi pomysłami i wiedzą. Następnie zauważyłem, że Delphi warto znać ale lepiej zacząć pisać w językach których znajomość pomoże mi w przyszłości zdobyć pracę, wiec praktycznie porzuciłem delphi (ostatnio coś w nim napisałem jeszcze) i postanowiłem poświecić czas na naukę c++, Kupiłem książkę Szkoła programowanie język c++ i zacząłem czytać. Jak wiadomo znając już delphi w takim zakresie jak było w kompendium było mi dużo łatwiej przejść przez pierwsze rozdziały. Po tych podstawach znowu porzuciłem pisanie drobnych programów bo mnie to po prostu by denerwowało takie bezcelowe pisanie. Mnie nakręca pisanie projektu który ma jakiś sens i zastosowanie, a nauka uczenia się na błędach i dzięki rozwiązywaniu danego problemu, realizowania kolejnych pomysłów, dodatków do programu jest dużo bardziej wydajna niż pisanie suchych zadań z książki, przynajmniej w moim przypadku tak jest. W sumie zacząłem od przepisania 2 projektów z delphi na (za co pewnie zaraz dostane opieprz od innych) C++/CLI. Głupie? Może i tak ale same algorytmy pisałem wykorzystując jak najmniej funkcji netowskich, a do aplikacji wykorzystywałem tylko windows form. Nie widziałem i nie widzę żadnego sensu nauki winAPI w sensie okienek, a pisanie programów pod konsola nie napędzało mojej nauki. następnie aby nie zadomowić się w samym c++/CLI zacząłem pisać również pod QT oraz CedeBlocks z wykorzystanie wxWidgets. Projekty które pisze są różne aby jak najbardziej urozmaicić sobie prace oraz nabyć jak największą wiedzę. Jeszcze nie minął rok od rozpoczęcia nauki C++ ale właśnie dzięki projektom moja wiedza jest na takim poziomie jakim jest, a nie na dużo mniejszym.
Dlatego powiem tak, każdy ma inny sposób na naukę, każdemu przyjemniej inaczej zdobywać wiedzę ale najważniejsze jest jedno: kodzenie.

0
blee napisał(a)
Zjarek napisał(a)

"Czysty" C++ stosuje się rzadko, bo bibliotekę standardową ma naprawdę biedną
tą z 1998 roku rzeczywiście ma biedną.

Nowy C++11 stara się właśnie załatać tę dziurę. Dorzucili wcale nie mało nowych algorytmów. Nie mniej biblioteka standardowa takiej javy czy .net-a jest wielokrotnie większa. Powstaje też koncepcja pod nazwą PCL - Portable C++ Library, już z myślą o kolejnym standardzie. Tam planuje się upchać już naprawdę dużo, od bibliotek do obsługi xmla, po takie do wysyłania smsów. Jeśli kogoś interesuje temat to na ostatnim Going Native padło wiele ciekawego o przyszłości standardowej biblioteki w C++, google for yourself.

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