Różnice między Java a C++

0

Witajcie,
Otóż chciałbym sie dowiedziec jakie są różnice między Javą a C++, oraz który język będzie lepszy do nauki dla początkującego.

1

Otóż lepszym będzie python.
Wszystkie te języki różnią się diametralnie, a owoców i warzyw nie można jednakowo porównywać.
Dodatkowo jakiekolwiek ważniejsze argumenty na twoim poziomie do Ciebie zwyczajnie nie przemówią - albo je zignorujesz, albo uznasz za antyargument.

0

Dla mnie najważniejszą różnicą było chociażby to, że w Javie nie musiałem przejmować się wskaźnikami, których swego czasu w ogóle nie rozumialem. Pokłosiem tego jest choćby dużo prostsza dynamiczna alokajca pamięci. Poza tym są tam out of box biblioteki np. do tworzenia gui czego w cpp out of box nie ma. A później zrozumiałem wskaźniki i wrocilem do Cpp :-) ale dawno to było hehe.

1

Poza tym są tam out of box biblioteki np. do tworzenia gui czego w cpp out of box nie ma.

Ultra kłamstwo.

Javie nie musiałem przejmować się wskaźnikami

Trudno o wypowiedź - inteligentne wskaźniki w C++ poza brakiem GC zachowują się identycznie, co do >cudzysłów"zmiennych"cudzysłów< w javie.

0

Wiem, że w c++ po pewnym stopniu wtajemniczenia będę mógł sobie tworzyć swoje proste gry czy też inne programy, które dadzą mi satysfakcje z tego czego do tej pory się nauczyłem. Czy w Javie też miałbym taką możliwość? Czy jednak Java ograniczy mnie z tworzeniami takich programów, albo w druga stronę czy to cpp ograniczy? Chodzi mi głównie o to który z tych dwóch języków na początku da mi większą satysfakcje i większe możliwości tworzenia jakiś programików na poziomie podstawowym.

0

Jedno i drugie da Ci równie wielką satysfakcję.
Ale poważnie przemyśl naukę pythona.

0

Mógłbyś mi powiedzieć dlaczego tak stoisz za tym Pythonem? Nie jest to pytanie typu dlaczego tak skoro ja chce tak, tylko jakbyś mógł mi powiedzieć dlaczego kierujesz mnie w stronę Pythona ;)

3

Jeden z najniższych progów wejściowych, niesamowicie prosta składnia, mało zagadnień związanych z samym językiem, do tego wymusza formatowanie kodu źrodłowego - ot, raj dla początkującego (i nie tylko)

0

A do czego mógłbym wykorzystać znajomość Pythona? Co on mi oferuje poza prostota o której wspomniałeś?

0

Do pracy wszelakiej, gier, webdevu... wszystkiego. Jest to kompletny, funkcjonalny język, w dzisiejszych czasach należy do jednych z popularniejszych.

0

Dzięki za informacje, na pewno zainteresuje się tym językiem ;)

1

Najlatwiej bedzie zaczac czyste C (albo pisac w C++, ale nieobiektowo), potem dopiero nauczyc sie pisania obiektowo w C++ lub Javie lub C#. C++ wg. mnie dla kogos kto nie mial stycznosci z obiektowoscia jest dosc ciezkie.

Jesli chcesz z interfejsem graficznym to na poczatek zdecydowanie polecam C# (GUI: Windows Forms) lub Delphi

0

@spartanPAGE A ten się zawsze przyczepi. Naprawdę uważasz, że do C++ out of box jest mnóstwo frameworków do gui? Out of box mam na myśli coś co jest częścią biblioteki standardowej języka. Tak jak C# ma swoje WPF czy Winforms albo Java Swinga. Nie mówię tutaj o takich tworach jak Qt gdzie to jest osobna biblioteka, tworzona przez zupełnie inną komórkę.

Przecież do C++ co rusz trzeba instalować osobne frameworki do gui czy do baz danych albo kryptografii, bo w standardowej bibliotece tego nie ma. Co rusz trzeba przekopywać Internet żeby zdobyć rzeczy, które w języka wysokiego poziomu są dostępne od razu i jedyne co trzeba zrobić to np. zadeklarować odpowiednią przestrzeń nazw! Jeszcze niedawno w żeby korzystać w Qt z MySQL'a trzeba było sobie przekompilować bibliotekę. Ludzie! Naprawdę uważacie, że takie podejście można nazwać out of box?!

A inteligentne wskaźniki to zupełnie inna bajka. Dokąd będzie się uczyło tradycyjnego podejścia do programowania w C++ dotąd problem pojmowania wskaźników przez nowicjuszy będzie się pojawiał i basta! Nic tego nie zmieni. I choćbyś nie wiem jakie optymalne programy pisał w najnowszym standardzie C++ to nowicjusze i tak usłyszą o wskaźnikach i będą ich używać. Dlaczego chociażby jest tak wiele postów odnośnie tradycyjnych tablic w C++ gdzie jest klasa Vector? Przecież wszyscy tutaj kładą takim osobom do głowy używanie klas kontenerowych, bo są wygodniejsze i bezpieczniejsze, a oni i tak nie słuchają. Dlaczego tak wiele osób prosi o pomoc z dynamiczną alokacją pamięci? Bo wskaźniki są i pozostaną w C++ i ludzie będą ich używać i nic tego nie zmieni, nawet nowe standardy. Poza tym znajomość tradycyjnych wskaźników jest niezbędna jeżeli chce się programować w C++, bo choć oficjalnie może i się od nich odchodzi to zewnętrzne biblioteki ciągle się ich trzymają i jeszcze długo trzymać się będą (np. Qt).

4

Z tym Qt i smart pointerami to niech Kolega @grzesiek51114 nie szaleje. http://qt-project.org/wiki/Smart_Pointers
A to, że człowiek chce używać tablicy zamiast wektora - jego prawo - można pisać C++ i "pisać".
BTW - odnoszę wrażenie, że wiele materiałów dot. CPP bierze się z ewolucji C-> (CPP == C z klasami) i stąd takie jaja... Polecam Effective C++ i Effective Modern C++ Meyersa, nie na początek oczywiście, ale te książki wyjaśniają WIELE.

Zgodzę się, że wadą C++ jest to, iż jest on ogromny i ciężki do ogarnięcia umysłem nawet dla doświadczonego kodera, poza tym pewne funkcjonalności bibliotek dublują się, np. std::for_each z STL można z powodzeniem zastąpić już Java-style for.

Można też podnieść zarzut "jak do wszystkiego to do niczego". Ale w gruncie rzeczy z nowym standardem CPP nie jest aż tak straszny. A znajomość jak działa wskaźnik nigdy nikomu nie zaszkodziła.

Natomiast co do początków - jakikolwiek jest Autora topicu cel, to w miarę nauki może on się zmienić, także nie odrzucałbym tego C na wejście. Wiem po sobie i po kolegach - ja wstępnie chciałem działać w embedded, a teraz dłubię w Linuxie. Osobiście startowałem od Pascala, potem C, teraz C++ i Python i nie żałuję (tzw. międzyczasie był jeszcze Matlab i VBA). W drugą stronę to może być droga przez mękę. I powiedzmy sobie jeszcze jedną rzecz - Python to fajny język, można sobie wiele oskryptować i zasymulować ale na rynku pracy to - z tego przynajmniej co widzę po ogłoszeniach w Polszy - jedynie webdev, ew. dodatek do innych języków dla testerów.

A, i jeszcze jedno: na początek poleciłbym C zamiast C++, jeżeli ma to być low-level - standard jest czystszy i bardziej "przewidywalny". Wadą jest to, że nie można nauczyć się od początku jak działa mądry wskaźnik oraz obiektowość... no można sobie zasymulować co najwyżej ;). Coś za coś. @kaczus napisałem wcześniej "zasymulować", miałem na myśli "nagimnastykować się więcej żeby osiągnąć to samo", zresztą chyba Bjarne Stroustrup tak robił na początku ;) Jest to możliwe, ale niekoniecznie tak intuicyjne jak w C++.

No i równolegle dobry byłby też Linux: konsola, Makefile, gcc itd. I na dzień dobry żadne ubuntu tylko "the hard way" - Slackware albo Arch. No ale to taka bardziej rada sprofilowana pod kodzenie niskopoziomowe, pytanie do czego Autorowi potrzebne jest to programowanie.

0
spartanPAGE napisał(a):

Do pracy wszelakiej, gier, webdevu... wszystkiego. Jest to kompletny, funkcjonalny język, w dzisiejszych czasach należy do jednych z popularniejszych.

Bajki opowiadasz :-) Python jako język typowany dynamicznie jest w porównaniu z językami kompilowanymi, statycznie typowanymi koszmarnie powolny, więc co Ty chcesz w tym tworzyć? Szybkie gry wideo?

Python dość dobrze nadaje się do szybkiego tworzenia aplikacji (o niebo mniej kodu w porównaniu z C++), owszem jego zastosowanie to nie tylko web dev ale i aplikacje desktopowe (polecam BOA Constructor a ten bazuje na wxWidgets). Ale spróbuj jeszcze stworzyć coś wykonywalnego przy użyciu py2exe, gdzie musisz najpierw przygotować odpowiedni setup.py, co może nie być taką prostą sprawą. Bawiłeś się chociażby z NumPy i PyPlotLib?

Oczywiście że dla początkującego jest dość łatwy do nauczenia ale czy jest to powód żeby akurat zaczynać od niego? Do szybkich gier wideo to z tego co wiem raczej C++, niestety ten język to po prostu jakiś koszmar i nie chodzi tu wcale o wskaźniki. Bawiłeś się kiedyś z GCC i z tymi wszystkimi makefile itd? Próbowałem podpiąć QT 4.0 pod GCC i CodeBlocks i niestety były tylko problemy bo coś tam wyskakiwały jakieś komunikaty. Jak dla mnie C++ to syf i na 100% nie nadaje się do szybkiego tworzenia aplikacji a realizacja jest na 100% droższa w porównaniu z C# czy nawet JAVA.

0

Jak dla mnie C++ to syf i na 100% nie nadaje się do szybkiego tworzenia aplikacji a realizacja jest na 100% droższa w porównaniu z C# czy nawet JAVA.

True, z wyjątkiem tego, że to syf. Mam niesamowity sentyment do tego języka. Jak ja go nienawidziłem :) Ale później się pokochaliśmy...

Cóż... w C++ biznesowych aplikacji się raczej nie tworzy, bo i czasu szkoda na rzeczy, które gdzie indziej są już napisane. Po co wynajdywać koło od nowa. Nie opłaca się. Qt raczej tej sytuacji nie uratuje.

2

więc co Ty chcesz w tym tworzyć? Szybkie gry wideo?

Więc uważasz, że ten początkujący będzie chciał stworzyć drugiego Crysisa w tym Pythonie? Może jeszcze na autorskim silniku?

0

Z tego co się zorientowałem to właśnie ci początkujący robią jakieś gry, może nie jakieś wyścigówki ale np. kółko i krzyżyk to jest chyba typowe. Python choć ma mnóstwo możliwości nie jest do wszystkiego jakby na to patrzeć pod względem praktycznym. Robiłem kiedyś odczyt z SQLite jakieś kilka tys. rekordów i w porównaniu np. z Free Pascal (SQLDB) było bardzo cienko pod względem czasu oczekiwania na wynik.

Poza tym w tych wątkach to można mieć wrażenie że to są takie pytania czego się nauczyć żeby było albo łatwiej albo jakaś duża kasa a tak naprawdę chodzi o co innego. Celowanie w określony język to celowanie w określone technologie i określony segment na rynku. Trzeba sobie zdawać sprawę że tak jak samochód nie jest do przewozu większej liczby ludzi tylko autobus tak i tutaj będzie podobnie. Przerabiałem już różne języki programowania i technologie więc wiem o czym piszę.

0

@alagner

Wadą jest to, że nie można nauczyć się od początku jak działa mądry wskaźnik oraz obiektowość...

Namiastka obiektowości w C:

#include <stdio.h>

struct Dzialanie{
    double x;
    double y;
    double w;

    double (*dodawanie)(double x, double y);
};

double dodaj(double x, double y){
    return x+y;
}

int main(void)
{
    struct Dzialanie dz;
    dz.dodawanie = dodaj;
    dz.x = 3.14;
    dz.y = 4.28;
    dz.w = dz.dodawanie(dz.x,dz.y);
    printf("Wynik: %0.2f;\n",dz.w);
    return 0;
}


;)

0

Nie chodzi mi o pisanie gier typu Crysis czy inne potężne gry, dla mnie zrobienie gry gdzie sobie chodzi ludzik i bije potworka to już było coś mega i coś co by dało mi satysfakcję. Po tych wszystkich wypowiedziach mam już mętlik w głowie i sam już nie wiem od którego języka zacząć :x

0

Wybór języka nie ma większego znaczenia, w każdym nauczysz się programować - także nie zastanawiaj się, tylko wybierz pierwszy lepszy, potem i tak będziesz znał kilka. Od siebie polecam Pythona na start, po jakimś czasie pobaw się Javą.

0

A czy po nauce Pythona nie będę miał potem większych problemów z przeskoczeniem na Javę? ;)

0

Zrób tak jak powiedział @alagner. Pójdź na żywioł i zacznij od czystego C. To wbrew pozorom nie jest taki trudny język, a korzyści z jego znajomości są bardzo duże. Poznasz w jaki sposób alokowana jest pamięć w komputerze. Dowiesz się co to są wycieki pamięci, co to są wskaźniki itp... @alagner ma racje twierdząc, że w języka niskiego poziomu przeskoczyć do wysokiego łatwo ale odwrotnie to już będzie ciężko.

Prosty przykład: Znając C oraz C++ od razu połapiesz się o co chodzi z rozróżnieniem typów na wartościowe i referencyjne w takim C#. Przekonasz się, że podejście wskaźnikowe tak naprawdę nie umarło nawet w językach wysokiego poziomu. Tyle tylko, że sprząta tam po Tobie Garbage Collector i nie musisz robić tego samodzielnie. Sam przechodziłem od niskopoziomowych języków w górę i nie żałuję, a przecież nie musisz kończyć nauki na C... :)

2
shinter napisał(a):

Nie chodzi mi o pisanie gier typu Crysis czy inne potężne gry, dla mnie zrobienie gry gdzie sobie chodzi ludzik i bije potworka to już było coś mega i coś co by dało mi satysfakcję. Po tych wszystkich wypowiedziach mam już mętlik w głowie i sam już nie wiem od którego języka zacząć :x

To może lepiej napisz co Cię w ogóle jara i na co chcesz się nastawiać?

  1. Aplikacje konsolowe
  2. Aplikacje desktopowe
  3. Aplikacje mobilne
  4. Aplikacje web
  5. Biblioteki

Jeśli to by były aplikacje desktopowe, (Windows albo Linux) to możesz wybrać:

  1. Free Pascal i Lazarus, odpowiednik DELPHI, pod niego też z tego co wiem się pisze jakieś gry, aplikacje biznesowe czy też jakieś aplikacje multimedialne

http://wiki.freepascal.org/Projects_using_Lazarus

Jako że są różne widżety, więc Win32 ale również i GTK albo QT to masz sporo możliwości.

  1. C++, tu masz też sporo możliwości, możesz pisać tego typu aplikacje jak napisałem wyżej
  2. C# - to oznacza nie tylko .NET, bo to jest praktycznie Windows, jest też Mono które jest nie tylko pod Linux ale i pod Windows (GTK#)
  3. JAVA
  4. Python. Pod .NET masz też IronPython, więc pobierasz sobie np. SharpDevelop v.3.2+ i ćwiczysz.

Tak na podstawie moich dotychczasowych doświadczeń to właśnie .NET jest dość dobrym wyborem, masz sporo dostępnych bibliotek i to za darmo (GNU LGPL) i możesz coś tworzyć, nawet jakąś własną grę. Aplikacje biznesowe zresztą też.

Python (albo IronPython) jest dość prosty do nauki i z pewnością szybko to opanujesz. Jak się jednak nastawisz na C++, Free Pascal, JAVA to będzie po prostu dużo więcej rzeczy do opanowania.

0

Jednak po przemyśleniach na początek chciałbym stawić czoła Pythonowi, lecz czy mógłby mi ktoś polecić jakiś kurs/książkę?

0

Na rozgrzewkę interaktywny kurs: http://www.learnpython.org/pl/
Nauka właściwa: learn python the hard way

0

Widzę, że autor się już zdecydował, ale mimo wszystko ja też mogę coś jeszcze dorzucić od siebie. Zawsze to jakaś rada (mam nadzieję), sam miałem takie dylematy.
Osobiście na pierwszy język polecam C. Dlaczego? Może dlatego, że jest na tyle łatwy w pisaniu początkowych programów i nauce składni oraz dobrze pokazuje o co w tym wszystkim tak naprawdę chodzi, że idzie to szybko i przyjemnie, a zarazem jest już na tyle trudniejszy, że łatwo z niego się przesiąść na C++ i nie ma z tym większych problemów. No i się przydaje jeżeli ktoś chciałby się pobawić w rzeczy z zakresu elektroniki/elektrotechniki, chociażby z ciekawości czy hobbystycznie.

*C -> C++ -> C#/JAVA * - Wydaje mi się, że to najprostsza i najbardziej optymalna droga. Z C na C++ dosyć szybko się wskakuje, tak samo z C++ na C#/Javę.

Sam dopiero się uczę, ale dużo osób i uczelni też obiera właśnie ten schemat.
Pozdrawiam.

0
Wizzie napisał(a):

więc co Ty chcesz w tym tworzyć? Szybkie gry wideo?

Więc uważasz, że ten początkujący będzie chciał stworzyć drugiego Crysisa w tym Pythonie? Może jeszcze na autorskim silniku?

W pythonie moze nie ale w Lua jak najbardziej...

0

Piotrze, lua jest językiem skryptowym, lecz sam silnik (pożalsiępanieboże) crysisa jest napisany w C++sie.

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