Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Dlaczego Java?

Wielu z was być może zastanawia się jaki język wybrać, czy Java będzie dobrym wyborem, a może jednak C++, lub Pascal. Szczerze powiem, że warto spróbować każdego z nich, bo to zawsze nowe doświadczenie i wiedza, jednak docelowo większość programistów wybiera jeden język jako specjalizację a inne języki stosuje dodatkowo, jeśli jest to potrzebne w danym projekcie.

Nie mam zamiaru przekonywać Cię do programowania w Javie, ponieważ to Ty musisz podjąć decyzję, ja mogę Ci w tym jedynie pomóc.

1. Język obiektowy

Przede wszystkim Java jest językiem w pełni obiektowym (niektórzy się przyczepią, że z definicji nie powinno tutaj być nawet typów prostych, ale po to są typy osłonowe). Dla kogoś programującego wcześniej w gimnazjum, czy liceum wyłącznie strukturalnie w standardowym Pascalu może być ciężej przerzucić się na język obiektowy, niż osobie zaczynającej od zera. Aby najłatwiej powiedzieć na czym polega idea programowania obiektowego podam przykład:

4 osobowa rodzina jedzie samochodem (ojciec, matka, oraz dwoje dzieci). Możemy tu wyróżnić przykładowo 5 obiektów, z czego każdy zawiera jakieś informacje. Obiektem głównym będzie tutaj samochód, każdy członek rodziny ma także jakieś informacje: kolor włosów, oczu itp. Dodatkowo dzieci posiadają niektóre cechy rodziców, które po nich odziedziczyli wraz z genami. Język Java także pozwala na takie dziedziczenie, przekonamy się o tym w dalszych lekcjach.

Dla kontr przykładu w Pascalu wyglądałoby to mniej więcej tak, że samochodem była by klasa zawierająca wszystkie informacje o rodzinie w jednym miejscu, lub co najwyżej oddzielnych funkcjach.

2. Niezależność od platformy

Możemy spotkać to określenie jako plus w wielu książkach. Moim zdaniem nieco traci jednak na wartości, ponieważ oferuje to wiele języków uruchamianych na wirtualnych maszynach. Moim zdaniem fajne jest to, że umiejąc programować w języku Java możemy później napisać zarówno program uruchamiany na naszym PC, a równie dobrze małą aplikację na telefon z systemem android jak i aplikację działającą po stronie serwera (np. coś w stylu allegro). Jeśli będziemy chcieli się rozwijać to w przyszłości możemy także uczestniczyć w tworzeniu wielkich korporacyjnych aplikacji działających po stronie serwera w technologii Java EE.

3. Prostota?

Czy język Java jest prosty? Ciężko jest odpowiedzieć na to pytanie jednoznacznie, ale moim zdaniem zdecydowanie tak. Możecie zapytać, a dlaczego? Podam przykład.

W Javie, aby wydrukować linię tekstu należy napisać:

System.out.print("linia tekstu");

a w C++ byłoby to:

cout<<"linia tekstu"

No i widzimy tutaj, że mamy do wyboru głównie pomiędzy:

  • krótki zapis w C++
  • zrozumiały zapis w Javie

Nie mam zamiaru wskazywać, które rozwiązanie jest lepsze, podam jedynie swoje zdanie. Zapis w Javie jest przede wszystkim dużo czytelniejszy, widzimy tutaj hierarchię wykorzystywanych klas. Korzystamy z biblioteki System, strumienia wyjścia i funkcji print w nawiasie podając napis do wyświetlenia. W C++ na pierwszy rzut oka ciężko powiedzieć, co się tam właściwie dzieje, jeśli ktoś nie miał z tym styczności.

Kontynuując, krótszy zapis w C++ jest kuszący, ale trzeba sobie zdać sprawę z tego, że w środowisku programistycznym typu eclipse, czy intellij idea, wystarczy wpisać kilka pierwszych liter, a reszta zostanie uzupełniona za nas.

4. Czy Java jest powolna.

Często w internecie krążą opinie, że Java jest wolniejsza od żółwia. Programiści innych języków(a właściwie zazwyczaj gimnazjaliści), lub po prostu ludzie mający ironiczne poczucie humoru, prześcigają się w wymyślaniu zabawnych obrazków, czy dowcipów na ten temat. Niestety, gdy zadasz im pytanie, jakich aplikacji w Javie używają, że mają takie zdanie praktycznie nigdy nie odpowiadają. Dlaczego? Ponieważ to stał się mit. Obecnie  w Polsce coraz więcej ludzi używa oprogramowania Open Office - w wielu aspektach wykorzystującego Javę. Podobnie edytor kodu JEdit, który cieszy się spora popularnością, czy choćby środowisko Eclipse.

Oczywiście wykonywanie byte codu przez maszynę wirtualną musi być minimalnie wolniejsze, ale śmiem twierdzić, że przy typowych aplikacjach użytkowych i dzisiejszym rozwoju technologii nie ma to zauważalnego znaczenia. Co więcej dzięki lepszej optymalizacji bibliotek niż w niektórych językach, niektóre fragmenty kodu mogą wykonywać się szybciej. Dodatkowo istnieją mechanizmy takie jak JIT (just in time compilation), czy HotSpot, które powodują, że często wykonywane partie kodu są kompilowane do kodu maszynowego.

5. Java jest "duża".

Tutaj krótki argument, język ten jest na tyle rozpowszechniony i stosowany na tak wielką skalę, że jest ciągle poprawiany i udoskonalany. Posiada ogromną bazę bibliotek standardowych, więc zaoszczędza masę czasu pisania własnych klas, które są w dodatku świetnie zoptymalizowane.

6. Podobieństwo do C#

Język C# przejął dużo, można powiedzieć wszystkie najlepsze cechy Javy. Dzięki temu późniejsza jego nauka jest dosyć prosta. Składnia poza wzorcami nazewnictwa niewiele się różni, podobnie jak nazwy klas. C# mocno zyskuje na popularności, więc warto tez się go kiedyś nauczyć, a znając wcześniej Javę, będzie naprawdę łatwo.

<- Poprzednia lekcjaNastępna Lekcja ->

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku
Bartekko

na razie bardzo fajnie, zobaczymy co dalej.

Michał

W punkcie 5 nie dopisałeś wyrazu ''świetnie'' do końca, a tak całkiem ładny artykuł ;p

125424

"Szczerze nie potrafię odpowiedzieć na to pytanie jednoznacznie. Moim zdaniem zdecydowanie tak."
Czy nie uważasz iż troche to dziwne??

Robert

Artykuł bardzo ciekawy, lecz polecenia w C++ kończymy średnikiem ;) Pozdro

DKnoto

Nie widziałem gorszego języka, można go streścić w kilku typowych ciągach słów:
1) wolno, wolniej, java,
2) rozwlekle, rozwleklej, java,
3) zasobożernie, zasobożerniej, java,
...

Kamil

Czy uczeń który ma spore problemy z matematyką poradzi sobie z programowaniem?

Slawek

Nie ma zależności pomiędzy matematyką, a przyswajaniem wiedzy programistycznej. Problem pojawia się w konkretnych sytuacjach i problemach, gdy po prostu musiałbyś wykorzystać matematykę w swoim programie - grafika, programy liczące coś bardziej zaawansowanego, symulacje itp. gdzie wszystko tak naprawdę zaczyna się na policzeniu czegoś na kartce papieru.

mikol_reach

super ale czy wiedza czwarto klasisty wystarczy do tworzenia moduw i gier

Spiral

Wystarczy, chyba że nie wiesz ile to 2 plus 2.

Saret

Moim zdaniem, to lepiej poczekać np. do gimnazjum czy szóstej klasy, by mieć jakieś większe podstawy do nauki Javy i tworzenia modÓw.

enedil

Najpierw naucz się ortografii

Kamil

czyli wiedza podstawowa i gimnazjalna wystarczy do między innymi tworzeniem gier?

Daniel

Tutaj porównujesz instrukcje Javy:
System.out.println();
do cout z C++. Tak jak mówisz, co do zrozumienia kodu może masz i rację ale to nie jest argument. Czy łatwiej Ci zrozumieć:
import static java.lang.Math.*;
czy proste:
#include ?

Ja zwolennikiem Javy nie jestem, znam C++, wiem czym się różni od Javy, ale nie mówię, że jest lepsze czy szybsze. Uczę się Javy bo tego wymaga ode mnie rynek pracy i nie płaczę. Komentarze w stylu Java wolna, Java długa możecie schować w swoje poważanie. Czy ktokolwiek z was, takich jak DKnoto, potrafi wytłumaczyć dlaczego Java zła? Nie ponieważ gdyby znał się na programowaniu, a co za tym idzie architekturą systemów komputerowych, na tym jak kod "rozumie" procesor by o tym nie pisał, ani tego kursu by nie czytał.
Jeżeli trafiłeś tu bo jesteś pewien, że chcesz się uczyć Javy od podstaw, to świetny wybór. Polecam czytajcie bo na początek warto!

gregorry

argument 1 "język obiektowy" jest w 200% beznadziejny. jest jak pytanie "która godzina była przed chwilą?" czyli zrozumiałe tylko i wyłącznie dla autora i jego kopii.
dlaczego każdy kto tłumaczy różnice pomiędzy obiektowym a strukturalnym używa tych samych bezsensownych przykładów? przy porównywaniu różnych należy przedstawić konkretne cechy (wady i zalety) a nie "analogie" które można w milion różnych sposobów rozumieć.

Arkadix

Czepiają się i czepiają... Ja nic nie wiem o javie dlatego tu jestem i nie obchodzą mnie minimalne rozbieżności faktów. Z każdym zdaniem coraz bardziej chcę przejść do konkretnej nauki. Miałem nadzieję że trafię na taką stronę jak ta. Brawo dla autora i dziękuję w imieniu wszystkich zadowolonych internautów :)

m4tx

Programiści innych języków(a właściwie zazwyczaj gimnazjaliści)
Dlaczego niby gimnazjaliści? To może być osoba w dosłownie każdym wieku. Sam mam 14 lat i jestem średnio zaawansowanym programistą Javy. I wcale nie uważam, że Java jest wolna. Nie mówię, że to nie mogą być osoby w moim wieku (sam znam jednego takiego trolla...), ale jednak niekoniecznie muszą.
To ma nawet swoją nazwę. "Dyskryminacja ze względu na wiek".
m4tx

Oj, fail. Zapomniałem tag blockquote zamknąć :/

Chasil

No to jazda :)

Chicken4PL

Fajny kurs. Mam tylko uwagę, że nie pisze się "4 osobowy", tylko "4-osobowy" (pierwszy punkt).

javax

Czy ma pan może wplanach napisać kiedyś kurs mono lub C#? Czy ten kurs javy bedzie w przyszłości poprawiony i napisany pod Jave 8 która niedługo ma wyjść?

lolo

Tu się głownie znajdują podstawy Javy a te raczej się zbytnio nie zmieniają, więc raczej kursu nie trzeba zmieniać pod Jave 8 gdy wyjdzie. Oczywiście nie przeczę, że kurs pasowało by przejrzeć i miejscami poprawić.
A C# jest mocno związany z windowsem. A mono zbyt dobrze też się nie ma.

ekicam2

cout<<"linia tekstu"
W C++ wyrzuciłoby soczystego errora bez
usingnamespace std;
więc jeżeli nie użyliśmy przestrzeni nazw linijka będzie wyglądać następująco:
std::cout << "linia tekstu"; też pięknie widać hierarchie klas

Pajączek

Czy łatwiej Ci zrozumieć:
import static java.lang.Math.*;
czy proste:
#include ?
Ja zwolennikiem Javy nie jestem, znam C++, wiem czym się różni od Javy,


A czy to aby na pewno są tożsame instrukcje (Twoim zdaniem)?? Co coś mi się wydaje że pomyliłeś "#include" z "using namespace" ;)
Aleksanderwiel

Nie rozumiem ludzi, którzy przypisują Javie powolność, aby się zakryć przed tym, że jej czegoś zazdroszczą.
Konkretnie mam na myśli mojego kolegę z klasy, który zarzuca Javie, właśnie - powolność - lecz po jego mimice i zachowaniu widać, że nie jest do końca przekonany o atutach C++ i zwala winę na Javę. Chodź tutaj zostało trafnie wyjaśnione, że po internecie "krążą takie plotki i propagandy". On też się naczytał głupot i teraz się tym pyszni, a w tym C++ zna o wiele mniej kodu i funkcji niż ja zdążyłem poznać i przetestować.
Nie wiem, jak to trafnie określić :/

bartop

Java faktycznie JEST wolniejsza od c++, który z kolei jest wolniejszy od c. Szanuję ludzkie opinie, ale twierdzenie, że JAVA nie jest wolniejsza od c++, to jak twierdzenie, że pascal jest szybszy od asemblera. A wolniejsza jest około 10 razy, więc to dość dużo (informacja z uczelni), choćby z powodu garbage collectora. Nie da się jednak ukryć, że jej przenośność oraz obsługa pamięci jest jej wielkim atutem, więc plusy raczej równoważą minusy.

Lolo

Oczywiście, że języki interpretowane takie jak java są wolniejsze od języków kompilowanych do kodu natywnego. Oczywistym jest również, że program napisany w pascalu może być szybszy od programu napisanego w asemblerze, tak samo program napisany w Javie może być szybszy od tego napisanego w C/C++. Zwłaszcza gdy zacznie się wykorzystywać rzeczy które nie są wspierane natywnie w C a w Javie już tak np. operacje na kolekcjach.
Co do kwestii o ile java jest wolniejsza od C/C++ to nie do końca bym wierzył bezgranicznie profesorkom z uczelni w tej kwestii. Często ich wiedza opiera się tylko na teorii którą wyczytali w jakiś książkach. A jak wiadomo wiele książek z dziedziny IT już w momencie wyjścia z drukarni nie jest najświeższa. A zwłaszcza, że nawet obecnie większość porównań jakie można znaleźć wiele dotyczy javy 1.5 a obecnie mamy już 1.8. No chyba, że przedstawił wam przykład jakiegoś złożonego algorytmu napisanego w C/C++ i Javie i pokazał czas ich wykonywania.

Sławek Ludwiczak

Radzę poczytać o kompilatorach Just in time, optymalizacji kodu w trakcie wykonania, kompilowania przez maszynę wirtualną kodu bezpośrednio do kodu maszynowego, innych implementacjach maszyny wirtualnej niż domyślna, bo to już nie rok 1995, kiedy mówiło się o Javie, że jest wolna.
Chętnie dowiem się też na jakiej uczelni "uczą" o tym, że Java jest 10x wolniejsza od C++, bo to bardzo ciekawe stwierdzenie.
W wolnej chwili polecam lekturę choćby wikipedii jako punkt wyjścia http://en.wikipedia.org/wiki/Java_performance
Pozdrawiam i powodzenia!