Czy C++ będzie dobrym językiem na początek z programowaniem

0

Czy C++ będzie dobrym językiem na początek z programowaniem? Stwierdziłem że chce zacząc uczyc się programowac i znalazlem wiele opini że C++ jest jednym z trudniejszych jezyków i przez jego nauke lepiej się potem rozumie reszte języków i tu moje pytanie czy warto brać się za niego jako pierwszy jezyk czy pomoże mi potem bardziej przy przechodzeniu na inne języki i programowaniu w nich czy to samo bedzie jak zaczne od javy czy pythona?

1

Różni ludzie różnie się uczą. C++ jest trudny na każdym poziomie — ma trudne podstawy i trudne zaawansowane cechy. Jak lubisz mieć pod górkę (są ludzie, którzy lubią), to jest OK — wymusi siłą opanowanie pewnych rzeczy, które inne języki mogą chować przed programistą. Jak wolisz widzieć efekty tego, co robisz — to nie, bo to, co w innych językach osiąga się minimum wysiłku, w C++ szybko urasta do sporych problemów.

C++ nadgoni to przy dużych projektach, nie mówię nie, ale naklepanie „czegoś na szybko, byle działało” jest niepomiernie trudniejsze.

0

@Althorion: Ja nie to że chcę mieć pod górke tylko chce jak najlepszych efektów i jak najwięcej możliwości ale skoro nie widzę swojej przyszłosci raczej w C++ to uważasz że nie warto się go uczyć? Chciałem go potraktować jako takie mocne wdrożenie w programowanie ale w takim razie lepiej zacząc od np javy?

3

Zależy jakiego typu zagadnienia chcesz realizować w nieco dalszej przyszłości (tzn po opanowaniu fundamentów, co cię nie minie w żadnym języku).
Web? GUI? Wysokowydajne obliczenia? Gry? Sztuczna inteligencja? Oprogramowanie systemowe i niskopoziomowe?
Od tego zalezy, jaki język by ci można proponować.

PO DRUGIE: pierwszy nauczany język zwykle i tak jest pozornie "zmarnowany", tzn nie wykonuje się w nim potem pracy. Ale to "zmarnowanie" pozorne, cena edukacji i nabrania horyzontów

7

Podstawy programowania najlepiej załapać jeśli język Ci nie podstawia nogi na każdym kroku.
Tyczy się to też dokumentacji, środowiska wokół języka, IDE i materiałów szkoleniowych.

Zacznij lepiej od Pythona, ma prostą składnię, dużo materiałów dla początkujących, dobre IDE (PyCharm), łatwo robi się grafikę (np. GUI, Turtle, matplotlib, p5), można nim oprogramować nawet małe komputery (https://realpython.com/python-raspberry-pi/) itd.
Jak poznasz Pythona, możesz go rozszerzać o moduły w C/C++ - bez napinki.

Jak chcesz koniecznie poznać C++ to proponuję zacząć od C, Go lub Rusta. Potem, jeśli nadal będziesz chciał, wejdź w C++, ale ostrzegam że są przyjemniejsze języki.

0

@vpiotr: Własnie myślę nad pythonem tylko skoro python jest jednym z łatwiejszych jezykow to czy po przejsciu do czegos trudniejszego nie bede sie czuł jakbym nigdy nie programował?

0

@mx100 Jeżeli chciałbyś połączyć łatwość nauki z możliwościami to Python. Jak chciałbyś połączyć łatwość nauki i zacząć zdobywać pieniążki w jak najkrótszym czasie to Java. Jeżeli chciałbyś by Twój pierwszy język pomógł Ci rozwijać umiejętności ogólne jako programista (jak działa sprzęt itp) to C99. C++ to strasznie niewdzięczny język.

4
mx100 napisał(a):

... skoro python jest jednym z łatwiejszych jezykow to czy po przejsciu do czegos trudniejszego nie bede sie czuł jakbym nigdy nie programował?

Mają ci się w głowie wytworzyć skojarzenia potrzebne do programowania, algorytmiki, podziału programu na mniejsze jednostki itd.
To jest podstawowe i ważniejsze niż znajomość syntaxu tego czy innego języka.

1

@AnyKtokolwiek: Okej czyli na spokojnie mogę zaczynać z pythonem, dzięki za pomoc wszystkim

4
mx100 napisał(a):

@vpiotr: Własnie myślę nad pythonem tylko skoro python jest jednym z łatwiejszych jezykow to czy po przejsciu do czegos trudniejszego nie bede sie czuł jakbym nigdy nie programował?

W programowaniu chodzi o umiejętność rozwiązywania problemów. Język - choć ważny - jest tu sprawą drugorzędną. Algorytmy sortowania, algorytmy grafowe itp. da się zapisać w wielu językach. Na forum znajdziesz przepychanki na temat języków i można odnieść wrażenie, że język to najważniejsza rzecz, której używa się całą karierę. W takich wątkach jednak piszą ludzie, którzy naukę algorytmiki mają za sobą (z pozostałą po tym procesie wiedzą to już inna sprawa).
W najprostszych programach C++ nie będzie przeszkadzał bardziej, niż inne języki. Np. sortowanie wygląda niemal identycznie jak w Javie czy C#. Sam język nie zrobi nikomu krzywdy. Większe kuku zrobi podejście do nauki.

1

Zdecydowanie nie i wcale nie jestem zaskoczony ilu potencjalnie nowych programistów na to leci na starcie XD aka efekt dunninga-krugera.
Najlepszy jest najnowszy python(moim zdaniem).
Jeśli chcesz nauczyć się zarządzania pamięcią systemową, co to jest kernel space, user space i np. jaki jest koszt funkcji wirtualnych albo jak zaalokować obiekt w dokładnie wybranym przez siebie miejscu w pamięci to zapraszamy xDDD

3

Krótko NIE, dlaczego:

  • Ciężko używać bibliotek, sporo kłopotów z systemem buildu
  • Niezbyt przyjazne komunikaty błędów
  • Łatwo sobie strzelić w kolano
  • Mizerna biblioteka standardowa

Zamiast tego, jeżeli chcesz niskopoziomowo to polecam zacząć od C i świetnej książki https://en.wikipedia.org/wiki/The_C_Programming_Language zawierającej bogaty zestaw ćwiczeń.

Dla wszystkich pozostałych: Java/Kotlin, C#, Python lub JavaScript - choose your own adventure. Wygląda na to że teraz najwięcej materiałów i najłatwiej zacząć w Python'ie lub JS'ie.

1
shitlord napisał(a):

Jeśli chcesz nauczyć się zarządzania pamięcią systemową

Ale po co?

@0xmarcin

  • Łatwo sobie strzelić w kolano - jak wszędzie
  • Mizerna biblioteka standardowa - w pracy i tak najczęściej używa się frameworków
  • Niezbyt przyjazne komunikaty błędów - a mimo to ludzie dają radę
  • Ciężko używać bibliotek, sporo kłopotów z systemem buildu - pobierasz biblioteki z repo i używasz
2

@PerlMonk: My tu mówimy o pierwszym języku programowania, od tego do "frameworków w pracy" jest jeszcze długa droga.

W porównaniu do C++ i SEGV, wycieków pamięci, słabej obsługi wielowątkowości i GUI taki C# to bajka. Wszystko będzie out-of-the-box włącznie z działającym IDE i debuggerem. Nie wspominając o używalnej bibliotece kolekcji i LINQ. Dla początkujących raj.
Z drugiej strony taki JS, wchodzisz na JSBin i zaczynasz kodować. Nie przejmujesz się zarządzaniem pamięcią itp.

Początkujący i tak najczęściej będą zaczynać od rysowania choinki z gwiazdek i programowania strukturalnego. Dopiero potem jest przejście do obiektówki i FP.

Ja osobiście zaczynałem w TurboPascal, a potem Delphi.

0

@0xmarcin: "W porównaniu do C++ i SEGV, wycieków pamięci,"

#include <iostream>

using namespace std;

template<int N>
void sort(int array[]) {
	int tmp;

	for (int a = 0; a < N; a++) {
		for (int b = 0; b < a; b++) {
			if (array[a] < array[b]) {
				tmp = array[a];
				array[a] = array[b];
				array[b] = tmp;
			}
		}
	}
}

int main(int argc, char *argv[]) {
	cout << "Hello, World!" << endl;

	int array[] = {1, 9, 8, 2, 3, 6, 5, 4, 7};

	for (int a = 0; a < 9; ++a) {
		cout << " " << array[a];
	}

	cout << endl;

	sort<9>(array);

	for (int a = 0; a < 9; ++a) {
		cout << " " << array[a];
	}

	cout << endl;

	return 0;
}

W tak prostym programie nie ma żadnych wycieków.

3

@PerlMonk:

PerlMonk napisał(a):
  • Łatwo sobie strzelić w kolano - jak wszędzie

Nie, nie jak wszędzie. (Prawie) wszędzie indziej masz np. kontrolę rozmiaru tablicy.

  • Mizerna biblioteka standardowa - w pracy i tak najczęściej używa się frameworków

Wątek jest o nauce programowania a nie pracy.
Jakich frejmłorków używasz w C++? Który kurs do nich polecasz?

  • Niezbyt przyjazne komunikaty błędów - a mimo to ludzie dają radę

Ludzie też programują w Adzie łaziki na 486 na odległość, ale nie polecałbym tego początkującym.

  • Ciężko używać bibliotek, sporo kłopotów z systemem buildu - pobierasz biblioteki z repo i używasz

To trolling, brak doświadczenia czy za duże doświadczenie?
Nawet biblioteki header-only trzeba podpiąć w systemie. O ile mają CMakeList, instrukcję i środowisko które to wspiera to jest to w miarę bezbolesne.
Ale na pewno nie tak jak użycie choćby pip.

1

@vpiotr: Nie, nie jak wszędzie. (Prawie) wszędzie indziej masz np. kontrolę rozmiaru tablicy.

const int arraySize = 10;
void function(int array[arraySize]) {
    for (int a = 0; a < arraySize; a++) {
        //
    }
}

Ot cała kontrola.

2
0xmarcin napisał(a):

@PerlMonk: My tu mówimy o pierwszym języku programowania, od tego do "frameworków w pracy" jest jeszcze długa droga.

słabej obsługi wielowątkowości[...] używalnej bibliotece kolekcji i LINQ.
Początkujący i tak najczęściej będą zaczynać od rysowania choinki z gwiazdek i programowania strukturalnego. Dopiero potem jest przejście do obiektówki i FP.

Poczętkujacy czyli po co maja mieć wielowątkowość i kolekcje? żeby sobie namieszać?

Ja osobiście zaczynałem w TurboPascal, a potem Delphi.

co do pascala zgoda że dobry dla początkujących

1

@PerlMonk postaw się w miejscu noob'a, załóżmy że zamiast sort<9> wpisze sort<array.size> to dostanie taki komunikat błędu:

main.cpp:39:16: error: request for member ‘size’ in ‘array’, which is of non-class type ‘int [9]’
     sort<array.size>(array);
                ^~~~
main.cpp:39:27: error: no matching function for call to ‘sort(int [9])’
     sort<array.size>(array);

Tu nawet nie pisze że na array nie ma .size!

Jak zapyta na forum to albo podadzą mu coś takiego:

sort<sizeof(array)/sizeof(*array)>(array);

albo każą użyć std::vector.

W Javie array jest od razu custom size i nie trzeba robić jakichś dziwactw.

0

@0xmarcin: "załóżmy że zamiast sort<9> wpisze sort<array.size> " - to nie zakładajmy. Skąd taka pewność, że wśród wszystkich możliwych błędów ktoś popełni akurat ten? "Jak zapyta na forum" - gdzie na 4p ktoś o to pytał?

2

@PerlMonk Kontrola rozmiaru tablicy w C++20

#include <iostream>
#include <array>

using namespace std;

void function( const auto& data ) 
{
    for( const auto& element : data ) 
    {
        cout << element << ' ';      
    }
    cout << endl;
}

int main()
{
    array data {2,2,34,-34,55};
    function(data);
}

https://godbolt.org/z/c5dT7j

3
PerlMonk napisał(a):

@0xmarcin: "załóżmy że zamiast sort<9> wpisze sort<array.size> " - to nie zakładajmy. Skąd taka pewność, że wśród wszystkich możliwych błędów ktoś popełni akurat ten?

To jest reprezentant całej klasy błędów które są tylko w C++. Nie ma ich w Javie. Nie ma ich w C# (tfu, tfu). Nawet w Perlu ich nie ma

"Jak zapyta na forum" - gdzie na 4p ktoś o to pytał?

Dział C++ jest pełen pytań początkujący o używanie gołych wskaźników i dynamicznych tablic. I zawsze zjawia się @kq lub ktoś z podobnym doświadczeniem w C++ i mówi Nie używać wskaźników, nie używać new, nie pisać własnych dynamicznych tablic. Array i vector używać

Liczba rzeczy które trzeba znać w C++ żeby go dobrze używać niestety jest ogromna. Niestety także ogromna jest liczba rzeczy w C++ które powinny być oznaczone unsafe, dangerous it_can_kill_you

1
KamilAdam napisał(a):
PerlMonk napisał(a):

@0xmarcin: "załóżmy że zamiast sort<9> wpisze sort<array.size> " - to nie zakładajmy. Skąd taka pewność, że wśród wszystkich możliwych błędów ktoś popełni akurat ten?

To jest reprezentant całej klasy błędów które są tylko w C++. Nie ma ich w Javie. Nie ma ich w C# (tfu, tfu). Nawet w Perlu ich nie ma

"Jak zapyta na forum" - gdzie na 4p ktoś o to pytał?

Dział C++ jest pełen pytań o używanie gołych wskaźników i dynamicznych tablic. I zawsze zjawia się @kq lub ktoś z podobnym doświadczeniem w C++ i mówi `Nie używać wskaźników, nie używać new, nie pisać własnych dynamicznych tablic. Array i vector używać"

To znaczy, że ktoś ich źle nauczył. Sam w sobie C++ nie jest niczemu winien. Kiedy uczyłem ludzi, dostawałem tak trywialne pytania, że było daleko do takich błędów. Przykład:

void funkcja(int tab[]) {
    //
}

No i dziewczyna najpierw spytała "Co to jest void?" A potem "Co to jest funkcja?" Ona chciała wykuć na blachę każde słowo w programie. C++ nie miał tu nic do rzeczy. Ta sama osoba skopiowała kod z przyciskiem w C# i nie zmieniła nazwy zmiennej. Potem nie wiedziała dlaczego jej nie działa jeden przycisk.
Żeby nie było, nie chcę tu polecać C++ jako pierwszy język. Po prostu na pewnym poziomie nie różni się on od Javy czy C#. Da się nauczyć C++ jako pierwszy. Dobre praktyki to zupełnie inna sprawa.

3
PerlMonk napisał(a):

To znaczy, że ktoś ich źle nauczył. Sam w sobie C++ nie jest niczemu winien. Kiedy uczyłem ludzi, dostawałem tak trywialne pytania, że było daleko do takich błędów. Przykład:

void funkcja(int tab[]) {
    //
}

No i dziewczyna najpierw spytała "Co to jest void?" A potem "Co to jest funkcja?" Ona chciała wykuć na blachę każde słowo w programie.

Skąd wiesz z jakim zamiarem się pyta? Jak pierwszy raz widziałem C to też się pytałem co to jest void? I gdzie jest słowo kluczowe function lub podobne.

1
mx100 napisał(a):

C++ jest jednym z trudniejszych jezyków i przez jego nauke lepiej się potem rozumie reszte języków

Doskonałe rozumowanie, a najlepszy tego dowód przez analogię to typ z filmu, który odmłodniał o 30 lat, jak przesiadł się na osobówkę z automatem. ;P

0

@KamilAdam: Chciałem jej wytłumaczyć na czym polegają funkcje, ale wolała słowo po słowie. Dopytałem czemu uczy się w ten sposób. Wywiązała się rozmowa, w której dowiedziałem się, że nie chciała wkładać wysiłku w naukę programowania. Nie znała wcześniej innych języków.

1

Co do Cpp jako pierwszy jezyk hmm. Jesli to twoj pierwszy kontakt z programowniem to mozesz sie szybko zdemotywowac. Nie twierdze, ze jest to jakas zasada ale znam wiele takich osob (lacznie ze mna). Niemniej jednak jak opanujesz podstawy Cpp to kazdy nastepny jezyk bedzie wydawal sie latwiejszy :D Polecam kanal "pasja informatyki" Zelenta i jego kursy z cpp. Podstawy wytlumaczone w prosty i przejrzysty sposob.

5

@PerlMonk: spójrz na to z boku co próbujesz udowodnić bo to zaczyna być zabawne :)
Na poparcie swojej tezy że C++ jest językiem łatwym przytaczasz dziewczynę która nie umie programować w C++.
Przeciwko swojej tezie że C++ jest łatwy masz programistę Javy z 9 letnim doświadczeniem.
A teras słuchaj uważnie bo nie będę powtarzać: Uważam że C++ jest w cholerę trudny i przekracza możliwość mojego pojmowania. Jest o wiele trudniejszy niż Haskell. A błędy kompilatora C++ (chociaż bardziej adekwatne to wysrywy) przyprawiały mnie o traumę na studiach.
Naprawdę podziwiam ludzi którzy są w stanie programować w tym bagnie zwanym C++

0

@KamilAdam: Nie pisałem nic o trudności C++.

7

Różnica jest taka, że w C/C++ dużo bardziej trzeba wiedzieć co się robi i mieć świadomość efektów ubocznych, pułapek i tego, co dana linia naprawdę robi, podczas gdy w prostszych językach mniej bezbolesne jest bezmyślne składanie odpowiedzi z kawałków gotowych snippetów skopiowanych z Internetu. Jeżeli więc ktoś chce mieć jakieś widoczne efekty, to dużo szybciej uzyska coś działającego w innym języku. Pytanie, czy faktycznie tak należy kształcić specjalistę żeby jak najszybciej mógł nagryzmolić jakieś pokraczne potworki, które straszą dziką dżunglą kodu, ale przynajmniej nie wybuchają użytkownikom błędami w twarz, czy też chcemy się skupić na zbudowaniu solidnych podstaw i zrozumienia kodu na niskim poziomie. Ja jestem zwolennikiem tego drugiego podejścia, dlatego zawsze zalecam C jako pierwszy język - bo w miarę nieduży i zwarty do opanowania, a wymusi odpowiednią ostrożność i świadomość stosowania odpowiednich środków. Ręczne zarządzanie pamięcią jest trudne do ogarnięcia, ale właśnie dlatego należy samemu się przez nią przebić by potem docenić, że dostaje się ją od razu gotową, schowaną za kulisami przez język i biblioteki. Nic tak nie uczy programisty faktycznych różnic między tablicą, wektorem i listą łączoną jak naoczne zaimplementowanie każdej z nich i mierzenie się z ograniczeniami każdej z nich.

Przypomina mi to trochę uczenie matematyki: można po prostu wykuć wzory, można też mozolnie prześledzić dowody i zobaczyć skąd się one wzięły. Pierwszy delikwent szybciej pokona zalecony materiał i będzie klepał dostarczone zadanka, ale starczy mu podać problem, którego jeszcze nie widział, który nie pasuje mu do żadnego znanego wzoru i będzie bezradny.

Problem w tym, że w dzisiejszych czasach mało kto ma cierpliwość by naprawdę porządnie uczyć się rzeczy, liczy się szybko, szybko, szybko, byle jak ogarnąć podstawy, przejść od razu we framework nie znając nawet pełni możliwości języka i jego biblioteki, a potem łowić pracę jako junior no i jakoś to będzie. I to niestety potem widać po poziomie owych juniorów.

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