Jaki język programowania wybrać? - początkujący

Cześć wszystkim :wink:

 

Wiem, że takich tematów powstało od groma(sam przeczytałem blisko 50), wiem także, że ile ludzi tyle opinii. Tak więc chciałbym się was poradzić osobiście.

 

Czytałem sporo o językach, wadach i zaletach przy czym każdy pisał swoje opinie w sposób subiektywny nierzadko zdarzali się fanboy’e poszczególnych języków i robiło się z tego zamieszanie.

 

Moim największym problemem jest to, że nie wiem co dokładnie chciałbym robić, z początku nastawiłem się na tworzenie gier, ale po przeczytaniu tego tematu:

http://forum.warsztat.gd/index.php?topic=23657.0

zacząłem mieć wątpliwości czy to ma sens, rynek gier w Polsce wg. ludzi wypowiadających się w tym temacie nie wygląda zbyt różowo(temat z 2011r.) i chyba nie wiele zmieniło się do tej pory.

Patrze tutaj przede wszystkim na rynek pracy(nie chodzi o wysokość zarobków, tylko by znaleźć pracę w ogóle wtedy najłatwiej będzie mi się rozwinąć.

 

Tak czy inaczej wybrałem sobie 2 języki które mnie interesują(C++, Python). W zasadzie wychodzi na to, że język to tylko narzędzie, przy pomocy którego uczę się programować, a kiedy nauczę się już programować, język stanie się drugą kategorią.

 

Z tego co wyczytałem największe możliwości ma tutaj niskopoziomowy C++

 można w nim pisać wiele rzeczy, a skoro ja nie wiem dokładnie co chce robić to jego uniwersalizm powinien być dla mnie atutem, jeżeli chodzi o książki to wszyscy polecają Pana Grębosza: “Symfonia C++”.  Jedyna zła opinia jaką przeczytałem o symfonii:

 

“Dla mnie Grębosz od zawsze kojarzył się z rakiem developerskim. Przyzwyczaja młodych programistów do zbyt łatwych tłumaczeń, często pomija ważne kwestie względem “lepszego” tłumaczenia. A potem jak przychodzi co do czego i każesz danej osobie znaleźć rozwiązanie na stacku/w dokumentacji to zaraz się poddają “bo nie jest łatwo wytłumaczone”. Ja rozumiem że trzeba wytłumaczyć pojęcie pętli, klasy, boolean’ów, przyzwyczaić kogoś do semantyki… ale kurcze, nie należy cały czas prowadzić kogoś “za rączkę”, bo to nie tylko rozleniwia ale i nic nie uczy. Programowanie tak samo jak matematykę trzeba przyswoić i nauczyć się myśleć logicznie, a nie kuć na pamięć/ogarniać tylko teorię. (zresztą, często osoby po Gręboszu nie mogą przestawić się na CamelCase i ang nazwy zmiennych/funkcji/klas/obiektów)”

 

Oczywiście nie znając tematu ciężko mi się do tego odnieść, może wy to zrobicie?

 

 

Wiele osób pisało też jakoby programowanie w C++ otwierało drogę do wszystkich innych języków znaczy, że rzekomo łatwo przejść z C++ na jakiś inny choćby na JAVE co też jest oczywiście plusem.

 

Wad ma stosunkowo niewiele z tego co czytałem, przy czym jedna mnie w pewien sposób zniechęca a mianowicie, że trzeba naprawdę sporo nauki, aby napisać coś PRZYDATNEGO, że w C++ trzeba się martwić o wiele rzeczy(zarządzanie pamięcią? bodajże) w porównaniu do języków “wyższego poziomu” np. właśnie Python. Wiem, że dobrze by było umieć trudniejsze rzeczy, ale staram się myśleć konstruktywnie, że może sobie na początku nie poradzę z trudniejszymi rzeczami, nie chciałbym się zniechęcić.

 

Natomiast Python’a wybrałem sobie za łatwą składnie i za cudną ikonkę ;). Z mojego punktu widzenia to wygląda tak, że skoro każdy język programowania uczy programować(w odpowiednim paradygmacie) to po co wybierać sobie jako pierwszy język taki, który ma trudną składnie? W Pythonie też można ponoć pisać gierki. Przy czym nie słyszałem, aby ktoś polecał na jego temat jakąś dobrą książkę. I jakoś nie widzę aby było dużo ofert pracy dla “Pythoniarzy” niby wszyscy radzą, aby wstrzelać się w “niszę”, bo to później zaprocentuje, ale skoro jest mało ofert w danym języku to chyba pracodawca będzie trzymał takiego człowieka za przysłowiowe “jaja” skoro wie, że i tak weźmie tę pracę bo innej nie znajdzie.

 

Tak więc gdyby zebrać to do “kupy”.

 

  1. Co można ciekawego robić w C++/Pythonie poza robieniem gier?(lub czy to jest rzeczywiście takie trudne jak napisali to panowie w podanym przeze mnie linku?)

 

  1. Który z tych języków zapewni mi szybszy start na rynku pracy?(wysokość pensji nie ma znaczenia)

 

  1. Z czym można połączyć te języki? (np. do HTML’a pasuje css, javascript itd.)

 

Dziękuję za dobrnięcie do końca i pozdrawiam :slight_smile:

  1. Oczywiście programy, instalatory. W obu masz możliwość międzyplatformowych programów. Jednak c++ będzie trudniejszy dla programów okienkowych.

  2. Prawdopodobnie C++, bo developera pythona to rzadko szuka ktoś.

  3. Tutaj to nie zawsze połączysz jakiś język. HTML posiada wsparcie dla pythona i javascriptu, ale prawdopodobnie na odwrót już tak nie ma. Python i C++? Proszę http://stackoverflow.com/a/145649. Java w C++? Proszę http://stackoverflow.com/questions/476968/using-a-java-library-from-python. Python w C++? Proszę http://stackoverflow.com/questions/9117978/use-python-code-in-c-c.

Możesz pisać w obu tych językach, ale ważniejsze, który ci bardziej odpowiada.

Odpowiem jak to wygląda z mojej perspektywy, nie jestem “fanboyem” ale od razu zaznaczę, że osobiście preferuję i Tobie poleciłbym na początek Pythona.

Python jest znacznie prostszy i w przystępniejszy sposób pozwoli Ci na zrozumienie czym jest programowanie obiektowe, jeśli wcześniej nie miałeś z tym nic wspólnego (w Pythonie wszystko jest obiektem ;)). 

Jeśli chodzi o “robienie gier”, dla Pythona dostępne jest PyGame - http://www.pygame.org (nie zniechęć się wyglądem strony…), do tego książka, np. “Beginning Game Development with Python and Pygame”. Jeśli chodzi o samego Pythona, również jest wiele ciekawych książek wartych polecenia, ale jeśli nie chcesz inwestować od razu w książki tradycyjne, to znajdziesz w internecie mnóstwo darmowych podręczników w wersji pdf jak i kursów interaktywnych.

 

Ogólnie pomiędzy C++ a Pythonem jest duża różnica taka, że Python jest językiem skryptowym/interpretowanym, przez co jest powiedziałbym, że jest bardziej przenośny. Dzięki temu, Python ma w pewnym sensie zastosowanie na szerszym polu niż C++, np. z wykorzystaniem Pythona możesz tworzyć strony internetowe. Ogólnie bardzo ciężko jest dokonać takiego porównania, jest to temat na dłuugą dyskusję, a wnioski ostatecznie i tak trzeba wyciągnąć samemu :wink:

 

 

Ten, który będzie dla Ciebie przyjemniejszy i którego się szybciej nauczysz :stuck_out_tongue: Czyli jak sam wspomniałeś, tutaj też obstawiałbym Pythona. Ale z drugiej strony, jeśli chcesz bardziej szczegółowo poznać zasady działania komputera i dlaczego Twój program działa tak a nie inaczej, to w takiej sytuacji skłaniałbym się bardziej ku C++. Moim skromnym zdaniem, jeśli nie chcesz rzucać się na głębszą wodę i jak najszybciej wystartować na rynku pracy, jak wspomniałem - polecam przyłożyć się do Pythona.

 

Ani trochę się z tym nie zgadzam.

 

Nie rozumiem co znaczy, że HTML posiada wsparcie dla Pythona i Javascriptu a odwrotnie już nie :stuck_out_tongue: Jak wspomniałem wcześniej, Python umożliwia tworzenie stron internetowych, z wykorzystaniem “czystego” Pythona jak również dostępne są frameworki (najpopularniejsze to np. Django, Flask) bardzo ułatwiające sprawę i pozwalające pisać nawet rozbudowane aplikacje webowe z dużo mniejszym nakładem pracy, a pisanie w nich jest po prostu przyjemne :slight_smile:

 

Także to jest moje zdanie dotyczące Pythona, więc przydałby się ktoś jeszcze popierający C++ w tej dyskusji, ale kto powiedział, że musisz ograniczać się do jednego języka? Spróbuj przez kilka miesięcy uczyć się jednego, później przez kilka drugiego języka (a po drodze może jeszcze dla większego poglądu zainteresuj się Ruby i Javą lub C#), tylko w taki sposób będziesz mógł wyrobić sobie prawdziwe zdanie na ten temat.

 

Pozdrawiam

Pracuję w czym innym, ale na początek wybrałbym Pythona albo któryś z nowocześniejszych języków typu Ruby albo Groovy lub… JavaScript.

 

C++ mimo prób unowocześnienia jest skomplikowany, miejscami archaiczny, nieprzenośny i ma wąskie zastosowania, które obecnie nie są już mainstreamem rynku. Gry, systemy operacyjne i mocno skomplikowane programy obliczeniowe zawodowo tworzy naprawdę niewielki procent programistów. Zdecydowana większość rynku to EE (oprogramowanie dla firm, często multiplatformowe, zazwyczaj webowe), backend co bardziej skomplikowanych stron internetowych (przy użyciu jakiegoś frameworka) albo aplikacje mobilne. Ostatnio coraz bardziej dochodowa staje się dobra znajomość frameworków JavaScriptowych.

 

Zarobki z klepania C++ są naprawdę niezłe, ale wcześniej musisz znać go naprawdę dobrze i mieć parę latek w CV. Wejście w inne języki jest dużo prostsze, zarówno jeśli chodzi o naukę, jak i początek zarabiania.

 

 Również się z Tobą zgadzam. W kwestii JS, może nie do końca dotyczy to zarobków, ale warto rzucić okiem na wykres popularności języków (wg StackOverflow i GitHuba):

http://langpop.corger.nl/

 

Python jest lekko ponad C++, ale JavaScript i tak jest wyżej :wink:

Polecam wybrać to co Ci najbardziej pasuje - przejrzyj składnie najpopularniejszych języków i zobacz który wydaje Ci się lepszy. Uczenie się czegoś na siłę nie ma większego sensu.

 

Natomiast z tych języków co podałeś to już lepiej uczyć się Pythona. O C++ napisał wystarczająco dużo Frankfurterium, ba jak ktoś zaczyna swoją przygodę z programowaniem, to C++ może naprawdę zniechęcić do pisania :wink:

Potwierdzam - Python jest relatywnie prosty (choć jak wszystko wymaga nauki) i ogólnego zastosowania, ma bindingi do bibliotek graficznych, świetne frameworki typu Django. Rynek pracy dla programistów Pythona jest nawet nawet - dziś widać oferty dla Pythonistów znacznie częściej niż parę temu, kiedy była mała posucha. Praktycznie Python to dziś najnormalniejszy język programowania - gry, programy, aplikacje internetowe, zwykłe skrypty to żaden problem. Do tego działanie na wielu systemach operacyjnych. Minus - jak ktoś na to zwraca uwagę, to ciężko ukryć kod. Są metody na to, ale tak jak da się kod ukryć, tak równie łatwo go odkryć :wink: Oczywiście coś być może się zmieniło - nie siedzę już w Pythonie zbytnio.

 

Minus - ciężko znaleźć tanią i porządną literaturę dla Pythona w naszym kraju. Znaczy - jest, ale nie zawsze najtańsza :wink: Oczywiście nie każdy na to zwraca uwagę - niektórym nauka wprost z monitora nie przeszkadza i e-book będzie dla nich OK (choć dziś są też tablety i e-czytniki, więc e-book nie musi być tylko na monitorze).

 

Co do polecania JavaScriptu - jeśli nie zamierza się iść w Web, to nie warto się go chyba uczyć. Wprawdzie pisanie aplikacji desktopowych w JavaScript jest możliwe, jednak dla mnie to tak wielkie spaghetti, że Ci, którzy to robią - są dla mnie bohaterami :wink: Przynajmniej ja - im dłużej widzę JavaScript tym bardziej zastanawiam się, czy chce mi się kodzić te internety :-/

Dziękuje za dotychczasowe odpowiedzi :slight_smile:

 

Czyli z waszych wypowiedzi wynika, że relatywnie łatwiej będzie mi się “wkręcić” w rynek znając Pythona, gdyż jest trochę łatwiejszy? I przy mniejszym nakładzie pracy można szybciej zacząć robić w nim komercyjne rzeczy?

 

Wspominacie tutaj o Pythonowym Django jako framework pomagający w tworzeniu aplikacji webowych zastanawiam się jak taki Python wypada na tle Php, bo skoro na rynku jest tylu wyszkolonych ludzi w Php to po co robić to samo w Pythonie?

Czytałem także, że na zachodzie Europy Python jest bardziej ceniony(częściej używany) niż w Polsce ma się rozumieć, że tak jak z wieloma innymi rzeczami w Polsce trend na popularność Pythona przyjdzie do nas z opóźnieniem?

 

A czy we frameworkowym PyGame da rade zrobić np. takie Diablo? Chodzi mi generalnie o gry raczej 2d.

 

Jeszcze raz dziękuję za odpowiedzi. Jak pewnie zauważyliście mam wiele pytań niektóre niezbyt mądre, ale wszystkie są podyktowane chęcią dokonania odpowiedniego dla mnie wyboru. :slight_smile:

Python nie jest aż tak trudny - podstawy idzie załapać bardzo szybko a wiadomo, że im bardziej skomplikowany program, tym czeka nas więcej myślenia i coraz większa wiedza. Także dlatego nie jest zły lecz wiadomo, że sam do głowy niestety nie wchodzi. Zależy też z czego się uczysz - w internecie jest multum tutoriali, nawet na samej www Pythona, ale ja osobiście preferuję książki - wiedza jest ustandaryzowana, wykładana od ogółu do szczegółu. Niestety gdy wejdziesz na Allegro zobaczysz, że książek o Pythonie nie ma aż tak wiele (szczególnie dla absolutnie początkującego), nie są zbyt tanie a dużo po angielsku (choć angielski w programowaniu to mus w jakimś stopniu). Tutaj mój prywatny minus, a raczej niedognodność przy nauce Pythona - trzeba poszukać trochę za dobrą książką i pewnie tania nie będzie.

 

Co do Django, nie mam z nim zbyt dużego doświadczenia - tylko tyle co podpatrzyłem od programistów w pracy. Generalnie PHP powstał w 1995 roku, Django jakoś w końcówce 2003, także dzieli je nieco lat - PHP był już 8 lat w użyciu. PHP jest i był też zorientowany na działanie po stronie serwera a Python powstał jako język skryptowy, więc znów inne genezy :slight_smile: Django jednak jako gotowy framework ma wiele rzeczy z automatu. W PHP też możesz się wspomagać różnymi rzeczami, więc generalnie wynik 1:1. Ja generalnie cały czas sam rozważam, czy nie zrezygnować z kodowania internetu w tradycyjny sposób i zająć się Pythonem oraz Django (przy okazji Django, język pozakał po raz kolejny swoją elastyczność).

 

Za pomocą PyGame da się programować gry bez problemu, w tym 2D. Jednak dopiero pisząc nawet prostą platformówkę człowiek uświadamia sobie, że to nie pstyknięcie palcami :wink: Mało kto grając analizuje bowiem, że wszystko co dzieje się na ekranie musi mieć przecież odbicie w kodzie :wink:

 

JS dosyć często traktuje się jako DSL dla bibliotek graficznych i innych takich cosiów (np. skryptowanie w silniku Unity). Poza tym ogromna większość znanych mi programistów to nerdy realizujące się w backendzie korpo-aplikacji. W każdym dużym projekcie musi się znaleźć co najmniej jeden ktoś, kto w odpowiednim frameworku wydzierga od podstaw albo chociaż powykańcza całą warstwę graficzną. Kompetentni w tej materii ludzie potrafią zaśpiewać o naprawdę pokaźne honoraria.

 

W typowych aplikacjach korpopracyjnych wcale nie potrzeba jakiegoś wspaniałego GUI z masą JavaScriptowych bajerów. Rzekłbym nie trzeba tam niczego, czego ja bym nie dał rady zrobić z pomocą SO i blogów.

Mam kolegę który zawodowo koduje w Java. Dużo pracuje wyciąga około 4-5k zł na rękę. Mógłby więcej - ale musiałby pewnie wyjechać z kraju. Miał już takie propozycje ale dobrze mu tak jak jest. 

Java to dobry wybór. Można to wykorzystać do wielu rzeczy (np pisanie aplikacji mobilnych). Dorzuciłbym jeszcze do tego JS/PHP/CSS/C++… na tych wszystkich można całkiem fajnie zarobić. 

 

Ile lat stażu i jakie miasto?

Kolejno, na różne poruszone tutaj tematy.

  1. Grębosza nie czytać, są świetne książki do C++, ale żadna tegoż autora się w tej grupie nie znajduje.

  2. C++ nie jest dobrym językiem na początek. C++ taki jak opisuje Grębosz, tak jak opisuje Grębosz jest całkiem łatwy do przyswojenia. Ale to kompletnie archaiczne, złe porady na temat tego jak się pisze kod. Prawidłowo pisany C++ jest bardzo trudny, głównie z uwagi na złożoność samego języka (nawet jeśli zignorujemy biblioteki standardowe).

  3. Czyste C wykorzystuje się w programowaniu wszystkiego niskopoziomowego: systemów operacyjnych, sterowników. Niektóre zastosowania aplikacyjne (np. serwery usług) są w C++, ale przeważnie na własną niekorzyść (chyba, że C++ używane jest jako “C z klasami”, co też jest dosyć popularne - wiele komponentów Windowsa jest tak napisanych).

  4. Python jest pożądaną umiejętnością na rynku pracy, zależy od tego co się będzie rozwijało. Wiele narzędzi jest napisanych w Pythonie (systemy continuous integration, systemy ticketów, skypty do budowania, itp.) i lepiej znać Pythona, niż nie znać. U nas jest to w zasadzie must-have, a piszemy sterowniki.

  5. Ofert pracy dla programistów Java jest jak mrówków i można (jeśli się odpowiednio dużo potrafi) zarabiać i 10k na rękę (w bankach).

  6. Ofert pracy dla programistów C# jest tak średnio na jeża, ale programistów jest jeszcze mniej, więc to też nie jest zła inwestycja czasu.

  7. JavaScript w Polsce nie istnieje w zastosowaniach innych, niż web frontend (innymi słowy: niemalże nikt nie używa Node.js). W przypadku JS konieczna jest znajomość popularnych bibliotek, bo praktycznie nikt nie pisze w czystym JS. Należy też pamiętać, że JS jest językiem obiektowym, ale opartym na prototypach, a nie klasach. Próba pisania w nim jak w, dajmy na to, C++ to próba włożenia kwadratowego klocka w okrągły otwór. Wielu tak robi, ale to bezmyślne rozwiązanie siłowe.

  8. W gamedevie nie ma kokosów. Lepiej zrobić coś innego z czasem.

  9. Gamedev to często “C z klasami”* dla większych fragmentów kodu. To niskiej jakości kod (jeśli pominiemy lepszy middleware). Są też firmy piszące w czystym C (wcale nie jest ich tak mało).

* wielu ficzerów i tak nie można używać - przykładowo konsole nie mają wsparcia dla wyjątków

Patrząc po mojej firmie (z Warszawy): daj mi chwilę a znajdę ci ok. kilkudziesięciu programistów C# z doświadczeniem 2+ i dobrymi skillami którzy szukają pracy. Ale w zamian znajdź mi KOGOKOLWIEK z 2+ letnim doświadczeniem z Javą i czystą JavąEE (żadne tam springi etc.) Programistów ogarniających Javę jest sporo w Warszawie, tych co ogarniają C# jest na pęczki i większość poluje na jakiekolwiek oferty albo migruje. A programistów Javy z JavąEE i umiejętnością PL/SQL to szukać ze świecą… 

C# nie jest popularne w Polsce i przez długi czas nie będzie. Jeśli klient/inwestor ma wybierać między licencjami M$ a Oracle zawsze wybierze Oracle, sprawdzone w praniu (szczególnie że dzięki Glassfishowi/JBossowi CE + JavieEE appki można stawiać bez dodatkowych kosztów)

W takim razie specyfika rynku we Wrocławiu jest inna. :slight_smile:

Ja wiem…? W Breslau niedawno parę sporych korpo zaczęło masową wręcz rekrutację javowców, a rekruterzy narzekają, że ciągle jest ich mało. Z drugiej strony zasłyszałem, że na wrocławskiej polibudzie na kierunkach informatycznych mają rezygnować z Javy i ponownie kłaść nacisk na C…

Java jest starsza i popularniejsza, na dodatek trzeba w niej 3 razy więcej kodu pisac i konfigurować, więc siłą rzeczy jest więcej ofert pracy. Ale liczba ofert pracy dla programistów C# i tak jest większa niż dostępnych programistów.

Co do zarobków - 10k to nie jest taka znowu imponująca kwota dla osoby z kilkuletnim doświadczeniem. We Wrocławiu choćby w Credit Suisse można tyle dostać.

 

 

Miesięcznie dostaję średnio 15 ofert pracy jako programista .NET z całej Polski, najwięcej jednak z Warszawy. Firmy prowadzą ciągłą rekrutację dotnetowców, bo wszędzie brakuje dobrych spejcalistów, więc gadanie o bezrobotnych siszarpowcach szukających jakichkolwiek ofert to bajki. Zresztą, każdy może sobie wejść na jakiś portal z ofertami pracy i zobaczyć, gdzie w Polsce jest najwięcej ofert w danej technologii, Warszawa wygra chyba w każdej.

 

 

No tak, bo produktów M$ nikt nie używa, i wcale nie są sprawdzone. :slight_smile:

Niestety, ale fakty są takie, że masa firm w Polsce i na świecie używa .NET i MS SQL, a prawdopodobnie będzie używało coraz więcej, bo Oracle jest droższy, a Java rozwija się z prędkością kulawego ślimaka bez jednej nogi.

 

P.S. Mieszkałem tam, mieszkam tutaj, więc wiem jak to wygląda w obu tych miastach.

Wiem, dlatego tak napisałem. :wink:

 

Ja jestem chyba trędowaty - dostaje same związane z Javą. ;D Ale nie przykładam większej wagi do tego co na LI/GL, więc może to przez to.

Na poziomie cukru syntaktycznego zmienia się sporo. Ale naleganie, by pod maską Java nie podlegała zmianom sprawia, że wielu rzeczy nie można usprawnić/naprawić. Z takim podejściem system typów i wsparcie dla generyków zawsze będą kulały.