Witajcie,
Od pewnego czasu zastanawiam się, czy nie zainwestować w naukę czegoś innego, niż Java, a co dobrze się zapowiada. Rozglądam się już wiele miesięcy, obserwuję co się dzieje i analizuję za i przeciw. Wiadomo, programista może mieć pewne preferencje. Moją jest oczywiście Java, którą stosuję wszędzie gdzie i kiedy się da, czyli wszędzie, jeśli tylko producent sprzętu/platformy daje taką możliwość.
Z mojego doświadczenia wynika, że producentem, który nie daje takiej możliwości, będzie w większości przypadków Microsoft. Jest to tym ciekawsze, że od kiedy Oracle przejął firmę Sun, Microsoft prezentuje się jako "wielki przyjaciel" Suna i Javy, którą rzekomo wspiera od momentu zakończenia niesnasek między obiema firmami (tj. 2004). Co do polityki biznesowej, to zamiary Ballmera są wyraźne jak na dłoni, podobnie zresztą jak wahania to w jedną to w drugą stronę Microsoftu. Jest oczywiste, że pomimo agresywnej promocji, działania na wielu torach jednocześnie i - co tu dużo nie mówić - bardzo dobrych rozwiązaniach technologicznych w wielu przypadkach, Microsoft nadal ewidentnie przegrywa z Google - bo o tą walkę chodzi ostatnio przede wszystkim. Zaryzykowałbym stwierdzenie, że miliony poszły w błoto.
Wracając do wyboru języka, ma on bardzo dużo wspólnego z polityką. A ta z kolei z tym, co się dzieje na rynku. Ostatecznie, jak pokazuje praktyka (np. MP3 vs lepsze formaty), ludzie są leniwi i wybierają niekoniecznie najlepsze rozwiązania; zresztą "najlepsze" można definiować bardzo, bardzo różnie.
Moje wnioski są następujące.
C# + .NET jest uznawany za świetną platformę, a język C#, po początkowym sceptycyzmie (np. dotyczącym nadmiernej obiektowości) został uznany za narzędzie - wespół z .NET - pozwalające w szybki i niskim nakładem zasobów uzyskiwać rezultaty, których brakuje w innych językach. Można powiedzieć, że ideał. Prawie... Nie wiem jak ze wsparciem bibliotek, jednak jest jeden duży minus tej platformy: poza Microsoftem nie jest właściwie niemal w ogóle wspierana, podczas gdy inne rozwiązania to albo open source albo są wspierane przez wiele organizacji non-profit lub firm. To oznacza, że bez względu na to, jak .NET będzie super, zawsze będzie ryzykownym rozwiązaniem, a Microsoft w ostatnim czasie ma coraz więcej problemów na różnych polach, co dodatkowo budzi wątpliwości przy decydowaniu się na tak "hermetyczne" rozwiązanie.
PHP jest dobrym, darmowym rozwiązaniem ze świetnym serwerem Apache. Ma wiele dobrych bibliotek dodatkowych, dających świetną funkcjonalność. Jest szybki w użyciu, przynajmniej przy małych projektach. Ma świetne wsparcie hostingowe, które w dodatku jest tanie.
Minusy: w praktyce jest wykorzystywany wyłącznie do www. Jest językiem "starej daty" jeśli chodzi o rozwiązania i ewidentnie cierpi na syndrom "przyklejonej obiektowości" jak C. Przy bardziej wymagających i złożonych projektach wychodzi trudność w utrzymaniu i "opiekowaniu" się kodem. Z tych względów wydaje mi się, że PHP, mimo że nadal bardzo popularny, powoli oddaje pola innym językom. Można rzec, że PHP jest nadal na pierwszym miejscu, jednak jego szczytowy okres już należy do przeszłości.
Python ma wielu entuzjastów. Jest prosty w użyciu i pozwala wiele osiągnąć niższym kosztem. Ale wsparcie i ilość bibliotek w porównaniu do PHP czy Javy jest znacznie gorsza. A to w praktyce niestety nie wróży mu zbyt dobrze. Python istnieje długo na rynku, zdobył wielu zwolenników, a mimo to nie rozwinął się aż tak bardzo, choć ostatnio przeżywa swój wzlot.
Ruby (a dokładniej - Ruby on Rails) jest prawdopodobnie największym konkurentem Pythona i przyznaję, że ciągle bacznie obserwuję jego rozwój. Bo na razie to, o czym możemy mówić w jego przypadku, to rzeczywiście dynamiczny rozwój, który być może zaowocuje dużą ilością bibliotek i silnym wsparcie, być może okaże się tymczasową modą. Jakkolwiek będzie, zaryzykuję stwierdzenie, że w najlepszym przypadku może zdetronizować PHP, bo na razie nie zapowiada się na to, by miał w praktyce być używany do innych zastosowań niż www (choć nigdy nie wiadomo).
C/C++ - jest jasne, że ten język praktycznie nie istnieje w nowoczesnym programowaniu www, czyli tym, które w ostatnich latach zaczęło dominować. Wystarczy spojrzeć na projekty, które tworzy się: albo są to aplikacje sieciowe przez HTTP, albo bardziej "hardcorowe" do obsługi pojedynczych urządzeń, jak systemy wbudowane czy aplikacje na specyficzne urządzenia, z których "najmniej specyficzne" są chyba telefony.
Myślę, że najważniejsze na rynku wymieniłem. Jak widać, właściwie wszystkie z nich są w jakiś sposób związane z programowaniem usług internetowych/intranetowych, odstaje tu tylko nieco C/C++, bo się nie przyjął w tej roli. Teraz chciałbym obiektywnym okiem rzucić na pozycję Javy, od której już od dobrych kilku lat mówi się, że być może jej pozycja zostanie zachwiana. Czy tak faktycznie jest
? Bez względu na preferencje, lepiej znać smutną prawdę, niż łudzić się, że jest inaczej - to moja dewiza.
Java nie jest nowym językiem, jeśli liczyć od daty upowszechnienia. Właściwie, to z pośród powyższych, tylko C/C++ jest starszy - rozpatrując pod tym kątem. Na szczęście twórcy Javy od razu szczęśliwie określili dobry kierunek i pomimo pewnych zaszłości z C++, które są czasami wymieniane jako wady, nie spoczęli na laurach i nowe wersje Javy może już nie tyle wyznaczają trendy, co obecnie gonią konkurencję. Właściwie to bardzo dobrze, bo przez to zyskuje ona na stabilności, która jest jedną z jej największych zalet.
Microsoft zbadał co w Javie jest plusem, a co powoduje problemy, i na tej bazie osiągnął sukces. Skoro tak, to teraz deweloperzy pracujący dla Suna mogą robić dokładnie to samo (i to robią): patrzą, co na rynku się sprawdza w innych językach, i włączają to do Javy. Ponadto robią tak również inni, dzięki czemu Java ma obecnie prawdopodobnie największą ilość dodatkowych bibliotek i rozwiązań - niektórych lepszych, niektórych mniej - ale zawsze. Znalazły się także odpowiedzi na rozwiązania znane z Ruby'ego - nie wiem, jak się sprawdzają w praktyce, bo nie testowałem tego, jednak faktem jest, że nie trzeba angażować Ruby on Rails, by skorzystać z jego zalet (przynajmniej teoretycznie).
Minusy Javy to wspomniane zaszłości (mówi się, że C# został lepiej zaprojektowany) + czasami duże nakłady pracy by uzyskać pewne efekty. Rozwiązaniami proponowanymi przez zwolenników Javy są kolejne frameworki, biblioteki, rozwiązania, czy jak to tam sobie oni nazywają, ale nie zmienia to faktu, że każde nowe rozwiązanie wymaga dodatkowych nakładów. I właściwie słusznie: ile można mnożyć tych nakładek na Javę? Nie lepiej zrobić coś raz, a porządnie?
Nie licząc PHP, Java dzieli jeszcze inny problem z pozostałymi językami: hosting, zwłaszcza w Polsce, to ciężka sprawa. Co więcej, nie ma w Javie takiego standardu, jak w PHP: jest Apache i właściwie z niczego innego się nie korzysta. Dlatego PHP zostanie jeszcze długo na pierwszym miejscu pod względem popularności. (Jak napisałem, standardem zostają niekoniecznie najlepsze rozwiązania, bo istnieje też zjawisko inercji, która zresztą - paradoksalnie - dobrze wróży również Javie).
A teraz spójrzmy na wykorzystanie Javy:
-
międzyplatformowość w środowisku desktop; łatwość konwersji do zależnych od platformy plików wykonywalnych
(w praktyce nie jest to jednak aż tak duża zaleta, bo większość oprogramowania i tak jest pisana pod konkretny system operacyjny, a większość programów obecnie instalowanych na HDD wymaga wykorzystania zasobów, do których potrzebny jest język natywny bądź te zasoby są uzależnione i tak od rodzaju OS, np. rejestr przy Windows) -
www po stronie klienta, tj. przeglądarki (czyli aplety oraz Web Start, właściwie niemal niewykorzystywane w praktyce)
-
J2ME (jeden z największych sukcesów Javy, mimo, że wiele krytyki jest na tym polu; ale wystarczy spojrzeć co jest na rynku: trudno znaleźć aplikację lub grę, która działa na telefonie - i nie jest nim iPhone - a nie została napisana w Javie; wspomnianą siłą inercji teraz trudno producentom odejść od Javy, nawet, jeśli promowany jest C/C++/Objective-C czy inne rozwiązania)
-
J2EE (obok J2ME prawdopodobnie największy sukces Suna; wady i zalety J2EE w porównaniu do innych platform przejrzałem wyżej)
-
promocja przez większość najbardziej liczących się na rynku graczy, czyli Google (GWT!!!, Android!!!), Oracle, IBM, większość producentów telefonów jak Nokia, Samsung, LG i inni
Podsumowując. Po tej analizie doszedłem do wniosku, że nie ma bardziej wspieranego języka i mającego więcej zastosowań, niż Java. Aktualnie najbardziej przyglądam się Ruby'emu, który może stanowić dobrą alternatywę dla Javy, a dzięki takim rzeczom, jak JRuby można łączyć oba. Na razie jednak nie inwestuję w niego czasu, bo prawdę mówiąc nie widziałem wielu projektów z użyciem go. Fakt, dla których Google wybrał właśnie Javę na GWT i Androida jest bardzo zastanawiający. Google oczywiście również wspierał Pythona i (chyba) Ruby'ego, jednak ostatecznie to GWT jest uznawane za platformę nr 1, którą zresztą wykorzystuje jako podstawę do kolejnych swoich internetowych projektów.
Na razie zostaję przy Javie. Jeśli ktoś ma inne zdanie lub chciałby coś dodać, gorąco zachęcam, bo myślę, że korzystniej będzie dla nas, by obraz tego, jak wygląda przyszłość na rynku IT, był jak najbliższy rzeczywistości, a nie iluzji preferencji.</b>