Dlaczego nie proponujecie aby zaczynać od języka C++

0

Przeglądałem posty w Edukacja i Kariera i raczej rzadko pojawia się ktoś, kto zaproponuje C++ na początek. Sam teraz chciałbym zacząć naukę programowania. Kiedyś na studiach (górnictwo) na zajęciach z informatyki mięliśmy Fortrana/Pascala i wykładowca mówił, że i tak nie będziecie informatykami, ale za to poznacie najabrdziej nieprzyjazny język (fortran), za to poznacie jak program działa od środka. Tak samo znalazłem wykłady Pana Zelenta, który właśnie tłumaczy, że lepiej zacząć od trudniejszego języka aby przeskoczyć łatwo na te wyższego poziomu. Nie mówię tutaj aby osiągnąć perfect level C++, ale w nim zrozumieć programowanie.

Mam plan aby w ciągu dwóch lat zmienić profesję na programistę. Na pewno nie pójdę w stronę gier, a czytałem, że tam C++ się pisze. Chciałbym w mniejszej firmie (RoR, Python) mniej już w korpo (Java), bo tez nie należę do najmłodszych i czytałem, że tam wiek gra sporą rolę Co myślicie aby startować z C++, dlaczego nie startowaliście? Lub odwrotnie czy dzięki temu, że było C++ to teraz wam się lepiej uczy innych języków? A może C++ to strata czasu?
Pozdrawiam

15

Czy aby nauczyć się jeździć samochodem, robisz licencję pilota odrzutowca, aby później było łatwiej?

2

Ja zaczynałem od pascala bo tak było w technikum ale sam szybko po szkole zacząłem siedzieć w c++ i nie żałuje. Aktualnie nic w nim nie robię ale dał mi ważne podstawy.

5

Czy jak chcesz zostać taksówkarzem, to uczysz się jeździć autem rajdowym, umiejętności pokonania zakrętu 90 stopni przy 100 km/h, konstrukcji silników i przyczepności różnych nawierzchni? Zapewne taksówkarz, który to wszystko umie jest lepszym kierowcą niż ten, który nie umie, ale czy lepszym taksówkarzem? Czy czas, który na to poświęcił mu się zwraca?

3

Tak samo znalazłem wykłady Pana Zelenta, który właśnie tłumaczy, że lepiej zacząć od trudniejszego języka aby przeskoczyć łatwo na te wyższego poziomu. Nie mówię tutaj aby osiągnąć perfect level C++, ale w nim zrozumieć programowanie.

Pan zelent moze dobrze tlumaczy, ale to co tlumaczy juz nie jest poprawne (bo czesto mowi bzdury typu kopiuj wklej to jest praktyka programistyczna)

Zaczynalem od C++ i gdybym mogl zaczac jeszcze raz. Zaczalbym od pythona / C#. Unikalbym C++ jak ognia

W C++ nie pisze sie gier, pisze sie silniki do gier.

C++ jest imo najtrudniejszych jezykiem jaki moze byc do opanowania.

Chcesz miec niski prog wejscia w prace? Ucz sie Javy / C# / Pythona.

Jezeli chcesz sie nauczyc dobrze programowac (a nie tylko do pracy, ale bardziej jako pasja)

To zacznij C -> Python -> C# / Java -> Haskell

6

Czy aby wyjść z psem na spacer przybijasz najpierw do niego cztery deski, bo jakiś Duńczyk powiedział, że dzięki temu pies stanie się ośmiornicą?

2

C++ nie ale C jak najbardziej. C spokojnie pozwoli ogarnąć niski poziom. A do nauki wysokopoziomowych mechanizmów weź jave, c# czy pythona czyli języki gdzie te mechanizmy maja sens i zostały zrobione po ludzku.

0

Odnośnie komentarza że zastanawiasz się czy otworzyć tutorial z C++ czy z Pythonem- odpowiadam tutaj jako że tyczy się tematu wątku. Wybór jest prosty- chcesz się "przebranżowić" a więc nie tylko robić to hobbistycznie to odpowiedz sobie na te pytania:

1. Co lubię w życiu robić

  1. Chcę pracować przy grach/systemach wbudowanych/instalacjach jądrowych etc. ? Odp: C++
  2. Chcę pracować w webie/aplikacjach biznesowych/startupach? Odp: Python.

Na naukę drugiego języka zawsze przyjdzie czas.

0

A gdyby robić tak... jedna lekcja z C++, potem jedna z Pythona itd? Potem próbować samemu po kolei pisać małe programiki np z tej listy https://forum-warsztat-io-uploads.s3-eu-central-1.amazonaws.com/original/1X/05fb74f39236e687606ff516e2dec4919114e4eb.png w jednym i drugim języku.
PS. Bo sprawa jest prozaiczna, siadło mi zdrowie i muszę się przebranżowić, kiedyś studiowałem na AGH, ale nie poszedłem w swoim kierunku. Teraz mamy problem, a człowiek te 3tys chciałby wyciągać jak dotąd a nie żyć na zasiłku czy jako ochroniarz.

3

Dobry programista operuje na coraz wyższych warstwach abstrakcji, nie niższych.

Gdyby było na odwrót, to wszyscy uczylibyśmy się assemblera, żeby zobaczyć jak naprawdę działa przypisywanie liczby do zmiennej i ile instrukcji procesora jest potrzebne, żeby dodać dwie liczby. Programowanie nie polega, żeby wiedzieć jak dokładnie działają wszystkie wewnętrzne mechanizmy naszego systemu, ale posiadaniu pewności, że działają jak należy - dzięki odpowiednim narzędziom i praktykom.

Oczywiście uważam, że na pewnym etapie rozwoju programisty nauka C jest rozwijającym doświadczeniem, jednak dla poczatkującego to trochę karabin maszynowy do plewienia ogródka. Pewnie się da, ale prędzej strzelisz sobie w stopę niż będziesz miał piękny ogródek.

Po tych wszystkich pięknych metaforach: C++ to g**no.

5

Do maruderów twierdzących że C++ i asembler nie są już dziś potrzebne:
Ktoś jednak musi pisać te wasze wysokopoziomowe frameworki, przeglądarki internetowe i systemy operacyjne.
I na pewno nie robi tego w pehapie ;-)

0

Dziwne że społeczność Open Source nie zastąpiła poczciwego C, w którym przeważnie się pisze kompilatory, systemy operacyjne. Przeglądarki może już nie gdyż teraz C++ przejął te rolę. Było D, teraz Rust, a i tak wolą rozwijać nowe wersje C++. Już jest wzmianka o standardzie C++20, ale nie wiem jak dużo on zmian wprowadza.

4

IMO C++ nie jest taki zły na początek jak go malują, bo nikt nie każe nikomu korzystać ze wszystkich ficzerów.
Nawet bym powiedział, że jest lepszy od języków stricte obiektowych takich jak java, python, bo nie narzuca od początku paradygmatu. Można przebrnąć przez podstawy informatyki nie pisząc żadnej klasy (jedynie może take bez metod, aby grupować dane). Należy też odróżnić pogłębioną naukę języka od nauki programowania. Kolejność powinna być raczej od tego drugiego do tego pierwszego.
Podobnie można by powiedzieć np. o C, ale czemu C a nie C++? Na początku prawie żadna różnica, później raczej tylko na korzyść C++.

edit.
tak mi się ogólnie przypomniało, a propos takich dyskusji i dokładniej wojny między C a C++, bo też widziałem ktoś to wcześniej poruszał.

26:40

0

Cześć Ronin, fajny temat, przyłączam się. Czyżbyś był tak stary jak ja? :D

ronin3729 napisał(a):

poznacie najabrdziej nieprzyjazny język (fortran)

Też miałem fortrana na pierwszych studiach, aczkolwiek nie wydawało mi się wtedy, że nieprzyjazny, raczej prymitywny. Do numerycznych obliczeń ok.

Mam podobny plan do Ciebie, w zasadzie to "tak jakoś wyszło", że zacząłem powoli "przeciekać" do IT jakiś czas temu. Mam ambicję nauczyć się programować, zapisałem się nawet na studia* - tu w nie mam wyboru - od pierwszego zjazdu jadą z C++. Tak mi się wydaje, że skoro to jest forsowane, to może posłużyć na ogólne ukształtowanie ciebie jako programisty. Np. osobisty szwagier, który siedzi w IT, a nawet pomaga HRowi w rekrutacji od strony merytorycznej twierdzi, żeby się nie przejmować, język to tylko narzędzie, można wymieniać w zależności który bardziej będzie pasował do problemu.

  • ) prowadzący zajęcia w moim wieku, albo młodsi, koledzy w grupie próbują mi mówić na "pan", generalnie jest śmiesznie, polecam :)
3
Shalom napisał(a):

C++ nie ale C jak najbardziej. C spokojnie pozwoli ogarnąć niski poziom. A do nauki wysokopoziomowych mechanizmów weź jave, c# czy pythona czyli języki gdzie te mechanizmy maja sens i zostały zrobione po ludzku.

O rany... Proponuje zauważyć, że jest rok 2016 i to końcówka.

  1. C i C++ chyba tylko do robienia sobie krzywdy - uczy rzeczy zupełnie nieprzydatnych (wskaźniki), a nie uczy przydatnych -
    do niskiego poziomu (Sterowniki i OS ) - jest w tej chwili skuteczne GoLang- czyli poniekąd "C zrobione dobrze". (przy okazji można nadal robić w nim wieksze rzeczy).
  2. Java i C# już dawno (tak z dziesięć lat ) jest językiem wysokiego poziomu już tylko z definicji. Ja schodzę tak nisko tylko jak mnie zmusza przestarzała architektura (najczęściej), albo jakaś krytyczna sekcja kodu - gdzie chciałbym potencjalnie kontrolować każdy cholerny cykl (a dawno nie musiałem - ale w Javie nadal łatwo kod zmikrooptymalizować - narzędzia są dojrzałe(PrintAssemly, JMH i -prof perf).

Języki, które obecnie kwalifikowałbym jako wysoki poziom i warte nauki to Rust, Haskell (nadal) i Scala ( i pewnie wiele innych, których nie znam). Warto wchodzić na wyższy poziom i rozwiązywać problemy, które sa warte rozwiązywania.
Dziadowie tacy jak ja zajmowali się arytmetyką wskaźników w C -> i starczy.
Ojcowie pisali equalsy w Javie -> i starczy.
Na świecie jest dużo wiecej ciekawych problemów.

0

Tak jak napisałeś jarek, Java też powinna być zmieniona, może Scala czy ten Kotlin. Może coś innego lepszego powstanie za rok, może za 5 lat, co zachwyci rynek i uczelnie.

0

no właśnie i czemu nie ma jeszcze działu JSa?
jestem oburzony

0

Ja właśnie naukę programowania zaczynałem od C++ i jedyne trudne w nim rzeczy to były wskaźniki i rekurencja co i tak koniec końców w miarę dobrze opanowałem. Takie rzeczy w C++ jak np. pętle, funkcje, instrukcje sterujące, większość operatorów jest identyczna jak np. w JavaScripcie, który mam teraz w szkole. Wiec według mnie nie ma co narzekać, że ten język jest trudny na początek zwłaszcza, że na początku nie musisz używać wskaźników czy różnych nieco bardziej zaawansowanych ficzerów jak np. polimorfizm czy szablony. Od niedawna uczę się też czystego C i w sumie trochę żałuję, że od niego nie zacząłem, bo gdy patrzę z perspektywy czasu to chyba C by był najlepszym wyborem na początek, przynajmniej w moim przypadku do rzeczy, którymi się zajmuję. A co kursów od Zelenta nie polecam, zdecydowanie. Przerobiłem cały jego kurs oraz książkę od C++ i mogę wymienić bardzo dużo ważnych rzeczy, które były w książce a nie było ich w kursie np. operatory bitowe(kompletnie ominięte), brak omówienia słów break i continue, brak omówienia wskaźników void*, wskaźników na funkcję i brak całej masy mega potrzebnych rzeczy. Chyba nawet założę wątek, gdzie wymienię te wszystkie braki w tym kursie, bo widzę, że jest bardzo popularny :D Mówiąc krótko, ucz się tego języka, który najbardziej się przyda do realizacji Twoich celów a nie tego, który będzie łatwiejszy. Jeśli C++ będzie takim językiem, którym zrealizujesz swoje cele, to zacznij od niego. Ja się cieszę, że nie posłuchałem się tych "mądrych" porad aby zaczynać od np. Pythona, C# czy innego łatwego języka, bo nie zrealizowałbym w tych językach dużej części rzeczy, które teraz robię oraz które chcę robić. Zaraz pewnie zostanę obrzucony błotem za tę opinię ale trudno, niech stracę :P

0

W szkole i na studiach miałem C++. Wydawał mi się łatwy, a teraz gdy do niego wróciłem to jakaś masakracja...
Proponuje może na początek jakieś podstawy podstaw w C a później Jave/Pythona

0

Java jest łatwa? Ta jej obiektowość udziwniona he? Python ok, Elixir ok, Scala ok.
http://tech.jonathangardner.net/wiki/Why_Java_Sucks

1

Na pewno o wiele łatwiej nauczyć się Pythona znając wcześniej tylko C++, niż C++ znając tylko Pythona. C++ jest językiem z którego bardzo wiele się nauczysz i pojmiesz szybciej rzeczy które składają się na wewnętrzne działanie programów oraz (w pewnym stopniu) komputera. W końcu większość uczelni wybrała C++ jako język którego nauczają na 1 roku nie bez powodu. Jednak mimo tego, jak masz zamiast iść do firmy w której głównym językiem jest Python, to nauka C++ jest stratą czasu. O wiele lepiej wyjdziesz jak zaczniesz się od razu uczyć języka w którym chcesz pracować.

Moim zdaniem najlepsze co możesz zrobić to:

  1. Zdecydować się co chcesz programować. Jaka branża? Aplikacje webowe czy desktopowe. Front-end, back-end, a może full-stack?
  2. Znaleźć firmy w Twojej okolicy (lub w miejscu do którego byś chciał się przeprowadzić) które działają w wybranej dziedzinie/branży oraz ich ogłoszenia o pracę. Spędzić tydzień, albo nawet i dłużej na czytaniu samych ogłoszeń, im więcej tym lepiej. Dzięki temu dowiesz się jakie języki i technologie są najbardziej poszukiwane na rynku.
  3. Zacząć się intensywnie uczyć najbardziej poszukiwanego języka oraz frameworków/bibliotek które go wspomagają. Olać wszystkie inne języki chyba, że są równie poszukiwane przez pracodawców i jednocześnie współpracują ze sobą. Np. Ciężko znaleźć pracę w JavaScripcie nie znając jednocześnie HTML-a i CSS-a. Ale już np. uczenie się jednocześnie C# i Javy jest kiepskim pomysłem, nawet jeśli były by oba rozchwytywane. Lepiej wybrać jeden i się jego trzymać.
  4. ???
  5. Profit.
5

Nie proponują C++ na początek, bo to trudny język i może zniechęcić. Jest zapewne jakaś grupa osób zaczynających (może 10% - strzelam), której mogłoby to wyjść na dobre (tak jak znam osoby, którym na dobre wyszło zmiana języka na początku na asembler - po prostu interesując się elektroniką, ten język opisu był dla nich bardziej zrozumiały na początku), ale większość to zniechęci bardziej niż zachęci do nauki. Pierwszy język nie ma az takiego znaczenia, ważne, aby zmienić swój sposób myślenia, oraz zacząć uczyć się programować. Programista i tak, jeśli chce robić to zawodowo będzie musiał poznać więcej niz jeden język, więc od którego zacznie, nie ma aż takiego znaczenia.

6

Zaczynanie nauki programowania od C++ jest słabe bo:

  • jest to język z wieloma niuansami które jeśli się nie zna, mogą powodować wycieki lub UB
  • przy C++ uczysz się głównie C++ a nie programowania. Można sobie wyobrażać że się jest masterem od kodowania znając perfekt C++, ale to nie prawda - nie ma on wiele wspólnego z innymi językami (poza tym co w C)
  • jest kilka paradygmatów wspieranych przez ten język, kod napisany w jednym nie musi być dobry dla kogoś kto preferuje inny
  • jest kilka standardów języka, w zasadzie to powinno się obecnie uczyć C++14 który jest zupełnie inny od C++98
  • ofert pracy mało

Z perspektywy czasu można powiedzieć, że C++ na początku kariery można się zapoznać, powiedzmy do poziomu napisania klasy "kierownik dziedziczący z pracownika". Ale na tym bym poprzestał w szkoleniu podstawowym. Później, jak poznasz 5 języków i jak stwierdzisz, że jednak programowanie wysokowydajne to jest to co lubisz, a nie chcesz się babrać z strdup, to wybierz C++.

8

C++ jest bardzo starym językiem. Wiele rzeczy w C++ miało sens w czasach, kiedy C++ powstawało, ale obecnie przeszkadza lub odstaje względem tego co w nowszych językach.

Np. organizacja projektu z podziałem na pliki nagłówkowe. Miało to sens w C, natomiast do obiektowości C++ pasuje już słabo. Obecnie chyba każdy nowoczesny język ma moduły, które kompilatory rozumieją i same potrafią analizować zależności (ba, nawet Pascal to potrafił).

Albo metaprogramowanie z użyciem szablonów. Szablony wymyślono po to, aby dało się zrobić generyczne kolekcje, aż nagle ktoś odkrył, że są Turing-complete i można w nich robić różne ciekawsze rzeczy. Jednak niektóre nowsze języki mają znacznie silniejsze i wygodniejsze w użyciu mechanizmy metaprogramowania niż szablony C++, więc nie bardzo rozumiem po co się katować metaprogramowaniem w C++.

Niskopoziomowe aspekty C++ też obecnie słabo współgrają z tym jak sprzęt faktycznie działa. Z samego programowania w C++ raczej się nie dowiesz jak maszyna działa pod spodem. Będziesz myślał, że pamięć to taka płaska tablica z adresami pokazywanymi wskaźnikami, a przypisanie zmiennej to skopiowanie wartości do tej tablicy. A jak spojrzysz bliżej na sprzęt, to okaże się, że to wszystko to g*** prawda.

Materiałów do C++ jest dużo, ale wiele z nich promuje zupełnie inny styl programowania. W jednej książce autor będzie rozwodził się o wskaźnikach i w co drugą linijkę wstawiał new/delete, a z drugiej się dowiesz, że to wszystko to zło i tak nie wolno pisać.

Wydaje mi się, że na początek lepiej wybrać jakiś język, który nie ma takiego bagażu historycznego, jest mniejszy i pozwoli szybciej osiągać efekty.

0

Z liczbą ofert pracy w Cpp nie jest tak źle, pozycja na TIOBE też jest dość wysoka. Tyle, że Cpp to prawie tylko desktop, a większość programistów siedzi w web dev.

Cpp jest trudny, ale przecież Java i C# wykorzystują wiele rozwiązań z niego. IMO łatwo przeskoczyć z Cpp na Jave czy C#.

Faktem, jest, że jest sporo rzeczy które powinny pojechać do Koszalina (np. te pliki nagłówkowe, itp.)

0

Wskaźniki to akurat jak dla mnie dobra rzecz w C++ do nauki bo dzięki temu lepiej rozumiem jak działa pamięć i lepiej rozumiem referencje w Javie, ale prawda też jest taka że jest sporo dziwnych niuansów i udziwnień

4
JavaFan napisał(a):

Z liczbą ofert pracy w Cpp nie jest tak źle, pozycja na TIOBE też jest dość wysoka.

Ofert pracy jest 10 razy mniej niż w Javie. Pozycja na Tiobe wynika z tego, że różnego rodzaju sadyści ciągle polecają go do nauki początkującym, a ci nabijają statystyki wyszukiwań.

Tyle, że Cpp to prawie tylko desktop, a większość programistów siedzi w web dev.

C++ to głównie sprzęt, sterowniki, kodeki i te sprawy. Jeśli ktoś wybiera ten język, to niech nie napala się na tworzenie GUI.

Cpp jest trudny, ale przecież Java i C# wykorzystują wiele rozwiązań z niego. IMO łatwo przeskoczyć z Cpp na Jave czy C#.

To wszystko iluzoryczne. Ludzie nauczeni C++ próbują wszystko na siłę przekazywać wszystko przez wartość, alokować wszystko na stosie, nie myślą o poprawnym korzystaniu z pamięci, a już najbardziej przeraża ich brak UB. Popularny tekst "wczoraj to działało" nagle traci sens.

scibi92 napisał(a):

Wskaźniki to akurat jak dla mnie dobra rzecz w C++ do nauki bo dzięki temu lepiej rozumiem jak działa pamięć i lepiej rozumiem referencje w Javie, ale prawda też jest taka że jest sporo dziwnych niuansów i udziwnień

O właśnie - klasyczny przykład ceplusplusowej aberracji, jakoby wskaźniki miały cokolwiek wspólnego z referencjami.

2

Nie wiem co wy się tak czepiacie tych wskaźników - jeśli piszecie w C++ i używacie wskaźników to mam dla was smutną nowinę - najprawdopodobniej kompletnie tego C++ nie kumacie. Gdzieś w połowie lat 90tych było już z jasne że nie pisze się tak:
T t*
tylko co najwyżej
const T& t

I jak widzę to się nie zmieniło:
https://isocpp.org/wiki/faq/references#refs-vs-ptrs
http://stackoverflow.com/questions/7058339/when-to-use-references-vs-pointers

Wskaźniki tylko jeśli pracujesz ze starym kodem w C lub jeśli musisz użyć biblioteki kogoś kto nie ogarniał C++ i pisał wskaźnikami (nie wiadomo czy warto takiej biblioteki używać :-) ).

Po prawdzie te referencje w C++ też kiepskie i kod później szalał od const castów -> dlatego w końcu wielu przesiadło się na javę.

Jeśli myślicie, że pisząc wskaźnikami zbliżacie się do sprzętu i lepiej wiecie co się dzieje na procku - to smutna nowina - tak może było na Atari.

0

TIOBE to nie tylko liczba ofert, to ogólnie popularność języka. A co jest takiego specjalnego w Koszalinie? - vpiotr dzisiaj, 15:55

Wiem co to TIOBE i wiem co to liczba ofert.

Miałem na myśli, że jak na staruszka, to liczba ofert w Cpp jest spora.

W USA (http://www.indeed.com) jest 70k ofert w Java, 34k ofert w Cpp oraz 30k w C#

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