• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z rozpoczęciem nauki kodowania.

VPS Starter Arubacloud
0 głosów
437 wizyt
pytanie zadane 7 maja 2018 w C i C++ przez Martin Koszmider Początkujący (360 p.)
zamknięte 8 maja 2018 przez Martin Koszmider
Witam. Mam pytanie odnośnie rozpoczęcia zabawy z programowaniem. Chciałbym pisać strony i od razu zacząć naukę od HTML, CSS, PHP, JS i SQL, ale wiele moich znajomych mówi że powinienem najpierw się uczyć C++. Czy naprawdę ten język mi się przyda w tworzeniu stron?
komentarz zamknięcia: Problem rozwiązany

5 odpowiedzi

+4 głosów
odpowiedź 7 maja 2018 przez RafalS VIP (122,820 p.)
wybrane 8 maja 2018 przez Martin Koszmider
 
Najlepsza

Po pierwsze - definitywne nie. C++ wcale, ale to wcale nie jest Ci potrzebny do pisania stron.
Co do zaczęcia nauki od C++ a potem przejścia do HTML, JS, PHP itd to według mnie C++ jest trudnym językiem i dlatego nie nadaje się na pierwszy język. Chodzi o to, że na początku masz problemy koncepcyjne z formułowaniem algorytmów i podstawami programowania, które są wspólne wszystkim językom, a pisząc w C++ dochodzą do tego problemy, których wcale nie ma w innych językach bo część składni jest rozwiązana w przyjaźniejszy dla programisty sposób - owszem, czasem kosztem wydajnosci, ale pisząc pierwsze programy nie będziesz nawet o tym myślał :P. C++ bywa też ciężki w czytaniu. Przykład wyrażenie lambda w C++:

[](int n, int x) { return n < x; }

i w pythonie:

lambda x,y: x < y


Ludzie mówią, że C++ jest dobry na początek, bo oni zaczęli od C++ i w sumie było fajnie. Według mnie C++ jest względnie trudnym językiem i niektórzy mogą się zrazić do programowania po zetknięciu z zawiłościami C++, z którymi nie zetknęliby się gdyby wybrali prostszy język na początek.

Nie krytykuję oczywiście C++. Zrozumienie C++ sporo daje w ogólnym rozwoju programistycznym, ale lepiej zacząć od czegoś prostszego.

1
komentarz 8 maja 2018 przez j23 Mędrzec (194,920 p.)

@RafalS,

Nie ma to jak dobry poczciwy garbage collector :P. W C++ jak chcesz alokować na stercie to musisz pilnować, żeby zwolnić pamięć, co czasem nie jest trywialnym zadaniem

A o RAII, inteligentnych wskaźnikach czy kontenerach typu std::vector słyszał?

komentarz 8 maja 2018 przez mokrowski Mędrzec (155,460 p.)

@RafalS,

A o RAII, inteligentnych wskaźnikach czy kontenerach typu std::vector słyszał?

Nie słyszał bo Grębosza czytał a kadra na uczelniach jeszcze (nie w całości) "wymarła" :-/

@RafalS, zapoznaj się z nowymi właściwościami języka bo... mijasz się już z prawdą (przynajmniej o 7 lat).

Ale zostawiając zbędną obronę C++ (bo to nie o nim jest pytanie).

Łatwy do nauczenia się język od trudnego, odróżnia konieczność opanowania biegle pewnej ilości elementów i zależności których należy pilnować. Bez wątpienia np. Python czy JS jest łatwiejszy do opanowania na podstawowym poziomie niż C++. Daje także (na początkowym etapie), bardziej spektakularne rezultaty. C++ na tym tle to "długodystansowiec" który pokazuje swoje plusy w bardziej ekstremalnych zastosowaniach i większych projektach krytycznych.

A do autora pytania. Nie. C++ nie przyda Ci się do budowania "stron HTML". Skupiaj się na technologiach HTML, JS, PHP. Osobiście polecił bym zamianę PHP na nieco lepszy Python.

komentarz 8 maja 2018 przez RafalS VIP (122,820 p.)
Nie czytałem grembosza. Ze smart pointerów korzystam, wiem co to RAII, a z tym vectorem to bez przesady...
I przeczytajcie uważnie to co napisałem jeszcze raz...
"W C++ jak chcesz alokować na stercie to musisz pilnować, żeby zwolnić pamięć, co czasem nie jest trywialnym zadaniem". W którym miejscu wykluczyłem RAII czy smart pointery?
Podtrzymuje w stu procentach i żadne od 7 lat mijam się z prawdą. Przecież korzystanie ze smart pointerów jest spowodowane własnie tym, że boisz się wycieku, więc na Tobie jako programiście leży przymus pilnowania czy pamięć ze sterty jest zwalniana. Smart pointery ułatwiają zadanie, ale mimo wszystko gdyby w C++ był garbage collector to nie korzystałbyś z shared_ptr nigdy. Mimo wszystko musisz ogarnąć te smart pointery, musisz włożyć wysiłek w coś w co nie włożyłbyś pisząc w języku bez ręcznego zarządzania pamięcią. A nie daj boże zajdzie potrzeba zmiany właściciela obiektu zarządzanego przez unique_ptr i trzeba będzie przenieść obiekt, co oznacza, że natkniesz się na move semantics i referencje do rwartości. Nie polecałbym nikomu zaczynania nauki programowania od tego typu zagadnień, na które łapie się ludzi po studiach na rozmowach rekrutacyjnych. Wynika z tego dokładnie to co chciałem powiedzieć - ręczne zarządzanie pamięcią dodaje trudności do języka, których nie ma w językach z garbage collectorem.

Dodatkowo przypominam, że doradzamy komuś kto jeszcze nawet nie zaczął z C++, więc przyjęcie, że będzie on od samego początku korzystał ze smart pointerów, RAII oraz kontenerów jest troszeczkę optymistyczne, biorąc pod uwagę, że z tak wielką pewnością stwierdziłeś, że osoba odpowiadająca na pytanie nawet o nich nie słyszała, nie mówiąc już o korzystaniu.

PS, grembosza, RAII i smart pointery bym przeżył, ale ten vector to mnie wkurzył.
komentarz 8 maja 2018 przez mokrowski Mędrzec (155,460 p.)

@RafalS,

To jest oczywiście wątek poboczny i nie dotyczy pytania.

Dodanie do języka GC, powoduje wykluczenie go z obszaru zastosowań w których właśnie C i C++ się sprawdza. Nie powierzył bym sterowania systemem krytycznym językowi który może zachować się (i zachowuje się) niedeterministycznie ze względu na to że właśnie uruchomił GC. W sytuacjach gdy koszt GC może wyeliminować sensowność projektu, nie ma sensu go forsować. Kończy się (co ma często miejsce w dużych instalacjach), blokadą GC np w języku Java i uruchamianie go "hurtem" w nocy gdy system jest mało obciążony.

Jak wygląda stan rzeczy? Np. w C++11 dodano obowiązek przygotowania języka do włączenia GC. Jest przewidziane do tego API i ... żaden z kompilatorów (popularnych) tego nie zaimplementował. MS to nie obchodzi bo ma swój stos technologiczny związany z C#/.NET a gcc czy clang (popularne) oraz Intel także nie bo.... nikt z tego nie korzysta (lub nie chce tego forsować). Jeśli ktoś się bardzo upiera podłączy choćby Boehm https://en.wikipedia.org/wiki/Boehm_garbage_collector albo inny... 

"smart-pointery" nie służą do "redukcji lęku usunięcia/dealokacji" pamięci. Służą do wskazania sposobu obsługi przejęcia własności danego elementu.

Co do lambd to w Pythonie są one wyrażeniem a w C++ w zasadzie funktorem (choć na wstępie tłumaczy się je jako "mała funkcja"). I jedne i drugie mają wady. W Pythonie żeby wykonać kod warunkowy, robi się to w lambdzie leniwym OR lub AND a z kolei "lambdziany-fanatyzm" w C++ powoduje budowanie potwora na 2 strony kodu.

Moją intencją nie było także urażanie kogokolwiek. Mam jedynie głębokie przekonanie że dziś techniki i sposób nauczania C++ czy w książkach Pana G. czy na uczelniach czyni wiele złego. Widać to choćby po rodzajach pytań na forum (vide: nie omawialiśmy jeszcze std::vector, nie wiem co to jest, nie wolno mi go używać). "Przeczołganie kogoś po wskaźnikach na wstępie jego edukacji", wcale nie służy podniesieniu jego kompetencji. Wiem to z własnego doświadczenia. Tego podejścia także nie broni przekonanie że "jak się ktoś nauczy na niskim poziomie to na wysokim sobie poradzi". Z perspektywy żaby (niskiego poziomu), niewiele widać. A jak widać to tylko "przerażających gigantów".

Poza tym jak napisałem. IMHO na początek Python będzie lepszy. Tu wystarczy znajomość 4 kontenerów by zrozumieć jak sam język funkcjonuje. JS nieco gorszy bo wymaga już świadomości jakie techniki są poprawne a jakich nie warto stosować. C++ na tym tle jest najbardziej skomplikowany i nie polecam go na początku. Jako w zasadzie jedyny szeroko stosowany, obsługuje wszystkie warstwy abstrakcji (oczywiście są także i inne języki i ich roli nie umniejszam). Począwszy od niskopoziomowych-sprzętowych po obiektowe na funkcyjnych/generycznych/szablonowych kończąc.

Mam jeszcze tylko pytanie co do:

W C++ jak chcesz alokować na stercie to musisz pilnować, żeby zwolnić pamięć, co czasem nie jest trywialnym zadaniem

Czy możesz podać przykład na to "nietrywialne zadanie" biorąc pod uwagę smartPtr i RAII? Czy jakieś zastosowanie wymaga koniecznie GC? To nie jest złośliwe pytanie. Mam nadzieję poszerzyć wiedzę.

2
komentarz 8 maja 2018 przez RafalS VIP (122,820 p.)
Nie chce dodawać GC do C++ :D. Tak jak mówisz jedną z jego zalet jest to, że można ręcznie tą pamięcią zarządzać. Cały czas próbowałem tylko dowieść dla mnie dosyć oczywistej tezy, że łatwiej jest czegoś nie pilnować niż pilnować i jęzki z GC będą łatwiejsze do ogarnięcia na początek niż te bez GC.
Nie znam przypadku gdzie GC jest konieczny. Przez nietrywialne miałem na myśli np wspomniane przenoszenie własności obiektu między unique_ptr, które wymaga jakiegoś ogarnięcia o co chodzi z semantyką przenoszenia i referencji do rwartości, które według mnie nie są trywialne dla początkujących.
+1 głos
odpowiedź 7 maja 2018 przez Gambr Dyskutant (7,530 p.)
edycja 7 maja 2018 przez Gambr
C++ nie ma nic wspólnego z tworzeniem stron. Jest dobrym językiem na start ze względu na nacisk na podejście obiektowe i możesz w nim tworzyć chociażby aplikacje konsolowe i nie zawracać sobie głowy UI, tylko poznawać narzędzia jakimi posługują się programiści (od pętli i ifow po dziedziczenie, obiekty, wzorce projektowe itd). Równie dobrze naukę możesz zacząć od innego  języka obiektowego typu Java, C#, PHP czy JS. Nie ma to żadnego znaczenia. Ja osobiście radziłbym Ci patrząc na Twoje zainteresowanie  webem zabrać się za naukę podstaw JS lub PHP i równolegle przyswajać syntax  html i  CSS.
0 głosów
odpowiedź 7 maja 2018 przez Hiskiel Pasjonat (22,830 p.)
A kto tak mówił?

"Do języka programowania HTML potrzebujesz C++"?

Ogólnie, C++ jest językiem embedded. Z web'em nie ma za dużo wspólnego. W c++ operujesz w systemie, na plikach, na urządzeniach, na pamięci. W HTML, CSS, JS, PHP, SQL na stronie, bazie danych i serwerze.
0 głosów
odpowiedź 7 maja 2018 przez SimiVoid Pasjonat (19,790 p.)
Na początku powinieneś postawić sobie pytanie co chcesz programować. Jak chcesz tworzyć strony www to c++ nie jest wymagany i nie musisz się go uczyć.
0 głosów
odpowiedź 7 maja 2018 przez coderCpp93 Gaduła (4,200 p.)
Myślę, że C++ sam w sobie jest językiem ogólnie do nauki programowania. Łączy w sobie cechy wielu współczesnych języków programowania. Ja uczyłem się C++ i szczerze mówiąc cieszę się, że mam go już za sobą - nareszcie zajmuję się web developerką,  lecz i tak do niego czasami wracam. Kiedyś znalazłem strona z zestawieniem języków pod względem trudności w skali do 5 i zdziwiłem się, że C++ ma 5. Potem mój kolega, który programuje w Javie powiedział, że C++ jest trudny. Teraz ja sam tak myślę (te wszystkie wskaźniki, typy danych i itp.) w PHP np. tego nie ma, po prostu piszesz $ i od razu wiadomo, że to zmienna. Ale zawsze mówiłem, żeby zacząć od najtrudniejsze go, gdyż inne języki opanujesz o wiele szybciej. Choć równie dobrze możesz zacząć od PHP, JS lub Javy. Pozostałe języki nauczysz się przez zjawisko syntaksu.

Podobne pytania

+1 głos
2 odpowiedzi 271 wizyt
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 2 kwietnia 2018 w C# przez Luti Nowicjusz (120 p.)
–1 głos
3 odpowiedzi 1,127 wizyt
pytanie zadane 11 lipca 2017 w C i C++ przez niezalogowany

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...