Dlaczego Java nie jest używana do tworzenia nowoczesnych aplikacji internetowych? [Zamknięte]


393

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?


142
Myślę, że się mylisz: jest nadal używany, po prostu stracił fajny czynnik.

41
@Graham Lee: Java była zawsze fajna? Musiałem coś przeoczyć. Myślę, że to zimna kawa, ale fajna? Myślę, że głównym powodem jest to, że java, szczególnie frameworki java dla przedsiębiorstw, były i nadal są mocno nadinżynierowane. Nie możesz ich uważać za lekkie, po prostu ich używasz, ponieważ potrzebujesz funkcji dystrybucji / równoważenia / skalowalności platformy i chcesz użyć frameworku dla interfejsu użytkownika, który jest również wykonywany w Javie, ze względu na jednorodność.
Falcon

20
Może dlatego, że nie jest nowoczesny ? : P A Java nigdy nie była fajna, po prostu dlatego, że wyrzuciła część hakerską z programowania.
back2dos,

28
@Falcon Java była fajna, kiedy ją wprowadzono, Sun wykonała świetną robotę, hiperwizując Javę, niezależnie od tego, czy szum był usprawiedliwiony, czy nie, nie ma to nic wspólnego z tym, że jest fajna, czy nie, wiele fajnych rzeczy jest wprowadzanych bez żadnego powodu.
Mahmoud Hossam

11
@ Falcon, powinieneś rzucić okiem na tworzenie aplikacji internetowych za pomocą JSF 2.0 w Javie EE 6 i porównać je ze swoimi doświadczeniami. Możesz być mile zaskoczony.

Odpowiedzi:


174

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.


81
Play Framework jest również podobny do Ruby on Rails, ale dla Javy. Kod -> zaktualizuj przeglądarkę.
Jonas

34
Po prostu spróbuj pozbyć się niektórych nieporozumień. Java EE nie jest jedyną rzeczą po stronie serwera Java, jak wielu się wydaje.
Jonas

22
Facebook robi też coś podobnego. Ich podstawa kodu znajduje się w PHP, ale z powodu problemów z szybkością i skalowalnością musieli napisać kompilator (HipHop), który skompilował PHP do C ++, który jest następnie kompilowany przy użyciu g ++. To zabawne, jak wszyscy mówią o tym, jak wspaniale są Ruby i PHP i że wszystkie strony są wokół nich zbudowane, ale kiedy spojrzysz na ich nieefektywność, większość dużych organizacji musi przejść na coś innego. Jeśli dobrze pamiętam, Craigs List ma bardzo dużo kodu zaplecza napisanego w C / C ++ z tego właśnie powodu.
Kibbee,

28
1) Przy użyciu Eclipse kompilacja odbywa się podczas pisania i rzadko można to zauważyć. Ponadto, uruchamiając Tomcat w Eclipse, mogę ponownie uruchomić aplikację w niecałą sekundę. Ponowne uruchamianie moich aplikacji rzadko mi przeszkadza 2) Nie ma srebrnej kuli, chłopaki. Ruby lub inny język nie przyspieszy 10-krotnie. Problemem dla deweloperów Java jest często przyspieszenie, ale jeśli wiesz, co robisz, możesz rozpocząć pracę w projekcie w <10 minut.
alex

5
Java i każdy inny język statyczny mają dwie ogromne zalety, prawie bezproblemową refaktoryzację i wykrywanie API bez dokumentacji.
Eran Medan,

136

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.


5
W przypadku „małych” aplikacji jest to jeszcze bardziej prawdziwe, jeśli musisz (ponieważ jest to „standard” i firma go używa) pracować z serwerami aplikacji potworów, takimi jak Websphere, podczas gdy na przykład Tomcat jest wystarczająco dobry. .. Dlaczego och, dlaczego muszę pracować z tą popsutą konsolą administracyjną? Westchnienie ...
Jalayn,

7
@Jayayn: Z mojego doświadczenia wynika, że ​​chcą utrzymywać tylko jeden program serwera aplikacji do wszystkiego, zamiast administrować WebSphere dla Zespołu A, Tomcat dla Zespołu B, Glassfish (lub coś innego) dla Zespołu C ... i rozumiem to też się czuję, ale tak, to mnie frustruje.
FrustratedWithFormsDesigner

3
Dotyczy to Java EE, ale teraz istnieje Play Framework, który sprawi, że Twoje aplikacje internetowe Java będą tak lekkie i produktywne jak Ruby on Rails.
Jonas

9
Nowa Java 6 EE - zwłaszcza profil internetowy - pozwala na dość proste aplikacje internetowe.

4
@ ThorbjørnRavnAndersen Aplikacja może być prosta, ale zrozumienie jej nie jest, podobnie jak zrozumienie głównych narzędzi, takich jak Ant czy Maven. Krzywa uczenia się początkującego jest ogromna i pełna zagnieżdżonych warstw zupy akronimowej, pomieszania między specyfikacjami (np. JAX-RS) a implantami (np. Jackson) i nie tylko. NIEZWYKLE skomplikowane jest zrobienie czegoś prostego, jeśli chcesz naprawdę zrozumieć, co robisz.
Craig Ringer

135

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.


10
Jestem z tobą w wielu kwestiach, ale z niektórymi problem. Pętla kompilacji / testowania : użyj dynamicznego modułu internetowego Eclipse i / lub JRebel, i już go nie ma; świetny. Ciężkość : JBoss AS 7 jest dość lekki i szybki. a jeśli nie chcesz EE, możesz użyć Tomcat lub Jetty, których prawie nie ma. Testowanie : Arquillian jest najlepszym narzędziem do testowania, którego użyłem w DOWOLNYM języku, chociaż jest ono tylko wystarczająco dojrzałe, aby można go było używać. Piekło zależności : po prostu użyj Maven; powinna to być standardowa i obowiązkowa część JAva.
Craig Ringer

Zauważ, że wszystkie powyższe czynniki zwiększają problem związany z „brakiem baterii”, który jest ogromny. Wydaje się, że Java EE to pod-framework, na którym należy zbudować własny framework, a następnie zbudować aplikację. Bardzo nieefektywne. Każde narzędzie jest również strasznie błędne, a JSF2 jest po prostu narzędziem niszczenia wydajności programistów.
Craig Ringer

2
Myślę też, że przegapiłeś punkt krytyczny: krzywa uczenia się i błędy naprawdę spowalniają wszystko.
Craig Ringer

@CraigRinger Nie korzystałem z dynamicznego modułu internetowego Eclipse ani JRebel, więc masz rację, może zniknąć.
Ken Cochrane

2
Jeśli podoba Ci się IntelliJ, wypróbuj PyCharm - jest oparty na tym samym rdzeniu.
Tamlyn,

94

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:

  1. Usługi testowania edukacji - ColdFusion
  2. Ubezpieczenie od wysokiego ryzyka - ColdFusion i Java
  3. 401k - ColdFusion i Java
  4. Podróże - Java z wewnętrznymi aplikacjami ColdFusion
  5. Papiery wartościowe - ColdFusion (wersja wcześniejsza niż Java)

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?


23
„Firma 401k miała siostrzaną firmę obsługującą aplikację .NET z kompetentnymi programistami, aplikacja co tydzień ulegała awariom. W końcu przekonwertowali ją na Javę i zyskali stabilność”. Lol :), słyszałem o przeciwnym przypadku.
Den

12
Oczywiście, że tak. Aplikacje internetowe to coś więcej niż pisanie kodu, musisz wiedzieć, jak dostroić serwery, pisać optymalne SQL i tak dalej. Ta firma miała 2 deweloperów .NET i żadnych prawdziwych administratorów serwerów. Firma, która kupiła firmę, z którą byłam, również dostała tę aplikację do umowy. Byli ogromnym sklepem Java i dlatego mieli więcej dostępnych zasobów, aby zagwarantować stabilność.
Adrian J. Moreno

48
Wydaje mi się nieuczciwe, że napisałeś to zdanie jako przyczynę i skutek. Konwertuj na Java = wzrost stabilności? Wszyscy wiemy, że nie dlatego. Również przepraszam za całe to doświadczenie ColdFusion;)
Jordan

3
Zbyt uczciwie, inwestorzy chcą zobaczyć smak tego roku. Ale nadal osobiście nie mogę wymyślić gorszego wyboru do szybkiego opracowania prototypu, z wyjątkiem bardzo trudnych do znalezienia deweloperów Java o wysokiej jakości.
Erik Reppen

9
bardzo wysokiej jakości deweloperzy Java, których nie można łatwo znaleźć - Rzeczywiście.
luis.espinal

73

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.


Myślę, że to się zmieniło, teraz możesz hostować aplikacje Java w GAE bez żadnych kosztów.
Mahmoud Hossam

+1 za hosting Java. Chociaż ASP.Net nie jest trudny do znalezienia i jest tani. Płacę 8 USD miesięcznie za udostępniony hosting ASP.Net. Z drugiej strony chciałem założyć witrynę w Javie i nie mogłem znaleźć hosta współdzielonego z Javą, a korzystanie z VPS nie interesuje mnie w projekcie edukacyjnym.
Jetti

9
+1 za to. O wiele łatwiej jest hostować wiele witryn na serwerze dla PHP niż dla Javy, a ponadto znacznie łatwiej jest znaleźć tanie rozwiązania hostingowe dla PHP niż dla Javy.
Jonas

Masz rację @ Mark, naprawiony.
sebastiangeiger

1
@Kibbee - Arvixe To który używam. Mam osobisty plan ASP Pro.
Jetti

70

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”.


Vaadin to świetne narzędzie do tworzenia aplikacji intranetowych i dużych przedsiębiorstw. Chyba nie nadaje się tak dobrze na start-up. Chyba że obejmiesz to, jak to wygląda, ponieważ zbyt trudno to zmienić.
naugtur

7
Zgoda; Java EE 6 jest świetna, gdy tylko upuścisz JSF2 i używasz czegoś rozsądnego i produktywnego. Krzywa uczenia się jest jednak wciąż ogromna .
Craig Ringer

1
Możesz dodać Tapestry5 ( tapestry.apache.org ) do swojej listy nowoczesnych frameworków Java.
Neeme Praks,

@CraigRinger JSF jest łatwy. Twój komentarz brzmi jak samo pytanie: religijny rant
jwenting

@jwenting Cóż, minęły trzy lata , więc od tego czasu poprawiono trochę pod względem dokumentacji i narzędzi zewnętrznych. Na stosie EE 6, kiedy z nim pracowałem, było cholernie okropnie, jeszcze bardziej, jeśli wspierałem Glassfish 3 i AS 7.
Craig Ringer

41

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ę. :)


3
Chcesz rozwinąć temat „gniazda szczurów, które staje się C #”?
XåpplI'-I0llwlg'I -

1
Nie jestem do końca pewien, dlaczego powiedzenie „Nie powtarzaj się” było odpowiedzią na piekło xml i długie cykle budowania aplikacji Java ”. DRY pojawiło się jako koncepcja w społeczności Agile, z których większość używała wówczas języków innych niż Java.
Jules

38

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.


24
Osobiście nie lubię dynamicznych języków. Języki statyczne zwiększają produktywność, gdy mogę szybko zobaczyć wszystkie błędy pisowni w moim środowisku IDE i użyć narzędzi do refaktoryzacji. Powinieneś rzucić okiem na Play Framework, to framework internetowy Java zainspirowany Ruby on Rails i zwiększający produktywność dzięki Javie.
Jonas

4
Potężny framework, taki jak szyny, oznacza również, że jeśli coś jest źle zaimplementowane, większość ludzi nie może go zastąpić czymś innym, ponieważ ten komponent jest zbyt ciasny w ramach. Podczas gdy w Javie, jeśli nie lubię Hibernacji, mogę użyć czegoś innego, na przykład Cayenne lub JPA.
Coyote21

2
Jako ktoś walczący z Django, pozwólcie mi powiedzieć: Coyote21 ma absolutną rację. Podstawową CRUD można uruchomić i uruchomić w ciągu pięciu minut, ale w momencie, gdy zaczynasz dodawać logikę biznesową (kiedy ten rekord jest aktualizowany, rekord musi zostać wstawiony do tej tabeli i ...) do CRUD, masz problemy .
asthasr

Jeśli lubisz Railsy, ​​ale potrzebujesz Java, spójrz na Seam Forge. Uwaga, używa JSF2, z którym praca jest przerażająca, ale Forge jest całkiem niezły.
Craig Ringer

można budować aplikacje w Javie CRUD za pomocą Roo w ciągu kilku minut, to samo z Grails (nie dokładnie, ale nadal Java JVM) Play 1.0 miał generatory / rusztowania, zastanawiam się gdzie to poszło chociaż ...
Eran Medan

24

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.


12
bezbolesny dostęp do bazy danych? Wiosna JDBC lub Hibernacja działają świetnie. Świetna manipulacja sznurkiem? Nie sądzę, że manipulowanie ciągami to znacznie więcej niż 5% w każdym projekcie. Cukier składniowy? Co przez to rozumiesz? Szybki proces iteracyjny? Java ma to (Tomcat w Eclipse jest bezbolesny). Java Unun? Brakuje tylko zwięzłych anonimowych klas / lambdas / itp. Funkcje „zabawy” w innych językach mają tendencję do zaciemniania i wyjaśniania. Ciągi w przełączniku ... tak, muszę przyznać, że jest do bani (jednak przez większość czasu powinieneś używać wyliczeń).
alex

4
@alex: Syntax sugarJava 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.
Lie Ryan,

4
@alex Ciekawe. Zwykle używam ogólnych w C # - chociaż patrząc na to z zewnątrz, prawdopodobnie wynika to ze zwiększonej funkcjonalności lamdas - więc mogę mieć IRepository<T>z IQueryable<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ć.
Podstawowy

3
Nie mogę uwierzyć, że dwie osoby twierdziły, że Tomat wewnątrz Eclipse jest bezbolesny i sprawia, że ​​programowanie w Javie jest wydajne. Uważam, że sprawia, że ​​każdy cykl programowania jest znacznie szybszy, ale wymaga codziennej konserwacji, w tym wielokrotnego odświeżania, odbudowywania, czyszczenia tomcat, ponownego wdrażania, restartowania, a czasem restartowania Eclipse i powtarzania wcześniejszych kroków. Gdyby mój samochód wymagał tak dużej konserwacji, nigdy nie zabrałbym się do pracy.
Brandon,

1
@Brandon Popieram to. Nigdy, ani razu nie miałem problemu z konfiguracją w Node lub Python / Django. Tracę cierpliwość do RoR. Nasza baza kodu Java oparta na zależnościach Ant / Mvn / Spring / Hibernate / eclipse jest budzącym grozę koszmarem, zanim jeszcze dojdziesz do kodu.
Erik Reppen

18

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

  1. Składnia jest za długa. Aby wydrukować coś, musimy napisać System.out.print. Naprawdę nie możesz użyć prostego edytora typu VI i napisać działający kod w ciągu kilku godzin.
  2. Słabe ramy testowe. Mimo że ramy testowania są bardzo podobne w Javie i Ruby, Ruby robi krok naprzód, udostępniając rzeczy do testowania. Jest to szczególnie prawdziwe, jeśli używasz DB intensywnie w swojej aplikacji. Nawet wiele platform internetowych nie myśli o testowaniu.
  3. Szablony są uciążliwe. Przekształca stosunkowo prosty język w zupę z makaronem.
  4. Nie fajnie. Większość aplikacji Java jest napisana w dużych firmach, co jest związane z biurokracją, która nie idzie tak dobrze z programistami. Ludzie nie myślą Google, gdy myślą o Javie. Google == Python. Musi także wiele zdziałać, nie wydając książek wskazujących na X w Y dniach.
  5. Nie lubię kompilować. Dla większości programistów kompilacja jest zjawiskiem sprzed dziesięciu lat. W latach 80. miało to sens z C, ale komputery mordern mogą zrobić znacznie więcej. Nie piszą kodu w skompilowanych językach. Java jest jednym z niewielu języków, które są kompilowane i używane do pisania aplikacji internetowych.
  6. Zbyt wiele koncepcji Ups. Mimo że programiści po cichu przyjęli domenę Oops. Nie podoba im się to całkowicie. Nie lubią, gdy piszesz aplikację z 10 klasami, przy czym każda klasa robi tylko jedną rzecz. Sprawia, że ​​otwierasz setki plików i wyobrażasz sobie interakcję w setkach klas, czasem z frameworkami. Sprawia, że ​​cała działalność programistyczna staje się obowiązkowa. Może tak być w przypadku większości języków, ale widziałem, że programiści Java zwracają dużą uwagę na to, co robi klasa. To programiści Java często wymyślają kod zawierający 100 klas. Jest to dobre z wielu perspektyw, ale deweloperzy spoza Java nie znoszą tego.

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.


(2) wspaniale zajmuje się JBoss Arquillian ( arquillian.org ). Reszta to bardziej problem z JSF2 niż problem z Javą. Największe problemy IMO to krzywa uczenia się i ogromny problem z ramami, ale jeśli unikniesz JSF2, możesz zrobić to dobrze.
Craig Ringer

5
Kocham OOP. Znam też OOP i dlatego nie zgadzam się, że zdecydowana większość programistów Java robi to za dużo. Możesz napisać klasę, ale jeśli twój kod wciąż jest splątanym bałaganem spaghetti, naprawdę znalazłeś sposób (fasolę) na napisanie bzdurnego kodu proceduralnego z bezsensownymi strukturami owiniętymi wokół, co równie dobrze, w najlepszym razie, prostych funkcji lub struktur.
Erik Reppen,

2
„Ludzie nie myślą Google, kiedy myślą o Javie”. ... Z pewnością myślę o Androidzie i ich Dalvik VM (czyli Java VM), kiedy myślę o Google. Myślę też o fajnych rzeczach, takich jak GWT (automatyczne generowanie JavaScript z Java). Jeśli jest jedna firma „wysoko” na Javie, to Google. Znacznie więcej niż Apple czy Microsoft. To prawda, że ​​Oracle i IBM są jeszcze bardziej związane z Javą niż Google, ale nadal: miliardy urządzeń z Androidem, na których działają aplikacje Java na maszynie wirtualnej Java, jest czymś trudnym do pomyślenia bez ustanowienia bardzo silnego łącza Google / Java.
Cedric Martin

W tych komentarzach wiele nienawiści do JSF2 tworzy @CraigRinger. :-) Co cię denerwuje? Uznałem, że to skomplikowane na początek, ale kiedy już zacząłem, uwielbiam to. Oczywiście wcześniej korzystałem ze Springa, więc wszystko inne będzie wyglądało na poprawę ... :-)
Brian Knoblauch

1
Jestem programistą OOP w Javie i nie mogę przecenić korzyści płynących z OOP dla programistów. Tak, opracowanie zajmuje trochę więcej czasu, ale niższy wskaźnik błędów, czytelny i łatwiejszy w utrzymaniu kod jest tego wart. Nie wspominając o tym, że testowanie jednostkowe staje się o wiele łatwiejsze dzięki odpowiednio wykonanemu OOP.
IntelliData,

14

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.


+1 za przekroczenie ram. Robi się szalony, wiosna i hibernacja j2ee maven, spędzasz cały czas na pisaniu konfiguracji xml.
Richard

1
+1 dla frameworka. Nie tylko oryginalne frameworki próbowały P ** s Poor (JSP, STRUTS), teraz mamy około trzydziestu do wyboru, z których żaden nie działa tak dobrze jak RoR.
James Anderson,

To nie tylko ramy. To obsceniczne poziomy zgodności z rzeczami, które nie mają sensu. Ujawnienie wielu właściwości oznacza, że ​​robisz to źle. Dodanie do tego narzędzia pobierającego i ustawiającego wanilię po prostu dodaje bezcelowe wywołanie metody i niczego nie zmienia, ale żaden programista Java nie będzie po prostu dyndał właściwościami na takim obiekcie, ponieważ społeczność potwierdza, że ​​jest to w jakiś sposób bardziej złe niż to, co już robią. Ale tak na poważnie, XML zamiast kodu ... jak to trwało dłużej niż 5 minut?
Erik Reppen

14

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ł.


Myślę, że to naprawdę dobry punkt +1
sfrj

1
Nie zgadzam się z akapitem: „Najprawdopodobniej jest programistą samoukiem. To nie jest prawdą w dzisiejszych czasach, w dzisiejszych czasach większość osób po 30. roku życia jest kompetentnymi programistami i ma co najmniej stopień naukowy.
Coyote21

1
??? Maluję prototypowy startup internetowy. Nie powiedziałem nic o ich kompetencjach. Możesz być samoukiem i kompetentny w tym samym czasie. Nie jestem pewien, z czym się nie zgadzasz.
Michael Brown

1
To miała być moja odpowiedź. Java jest właściwie jedyną aktualną technologią internetową, która nie została zaprojektowana, więc każdy kompetentny programista może ją po prostu podnieść i używać. Druga część twojej odpowiedzi jest w przybliżeniu
user16764

14

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.


3
Podejmę więcej wyborów i trochę więcej złożoności w porównaniu z ponad 9000 wbudowanymi metodami PHP.
Kaleb Brasee,

1
PHP jest tak łatwe do skonfigurowania.
Barfieldmv,

9
ale to sprawia, że ​​tak trudno jest napisać dobry kod ... łatwiejszy w konfiguracji, łatwiejszy do uruchomienia, mniej nudne nie powinny być kryteriami używanymi do wyboru języka. Dobre programowanie wymaga dyscypliny, cierpliwości i wysiłku ... to zły znak, jeśli nie masz ich przy wyborze ...
alex

Chyba że oboje śmierdzą, ale jedna z nich jest o wiele bardziej PITA do założenia niż druga.
Erik Reppen 7.12

12

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.


1
Nie zgadzam się z „szybszym”. Teoretycznie powinny być, ale istnieją tam ogromne witryny php i prawie wszystkie anegdoty na temat problemów z wydajnością dotyczą MySQql lub innych bazowych baz danych. Z drugiej strony prawie każda aplikacja J2EE, z którą się zetknąłem, potrzebowała obszernego tuningu, zanim wydajność była nawet akceptowalna.
James Anderson

1
@James: czy masz coś oprócz niejasnych anegdot na poparcie tego? Wszystkie 10 najpopularniejszych stron internetowych działa na zarządzanych platformach (Amazon na Javie, Twitter na Scali IIRC, Google na niestandardowym zapleczu Java i C ++) lub mają wysoce dostosowaną infrastrukturę (Facebook i Wikipedia używają PHP, ale oba mają ogromne ilości niestandardowego kodu natywnego dla prędkości). Java regularnie przewyższa dynamiczne języki w testach porównawczych. Nie jestem fanatykiem Javy, ale wydajność nie jest problemem Javy.
Daniel Pryden

Nie ma problemów z wydajnością samego Java „nie tak szybko jak C, ale szybciej niż cokolwiek innego”. Jednak J2EE, frameworki, ORM, wstrzykiwanie zależności i konstrukcja nadmiernej liczby jest prawie na pewno nie działać; istnieje zbyt duży potencjał do ukrytych wąskich gardeł i nieprzewidzianych interakcji
James Anderson,

1
@Basic: O co ci chodzi? Istnieje wiele zepsutych bibliotek i ram dla dowolnego języka. Tak, istnieje wiele kruchych i nieaktualnych dokumentów - ale to również nie jest rzadkie. I odwrotnie, istnieją fantastyczne biblioteki, frameworki i narzędzia dla Java. Czy naprawdę próbujesz zasugerować, że powinna istnieć jedna kompleksowa platforma dla każdej aplikacji?
Daniel Pryden,

1
@Basic: Cofnij się od czego? Przez półtora roku, odkąd po raz pierwszy napisałem tę odpowiedź, przeszedłem i obecnie pracuję w Google, i mogę was zapewnić, że Java jest bardzo intensywnie wykorzystywana do tworzenia aplikacji internetowych w Google. Oczywiście potrzeby Google bardzo różnią się od potrzeb wielu innych firm, ale Java jest zupełnie inną bestią, jeśli używasz odpowiednich bibliotek i frameworków - po prostu sprawdź niektóre rzeczy, które Google ma na licencji open source (Guava, Guice, GWT, bufory protokołów itp.).
Daniel Pryden,

12
  1. Java jest bardziej złożona do nauki niż PHP / Python / Ruby
  2. Ekosystem Java jest bardzo złożony, bardzo duży i dość mylący dla początkujących
  3. Istnieje wiele historycznie złych frameworków o negatywnej reputacji związanych z java, musisz wiedzieć, które frameworki unikają marnowania czasu na
  4. Narzędzia do budowania Java są sposobem na złożoność (maven i ant)
  5. Java nie ma łatwego w użyciu systemu modułów (OSGI jest zbyt skomplikowane)
  6. Java IDE, takie jak Eclipse, a jednocześnie bardzo wydajne z niesamowitymi funkcjami, jest trudne do skonfigurowania w celu efektywnego tworzenia stron internetowych bez dużego doświadczenia.
  7. Jeśli używasz czegoś innego niż Tomcat lub Jetty jako serwera, będziesz sfrustrowany długim czasem uruchamiania WebSphere / WebLogic / JBOSS
  8. Java EE rozwiązuje problemy, których wiele osób nie ma, takie jak transakcje rozproszone

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.

  1. Czas rozruchu krótszy niż 10 sekund
  2. Prawidłowo skonfigurowany obszar roboczy zaćmienia, ze wszystkimi frameworkami rozbudowanymi i skonfigurowanymi
  3. Dobry wybór bibliotek (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... itp.)
  4. Szybkie maszyny deweloperskie z dyskami SSD
  5. Subskrypcja Orielly Safari

8
Wyjaśnijmy się jednak. Język Java nie jest trudny do nauczenia. To wszystkie warstwy bzdur zbudowanych wokół pracy z Javą, aby nadrobić jej wady (gadatliwość, ochrona przed tobą i twoimi członkami drużyny poprzez bycie nieelastycznym jak wszyscy, absurdalna liczba bibliotek, na których polegano itp.) To jest PITA uczyć się.
Erik Reppen,

2
@ErikReppen Bardzo prawda. Muszę pracować nad projektem Java, ale mam doświadczenie w .Net. Język i składnia są łatwe, jak wszystko, co zrozumiałem. To gadatliwość naprawdę doprowadza mnie do szału. To, czego kiedyś użyłem w 1 linii, zajmuje teraz 5-10 i (często) edycję pliku konfiguracyjnego XML. Nie wspominając już o tym, że bez spędzania godzin na czytaniu, wybranie „właściwej” struktury pracy to koszmar - i to zanim dowiesz się, że twój scenariusz jest uważany za przypadek skrajny, nie jest obsługiwany, a jeśli ci się nie podoba przepisz to. Chcę spędzać czas na rozwiązywaniu wielkich problemów
Basic

„Java jest bardziej złożona” - czy ktoś może kiedykolwiek zapamiętać kolejność parametrów dla PHP strposlub in_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.
jevon

@jevon: Dokumenty PHP są bardzo dobre, a moje IDE i tak chce mi przypominać. Również SimpleXML.
DanMan

12

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.


Nie jestem fanem Java, ale ta „złożoność”, o której mówisz, mogła być abstrakcją. Abstrakcja jest bardzo przydatna zarówno do testowania, jak i konserwacji (gdy jest używana z umiarem). Trudno powiedzieć na pewno, nie mogąc porównać kodu
Basic

11

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.


4
Start-upy używają innych technologii, ponieważ chcą to zrobić już teraz. Nie później. I zrobili to, żeby zrobić to teraz, jak 3 osoby, a nie 30.
Erik Reppen

Cytowanie osoby może przedstawiać jedynie jej poglądy i wybory, ale nie potwierdza, że ​​cokolwiek wybrał, była / była właściwą decyzją.
DivKis01,

9

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.


9
Absolutnie nie! W rzeczywistości Java jest dominującym językiem w świecie po stronie serwera. Aplety wygasły może dekadę temu.
Chiron,

5
Flash zrobił to, co próbowały być aplety. Szybkie uruchamianie, szybkie pobieranie, mało miejsca w pamięci.

4
Znam wielu ludzi, którzy nie potrafią nawet rozróżnić Java i Javascript. Mimo że są one całkowicie niezwiązane. To kolejna rzecz, która nadaje Javie złą nazwę.
Kibbee,

5
@Kibbee ... albo to nadaje Javascript złą nazwę :)
Matthew Schinckel

9

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.


1
Gdzie jest twoje źródło, że startupy nie używają Java? Utwórz kopię zapasową swojego założenia, podając kilka faktów.
Walter,

7

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ń.


3
Powinieneś rzucić okiem na Play Framework, to internetowy framework Java, który sprawia, że ​​jesteś produktywny w Javie i jest inspirowany Ruby on Rails.
Jonas

2
@Jonas, zastanów się nad napisaniem dobrych postów na blogu, wyjaśniając to wszystko zwięźle.

@Jas, co powiedział Thorbjorn! Dokładnie go przeczytam. :)
Brian

@ Thorbjørn: Nie mam bloga. Krótko mówiąc: w Play Framework wystarczy zapisać kod źródłowy Java, a następnie zaktualizować przeglądarkę internetową. Kod jest kompilowany automatycznie po stronie serwera przy użyciu kompilatora Eclipse. JPA służy do dostępu do bazy danych. Oto artykuł na ten temat Graj! Użyteczność ram
Jonas

2
@ Thorbjørn & Brian: Zobacz wideo na pierwszej stronie internetowej frameworka Play, wyjaśnia to bardzo ładnie, powiedziałbym.
Bjarke Freund-Hansen,

7

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.


6

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.


6

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.


5

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.


5

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”


5

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


3

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.


Krzywa uczenia się jest absolutnie pionowa. Spędzisz kilka pierwszych TYGODNI, zastanawiając się, jakie są akronimy, jak standardy odnoszą się do ich implementacji, jak wszystko się układa warstwami itp. Następnie następne kilka tygodni zastanawiasz się, jakiego gularza bibliotek i ram użyć. Potem kilka tygodni zgłaszania błędów w nich ...
Craig Ringer

3

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.


Całkowicie się z tobą zgadzam +1
Arshad Ali

3

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.


Java EE 6 może być „lekka” (z wyjątkiem JSF2), ale wciąż jest to niesamowicie ogromna krzywa uczenia się, gigantyczny stos skomplikowanych specyfikacji i niezwykle skomplikowany system warstwowy. Może lekki, ale na pewno nie prosty.
Craig Ringer

2

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. . .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.