Język, scieżka nauki.

0

Witam.
Pewnie temat był wałkowany milion razy, ale wolę zapytać bezpośrednio.
Od dłuższego czasu myślałem na temat nauki programowania w wolnym czasie, wiążąc z tym większe lub mniejsze nadzieje z późniejszą pracą w kierunku programisty. Aktualnie mam 21 lat i studiuję ekonomię, więc nie mam nieograniczonej ilości na nauke programowania.

Na początku czerwca zdecydowałem, że jeśli chcę zacząć, to teraz, bo nie ma na co czekać, a zwlekanie mi nie pomoże. Poszukałem informacji, popytałem wśród znajomych i większość poradziła mi naukę C++ na początku (moja jedyna styczność do tej pory to podstawy w Pascalu), a poźniej ew. zmianę języka.

W związku z tym mam pytanie: czy taki scenariusz jest sensowny? Przykładowo nauczyć się C++ do jakiegoś w miarę porządnego stopnia, a następnie kierować się popytem w moim mieście i zacząć uczyć sie np. Javy czy c#?

0

Programista musi umieć szukać informacji i to jest jego najważniejsza umiejętność.

https://www.quora.com/Which-is-more-beneficial-to-learn-as-a-first-programming-language-Java-or-C++-Why

C++ vs Java, Java vs C#, Java vs Python, jaki język na początek itp. tematów jest od metra, bo zazwyczaj zadają je początkujący, a takich jest najwięcej.

1

Pytanie czy jest sens się uczyć C++, żeby potem z niego rezygnować ;)
Równie dobrze możesz zacząć od razu od Javy lub C#, jeśli będziesz wiedział co chcesz osiągnąć. Poświęć tydzień na każdy z tych języków i zobacz który wygląda najlepiej dla Ciebie.

1

Najpierw weź coś funkcjonalnego jak elixir, wyrób dobre nawyki i dopiero uderzaj w masówki typu java/c#

0
Pipes napisał(a):

Pytanie czy jest sens się uczyć C++, żeby potem z niego rezygnować ;)
Równie dobrze możesz zacząć od razu od Javy lub C#, jeśli będziesz wiedział co chcesz osiągnąć. Poświęć tydzień na każdy z tych języków i zobacz który wygląda najlepiej dla Ciebie.

Nie wiem czy będę musiał z niego rezygnować, ale też nie wiem jak wygląda sytuacja: które języki stają się coraz bardziej popularne, a które mniej.

4

Ja bym zrobił tak, jak ty -- ale nie dla wszystkich taka droga jest dobra...

C++ to bardzo obszerny język, ma możliwości (w samym języku, nie w bibliotekach) dużo więcej niż Java i ma tę zaletę, że jak się go już nauczysz (porządnie), to przesiadka na inny będzie zawsze (prawie) na prostszy, więc szybko się przestawisz (aczkolwiek pewnie paru ficzerów z C++ w tym czy innym języku będzie Ci brakowało). Bo prawie każdy inny język mainstreamowy różni się od C++ tym, że czegoś mu brakuje w stosunku do C++, a nie daje nic w zamian -- poza biblioteką (co jest bardzo ważne, oczywiście!).

Natomiast moim zdaniem kierowanie się popytem przy wyborze pierwszego języka jest słabe -- poza przypadkiem, gdy szybko chcesz znaleźć pracę.

Natomiast dobrym językiem do nauki programowania -- wręcz rewelacyjnym, moim zdaniem -- jest Python.

0

Dla kogoś kto nie miał dużej styczności z IT nie polecam C++, chyba, że masz dużo czasu i chęci.

Polecam język skryptowy Python i wraz z nim naukę podstaw linuxa.

Jeśli chodzi o Python na pewno znajdziesz jakieś źródła.

Co do linuxa polecam "The LINUX Command Line - Complete Introduction" - przynajmniej pierwsze 130 stron.

Powodzenia.

0

@maryiusz -- nie chodzi o możliwości w sensie, że czegoś Java nie może; chodzi o to, że Java NIE MA pewnych mechanizmów i musi robić pewne rzeczy inaczej. Niektórzy wręcz uważają, że te braki Javy (czy Pythona, Haskella, C, PHP itp... właściwie każdego języka) to ficzer, bo nie trzeba się uczyć dodatkowych (niepotrzebnych?) rzeczy, a więc ma się wolniejszą głowę i można skupić się na meritum. Ja tak nie uważam. :)

A co do konkretów: Java/Python nie ma na przykład przekazywania obiektu przez wartość; nie ma arytmetyki wskaźników. Java nie ma przeciążania operatorów. Itd.

Jeszcze raz: nie chodzi mi o to, że Java/Python czegoś nie może, tylko, że trzeba użyć innych narzędzi. Inaczej: Żeby coś zrobić w C++ jest więcej sposobów niż w większości innych języków mainstreamowych.

PS. Nie mówię też o bibliotekach, w szczególności standardowych. :)

1

Już Tobie napisali, język na początku - ważne by nie przeszkadzał w nauce programowania, czyli taki do którego masz dobre materialy/dobrego nauczyciela oraz filozofia języka jest dla Ciebie w miarę przyswajalna, C++ to trudny język, ale to jeszcze niczego nie przesądza. Jeśli zdecydujesz się juz na C++ jednak, to raczej (co też w wielu miejscach polecaja niestety) to raczej nie Symfonię, ona była bardzo dobrym podręcznikiem w latach 90, gdy C++ było tak na prawdę C z klasami. Jak już się zdecydujesz to raczej weź tego Stroustrupa, albo podążaj za kursem, który pisze @fasadin tutaj

1
koszalek-opalek napisał(a):

C++ to bardzo obszerny język, ma możliwości (w samym języku, nie w bibliotekach) dużo więcej niż Java i ma tę zaletę, że jak się go już nauczysz (porządnie), to przesiadka na inny będzie zawsze (prawie) na prostszy, więc szybko się przestawisz (aczkolwiek pewnie paru ficzerów z C++ w tym czy innym języku będzie Ci brakowało).

Taa...

Ci "szybko przestawieni" znawcy C++ mają niezwykle częstą tendencję do pseudomikrooptymalizacji, stosowania notacji węgierskiej, prób wpychania na siłę rzeczy na stos (np. definiując struct zamiast class w C#), niepotrzebnego używania preinkrementacji i pisania kompletnie proceduralnego kodu, mimo że nawet takie archaiczne języki jak Java mają już prawie funkcyjne elementy.

Może są tacy, którzy potrafią po nauce C++ pisać w innych językach, ale na podstawie swojego kilkuletniego doświadczenia w pomaganiu takim ludziom na tym forum oraz innych kanałach, stwierdzam, że jedyne co C++ potrafi, to nauczyć antywzorców i niepragmatycznego podejścia do rozwiązywania problemów.

0

Czyli powinienem raczej zrezygnować z C++?

2

Nie pchaj się w C++ jako pierwszy język. Serio. Z jednego prostego powodu - to zbyt ciężki język. Ja bym brał przyjemnego pythona.

1

Jezeli checsz na prawde znak programowanie i studiowac programowanie (ze to jest Twoja pasja) to zaczalbym w tej kolejnosci

C (nie C++ tylko czysty C), python, java/C#, haskel/elixir/scala

Jezeli chcesz po prostu programowc to zacznij pythona/ruby

jezeli checsz miec cos po srodku zacznij od od C# albo javy

0

zgodze się z @fasadin 'em(choć nie dokońca), najpierw zacząłbym od zwykłego c, potem przerzuciłbym się na jave lub/i c++, a potem c#(gdyż ma sporo elementów z javy i z c++). Warto sobie wyrobić wiedzę ogólną na temat programowania(obiektowość, wielowątkowość, wszelkie rodzaje klas, typy wyliczeniowe, itp.), potem zobaczyć, który język ci najbardziej odpowiada(pod względem platformy/celu/itp.), a dopiero na końcu zdecydować w który język brnąć głębiej(to nie znaczy że nie możesz znać podstaw każdego), czy to w sam język, czy w biblioteki zewnętrzne(np. frameworki), czy nawet silniki(unity,cry engine, unreal engine).

0

Zacznij od tego od czego zaczynali pionierzy programowania, od Asmeblera.
Gdy już będziesz wiedział jak działa komputer, rozpocznij przygodę z C.
Naturalnie potem przyjdzie pora na objektowość czyli C++.
I od tego momentu masz do wybóru tyle ścieżek ile języków.

I teraz dlaczego asembler?
Bo jest to najprostrzy z języków jeżeli chodzi o składnie, do tego będziesz musiał myśleć algorytmicznie od samych podstaw.
Nauczy Cię programować ,myśleć i tworzyć bezpieczny kod.

Może przyjść taka konieczność, że będziesz musiał użyć jakiegoś wydajnego rozwiązania, które będzie wymagało wydajności, małego nakładu pamięciowego, dostępu do dobrych bibliotek obliczeniowych itp.W takim wypadku, java, python, c# itd odpadają z wejścia. Zaczynając od góry, przejdziesz drabinę frustracji przy nauce niższego poziomu. Nie bez powodu na uczelni zaczyna się naukę od języka C.

W pracy mam kilku takich, którzy nauczyli się tylko javy, lizeli trochę C. Powiem szczerze, nie urażając nikogo, jest to dno progrmistów. Zwyczajnie dysponują malutką wiedzą, która nie pozwala im poradzić sobie z pewną klasą problemów i produkują je lub czasem nie zauważają ich.

0

popytem w moim mieście

Tzn. gdzie?

Ograniczanie się do swojego rodzinnego miasta jeśli chodzi o branżę IT to może być słaby pomysł, chyba, że mieszkasz w jednym z uprzywilejowanych miast (Warszawa czy inne). Albo najlepiej w San Francisco.

Pewnie temat był wałkowany milion razy, ale wolę zapytać bezpośrednio.

do niczego ci się to nie przyda, bardziej ci się opłacało przez ten czas uczyć się jakiegokolwiek języka (nauka programowania jako takiego jest ważniejsza, niż znajomość konkretnego języka X - w końcu język wiodący można zmienić i tak później). Zakładając taki temat jedyne co robisz, to dajesz pewnego rodzaju rozrywkę intelektualną użytkownikom tego forum (w tym mnie), którzy lubią dyskutować. Natomiast samemu sobie nie pomożesz ;) Ale i tak spoko.

1

@Kaszaneczka z całym szacunkiem, ale ktoś kto gada takie głupoty nie powinien dawać żadnych rad.

  1. To że znasz jakiś tam programistów javy, nie znaczy że każdy programista taki jest.
  2. asembler wydajny?! nie wydaje mi się żeby pisanie kilkukrotnie więcej stron kodu było wydajniejsze, niż napisanie kilku linijek w javie i c++, c.
  3. jeżeli asembler załóżmy że jest taki świetny, to czemu większość osób w nim nie programuje, odpowiedź jest prosta, bo nie jest taki świetny, ktoś w jakimś celu wymyślił te języki i tym celem było osiągnięcie lepszej wydajności, oraz skrócenie kodu(wystarczy spróbować sobie wyobrazić strategie taką jak starcraft w języku nieobiektowym, praktycznie niewykonalne).

jeżeli uraziłem kogoś tym co napisałem o asemblerze to sorry, ale trzeba pod każdy język programowania patrzeć na wady i zalety. Nie ma jednego konkretnego języka, w którym wszystko działa najlepiej, ale wystarczy sobie chwile pomyśleć żeby domyśleć się że np. w asemblerze wygenerujemy najczystszy kod zależny od naszych umiejętności, w c++ osiągniemy bardzo wydajny kod, w javie możemy napisać bardzo prosto, niektóre aplikacje... itp. (to już wracając tak do tematu :p)

0

najwiecej psioczą na javowcow ludzie co nie maja pojecia o programowaniu w javie.

a jakby krytynkanci dostali na twarz do zrobienia cos w JEE stacku to by pewnie narobili w gacie.

8

Pytanie podstawowe - po co chcesz się uczyć programowania?

  • do wsparcia obliczeń finansowych? wybierz Pythona, Jave, Clojure, F#
  • do dorabiania sobie w webdev? wybierz Pythona lub JavaScript (node.js)
  • do rozwijania swojej pasji związanej z komputerami? naucz się C, Pythona, Java, Clojure, C#, gdzieś po drodze Haskella, OCaml, Groovy, Kotlin, Scala
  • do obliczeń naukowych? wybierz Pythona, Jave lub Julia
  • do pisania gier? wybierz engine, do tego jeden z dostępnych dla niego języków
  • do tworzenia automatów w domu? wybierz platformę, potem naucz się C, asm, C++, ew. BASIC-a (zależy co wybrana platforma wspiera)

Co do C++:
C każdy programista powinien znać - bo to podstawowy język wysokiego poziomu dostępny już prawie na każdej maszynie.

Co innego C++: niewątpliwie język ważny jako następca C, ale niszowy - obecnie większość ofert pracy nie dotyczy tego języka. Jest to język skomplikowany, trudny w nauce i pełen pułapek. Może gdybyś się uczył tylko nowej składni (np. C++14) i mógł pracować tylko z nowymi projektami to nie było by to takie trudne, ale starsze wersje tego języka to niezła plątanina.

0

Uczę się głównie dla siebie.
Jak na razie po kilku tygodniach z c++ nie widzę powodów do zmiany nauki pierwszego języka, wszystko jest dla mnie logiczne i zrozumiałe. Planuje nauczyć się c++ w stopniu, który mnie zadowoli i pozwoli poznać podstawy programowania, a następnie rozwijać się w dalszych kierunkach. Po wstępnych przymiarkach spodobał mi się python i jego mam zamiar się uczyć w dalszej kolejności. Mimo, że mój wybór może nie być najefektywniejszy, mam nadzieję, że podołam swoim zamierzeniom i być może zwiążę z programowaniem swoją przyszłość. Zaczynając naukę żałowałem, że wcześniej nie przywiązałem do tego uwagi.

0

JavaScript nie nadaje sie do rozwijania pasji? :D

0

A tu na forum piszą że Python nie jest idealny do webdev, a od Ruby teraz odchodzą bo mało wydajny. Prym teraz znowu wiedzie PHP 7 i Node.js.

3
Krzywy pomidor napisał(a):

JavaScript nie nadaje sie do rozwijania pasji? :D

Oczywiście, że JS się nadaje do rozwijania pasji. Szewskiej pasji.

0
Świetny Terrorysta napisał(a):

A tu na forum piszą że Python nie jest idealny do webdev, a od Ruby teraz odchodzą bo mało wydajny. Prym teraz znowu wiedzie PHP 7 i Node.js.

Języki dla dzieci, trololo :P

0
koszalek-opalek napisał(a):

Niektórzy wręcz uważają, że te braki Javy (czy Pythona, Haskella, C, PHP itp... właściwie każdego języka) to ficzer, bo nie trzeba się uczyć dodatkowych (niepotrzebnych?) rzeczy, a więc ma się wolniejszą głowę i można skupić się na meritum. Ja tak nie uważam.
bo przeciez w programowaniu chodzi o to zeby walczyc z jezykiem w ktorym sie programuje zamiast rozwiazywac realne problemy :)

koszalek-opalek napisał(a):

A co do konkretów: Java/Python nie ma na przykład przekazywania obiektu przez wartość; nie ma arytmetyki wskaźników. Java nie ma przeciążania operatorów. Itd.
tzn, nie wiesz jak sa przekazywane obiekty w javie, uwazasz ze arytmetyka wskaznikow to swietny feature a nie koniecznosc, a tworzenie swoich definicji operatorow to wlasnie cos bezdyskusyjnie niezbednego programiscie :) sorry ale to nie sa zadne argumenty na to ze lepiej sie uczyc c++

Kaszaneczka napisał(a):

Zacznij od tego od czego zaczynali pionierzy programowania, od Asmeblera.
asemblera? zacznij od zbudowania zarowki zasilanej cytryna :)

Kaszaneczka napisał(a):

Może przyjść taka konieczność, że będziesz musiał użyć jakiegoś wydajnego rozwiązania, które będzie wymagało wydajności, małego nakładu pamięciowego, dostępu do dobrych bibliotek obliczeniowych itp.W takim wypadku, java, python, c# itd odpadają z wejścia.
stek bzdur

Kaszaneczka napisał(a):

W pracy mam kilku takich, którzy nauczyli się tylko javy, lizeli trochę C. Powiem szczerze, nie urażając nikogo, jest to dno progrmistów. Zwyczajnie dysponują malutką wiedzą, która nie pozwala im poradzić sobie z pewną klasą problemów i produkują je lub czasem nie zauważają ich.
no tak, tylko pre vs post inkrementacja to PRAWDZIWE problemy :)

0
Kaszaneczka napisał(a):

Zacznij od tego od czego zaczynali pionierzy programowania, od Asmeblera.
Może przyjść taka konieczność, że będziesz musiał użyć jakiegoś wydajnego rozwiązania, które będzie wymagało wydajności, małego nakładu pamięciowego, dostępu do dobrych bibliotek obliczeniowych itp.W takim wypadku, java, python, c# itd odpadają z wejścia. Zaczynając od góry, przejdziesz drabinę frustracji przy nauce niższego poziomu. Nie bez powodu na uczelni zaczyna się naukę od języka C.

Powyższe rozwiązania masz gotowe dla wielu języków, np Intel Ipp, NumPy, Root, Scikit-learn. Odnośnie nauczania C na uczelniach, w praktyce jeżeli musisz prototypować algorytm na uczelni lub komercyjnie, robisz to w sposób najszybszy i najwygodniejszy(matlab, mathematica, python + liby). Do C, C++ schodzi się głownie, jeżeli tworzysz kod pod egzotyczny sprzęt: gpu, xeon phi lub egzotyczne zastosowania(medycyna, fizyka, dsp).

0

Powinieneś zadać sobie pytanie: po co mi ten język ? Widzę dwie ścieżki:

  1. Rozwijać swoją pasję. Tutaj doradziłbym C, jako język, który pozwoli Ci zrozumieć jak to działa, jak zarządzać pamięcią. Z językiem C możesz rozwijać się dalej, iść w inne języki, prostsze.

  2. Żeby znaleźć pracę. Widzę po Twoim poście, że tak pewnie jest, żebyś chciał pracować w IT po studiach. Doradzałbym Javę, jest to język bardzo lubiany przez korporacje, firmy. Javy można nauczyć się z książek, to jest jest zaleta i wada :) Sama Java jest dość duża i sporo nauki przed Tobą. Sama SE niewiele oferuje, będziesz musiał nauczyć się EE (sieciowość!), frameworków. W Javie w pracy liczy się jakie znasz frameworki. Ale od juniora nie wymaga się znajomości n frameworków :-)

Nie zaczynałbym od C++, no chyba, że w Twoim mieście jest sporo ofert pracy dla tego języka, nie wiem gdzie mieszkasz. No i najważniejsze - najlepiej pracuje się w technologii, którą się po prostu lubi, nawet jeśli byłby to COBOL

2

A ja bym sobie odpuścił C na początek, a wziął np. Pythona. Przykładowo, na EITI PW wyniki z przedmiotu PRM (nauka programowania w C na pierwszym semestrze) wyglądają tak: http://prntscr.com/bfhfyf
W lewej kolumnie L2-L6 to laborki 2-6, potem 3 kolejne wiersze to ocena za projekt, potem wiadomo. W ostatnim wierszu, od lewej: ocena moja, ocena najniższa wśród wszystkich zapisanych na przedmiot, ocena średnia wśród wszystkich zapisanych na przedmiot i najwyższa. Ilość zapisanych na przedmiot: 152 osoby. Średnia: 2.30. I teraz pytanie -> czy jest to wina prowadzącego, czy studentów, czy systemu?
W tym języku jest za dużo UB, aby był on dobry na początek.

0
vpiotr napisał(a):

Co do C++:
C każdy programista powinien znać - bo to podstawowy język wysokiego poziomu dostępny już prawie na każdej maszynie.

Co innego C++: niewątpliwie język ważny jako następca C, ale niszowy - obecnie większość ofert pracy nie dotyczy tego języka. Jest to język skomplikowany, trudny w nauce i pełen pułapek. Może gdybyś się uczył tylko nowej składni (np. C++14) i mógł pracować tylko z nowymi projektami to nie było by to takie trudne, ale starsze wersje tego języka to niezła plątanina.

C -- chyba miało być "nieksiego poziomu"? :) Właśnie C++ jest "podstawowym językiem wysokiego poziomu dostępnym już prawie na każdej maszynie". Ale niekoniecznie najlepszym do nauki. Tu polecam Pythona jeszcze raz!

0
katelx napisał(a):
koszalek-opalek napisał(a):

Niektórzy wręcz uważają, że te braki Javy (czy Pythona, Haskella, C, PHP itp... właściwie każdego języka) to ficzer, bo nie trzeba się uczyć dodatkowych (niepotrzebnych?) rzeczy, a więc ma się wolniejszą głowę i można skupić się na meritum. Ja tak nie uważam.
bo przeciez w programowaniu chodzi o to zeby walczyc z jezykiem w ktorym sie programuje zamiast rozwiazywac realne problemy :)

koszalek-opalek napisał(a):

A co do konkretów: Java/Python nie ma na przykład przekazywania obiektu przez wartość; nie ma arytmetyki wskaźników. Java nie ma przeciążania operatorów. Itd.
tzn, nie wiesz jak sa przekazywane obiekty w javie, uwazasz ze arytmetyka wskaznikow to swietny feature a nie koniecznosc, a tworzenie swoich definicji operatorow to wlasnie cos bezdyskusyjnie niezbednego programiscie :) sorry ale to nie sa zadne argumenty na to ze lepiej sie uczyc c++

Wiem, jak są przekazywane obiekty w Javie. Właśnie to napisałem. :) To, jak to nazywają twórcy, a to jak jest, to dwie różne rzeczy. :)

Jeśli mówimy o współczesnym C++, nie o tym sprzed iluś lat -- to arytmetyka wskaźników NIE jest koniecznością...

Nie chodzi, żeby zaczynać od C++ (tu polecam Pythona). Ale nieznajomość C++ zwykle kończy się bardzo ograniczonym spojrzeniem na programowanie. C++ właśnie daje to: przegląd różnych możliwości i podejść. Nie znaczy to, że trzeba go używać potem w życiu zawodowym, ale szersze horyzonty są nie do przecenienia u programisty. Chyba, że się chce być po prostu współczesnym wyrobnikiem, ale tacy też są oczywiście potrzebni.

W tym wątku, zdaje się, jest mowa nie o przydatności danego języka w praktyce zawodowej (tu wszystko zależy od projektu/pracodawcy itp.), ale o przydatności do nauki. Ja bym nadal polecał najpierw Pythona, potem C++. Ze względu na wszystko, o czym pisałem.

No i własne operatory to rzeczywiście coś, co bardzo lubię. :) :) :)

PS. A, i jeszcze jako trzeci obowiązkowy język: Haskell. :) No i Prolog.

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