Jako profesjonalny programista Java staram się zrozumieć - dlaczego nienawidzę Java w stosunku do nowoczesnych aplikacji internetowych?
Zauważyłem trend, który we współczesnych startupach internetowych wydaje się, że stosunkowo niewielki procent używa Java (w porównaniu do ogólnej popularności Javy). Kiedy zapytałem o to kilka osób, zazwyczaj otrzymałem odpowiedź: „Nienawidzę Javy z pasją”. Ale nikt nie wydaje się być w stanie udzielić ostatecznej odpowiedzi.
Słyszałem również, że ta sama społeczność startupów internetowych odnosi się negatywnie do programistów Java - mniej więcej sugerując, że są powolni, a nie kreatywni, starzy.
W rezultacie spędziłem czas, pracując, aby zebrać Ruby / Rails, po prostu, aby dowiedzieć się, czego mi brakuje. Ale nie mogę się powstrzymać przed myśleniem sobie: „Mogłbym to zrobić znacznie szybciej, gdybym używał Javy”, głównie ze względu na moje względne poziomy doświadczenia.
Ale także dlatego, że nie widziałem niczego krytycznego „brakującego” w Javie, co uniemożliwiłoby mi zbudowanie tej samej aplikacji.
Co prowadzi mnie do moich pytań :
Dlaczego Java nie jest używana w nowoczesnych aplikacjach internetowych?
Czy to słabość języka?
Czy jest to niesprawiedliwy stereotyp Java, ponieważ istnieje już tak długo (niesprawiedliwie jest kojarzony ze starszymi technologiami i nie jest uznawany za jego „nowoczesne” możliwości)?
Czy negatywny stereotyp programistów Java jest zbyt silny? (Java nie jest już po prostu „fajna”)
Czy aplikacje napisane w innych językach są naprawdę szybsze w budowie, łatwiejsze w utrzymaniu i czy działają lepiej?
Czy Java jest używana tylko przez duże firmy, które są zbyt wolne, aby dostosować się do nowego języka?
źródło
Odpowiedzi:
Współczesne start-upy muszą jak najszybciej wejść na rynek. Nie muszą spędzać około sześciu miesięcy na wydaniu aplikacji internetowej Java.
Na przykład Twitter został zbudowany przy użyciu Rails / Ruby, ale kiedy stał się nieskalowalny, migrowano do JVM.
Nie wspominając o tym, że proces programowania nie jest produktywny: kod -> kompiluj -> wdrażaj, gdy jest w ramach takich jak (Rails / Django / Grails): uruchom serwer testowy -> kod -> zmień rzeczy i zobacz, co się stanie.
Dobrą wiadomością jest to, że JRebel pozwala natychmiast zobaczyć zmiany w kodzie.
źródło
Z mojego doświadczenia wynika, że Java dla aplikacji internetowych jest nadmierna w przypadku małych aplikacji. Na przykład prosty blog z jedną tabelą bazy danych zawiera wpisy blogu, co można zrobić w coś znacznie prostszego.
Zazwyczaj widziałem, jak Java radzi sobie znacznie lepiej w znacznie większych aplikacjach internetowych (zdaniem banków i firmach ubezpieczeniowych), które komunikują się z wieloma innymi systemami (takimi jak back-endy baz danych i bazy danych oraz systemy przetwarzania wsadowego w tle usług sieciowych ... wszystko w tej samej aplikacji).
Z tego, co widziałem, architektura aplikacji JavaEE jest zwykle więcej niż potrzebna w przypadku małych / prostych aplikacji internetowych.
źródło
Programowałem aplikacje Java przez 10 lat, zanim przeszedłem na Python, ponad 4 lata temu. Wydaje mi się, że jestem znacznie bardziej produktywny przy użyciu Pythona i mogę zrobić znacznie więcej w krótszym czasie, i szczerze mówiąc, jestem znacznie szczęśliwszy, gdy rozwijam się w Pythonie. Oto niektóre z powodów, dla których uważam, że Python jest lepszy niż Java w oparciu o moje osobiste doświadczenia.
Frameworki internetowe:
Kiedy po raz pierwszy zacząłem programować aplikacje internetowe w Javie, Struts właśnie wyszło i nie było świetne, ale było najlepszą dostępną rzeczą. Po drodze stworzyłem kilka aplikacji Struts i kilka innych. Ilekroć pojawił się nowy framework (Tapestry, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring itp.), Wypróbowałem go i sprawdziłem, czy był lepszy, a większość razy była tylko trochę lepsza , a czasem wcale nie lepiej. Muszę powiedzieć, że ramy gry to krok we właściwym kierunku.
Nie zawiera baterii:
Jedną z najbardziej irytujących części Javy był fakt, że większość używanych bibliotek nie była zawarta w samej Javie, trzeba było dołączyć mnóstwo bibliotek stron trzecich z miejsc takich jak apache commons. Jeśli użyjesz czegoś takiego jak hibernacja z jakąkolwiek inną dużą biblioteką, skończysz w piekle zależnym od Jar, gdzie hibernacja potrzebuje jednej wersji słoika, a coś innego potrzebuje innej wersji. Jeśli załadujesz pliki jar w niewłaściwej kolejności, nie będziesz miał szczęścia. Musisz polegać na narzędziach takich jak maven i bluszcz, aby zarządzać swoimi zależnościami, a to po prostu wprowadza więcej zależności do twojego projektu, co powoduje, że projekty są ogromne. Miałem jakieś pliki wojenne 100 MB + pliki wojenne dla najprostszych aplikacji internetowych.
Zbyt wiele opcji:
Z jakiegoś powodu wydaje się, że jest zbyt wiele różnych sposobów na zrobienie tego samego w Javie. Istnieje ponad 38 różnych frameworków internetowych dla java według wikipedii ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) i 23 różnych ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ), żeby wymienić tylko kilka przykładów. Jeśli spojrzysz na inne języki, mają one bardziej rozsądną liczbę. Niektórzy uważają, że posiadanie wielu opcji jest dobrą rzeczą, ale nie prowadzi to do marnowania wysiłku w społeczności programistów, wszyscy odkrywają to samo koło, a jeśli jesteś nową osobą w języku, który znasz zbyt wiele opcji do wyboru.
Serwery aplikacji:
Aplikacje sieciowe Java są naprawdę ciężkie i wymagają do działania dużej ilości zasobów. Są szczególnie głodni pamięci. Jak każde oprogramowanie, można je dostroić, aby zmniejszyć zużycie zasobów, ale w porównaniu z innymi językami ich konfiguracja po wyjęciu z pudełka jest okropna. W przeszłości korzystałem z weblogic, websphere, Jboss, tomcat i jetty. Użyłem tylko pierwszych trzech, gdy byłem zmuszony do korzystania z EJB, ale nawet jeśli nie używasz EJB, były to duże serwery aplikacji i czasami trudno je skonfigurować i uruchomić poprawnie. Tomcat i Jetty są znacznie lepsze i łatwiejsze do skonfigurowania, ale nadal są świnią zasobów.
Hosting aplikacji:
Jeśli nie prowadzisz własnego serwera, naprawdę trudno jest znaleźć hosting współdzielony dla aplikacji Java w rozsądnej cenie. Głównym powodem jest to, że aplikacje Java wymagają znacznie więcej pamięci w porównaniu do innych języków, więc dostawca hostingu współdzielonego nie ma sensu wydawać swojej cennej pamięci RAM na prowadzenie witryny Java, gdy może uruchomić 5 witryn php w tym samym miejscu. Oznacza to, że jest mniej dostawców oferujących hosting Java, co z kolei oznacza wyższe koszty prowadzenia Twojej witryny.
Czas rozwoju:
Kiedy rozwijałem się w Javie, znalazłem się znacznie wolniej niż to, co mogę zrobić w Pythonie. Musiałbym dokonać zmiany, skompilować, ponownie wdrożyć, a następnie przetestować, a to spowalnia proces iteracyjny. Wiem, że istnieją sposoby na przyspieszenie tego procesu, ale nawet w najlepszym wypadku czułem się znacznie wolniej niż to, co mogę zrobić w Pythonie.
Istnieje również o wiele mniej kodu do zrobienia tego samego w Pythonie, więc spędzam też mniej czasu na rozwijaniu kodu.
Java wydaje się zbyt skomplikowana w wielu częściach. Wiele interfejsów API i interfejsów jest po prostu skomplikowanym sposobem na to, co chcesz zrobić. Wszyscy i ich brat uważają się za architekta Java, co powoduje, że powstają duże, skomplikowane systemy, które są trudne w użyciu i rozwijaniu.
IDE:
Kiedy rozwijałem się w Javie, czułem utknięcie w IDE, zgubiłem się bez niego. IntelliJ to najlepsze IDE na rynku i ciężko było przejść na Python, ponieważ nie było czegoś podobnego do Pythona. Więc zamiast IDE, użyłem tylko textmate, który jest zwykłym edytorem tekstu. Na początku było ciężko, ale ponieważ był to tylko edytor tekstowy, była to naprawdę szybka i responsywna aplikacja. Mógłbym otworzyć cały projekt w ciągu kilku sekund, podczas gdy gdy chcę otworzyć projekt w IDE, może to zająć minutę lub dłużej, na maszynie z dużą ilością pamięci RAM. Twórcy IntelliJ wyszli z edytorem Pythona o nazwie pycharm, kupiłem go, gdy pojawił się po raz pierwszy, i jest świetny. Ale zdałem sobie sprawę, że nie potrzebuję IDE dla Pythona, nie mam nic przeciwko edytorowi tekstów. Kiedy wracam do pracy nad aplikacjami Java, które muszę robić od czasu do czasu, staram się korzystać z edytora tekstu, ale nie do końca to opanowałem. Osobiście bardziej potrzebuję IDE dla Javy, ponieważ jeśli coś popsuję, kompilacja i ponowne wdrożenie zajmuje więcej czasu, co spowalnia mnie.
ORM:
Kiedy po raz pierwszy zacząłem używać Hibernacji jako ORM, myślałem, że to świetnie, że ma problemy i nie było idealne, ale było lepsze niż to, co robiłem wcześniej. Byłem z tego zadowolony, dopóki nie zrobiłem aplikacji z ORM Django w projekcie Pythona, i to otworzyło mi oczy, tak powinien działać ORM. Po tym projekcie wróciłem do hibernacji i poczułem rozczarowanie i tęskniłem za powrotem do ORM Django. Innym świetnym ORM Pythona jest sqlalchemy, który jest podobny do ORM Django, ale trochę inny. Mam ograniczone doświadczenie z ORM ROR, ale z tego co pamiętam, było również całkiem dobre.
Szablony:
Internetowe systemy szablonów w Javie nie są tak dobre i myślę, że wypróbowałem je wszystkie (kafelki, freemarker, prędkość itp.). Większość z nich oferuje jedynie podstawową funkcjonalność i jest uciążliwa w pracy. Po stronie Pythona moimi dwoma ulubionymi są szablony Django i Jinja2, mają wszystko, czego mógłbym potrzebować w silniku szablonów i są naprawdę łatwe w użyciu.
źródło
Start-upy chcą lśnić. Czymkolwiek jest błyszczący: RoR, Groovy, Grails, OOP w / PHP, Foobar, Wibble, Narf itp.
Przedsiębiorstwo chce stabilnego, niezawodnego i skalowalnego: Java i .NET pasują do tego rachunku (jeśli są wykonane poprawnie).
Aktualny koncert: Usługi finansowe. Platforma: ColdFusion (zasadniczo Java Tag Library) i Java.
Poprzednie koncerty:
Są to witryny o wysokim poziomie bezpieczeństwa i o wysokim poziomie bezpieczeństwa. Nikt w żadnej z tych firm nigdy nie rozważał PHP, niektórzy patrzyli na RoR i zauważyli zbyt wiele problemów. Firma 401k miała siostrzaną firmę obsługującą aplikację .NET z kompetentnymi programistami, a aplikacja co tydzień ulegała awarii. W końcu przekonwertowali go na Javę i zyskali stabilność.
Jedynymi osobami, które patrzą na Javę z góry, są ci, którzy nie mają z nią żadnego doświadczenia lub mają niewielkie doświadczenie, lub byli zaangażowani w słabe implementacje, a teraz są wstydliwi. Widzą lśniącą sylwetkę, jeśli korzystają z niej wszystkie fajne dzieciaki, dlaczego nie ja?
źródło
Dodatek do odpowiedzi FrustratedWithFormsDesigner : Ponieważ myślę, że twoje pytanie jest bardziej ukierunkowane na mniejsze witryny, istnieje ważny aspekt, który musisz wziąć pod uwagę dla wielu osób: Hosting jest wszechobecny w PHP, ale trudniejszy w przypadku stron Java lub ASP. Nie jest to jednak wada tych języków.
źródło
Java jest absolutnie używana do tworzenia nowoczesnych aplikacji internetowych. Zwłaszcza gdy dotrzesz do nieco większego / bardziej złożonego / skalowalnego końca spektrum aplikacji internetowych.
Jeśli interesują Cię nowoczesne, produktywne narzędzia i ramy, spójrz na:
Sądzę jednak, że najbardziej prawdziwie nowoczesne tworzenie stron internetowych na platformie JVM prawdopodobnie zostanie wykonane w jednym z nowych języków JVM, a nie bezpośrednio w Javie, przy czym Java stanowi po prostu kręgosłup pod względem bazowych bibliotek i infrastruktury zaplecza. W Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) i Clojure ( Noir , Ring / Enlive + wiele niestandardowych ram) można wymienić tylko kilka.
Po wprowadzeniu wszystkich innowacji w nowej przestrzeni językowej JVM osobiście podejrzewam, że Java ostatecznie stanie się „asemblerem programowania po stronie serwera”.
źródło
Czy Google, Amazon lub LinkedIn są uważane za nowoczesne?
Java jest używana w nowoczesnych aplikacjach internetowych. Jeśli spojrzysz na całe przedsiębiorstwo, jest to najczęściej używany język aplikacji internetowych (wewnętrzny).
To powiedziawszy, Java przeszła okres, w którym standardy tworzenia stron internetowych starały się być wszystkim dla wszystkich (prawdopodobnie nadal tak robią). „Don't repeat yourself” było odpowiedzią na piekło xml i długie cykle budowania stron internetowych Java. W rezultacie Java (EJB, Struts, JSF itp.) Stała się postrzegana jako rzecz, którą wszystkie nowe paradygmaty próbowały pokonać.
Java, język jest pełny. To jest plus i minus (świetny do konserwacji, do bani dla deweloperów). Istnieje wiele nowoczesnych funkcji językowych, które nie zostały jeszcze wprowadzone w Javie, które mogą znacznie skrócić czas kodowania (właściwości, zdarzenia, zamknięcia, generatory, przetwarzanie list itp.). Może to być frustrujące, gdy pochodzi z bardziej nowoczesnego języka. To powiedziawszy, trudno je dodać do dojrzałego języka, nie stając się gniazdem szczurów, którym staje się C #.
Wiele języków używanych we współczesnym tworzeniu stron internetowych jest dynamicznie pisanych. Umożliwia to oprzyrządowanie, które może dynamicznie przeładowywać kod podczas pisania (trudniej to osiągnąć w języku statycznym - jrebel). Ponieważ tworzenie stron internetowych umożliwia szybkie iteracje, dynamiczne przeładowywanie jest ogromną wygraną. Znacząco skraca cykl rozwoju projektów greenfield i ułatwia prawidłowe skonfigurowanie interfejsu użytkownika i interfejsu użytkownika (z natury prób i błędów).
Języki statyczne też mają swoje miejsce. W przypadku złożonej logiki zaplecza, która musi działać przez lata, musi być skalowana bez problemu, musi być bardzo szybka i musi być całkowicie wolna od błędów, preferowane są języki o typie statycznym (jak Java lub nawet C).
Dodatkowo, wraz ze wzrostem liczby deweloperów / obrotów i dojrzewaniem produktów, prawdopodobieństwo, że ludzie o dobrych intencjach wprowadzą robaki, gwałtownie rośnie. Rygor i dyscyplina, którą wymusza dobrze zaprojektowany projekt Java (interfejsy, wzorce i woda święcona dla tych wampirów php :)) pomaga zmniejszyć długoterminowe ryzyko. Chociaż można to również osiągnąć za pomocą testów jednostkowych, siatka bezpieczeństwa pochodząca ze sprawdzania statycznego (i analizatorów statycznych, takich jak findbugs i clang) zapewnia wbudowany poziom pokrycia kodu, który jest trudny do odtworzenia za pomocą testów odręcznych. Nie zrozumcie mnie źle, powinny istnieć testy jednostkowe i testy funkcjonalne, ale prawdziwe organizacje nigdy nie osiągają 100% zasięgu. Analizują to analizatory statyczne.
Tak więc w dużych projektach (definiowanych bardziej przez wielkość zespołu niż rozmiar kodu), gdzie istnieje złożona współpraca między niezależnie opracowanymi fragmentami kodu, nadal preferowane są języki takie jak Java. Przykłady obejmują duże / złożone aplikacje internetowe, takie jak brokerzy finansowi (ameritrade), giełdy finansowe (nasdaq, nyse, może londyn po awarii .net), bankowość internetowa (prawie wszystkie), e-mail (google), aukcja (ebay) itd.
Z punktu widzenia wydajności i skali nic nie jest lepsze od platformy Java, ponieważ jest to połączenie skalowalności i wydajności aplikacji internetowych (w zależności od sposobu liczenia partycjonowania aplikacji Facebooka). Na przykład Twitter musiał przepisać duże części swojej infrastruktury Ruby w Scali na maszynie wirtualnej Java, aby wypuścić wieloryba z powrotem na morze. Słyszałem o innych dużych przykładach, ale one mi teraz wymykają.
Warto również rozważyć bezpieczeństwo. Podczas gdy wtyczki do przeglądarek Java cierpią z powodu znacznej części luk w zabezpieczeniach, sama platforma Java jest jedną z bezpieczniejszych stworzonych platform. Aplikacje internetowe Java są bardzo bezpieczne. Praktyki kodowania, biblioteki i architektura od dawna zniechęcają do błędów, które umożliwiają ataki takie jak wstrzyknięcie sql lub przepełnienie bufora. Podczas gdy inne platformy internetowe (szyny) mają dobrą reputację w zakresie bezpieczeństwa, żadna nie przekracza Java.
Podsumowując, większość aplikacji internetowych jest prosta technicznie. Mówiąc prościej, Java jest często przesadzona (tak jak w dawnych czasach, gdy pisaliśmy je w C :)). Jeśli jednak aplikacja internetowa jest złożona (backend lub inna) lub oczekuje się, że będzie mieć ponad 100 programistów, Java jest trudna do pokonania.
-
Osobiście używam Grailsa, ponieważ daje mi to, co najlepsze z obu światów (to samo można powiedzieć o JRuby, o którym słyszę, że staje się coraz bardziej popularny w świecie Ruby).
BTW - Uważam, że wzrost PHP jest naprawdę zaskakujący. PHP jako język jest z grubsza odpowiednikiem perla pod względem czytelności i VB pod względem jakości wyników. Zachęca do okropnych praktyk, jest prawie niemożliwy do utrzymania, biblioteki stron trzecich rzadko działają zgodnie z oczekiwaniami i mają składnię, która doprowadziłaby Larry'ego Walla do ... cóż ... ściany. Jedyne wyjaśnienie, które mogę wyczarować, to takie, że nadaje się do uczenia przyrostowego (jak VB). Innymi słowy, możesz osiągnąć coś pożytecznego, niewiele wiedząc o programowaniu / administracji, i możesz poszerzać swoją wiedzę niewielkim kawałkiem naraz. Wiele można powiedzieć na ten temat z perspektywy adopcji. Jednak dla każdego, kto musiał obsługiwać lub zastępować jedną z miliardów aplikacji VB napisanych przez „programistów” w świecie korporacyjnym / mfg, prawdopodobnie kręcisz głową i planujesz przejście na emeryturę. :)
źródło
Cóż, niedawno spotkałem się z facetem Java, który był naprawdę podekscytowany nowym projektem Spring Data, ze względu na to, jak mało kodu potrzeba, aby uzyskać podstawowy dostęp CRUD do twojego DB.
Mogę zbudować aplikację CRUD przy użyciu Railsów (nie tylko dostępu do bazy danych, ale widoków i kontrolerów) za pomocą kilku poleceń.
(U góry głowy: nowy projekt, 1 polecenie rusztowania na jednostkę, 1 polecenie migracji bazy danych, 1 polecenie uruchomienia serwera).
Nie ma to nic wspólnego z językiem, chodzi tylko o narzędzia. I wygląda na to, że języki dynamiczne mają zwykle narzędzia i struktury, które usuwają wiele kodu z podstawowymi informacjami. (Aby zrekompensować nasz brak silnych IDE, które generują dla nas płytę kotłową).
Uważam też, że dynamiczne języki znacznie ułatwiają pisanie takich narzędzi i ram. Potrafię odczytać kod na przykład dla Padrino lub Railsów (frameworki Ruby) o wiele łatwiej niż kod dla powiedzmy Spring Roo. Może to wynikać z faktu, że znam Ruby dużo lepiej niż Java.
źródło
W ostatnich latach Java została uznana za „korporacyjną”. Który jest po drugiej stronie spektrum tego, czego potrzebuje startup. Przy tworzeniu aplikacji internetowych potrzebujesz 4 rzeczy - bezbolesnego dostępu do bazy danych, doskonałej manipulacji ciągami, cukru składniowego i szybkiego procesu iteracyjnego, aby wprowadzić liczne małe zmiany, których wymaga Twoja aplikacja.
Wydajność, skalowalność i stabilność są nieco niższe na liście priorytetów.
Również Java jest bardzo nieznajomym językiem do kodowania. Wczoraj uzyskała rewolucyjną możliwość użycia łańcucha w instrukcji switch. A javascript jest bardzo hackerskim językiem, więc po opracowaniu interfejsu użytkownika odczuwasz duże ograniczenia po powrocie do java.
Więc przypuszczam, że to są powody, dla których webstartupy unikają Java.
źródło
Syntax sugar
Java praktycznie nie może być używana do DSL, na przykład plik konfiguracji i tras Play nie jest plikiem Java, jest w obcej składni, która robi mniej niż powiedzmy django's settings.py i urls.py; brak zrozumienia listy; kluczowe typy danych (np. mapy, listy) nie są domyślnie importowane; idiotyczna jedna klasa na plik naprawdę przeszkadza; a interfejsy API Java są niepotrzebnie gadatliwe. Ponadto nie można używać wyliczeń podczas przełączania między ciągami otrzymanymi z parametru GET / POST.IRepository<T>
zIQueryable<T> Where(Expression<Func<T, Boolean> Expression)
. Zastanawiam się, czy staną się bardziej popularne w Javie, kiedy pojawi się lambda? Prawdopodobnie jest to strefa komfortu, ale Java po prostu czuje się gadatliwie - i zupełnie tak, jakbym dostał wystarczająco dużo bitów, aby zbudować 50 różnych typów samochodów bez gwarancji, że 2 części będą ze sobą pasować.Obecnie pracuję w firmie, która ma kilku programistów „nienawidzę Java”. Kiedyś mnie też ogłuszało. Z pewnością nie znoszę wszystkich technologii dostępnych w Javie. To sprawia, że podejmowanie decyzji jest zbyt trudne. To tak, jak kiedy masz za duży wybór, nie masz wyboru. Musisz spędzić czas z setkami frameworków, aby naprawdę wymyślić framework, który działa dla Ciebie. Standardowa architektura Servelt jest dość skomplikowana dla większości aplikacji. Nie dotyczy to Ruby, Django i innych rzeczy. Są to raczej pojedyncze ramy niż język.
Największe skargi, które słyszę od programistów
Podsumowując, Java na początku projektu nakłada stromą krzywą, co oznacza, że trzeba poświęcić zbyt dużo pieniędzy. Dodaj do tego ogromną społeczność związaną z javą, każda z nich myśli na różne sposoby i nikt tak naprawdę nie może przewodzić całej społeczności. Nie widzą też rozmów i konferencji prowadzonych przez społeczność, pokazujących wszystkie nowe, fajne rzeczy. Brak nowych fajnych książek. Wygląda na to, że Java przestanie działać, ponieważ kilka lat temu została użyta do rozwiązania zbyt wielu różnych problemów.
źródło
Frameworki do tworzenia stron internetowych Java mają dość dużą krzywą uczenia się, często przesadzają z tym, czego potrzebujesz, a znaczna część pośrednictwa wymaganego do działania jest po prostu ... bolesna ... do pracy.
Kiedyś pracowałem dla firmy, która opracowała program Spring / Java, i uważam, że framework jest w najlepszym razie niewygodny. Nie mam wiele przyjemnych rzeczy do powiedzenia na temat frameworka Springa, z wyjątkiem tego, że miałem przyjaciela, który zajmował się rozwojem Struts, i uważał, że Struts jest jeszcze gorszy. Struktura sieciowa nie przypomina robienia aplikacji komputerowych lub aplikacji mobilnych (np. Na Androida) i ma wiele bardzo abstrakcyjnych pomysłów, których zrozumienie zajmuje trochę czasu (choć z pewnością daje to dużą moc i możliwości, jeśli są profesjonalistami i robią coś naprawdę złożonego, jak aplikacja klasy korporacyjnej). Uwielbiam programować Java dla urządzeń mobilnych lub stacjonarnych, ale Java dla aplikacji internetowych? Nie tak bardzo.
Nie robiłem żadnego programowania osobiście w Ruby / Rails, ale mój przyjaciel, który kiedyś robił Struts, teraz programuje w Ruby i zeznaje, że rzeczy, które są trudne w programowaniu w Javie wymagają o wiele mniej kodu i złożoności do osiągnięcia w Rubin. Z pewnością istnieje krzywa uczenia się dla różnych reguł składniowych i językowych, ale w przypadku aplikacji do prototypowania ma ona zalety pod względem ilości kodu wymaganego do osiągnięcia pożądanego rezultatu. Jak wspomnieli inni, skalowalność jest również kwestią do rozważenia, a jeden z powodów, dla których bardziej dojrzałe aplikacje nie są tak często spotykane w bardziej popularnych językach.
źródło
Wszystko sprowadza się do kosztów i trendów. Startup Web 2.0 jest tworzony przez wizjonera poniżej 30 lat, który ma więcej talentu niż pieniędzy (oczywiście uogólniam, ale to właśnie zobaczysz „średnio”). Użyje języka, który zna, ponieważ programuje (wraz z kilkoma przyjaciółmi). Najprawdopodobniej jest samoukiem.
Java jest ukierunkowana jako środowisko korporacyjne (przez Java, mam na myśli język, strukturę i standardy). Istnieje wiele drogich narzędzi, które IBM, Oracles i BEA na świecie chcą sprzedawać przedsiębiorstwom.
Kroki niezbędne do opanowania języka Java są złożone i / lub kosztowne. Wiem, że krajobraz się tam zmienia, ale czy jest za mało za późno?
Po tym, jak startup zyskuje przyczepność, następuje wzrost. Rekrutacja utalentowanych programistów jest trudna. Większość programów „zostań programistą za sześć tygodni” uczy Java (lub .NET), a rynek jest nasycony „programistami sześciotygodniowymi” (co dziwne, widziałem deweloperów z życiorysem, którzy mówią o 7-letnim doświadczeniu, które wciąż pokazuje znajomość sześciu programista tygodniowy). Korzystanie ze środowiska nie będącego głównym nurtem, które nie jest „przedsiębiorcze”, może być naturalnym filtrem dla programistów sześciotygodniowych. Nauczenie się Ruby lub Scali poza wymogiem pracy wymaga poświęcenia i osobistych inwestycji. To dla mnie największy wskaźnik potencjału kandydata.
Wiedza przychodzi z doświadczeniem, ale oddany / namiętny programista zdobędzie wiedzę szybciej (średnio) niż ktoś bez tego poświęcenia / pasji. Tak jak dziecko, które uwielbia grać na gitarze, stanie się lepsze szybciej niż dziecko uczące się, ponieważ jego ojciec go stworzył.
źródło
Java jest zbyt skomplikowana. Robię mnóstwo pracy z PHP i jest to po prostu łatwiejsze i szybsze w większości sytuacji. Możliwość po prostu SSH do serwera, aby otworzyć plik php, aby zapisać zmiany i zrobić to jest świetne. Kilka aplikacji Java, nad którymi pracowałem, zawsze wymagało ponownego uruchomienia w celu najprostszej zmiany. (nie mówiąc, że zawsze tak jest z tym, co deltowałem). Dodatkowo hosting PHP jest tani i łatwo dostępny.
Myślę też, że przynajmniej PHP ma wielu programistów, którzy tak jak ja, zaczęli 14/15 lat temu od statycznego HTML. Z biegiem czasu zaczęliśmy dodawać PHP do naszych stron, ponieważ było to łatwe, proste i niedrogie. Z biegiem lat język urósł i rozwinął swoje umiejętności znacznie wykraczające poza skromne początki, a teraz stara się być tym, co uważam za wiele rzeczy, których tak naprawdę nie jest.
Z drugiej strony większość programistów PHP wiem, że Java to gigantyczny, zbyt skomplikowany goryl o wadze 800 funtów, prawie jak wysiadanie z 18-kołowej półciężarówki, aby zjechać do sklepu spożywczego i dostać bochenek chleba.
Próbowałem nauczyć się Javy, moje pierwsze wrażenia, kiedy był bardzo długi i wzburzony przez tunel nadgarstka. Dodatkowo, od samego początku pozostawiło mi wiele pytań, które prawdopodobnie wydają się łatwe dla weterana Java. OpenJDK, czy Sun? Tomcat lub Glassfish, czy? Ponadto wydaje się, że każde wprowadzenie do książki Java rozpoczyna pisanie kodu dla wiersza poleceń. Myślę, że większość ludzi uważa, że teraz to drzemka.
źródło
Mój zespół i ja obecnie opracowujemy aplikację internetową typu greenfield w Javie 6 + Stripes. W ciągu ostatniego roku pracowałem także nad inną aplikacją internetową typu greenfield, używając Java 6 + Stapler (nieco nieznany framework internetowy opracowany przez Kohsuke Kawaguchi ze sławy Hudson / Jenkins).
Java jest absolutnie używana do nowoczesnego tworzenia stron internetowych. Z pewnością nie ma „seksownego” wyglądu Ruby ani innych dynamicznych języków, ale nie jestem przekonany, że dynamiczne języki są dobre, gdy projekt zaczyna się skalować.
Nowoczesne serwery aplikacji Java są bardzo konkurencyjne pod względem wydajności, a oba są o rząd wielkości szybsze niż jakakolwiek znana mi dynamiczna maszyna wirtualna.
Nie zrozum mnie źle ... Nie twierdzę, że Java jest zawsze najlepszym wyborem (nie zdalnie!) - ale nie zawsze jest to zły lub „przestarzały” wybór.
źródło
Nowy programista zajmujący się profesjonalnym rozwojem znajdzie w Javie Order of Magnitude trudniejszy niż szyny, python lub php, aby zacząć z nim pracować, więc będą mieli łatwość do nauczenia się.
Powiedziawszy powyższe, podjąłem decyzję o użyciu Javy do uruchamiania, ponieważ poprawnie skonfigurowane środowisko programistyczne Java jest bardzo wydajne w pracy. Mam na myśli właściwie skonfigurowane.
źródło
strpos
lubin_array
? A interfejs PHP DOM PHP jest niedorzeczny (rzutować atrybuty na ciągi, aby je odzyskać?). OSGi jest absolutnie genialny i niezależny od języka.Około 5 lat temu ja i kolega otrzymaliśmy zadanie programowania dla jakiegoś projektu wewnętrznego. Proste zadanie, które wymagało analizy poleceń.
Wymyśliłem to w około 80 liniach kodu java, a mój kolega poświęcił tydzień, około 20 klas java i wiele innych linii kodu java, aby zrobić to samo. Nie trzeba dodawać, że jego kod został wybrany.
To mnie zastanowiło. Wszędzie doceniano złożoność. (Pracowałem w jednej z największych firm produkujących oprogramowanie). Java była narzędziem wyboru, a wzorce projektowe były drogą do kodowania.
Czy to sposób myślenia czy po prostu arogancja odrzucają prostotę. Zawsze uważałem, że zdrowy rozsądek powinien zwyciężyć. Niezależnie od tego, czy jest to firma, czy prosta aplikacja internetowa, podstawowe przypadki użycia są takie same. Powinien być poprawny i weryfikowalny.
Nie używam już Java z kilku powodów. Ale jednym z czynników - złożoności, jest dominujący sposób myślenia wielu programistów Java, jeśli chodzi o tworzenie oprogramowania.
Jeśli chodzi o skalowanie dynamicznych języków, JVM jest wynikiem dziesięcioleci badań. Podobnie dzieje się w przypadku Ruby itp.
Scala to jeden język, który uważam za niezwykle sprytny i praktyczny. Grać! Scala jest tak samo doskonała do tworzenia aplikacji internetowych / korporacyjnych jak każda inna.
Ponieważ Ruby i Rails są lśniącą nowością dla start-upów, niezwykle trudno jest zatrudnić solidnego programistę Railsów. W rzeczywistości jest to przeszkodą dla każdego start-upu, podczas gdy mnóstwo deweloperów Java powinno mieć większy sens biznesowy.
źródło
W niedawnym wywiadzie dla Josepha Snarra, kierownika technicznego Google, wyjaśnił, w jaki sposób aplikacja wykorzystuje serwlety Java dla zaplecza i JavaScript w interfejsie.
Aby odpowiedzieć na twoje pytanie, Java jest nadal używana do bardzo nowoczesnego tworzenia stron internetowych. Tylko nie dla start-upów, które ostatnio są tak popularne.
Myślę, że powodem, dla którego wiele start-upów korzysta z innych technologii, jest to, że są bardziej seksowne i mają za sobą większy rozgłos związany z open source.
źródło
Odkąd wspominałeś o tworzeniu stron internetowych i Javie, wiele osób zapomina, że na początku używanie apletów Java w przeglądarce internetowej nie działało dobrze, nie tylko to, ale „piaskownica” dla apletów nie została w pełni opracowana i występowały problemy z bezpieczeństwem aplety Java mogą działać w przeglądarce i uzyskiwać dostęp do lokalnych danych maszyny (inaczej problem bezpieczeństwa po stronie klienta). Jasne, że Java była solidna w aplikacjach wewnętrznych i autonomicznych, ale myślę, że skojarzenie języka Java z apletami Java (działającymi w przeglądarce) trochę zepsuło pewne spostrzeżenia na temat Java jako komponentu programistycznego. Nie sądzę, żeby kiedykolwiek wyzdrowiali z tego.
źródło
Pytanie powinno brzmieć „Dlaczego Java nie jest używana przez start-upy lub małe projekty?”. Java z pewnością używana jest w „nowoczesnych aplikacjach internetowych”. W Google Java jest używana jako backend dla wielu usług, a dla frontendu używana jest JS lub GWT skompilowana na zamknięcie. Problem dotyczy prędkości względem skali. Startupy muszą dotrzeć do minimalnego możliwego poziomu produktu. Zwykle są to małe zespoły 1-3 inżynierów, którzy cenią szybkość iteracji ponad wydajność lub łatwość konserwacji. Napotykanie na problemy ze skalowalnością lub problemy z utrzymaniem kodu zespołu to problem, który „chciałbyś mieć”, to znaczy, zanim osiągniesz ten etap, jest to znak, że Twoja początkowa implementacja pomogła ci przezwyciężyć garb pozyskiwania klientów lub inwestycja. W tym momencie możesz sobie pozwolić na przepisanie aplikacji.
Firma taka jak Google może sobie pozwolić na luksus budowania przedmiotów na większą skalę, nawet jeśli marnują czas na wdrażanie skalowania dla czegoś, co może nie uzyskać użytkowników, ponieważ mogą pochłonąć straty.
Przynajmniej według mnie wiele wielu „fajnych”, „modnych”, „nowoczesnych” firm tworzy małe aplikacje w małych zespołach, w których szybkość iteracji i prostota są największymi wymaganiami.
źródło
Tradycyjne aplikacje internetowe w Javie, choć dobrze ustrukturyzowane, są dalekie od „szybkiego rozwoju”. Chociaż kiedykolwiek napisałem tylko jedną pełną aplikację internetową (Java / Tomcat / Struts), była bardzo wybredna, debugowanie trwało dłużej niż oczekiwano i ogólnie była bolesna przy wdrażaniu warstwy logiki biznesowej. W potencjalnej obronie Javy była to jedyna aplikacja internetowa, którą napisałem w Javie (chociaż jestem przyzwyczajony do programowania aplikacji na poziomie systemowym w Javie) i sądzę, że za drugim razem mógłbym napisać inną aplikację internetową nieco szybciej.
Powiedziawszy to, napisałem również aplikacje w PHP i C #, a one po prostu działają lepiej i są o wiele bardziej wybaczające niż Java. Co więcej, Ruby on Rails został napisany specjalnie do szybkiego tworzenia aplikacji, które, jak powiedział Robbie, umożliwiają łatwy dostęp CRUD do baz danych. Problem polega na tym, że większość stron internetowych, które będziesz tworzyć samodzielnie, nie potrzebuje poziomu dostosowania, który oferuje Java (i wymaga wykonania). Dodatkowo każdy obiekt połączenia DB musi być napisany ręcznie i nie jest tak łatwo szablonować. Może istnieć lepsza struktura, szczególnie taka, która wykorzystuje nowe funkcje dynamicznej obsługi języka Java 7 , ale nie przeprowadziłem jeszcze badań.
źródło
Prosta odpowiedź: nauka krzywej do bazowej wydajności.
Systemy oparte na frameworku, takie jak RoR, zwykle umieszczają „magię” w języku / składni. Bardzo łatwo jest rozwinąć podstawową składnię RoR i uruchomić aplikację.
Java była najpierw językiem, a narzędzia i frameworki pojawiły się później. Musisz więc najpierw nauczyć się języka Java, a następnie nauczyć się wiosny, Grails, super IDE lub czegokolwiek. Ulubiony przykład Ruby, nie wymaga on setterów i getterów. Faktem jest, że środowiska IDE Java również pozbyły się ręcznego kodowania ... ale wciąż jest ono w twoim źródle. Zaletą tego podejścia jest to, że poniżej frameworku istnieje język spójny, z którym mogą współpracować wszyscy programiści Java.
Ta korzyść jest wątpliwa dla małych startupów, w których liczy się czas. Zwykle robią bardzo niewiele, czego nie mogliby zrobić przy użyciu gotowych ram. Aby mogli pobrać wybrany system RAD i mieć aplikację na żywo następnego dnia.
Ale jeśli spojrzysz na Facebooka i Twittera, w miarę ich rozszerzania, znaleźli rzeczy, których nie można obsłużyć po wyjęciu z pudełka, więc musieli używać technologii niższego poziomu.
Ta święta wojna, którą mają twórcy frameworków, że mogą robić cokolwiek szybciej, jest fałszywa, mogą zrobić wiele tego, czego potrzebują, prościej i mniej krzywej uczenia się. A dla wielu rzeczy jest to „wystarczająco dobre”. Użyj tego, co jest odpowiednie dla problemu.
źródło
Zależy, jak zdefiniujesz „tworzenie nowoczesnych aplikacji internetowych”. Jeśli mówisz o szybkich serwisach startowych, musisz wziąć pod uwagę języki i frameworki zaprojektowane do tego celu. Jeśli szukasz stabilnego, skalowalnego programowania WWW na poziomie korporacyjnym, szukasz języków i struktur obsługujących te ideały. W mojej książce są to dwa bardzo różne cele. RoR, Groovy itp. Są dobre dla pierwszego, a Java jest bardziej odpowiednia dla drugiego.
źródło
Google App Engine obsługuje Javę, dzięki czemu możesz pisać całą aplikację internetową w Javie, używając Eclipse jako IDE i interfejsu wdrażania, z odpowiednio udokumentowanym Google API - więc nie powiedziałbym, że nie jest używany lub nie jest nadający się do użytku.
źródło
Na starcie, dla którego pracuję, zdecydowaliśmy się użyć zarówno Javy, jak i JRuby do implementacji naszego API, ponieważ się uzupełniają.
W przypadku infrastruktury, dystrybucji procesów i komunikacji wykorzystujemy niezawodność Javy, podczas gdy do faktycznej implementacji punktów końcowych API wybraliśmy JRuby, ponieważ wszystkie wywołania obejmują JSON i znacznie bardziej sensowne jest manipulowanie reprezentacją typu luźnego (JSON) przy użyciu luźnej -typed language (Ruby).
Jeśli widzimy, że jedna z naszych klas JRuby staje się wąskim gardłem, po prostu ponownie ją implementujemy w Javie (w zasadzie tłumaczenie wiersz po wierszu). Może się to zdarzać dość często w przypadku klas, które muszą wykonywać wiele obliczeń, aw tym kontekście JRuby zachowuje się jak język prototypowy.
Wdrożyliśmy własny dynamiczny moduł ładujący klasy, co oznacza, że możemy zmieniać klasy Java w locie bez ponownego uruchamiania serwera i jesteśmy bardzo zadowoleni z wyboru. Tak więc argument „musisz kompilować i restartować za każdym razem” nie ma większego znaczenia.
Kluczem jest unikanie wszystkich rzeczy związanych z Java EE - jest ogromna, uciążliwa i przeciwdziała zwinnościom.
źródło
Nadal mam wrażenie, że Java jest używana w wielu projektach internetowych. Ale zwykle dotyczy to rozwoju bardziej zorientowanego na biznes, bez technologii głównie dla dużych firm, które zazwyczaj są mniej otwarte niż nowe startupy, które muszą uzyskać przyczepność i promować swoją pracę, a także bardziej zainteresowane technologią . Tak więc, nawet jeśli jest używany na wielu korporacyjnych stronach internetowych, prawdopodobnie nigdy się nie dowiesz, ponieważ tak naprawdę nie zamierzają publicznie mówić o stosie technologii.
To powiedziawszy, komentując wszystkie oryginalne pytania ...
Czy to słabość języka? W porównaniu z innymi językami, takimi jak Python lub Ruby, Java jest pełna i zwykle potrzebuje więcej kodu do robienia podobnych rzeczy. Ale nie tylko możliwości języka, ale także otaczająca go społeczność i programiści używający tych narzędzi. Tak więc większość modułów i narzędzi w Python, Ruby, PHP itp. Jest open source i jest łatwiejsza do znalezienia niż w świecie Java, tylko dlatego, że ten jest bardziej skoncentrowany na udostępnianiu (i ładowaniu) usług. Na przykład społeczność Ruby jest naprawdę bardzo zorientowana na tworzenie stron internetowych, więc każdy programista, który może korzystać z Ruby, będzie wiedział o problemach i dostępnych narzędziach do projektu internetowego. To niekoniecznie jest prawdą dla programistów Java, którzy mogliby pracować na innych rodzajach systemów, takich jak systemy raportujące. Oczywiście każdy dobry programista nadrobi zaległości,
Czy jest to niesprawiedliwy stereotyp Java, ponieważ istnieje już tak długo (niesprawiedliwie jest kojarzony ze starszymi technologiami i nie jest uznawany za jego „nowoczesne” możliwości)? Java nie jest tak stara i, mówiąc uczciwie, znacznie się poprawiła. To była fajna, odpowiednia platforma około 10 lat temu. Ale od tego czasu pojawiły się nowe platformy z myślą o nowszych problemach, takie jak Ruby on Rails. Podstawowym sektorem Java był głównie świat korporacyjny, z różnymi problemami, więc ludzie szukający nowych projektów poza tymi, którzy szukali różnych narzędzi. Ponadto główna zaleta projektowania Java, ponieważ jest wieloplatformowa, nie jest tak aktualna jak wcześniej.
Czy negatywny stereotyp programistów Java jest zbyt silny? (Java nie jest już po prostu „fajna”). W tym też jest trochę prawdy. Java nadal jest językiem do nauki „w celu znalezienia pracy”. Jeśli więc Cię to nie obchodzi, ale chcesz nauczyć się czegoś, aby zarabiać pieniądze, przestaniesz uczyć się trochę Javy i nie będziesz już więcej dbał o poprawę. Ponownie dużo mówi o percepcji i widoczności. Istnieje mnóstwo świetnych programistów Java, którzy kodują bez dzielenia się swoją wiedzą, podczas gdy istnieje wielu programistów PHP, być może nie tak dobrych, którzy piszą blogi i współpracują z open source. To prowadzi do myślenia, że programiści PHP są lepsi od programistów Java, ponieważ masz na ich temat pewne opinie.
Czy aplikacje napisane w innych językach są naprawdę szybsze w budowie, łatwiejsze w utrzymaniu i czy działają lepiej? Powiedziałbym, że budują się szybciej. Zasady języków takich jak PHP, Python lub Ruby sprawiają, że są one całkiem dobre do generowania oprogramowania, które może się ciągle zmieniać. Np. Dynamiczne pisanie ułatwia zmianę interfejsu. W Javie ważny jest dobrze zdefiniowany interfejs, który prowadzi do bardziej stabilnych (i trudnych do zmiany) interfejsów. Jest to bardzo ważne w nowym startupie, którego głównym problemem jest zdobycie produktu, zanim zabraknie pieniędzy. Jeśli chodzi o wydajność, bardzo łatwo jest źle zrozumieć potrzeby i spróbować użyć magicznych sztuczek, aby osiągnąć wymaganą wydajność, na przykład „Java jest szybsza niż Ruby. Okres” lub „MongoDB jest skalą internetową”.
Czy Java jest używana tylko przez duże firmy, które są zbyt wolne, aby dostosować się do nowego języka? Ostatecznie, mając już w firmie zespół programistów Java, łatwiej jest używać tego samego języka do nowych projektów. Jest to postrzegane jako „bezpieczny zakład”, szczególnie jeśli rdzeniem firmy nie jest technologia. Ale w każdym razie Java nie jest używana TYLKO w dużych firmach, wciąż istnieje wiele startupów, które używają Java do fajnych rzeczy (na przykład FightMyMonster lub Swrve intensywnie używa Java), ale powiedziałbym, że ogólna tendencja w starcie scena ma używać innych języków. Jest to również sposób na przyciągnięcie ludzi, ponieważ większość ludzi będzie bardziej ekscytująca do pracy z Ruby, Python lub PHP, postrzeganymi jako bardziej „przyjaźni” i „zabawni”
źródło
To prawda, ale nie z powodu Javy i jej ekosystemu. To z powodu ludzi, którzy podczas korzystania z Javy mają tendencję do tworzenia wielkich bałaganów i obrzydliwości.
Jest wystarczająco dużo frameworków (spring-mvc, grails, play itp.), Które pozwalają szybko budować rzeczy. Fakt, że ludzie przeprojektowują swoje systemy, stanowi problem związany ze zwiększoną wiedzą, którą ludzie zdobywają podczas pracy z ekosystemem Java - wiesz o wiele więcej i masz je dostępne (są narzędzia do wszystkiego) i „wszystko wygląda jak gwóźdź".
Jeśli jesteś „hacky”, możesz zrobić prawie tak samo z Javą jak z innymi językami, a oto badanie wskazujące, że:
Badanie 49 programistów: system typów statycznych nie miał wpływu na czas programowania ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf
źródło
Aby dodać nieco do tego, co już zostało powiedziane, myślę, że wiele ma to związek z tym, jak szybko możesz przejść od niczego (dosłownie) do funkcjonalnej aplikacji internetowej.
Jeśli wszystko, co masz dzisiaj, to pomysł, przejście od miejsca, w którym jesteś teraz, do napisania aplikacji internetowej jest prawie tak proste, jak upadek, niezależnie od tego, czy wybierzesz dostawcę usług hostingowych, czy własną infrastrukturę (np. Obraz EC2). Z mojego doświadczenia wynika, że wybór Javy to zwykle więcej pracy i często też kosztuje więcej.
Dodatkowo, jeśli korzystasz z Linuksa i PHP / Python / Ruby, narzędzia i platforma są komplementarne i zaprojektowane tak, aby wzajemnie się wspierać. W Javie czasami wydaje się, że dwa światy (OS i Java) czasami nie działają ze sobą w harmonii.
źródło
Kto powiedział, że to nie jest?
Spring MVC + Spring Data JPA lub Mongo + Thymeleaf do tworzenia szablonów + plug-in-coffee-maven do wtyczki Coffee do JS i gotowe.
źródło
Wielu może kojarzyć tworzenie Javy i aplikacji internetowych z okropnościami J2EE, które w połączeniu z potwornymi serwerami aplikacji J2EE z dużych niebieskich i czerwonych korporacji stanowiły tygodnie pracy, zanim podstawowy „Hello World” był dostępny online.
To prawda, że ostatnie specyfikacje i implementacje JEE są lżejsze, ale wciąż trzy razy zastanowię się, zanim zasugeruję coś takiego w ramach projektu szybkiego rozwoju w krótkim cyklu.
Jest to nadal standardowy sposób tworzenia aplikacji internetowych w Javie. Alternatywy, z których wiele wymieniono w innych odpowiedziach, dają bardziej mieszany i mylący obraz ze zbyt wieloma możliwościami wyboru.
Inne języki przedstawiają jedno rozwiązanie „pod klucz” zamiast tej mnóstwa. To sprawia, że ten wybór wydaje się bardziej odpowiedni do celu, gdy masz ważniejsze ryby do smażenia.
źródło
Myślę, że używa się go o wiele częściej niż myślisz - użycie znajduje się tuż poniżej linii wodnej. Istnieje wiele, wiele rubinowych opakowań na szynach wokół grubych, fantazyjnych usług Java. Zwłaszcza, gdy zaczynasz zajmować się wszystkim, co zbliża się do dużych zbiorów danych. . .
źródło