Chcąc zacząć przy­godę z branżą IT pier­wszą decyzją przed jaką sta­niesz będzie wybór języ­ka pro­gramowa­nia do nau­ki. Ten blog poświę­cony jest wprawdzie Javie, ale bard­zo ważnym jest, aby rozu­mieć różnice i znać alter­naty­wy — może okazać się, że Java nie jest tym, co najlepiej pasu­je w Twoim przy­pad­ku. Ta strona ma na celu krót­ki opis najpop­u­larniejszych języków / stack­ów (stack to język pro­gramowa­nia oraz biblioteka/biblioteki lub tech­nolo­gie uży­wane razem — w niek­tórych przy­pad­kach mówimy czys­to o języku pro­gramowa­nia, a cza­sem to konkret­ny zestaw tech­nologii jest pop­u­larny i warto się go uczyć razem).

Oczy­wiś­cie poniżej nie zostały wymienione wszys­tkie języ­ki, a jedynie kil­ka które w mojej subiek­ty­wnej oce­nie są obec­nie pop­u­larne i warto rozważyć ich naukę. Ostat­ni akapit pod­sumowu­je, dlaczego aku­rat Java została wybrana jako język omaw­iany na tym blogu.

Podział języków programowania

Przede wszys­tkim języ­ki pro­gramowa­nia dzielą się na dwie grupy — skryp­towe oraz kompilowane.

Pier­wsza gru­pa to języ­ki skryp­towe. Pro­gramy napisane w ten sposób to właś­ci­wie pli­ki tek­stowe (i tak, moż­na je edy­tować nawet w notat­niku), uruchamia się je za pomocą dodatkowego pro­gra­mu i w momen­cie uru­chomienia tekst (kod) jest inter­pre­towany (zamieni­any na postać zrozu­mi­ałą dla kom­put­era i wykony­wany). Zaletą tego pode­jś­cia jest to, że może­my szy­bko zobaczyć efek­ty zmi­an (po zmi­an­ie wystar­czy odświeżyć stronę czy uru­chomić ponown­ie i od razu widz­imy zmi­any). Minusem jest, że błędy o błedach w kodzie (np. w skład­ni) dowiemy się dopiero w momen­cie uruchami­a­nia tego konkret­nego frag­men­tu kodu (najczęś­ciej), co utrud­nia szukanie błędów. Drugim minusem, który jed­nak nie będzie prob­le­mem w więk­szoś­ci przy­pad­ków, jest mniejsza wyda­jność takich aplikacji. W ogól­nym przy­pad­ku jed­nak w językach skryp­towych pisze się szy­b­ciej, ale lep­iej sprawdza­ją się w prost­szych aplikacjach/projektach.

Dru­ga gru­pa to języ­ki kom­pi­lowane, do tej grupy należy m.in. Java. Różnią się one tym, że zan­im uru­chomimy nasz kod, musimy go skom­pi­lować, tzn. przetłu­maczyć na język zrozu­mi­ały dla kom­put­era. W przy­pad­ku języków skryp­towych pro­ces ten odby­wa się w momen­cie uruchami­a­nia, za każdym razem jak pro­gram jest uruchami­any. W językach kom­pi­lowanych pro­ces ten jest wykony­wany tylko raz, jeszcze przed uru­chomie­niem pro­gra­mu. Powodu­je to, że wprowad­zone przez nas zmi­any musimy najpierw skom­pi­lować (najczęś­ciej z całym pro­gramem) a następ­nie uru­chomić pro­gram jeszcze raz. Wyma­ga to trochę innego pode­jś­cia do pisa­nia pro­gramów (meto­da prób i błedów do rozwiąza­nia prob­lemów nie sprawdzi się w więk­szych pro­jek­tach). Z drugiej strony pro­gramy napisane z uży­ciem języków kom­pi­lowanych dzi­ała­ją szy­b­ciej, a błędy w skład­ni są wykry­wane jeszcze przed uru­chomie­niem pro­gra­mu (na etapie kom­pi­lacji). Zna­jo­mość języków z tej grupy daje też więk­sze możli­woś­ci na rynku pra­cy, ponieważ więk­szość ofert z dużych firm doty­czy właśnie tej grupy.

W tym miejs­cu należy pod­kreślić, że jed­na gru­pa nie jest lep­sza od drugiej. Są inne, nada­ją się do innych rzeczy i rozwi­ja­jąc się w pro­gramowa­niu czy kiedyś może zaczy­na­jąc włas­ny start-up należy rozważyć wady i zale­ty obu, nie odrzu­ca­jąc żad­nego z góry. Podsumowując:

Języ­ki skryptowe Języ­ki kompilowane
Zale­ty Wady Zale­ty Wady
  • w ogól­nym przy­pad­ku szy­b­ciej pisze się proste aplikacje
  • najczęś­ciej mniej ścisła kon­wenc­ja, skład­nia więcej ‘wybacza’
  • pozwala na łatwe popraw­ian­ie błędów metodą prób i błedów, co jest pomoc­ne przy nauce
  • duże pro­jek­ty są trudne w utrzy­ma­niu i rozwi­ja­niu w przyszłości
  • mniej wyda­jny, co stanowi prob­lem jak pro­jekt zysku­je popularność
  • języ­ki najczęś­ciej pozwala­ja na mieszanie kodu z ele­men­ta­mi widoków co częs­to prowadzi do nieczytel­nego kodu
  • wyda­jne, szy­bkie, łatwiej skalowalne (w przyszłości)
  • dobrze napisany kod jest prze­ważnie łatwiejszy w utrzy­ma­niu i rozwi­ja­niu w przyszłości
  • sam język wspiera czyst­szy kod i lep­szą sep­a­rac­je kodu od widoków
  • napisa­nia aplikacji wyma­ga prze­waznie więcej pra­cy niż z wyko­rzys­taniem języków skryptowych
  • przed uru­chomie­niem wyma­ga kom­pi­lacji, co w dużych pro­jek­tach wydłuża pro­ces zna­jdy­wa­nia i popraw­ia­nia błedów

Języki skryptowe

PHP

PHP to jeden z najpop­u­larniejszych języków skryp­towych, także jeden z pier­wszych powszech­nie uży­wanych. Pow­stał jako rozsz­erze­nie pop­u­larnego kiedys języ­ka skryp­towego Perl z myślą o aplikac­jach inter­ne­towych. Nadal jest z nimi ściśle związany.

Język ten jest bard­zo prosty do nau­ki pod­staw, jed­nak przez bard­zo dynam­iczny rozwój i wiele zmi­an wprowadzanych bez głęb­szej reflek­sji, niek­tóre jego ele­men­ty zda­ją się chao­ty­czne, kon­wenc­je nazewnict­wa czy argu­men­tów nie wszędzie są zachowane i bywa to uciążli­we. Z drugiej strony bard­zo łat­wo o host­ing aplikacji napisanych w PHP (praw­ie każdy ser­w­er, także np na home.pl czy nazwa.pl obsługu­je ten język).

Język bard­zo pop­u­larny w Internecie, np. jako fora inter­ne­towe, por­tale, blo­gi itp

Python / Django

Język zdoby­wa­ją­cy na pop­u­larnoś­ci, w szczegól­noś­ci w połacze­niu z frame­workiem Djan­go (uży­wanym do aplikacji webowych).

Ogrom­ną zaletą tego języ­ka jest jego pros­to­ta, praw­dopodob­nie jest to najłatwiejszy do nauczenia się język. Pewnym ogranicze­niem jest host­ing aplikacji w Pythonie (czyli jes­li chce­my udostęp­nić nasza aplikację światu). Nie ma też zbyt wielu (w porów­na­niu do innych tech­nologii) ofert pra­cy dla pro­gramistów tej technologii.

Język ten jest uży­wany głównie w start-upach oraz małych firmach.

Ruby on Rails

Kole­jny język/framework zdoby­wa­ją­cy pop­u­larność. Wyróżnikiem jest sam język Ruby, który pow­stał poprzez próbę połaczenia najlep­szych cech innych języków. Przewa­ga nad np. Pythonem sprowadza się głównie do pref­er­encji oso­bistych lub specy­ficznych funkcji, niem­niej jest to najm­niej pop­u­larny język jeśli chodzi o ofer­ty pracy.

Tech­nolo­gia ta jest uży­wana głównie w start-upach oraz przez pasjonatów.

Node.JS

Tech­nolo­gia o której ostat­nio robi się głośno, cechą unikalną jest inne pode­jś­cie do pro­gramowa­nia aplikacji webowych, tzw. pro­gramowanie zdarzeniowe. Ma ono swo­je zale­ty (dla zain­tere­sowanych i nieco obez­nanych w tema­cie pole­cam tą dyskusję), jest też możli­we do real­iza­cji w innych językach pro­gramowa­nia (choć głównie kom­pi­lowanych), ale wyma­ga od pro­gramisty dość dużej wiedzy aby w pełni rozu­mieć co się dzieje w aplikacji. Raczej nie pole­cany dla początku­ją­cych, ale mimo tego warty uwagi.

Tech­nolo­gia ta obec­nie jest najczęś­ciej wybier­ana przez star­tupy lub w dużych fir­ma­ch do pro­jek­tów ekspery­men­tal­nych, nie kluczowych.

Języki kompilowane

Java

Java jest językiem rozwi­janym obec­nie przez fir­mę Ora­cle (dawniej Sun Microsys­tems). Jej głównym założe­niem jest ‘write once — run every­where’ (jest to nieco utopia, ale mniej więcej dzi­ała). To, co warto wiedzieć to że język ten jest rozwi­jany głównie przez społeczność w ramach tzw. Java Com­mu­ni­ty Process (spec­jal­iś­ci z różnych firm demokraty­cznie decy­du­ją o stan­dar­d­ach i kierunku roz­wo­ju), duży nacisk położony jest na zgod­ność ze stan­dar­d­a­mi i dokumenację.

Java stosowana jest do pisa­nia wszelkiego rodza­ju aplikacji, od małych po ogromne, dzi­ała w każdej z tych ról. Jest prefer­owanym językiem w kor­po­rac­jach i dużych fir­ma­ch ponieważ aplikac­je moż­na uruchami­ać zarówno na sys­temach Win­dows jak i Lin­ux, dzię­ki czemu nie wyma­ga dodatkowych inwest­y­cji w infrastrukturę.

C# ( .NET )

Jest to odpowiedź firmy Microsoft na język Java. Założe­nia są zbliżone, choć rozwój języ­ka jest sterowany przez fir­mę Microsoft, nie zawsze jest on zgod­ny z przyję­ty­mi stan­dar­d­a­mi. Najwięk­szym minusem jest konieczność uruchami­a­nia na plat­formie Win­dows, co częs­to wiąże się z więk­szy­mi kosz­ta­mi utrzy­ma­nia aplikacji. Niem­niej ma on wspar­cie firmy Microsoft, przez co część firm decy­du­je się na to rozwiązanie.

Język uży­wany głównie w dużych fir­ma­ch, które zde­cy­dowały się oprzeć wyłacznie o rozwiąza­nia firmy Microsoft. Język ten jest mniej pop­u­larny niż Java, jed­nak jego pop­u­larność także powin­na utrzymy­wać się na sta­bil­nym poziomie.

Podsumowując — dlaczego Java?

Na tym blogu wybral­iśmy Javę z kilku powodów. Przede wszys­tkim jest to język najpop­u­larniejszy pod kątem ofert pra­cy. Jest on także dojrza­ły, rozwi­jany od wielu lat i posi­ada­ją­cy świet­ną doku­men­tację i sze­roką społeczność użytkown­ików. W razie prob­lemów bard­zo łat­wo uzyskać pomoc np. w ser­wisach stackoverflow.com czy na forach inter­ne­towych. Będzie on praw­dopodob­nie nadal pop­u­larny przez długie lata wśród więk­szych firm, w prze­ci­wieńst­wie do języków/technologii których pop­u­larność wyni­ka częś­ciowo z ‘mody’ i trendów i ciężko przewidzieć ich pop­u­larność w per­spek­ty­wie kilku/kilkunastu lat.

Niemałe znacze­nie ma też fakt, że jest to język który wyko­rzys­tu­ję na co dzień w swo­jej pra­cy zawodowej od praw­ie 7 lat i o którym posi­adam najwięk­szą wiedzę — pozwala mi to lep­iej tłu­maczyć pewne ele­men­ty i w razie potrze­by odpowiadać na pyta­nia, a także wtrą­cać prak­ty­czne porady i wskazów­ki ‘z życia wzięte’.

Nie znaczy to jed­nak że jest to najlep­szy język i nie warto uczyć się innych — powtórzę to, bo jest to bard­zo ważne, że każdy powinien wybrać tech­nologię która najlepiej pasu­je do tego, jaką ścieżkę kari­ery chce obrać lub co mu się najlepiej podo­ba. Ten blog poświę­cony jest Javie i nauce pro­gramowa­nia właśnie w tym języku z powodów wymienionych wyżej. W przy­pad­ku innych języków mogę pomóc, o ile moja wiedza na to poz­woli lub skierować w inne miejs­ca gdzie moż­na znaleźć wartoś­ciowe infor­ma­c­je i kursy na ten temat.