Perché Java non viene utilizzato per lo sviluppo di applicazioni Web moderne? [chiuso]


393

Come programmatore Java professionista, ho cercato di capire: perché l'odio verso Java per le moderne applicazioni Web?

Ho notato una tendenza che dalle startup web moderne, una percentuale relativamente piccola di loro sembra utilizzare Java (rispetto alla popolarità complessiva di Java). Quando ne ho fatto alcune domande, in genere ho ricevuto una risposta del tipo "Odio Java con passione". Ma nessuno sembra davvero in grado di dare una risposta definitiva.

Ho anche sentito che questa stessa comunità di startup web si riferisce negativamente agli sviluppatori Java, il che implica più o meno che sono lenti, non creativi, vecchi.

Di conseguenza, ho trascorso del tempo a lavorare per raccogliere Ruby / Rails, fondamentalmente per scoprire cosa mi sto perdendo. Ma non posso fare a meno di pensare a me stesso "Potrei farlo molto più velocemente se stessi usando Java", principalmente a causa dei miei livelli di esperienza relativa.

Ma anche perché non ho visto nulla di critico "mancante" da Java, impedendomi di creare la stessa applicazione.

Il che mi porta alle mie domande :

Perché Java non viene utilizzato nelle moderne applicazioni Web?

  • È un punto debole della lingua?

  • È uno stereotipo ingiusto di Java perché esiste da così tanto tempo (è stato ingiustamente associato alle sue vecchie tecnologie e non riceve il riconoscimento per le sue capacità "moderne")?

  • Lo stereotipo negativo degli sviluppatori Java è troppo forte? (Java non è più "bello")

  • Le applicazioni scritte in altre lingue sono davvero più veloci da costruire, più facili da mantenere e offrono prestazioni migliori?

  • Java è utilizzato solo da grandi aziende che sono troppo lente per adattarsi a una nuova lingua?


142
Penso che tu sia errato: è ancora usato, ha appena perso il fattore cool.

41
@Graham Lee: Java è mai stato bello? Devo aver perso qualcosa. Beh, immagino sia un caffè freddo, ma figo? Penso che la ragione principale sia che java, in particolare i framework enterprise java, sono stati e sono ancora fortemente ingegnerizzati. Non puoi considerarli leggeri, li usi semplicemente perché hai bisogno delle funzionalità di distribuzione / bilanciamento / scalabilità della piattaforma e vuoi usare un framework per il frontend che è fatto anche con Java, per motivi di omogeneità.
Falcon,

20
Forse, perché non è moderno ? : P E Java non è mai stato bello, semplicemente perché ha gettato la parte di hacking fuori dalla programmazione.
back2dos,

28
@Falcon Java è stato bello quando è stato presentato per la prima volta, Sun ha fatto un ottimo lavoro nel sostenere Java, sia che l'hype fosse giustificato o meno non abbia nulla a che fare con il fatto di essere cool o no, molte cose interessanti sono pubblicizzate senza motivo.
Mahmoud Hossam,

11
@Falcon, dovresti dare un'occhiata alla creazione di applicazioni web con JSF 2.0 in Java EE 6 e confrontarla con le tue esperienze. Potresti essere piacevolmente sorpreso.

Risposte:


174

Le startup moderne devono colpire il mercato il prima possibile. Non hanno bisogno di spendere circa sei mesi per rilasciare la loro applicazione web Java.

Twitter, ad esempio, è stato creato utilizzando Rails / Ruby ma una volta diventato non scalabile, sono migrati su JVM.

Per non parlare del fatto che il processo di sviluppo non è produttivo: codice -> compila -> distribuisci mentre è in framework come (Rails / Django / Grails): esegui test server -> codice -> cambia le cose e vedi cosa succede.

La buona notizia è che JRebel ti consente di vedere immediatamente le modifiche al codice.


81
Play Framework è anche come Ruby on Rails, ma per Java. Codice -> aggiorna il tuo browser.
Jonas,

34
Prova solo a sbarazzarti di alcune idee sbagliate. Java EE non è l'unica cosa sul lato server Java come molti sembrano pensare.
Jonas,

22
Anche Facebook fa qualcosa di simile. La loro base di codice è in PHP, ma a causa di problemi di velocità e scalabilità, hanno dovuto scrivere un compilatore (HipHop) che ha compilato il PHP in C ++, che è poi compilato usando g ++. È divertente come tutti parlino di quanto siano grandi rubini e PHP e che tutti i siti siano costruiti attorno a loro, ma poi quando guardi quanto sono inefficienti, la maggior parte delle grandi organizzazioni deve passare a qualcos'altro. Se ricordo bene, Craigs List ha un sacco di codice backend scritto in C / C ++ proprio per questo motivo.
Kibbee,

28
1) Usando Eclipse, la compilazione avviene mentre digiti e raramente noterai. Inoltre, eseguendo Tomcat in Eclipse posso riavviare un'app in meno di un secondo. Raramente sono ostacolato riavviando le mie app 2) Non c'è proiettile d'argento, ragazzi. Ruby o qualsiasi altra lingua non ti rendono 10 volte più veloce. Il problema con lo sviluppatore Java è spesso il tempo di accelerazione, ma se sai cosa stai facendo, puoi iniziare a lavorare in un progetto in <10 min.
alex,

5
Java e qualsiasi altro linguaggio statico, hanno due enormi vantaggi, quasi senza problemi di refactoring e scoperta dell'API senza documentazione.
Eran Medan,

136

Nella mia esperienza, Java per le applicazioni Web è eccessivo per le piccole applicazioni. Un semplice blog con una tabella di database contiene voci di blog, ad esempio, potrebbe essere fatto in qualcosa di molto più semplice.

Di solito ho visto Java fare molto meglio in applicazioni Web molto più grandi (pensa a banche e compagnie assicurative) che comunicano con un numero di altri sistemi (come back-end e database mainframe e sistemi di elaborazione batch in background di servizi Web peer ... tutti nella stessa applicazione).

Da quello che ho visto, l'architettura di un'applicazione Web JavaEE è di solito più di quanto sia necessario per applicazioni Web piccole / semplici.


5
Per le "piccole" applicazioni, questo è ancora più vero se devi (perché questo è lo "standard" e l'azienda lo utilizza) lavorare con server di applicazioni mostruose come Websphere, mentre il più delle volte Tomcat, ad esempio, è abbastanza buono. .. Perché oh perché devo lavorare con quella console di amministrazione incasinata? Sospiro ...
Jalayn,

7
@Jalayn: Nella mia esperienza è perché vogliono mantenere un solo programma di application server per tutto, piuttosto che amministrare WebSphere per il Team A, Tomcat per il Team B, Glassfish (o qualcos'altro) per il Team C ... e posso capire che anche sentirsi, ma sì, è frustrante anche per me.
FrustratedWithFormsDesigner,

3
Questo è vero per Java EE, ma ora c'è Play Framework che renderà le tue app Web Java leggere e produttive come Ruby on Rails.
Jonas,

9
Il nuovo Java 6 EE - in particolare il profilo web - consente alcune webapps piuttosto semplici.

4
@ ThorbjørnRavnAndersen L'app potrebbe essere semplice, ma la comprensione del framework non lo è e neppure la comprensione dei principali strumenti come Ant o Maven. La curva di apprendimento di un principiante è enorme e piena di strati annidati di zuppa di acronimi, confusione tra specifiche (ad esempio JAX-RS) e impls (ad esempio Jackson) e altro ancora. È IMMENSAMENTE complicato fare qualcosa di semplice se vuoi veramente capire cosa stai facendo.
Craig Ringer,

135

Ho programmato le app Web Java per 10 anni prima di passare a Python, 4+ anni fa. Sento di essere molto più produttivo usando Python e di poter fare molto di più in un breve periodo di tempo, e ad essere sincero, sono molto più felice quando mi sviluppo in Python. Ecco alcuni dei motivi per cui penso che Python sia migliore di Java in base alla mia esperienza personale, il tuo chilometraggio potrebbe molto.

Frame Web:

Quando ho iniziato a programmare app Web in Java, Struts è appena uscito, e non era eccezionale, ma era la cosa migliore disponibile. Ho creato un sacco di app struts e alcune in altri framework lungo la strada. Ogni volta che usciva un nuovo framework (Tapestry, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring, ecc.), Lo provavo e vedevo se era meglio, e la maggior parte delle volte era solo un po 'meglio e talvolta non è affatto migliore. Devo dire che il framework di gioco è un passo nella giusta direzione.

Batterie non incluse:

Una delle parti più fastidiose di Java era il fatto che la maggior parte delle librerie che usi non erano incluse in Java stesso, dovevi includere un sacco di librerie di terze parti da luoghi come i comuni di Apache. Se usi qualcosa come l'ibernazione con qualsiasi altra grande libreria, finisci nell'inferno di dipendenza Jar, dove l'ibernazione ha bisogno di una versione di un vaso e qualcos'altro ha bisogno di un'altra versione. Se carichi i file jar nell'ordine sbagliato, sei sfortunato. È necessario dipendere da strumenti come Maven ed Edera per gestire le proprie dipendenze, e questo porta solo più dipendenze nel progetto, il che si traduce in progetti enormi. Ho avuto alcuni file di guerra 100 MB + file di guerra per le app web più semplici.

Troppe opzioni:

Per qualche motivo sembra che ci siano troppi modi diversi di fare la stessa cosa in Java. Ci sono oltre 38 diversi framework web per java secondo wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) e 23 diversi ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) solo per citare un paio di esempi. Se guardi altre lingue hanno un numero più ragionevole. Alcune persone pensano che avere molte opzioni sia una buona cosa, ma non lo è porta a un grande sforzo sprecato nella comunità degli sviluppatori, tutti stanno reinventando la stessa ruota e se sei una persona nuova nella lingua che hai troppe opzioni tra cui scegliere.

Server delle app:

Le applicazioni Web Java sono molto pesanti e richiedono molte risorse per funzionare. Sono particolarmente affamati di memoria. Come qualsiasi software, possono essere ottimizzati per ridurre il loro footprint di risorse, ma rispetto ad altre lingue la loro configurazione è orribile. Nel mio passato ho usato weblogic, websphere, Jboss, tomcat e jetty. Ho usato i primi tre solo quando sono stato costretto a usare gli EJB, ma anche se non li stai usando erano server di app di grandi dimensioni e talvolta difficili da configurare e funzionare correttamente. Tomcat e Jetty sono molto migliori e più facili da configurare, ma sono ancora maiali delle risorse.

Hosting di app:

Se non stai utilizzando il tuo server, è davvero difficile trovare hosting condiviso per le tue app java a un prezzo ragionevole. Il motivo principale è perché le app java richiedono molta più memoria rispetto ad altre lingue, quindi non ha senso per un provider di hosting condiviso spendere la loro preziosa RAM eseguendo un sito java, quando potevano eseguire 5 siti php nello stesso posto. Ciò significa che ci sono meno fornitori che offrono hosting Java, il che a sua volta comporta costi più elevati per la gestione del tuo sito Web.

Tempo di sviluppo:

Quando ho sviluppato Java, mi sono trovato molto più lento di quello che posso fare in Python. Avrei bisogno di fare un cambiamento, compilare, ridistribuire e quindi testare, e questo rallenta il processo iterativo. So che ci sono modi per renderlo più veloce, ma anche nella migliore delle ipotesi, mi sono sentito molto più lento di quello che posso fare in Python.

In Python c'è anche molto meno codice plateplate per fare la stessa cosa, quindi dedico anche meno tempo allo sviluppo del codice.

Java sembra troppo ingegnerizzato in molte parti, molte API e interfacce sono semplicemente complicate per quello che vuoi fare. E tutti e il loro fratello pensano di essere un architetto Java e questo si traduce in grandi sistemi complicati che sono difficili da usare e sviluppare.

IDE:

Quando stavo sviluppando in Java, mi sentivo bloccato all'IDE, ero perso senza di esso. IntelliJ è il migliore IDE sul mercato ed è stato difficile passare a Python perché non c'era niente di simile per Python. Quindi, invece di un IDE, ho appena usato textmate, che è solo un normale editor di testo. All'inizio è stato difficile, ma poiché era solo un editor di testo, era un'applicazione davvero veloce e reattiva. Potrei aprire il mio intero progetto in pochi secondi, mentre quando voglio aprire un progetto in un IDE potrebbe volerci un minuto o più, con una macchina con una tonnellata di RAM. I produttori di IntelliJ sono usciti con un editor di pitone chiamato pycharm, l'ho comprato quando è uscito per la prima volta ed è fantastico. Ma quello che ho capito è che non ho bisogno di un IDE per Python, sto bene con un editor di testo. Quando torno a lavorare su app Web Java che devo fare di tanto in tanto, provo a utilizzare l'editor di testo, ma non l'ho ancora imparato. Personalmente ho bisogno dell'IDE per Java di più perché se sbaglio qualcosa ci vuole più tempo per ricompilare e ridistribuire, il che mi rallenta.

ORM:

Quando ho iniziato a usare Hibernate come ORM, ho pensato che fosse fantastico, che avesse dei problemi e non fosse perfetto, ma era meglio di quello che stavo facendo prima. Ne ero felice, fino a quando ho fatto un'applicazione con l'ORM di Django su un progetto Python, e questo mi ha aperto gli occhi, ecco come dovrebbe funzionare un ORM. Dopo quel progetto sono tornato in letargo e mi sono sentito deluso e desideravo tornare all'ORM di Django. Un altro grande ORM in pitone è sqlalchemy, che è simile all'ORM di Django, ma un po 'diverso. Ho un'esperienza limitata con ORM di ROR, ma da quello che ricordo, è stato anche abbastanza buono.

Modelli:

I sistemi di template web in Java non sono così buoni, e penso di averli provati tutti (piastrelle, freemarker, velocità, ecc.). La maggior parte di essi offre solo funzionalità di base e sono una seccatura con cui lavorare. Sul lato Python, i miei due preferiti sono i modelli Django e Jinja2, hanno tutto ciò di cui potrei avere bisogno in un motore di template e sono davvero facili da usare.


10
Sono con te su molti punti, ma metto in discussione alcuni. Compile / test loop : usa il modulo web dinamico di Eclipse, e / o JRebel, e non c'è più; grande. Heavyness : JBoss AS 7 è piuttosto leggero e veloce. e se non vuoi EE puoi usare Tomcat o Jetty che sono a malapena presenti. Test : Arquillian è il miglior strumento di test che ho usato in QUALSIASI linguaggio, anche se è appena diventato abbastanza maturo per essere utilizzabile. Inferno delle dipendenze : basta usare Maven; dovrebbe essere parte standard e obbligatoria di JAva.
Craig Ringer,

Si noti che tutto quanto sopra aggiunge al problema "batterie non incluse", che è enorme. Sembra che Java EE sia un sub-framework su cui dovresti costruire il tuo framework per poi costruire la tua app. Molto inefficiente. Ogni strumento è anche orribilmente difettoso e JSF2 è semplicemente uno strumento di distruzione della produttività degli sviluppatori.
Craig Ringer,

2
Penso anche che tu abbia perso un punto critico: la curva di apprendimento e i bug rallentano davvero le cose.
Craig Ringer,

@CraigRinger Non ho usato il modulo web dinamico di eclipse o JRebel, quindi hai ragione, potrebbe non esserci più.
Ken Cochrane,

2
Se ti è piaciuto IntelliJ, prova PyCharm: è basato sullo stesso core.
Tamlyn,

94

Start Ups vuole il luccichio. Qualunque sia il lucido: RoR, Groovy, Grails, OOP w / PHP, Foobar, Wibble, Narf, ecc.

Enterprise vuole stabile, affidabile e scalabile: Java e .NET si adattano a questa fattura (se fatto correttamente).

Concerto attuale: servizi finanziari. Piattaforma: ColdFusion (essenzialmente una libreria di tag Java) e Java.

Concerti precedenti:

  1. Servizi di test di istruzione - ColdFusion
  2. Assicurazione ad alto rischio - ColdFusion e Java
  3. 401k - ColdFusion e Java
  4. Viaggi: Java con app ColdFusion interne
  5. Titoli - ColdFusion (versione pre-Java)

Questi sono tutti siti ad alto volume e ad alta sicurezza. Nessuno in nessuna di queste aziende ha mai considerato PHP, alcuni hanno esaminato RoR e riscontrato troppi problemi. La società 401k aveva una società gemella che eseguiva un'applicazione .NET con sviluppatori competenti, l'app continuava a bloccarsi ogni settimana. Alla fine l'hanno convertito in Java e hanno acquisito stabilità.

Le uniche persone che guardano dall'alto in basso Java sono quelle che non hanno o hanno poca esperienza reale con esso o sono state coinvolte in scarse implementazioni e ora sono timide. Vedono lo splendore e la figura se tutti i ragazzi carini lo stanno usando, perché non io?


23
"La società 401k aveva una consociata che eseguiva un'applicazione .NET con sviluppatori competenti, l'app continuava a bloccarsi ogni settimana. Alla fine l'hanno convertita in Java e hanno guadagnato stabilità." Lol :), ho sentito parlare del caso opposto.
Den

12
Beh, certo che hai. C'è di più nelle applicazioni web oltre alla scrittura di codice, devi sapere come ottimizzare i tuoi server, scrivere SQL ottimali e così via. Quell'azienda aveva 2 sviluppatori .NET e nessun vero amministratore del server. La società che ha acquistato la compagnia con cui ero ha anche ottenuto quell'app nell'affare. Erano un enorme negozio Java e quindi avevano più risorse disponibili per garantire stabilità.
Adrian J. Moreno,

48
Mi sembra poco verosimile che tu abbia scritto quella frase dichiarata causa ed effetto. Converti in Java = guadagno di stabilità? Sappiamo tutti che non è per questo. Inoltre, mi dispiace per tutta quell'esperienza ColdFusion;)
Giordania,

3
Troppo giusto, gli investitori tendono a voler vedere il sapore dell'anno. Ma personalmente non riesco ancora a pensare a una scelta peggiore per lo sviluppo rapido di prototipi, a parte gli sviluppatori Java di altissima qualità che non sono facili da trovare.
Erik Reppen,

9
Sviluppatori Java di altissima qualità che non sono facili da trovare - Anzi.
luis.espinal,

73

Un'aggiunta alla risposta di FrustratedWithFormsDesigner : poiché suppongo che la tua domanda riguardi più i siti più piccoli, c'è un aspetto importante che devi considerare per molte persone: l' hosting è onnipresente per PHP ma è più difficile per i siti Java o ASP. Questo tuttavia non è un difetto di quelle lingue.


Penso che questo sia cambiato, tuttavia, ora puoi ospitare app Web Java su GAE gratuitamente.
Mahmoud Hossam,

+1 per l'hosting di Java. Sebbene ASP.Net non sia difficile da trovare ed è economico. Pago $ 8 al mese per il mio hosting ASP.Net condiviso. D'altra parte, volevo provare a creare un sito in Java e non sono riuscito a trovare un host condiviso che esegua Java e dover usare un VPS non mi interessa per un progetto di apprendimento.
Jetti,

9
+1 per questo. Ospitare molti siti su un server per PHP è molto più semplice di quanto lo sia per Java e in aggiunta è molto più facile trovare soluzioni di web hosting a basso costo per PHP che per Java.
Jonas,

Hai ragione @Mark, risolto.
sebastiangeiger,

1
@Kibbee - Arvixe Questo è quello che uso. Ho il piano personale ASP Pro.
Jetti,

70

Java è assolutamente utilizzato per lo sviluppo di applicazioni web moderne. Soprattutto quando si arriva all'estremità leggermente più ampia / più complessa / scalabile dello spettro delle applicazioni web.

Se sei interessato a strumenti e framework moderni e produttivi dai un'occhiata a:

Ma penso che lo sviluppo web veramente moderno sulla piattaforma JVM sia probabilmente realizzato in uno dei nuovi linguaggi JVM piuttosto che usare direttamente Java, con Java che fornisce semplicemente la spina dorsale in termini di librerie sottostanti e infrastruttura back-end. C'è molto sviluppo web in Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) e Clojure ( Noir , Ring / Enlive + molti framework personalizzati) per citarne solo alcuni.

Con tutta l'innovazione che sta avvenendo nel nuovo spazio linguistico JVM, personalmente sospetto che Java diventerà in definitiva "l'assemblatore della programmazione lato server".


Vaadin è un ottimo strumento per la creazione di intranet e applicazioni per grandi aziende. Immagino non sia adatto a una startup. Questo a meno che tu non abbracci come appare, perché è troppo difficile cambiarlo.
naugtur,

7
Concordato; Java EE 6 è fantastico non appena si rilascia JSF2 e si utilizza qualcosa di sano e produttivo. La curva di apprendimento è comunque immensa .
Craig Ringer,

1
È possibile aggiungere Tapestry5 ( tapestry.apache.org ) all'elenco dei moderni framework Web Java.
Neeme Praks,

@CraigRinger JSF è facile. Il tuo commento si legge come la domanda stessa: un rant religioso
jwenting

@jwenting Bene, sono passati tre anni , quindi da allora è migliorato un po 'in termini di documentazione e strumenti esterni. Sullo stack EE 6 quando ci stavo lavorando era tremendamente orribile, moreso se supporta Glassfish 3 e AS 7.
Craig Ringer

41

Google, Amazon o LinkedIn sono considerati moderni?

Java è utilizzato per le moderne applicazioni Web. Se guardi in tutta l'azienda, è la lingua più utilizzata per le applicazioni web (interne).

Detto questo, Java ha attraversato un periodo in cui i suoi standard di sviluppo web hanno cercato di essere tutto per tutti (probabilmente lo fanno ancora). "Non ripeterti" è stata una risposta all'inferno xml e ai lunghi cicli di sviluppo dello sviluppo web Java. Di conseguenza, Java (EJB, Struts, JSF, ecc.) È stato visto come la cosa che tutti i nuovi paradigmi stavano cercando di superare.

Java, il linguaggio è dettagliato. Questo è un pro e un contro (ottimo per la manutenzione, fa schifo per gli sviluppatori). Esistono numerose funzionalità del linguaggio moderno che non sono ancora state trasformate in Java e che possono ridurre sostanzialmente i tempi di programmazione (proprietà, eventi, chiusure, generatori, comprensione dell'elenco, ecc.). Quindi, può essere frustrante quando proviene da un linguaggio più moderno. Detto questo, sono difficili da aggiungere a un linguaggio maturo senza diventare il nido dei topi che C # sta diventando.

Molte lingue utilizzate nello sviluppo web moderno sono tipizzate in modo dinamico. Ciò consente strumenti che possono ricaricare dinamicamente il codice mentre è scritto (ciò è più difficile da realizzare in un linguaggio statico - jrebel). Poiché lo sviluppo web si presta a iterazioni veloci, il ricaricamento dinamico è una grande vittoria. Riduce in modo significativo il ciclo di sviluppo su progetti greenfield e semplifica il corretto funzionamento dell'interfaccia utente e della UX (prove ed errori per natura).

Anche le lingue statiche hanno il loro posto. Per una logica di back-end complessa, che deve funzionare per anni, deve essere scalata senza problemi, deve essere molto veloce e deve essere completamente priva di errori, sono preferiti i linguaggi tipizzati staticamente (come Java o persino C).

Inoltre, con l'aumentare del conteggio / turnover degli sviluppatori e con il crescere dei prodotti, è probabile che persone ben intenzionate introducano bug alle stelle. Il rigore e la disciplina che un progetto Java ben progettato (interfacce, schemi e acqua santa per quei vampiri php :) impone aiuta a ridurre il rischio a lungo termine. Sebbene ciò possa essere ottenuto anche tramite test unitari, la rete di sicurezza derivata dal controllo statico (e analizzatori statici come findbugs e clang) offre un livello integrato di copertura del codice che è difficile da replicare con test scritti a mano. Non fraintendetemi, dovrebbero esserci test unitari e test funzionali, ma le organizzazioni reali non raggiungono mai una copertura del 100%. Per quello che controllano, fanno gli analizzatori statici.

Pertanto, nei progetti di grandi dimensioni (definiti più dalla dimensione del team che dalla dimensione del codice), dove esiste una complessa interazione tra blocchi di codice sviluppati in modo indipendente, le lingue come Java sono ancora preferite. Esempi includono applicazioni web di grandi dimensioni / complesse come quelle dei broker finanziari (ameritrade), scambi finanziari (nasdaq, nyse, forse londra dopo il fallimento di .net), servizi bancari online (quasi tutti), e-mail (google), aste (ebay) , eccetera.

Dal punto di vista delle prestazioni e della scala, nulla supera la piattaforma Java per la sua combinazione di scalabilità e prestazioni per le applicazioni Web (a seconda di come si conta il partizionamento delle applicazioni di Facebook). Twitter, ad esempio, ha dovuto riscrivere gran parte della sua infrastruttura Ruby a Scala sulla VM Java per rimettere in mare la balena fallita. Ho sentito parlare di altri grandi esempi, ma in questo momento mi sfuggono.

Vale anche la pena considerare la sicurezza. Mentre i plugin del browser Java hanno subito la loro giusta dose di vulnerabilità di sicurezza, la stessa piattaforma Java è una delle piattaforme più sicure create. Le applicazioni Web Java hanno la reputazione di essere molto sicure. Le pratiche di codifica, le librerie e l'architettura hanno a lungo scoraggiato gli errori che rendono possibili attacchi come l'iniezione sql o overflow del buffer. Mentre altre piattaforme web (rotaie) hanno una buona reputazione di sicurezza, nessuna supera Java.

In conclusione, la maggior parte delle applicazioni Web sono tecnicamente semplici. Per semplicità, Java è spesso eccessivo (proprio come ai vecchi tempi quando li scrivevamo in C :)). Se, tuttavia, la webapp è complessa (back-end o altro) o si prevede che abbia più di 100 sviluppatori, Java è difficile da battere.

-

Su una nota personale, uso Grails molto perché mi dà il meglio di entrambi i mondi (lo stesso si può dire di JRuby che sento che sta diventando sempre più popolare nel mondo Ruby).

A proposito, trovo che l'ascesa di PHP sia davvero sconcertante. PHP come lingua è l'equivalente approssimativo di perl nella leggibilità e VB nella qualità dei risultati. Incoraggia pratiche orribili, è quasi impossibile da mantenere, le librerie di terze parti funzionano raramente come previsto e ha una sintassi che spingerebbe Larry Wall su ... beh ... un muro. L'unica spiegazione che posso evocare è che si presta all'apprendimento incrementale (come VB). In altre parole, puoi realizzare qualcosa di utile sapendo molto poco sulla programmazione / amministrazione e puoi estendere le tue conoscenze un piccolo pezzo alla volta. C'è molto da dire a tal proposito dal punto di vista dell'adozione. Tuttavia, per chiunque abbia dovuto supportare o sostituire uno dei miliardi di app VB scritte da "programmatori" nel mondo aziendale / mfg, probabilmente stai scuotendo la testa e pianificando la tua pensione. :)


3
Ti interessa approfondire il punto "il nido dei topi che sta diventando C #"?
XåpplI'-I0llwlg'I -

1
Non sono del tutto sicuro del motivo per cui dici "Non ripetere te stesso" è stata una risposta all'inferno XML e ai lunghi cicli di sviluppo dello sviluppo web Java. " DRY è emerso come concetto nella comunità Agile, la maggior parte dei quali utilizzava lingue diverse da Java all'epoca.
Jules,

38

Bene, di recente ho incontrato un ragazzo Java che era davvero entusiasta del nuovo progetto Spring Data, a causa di quanto poco codice ci vuole per ottenere l'accesso CRUD di base al tuo DB.

Posso creare un'app CRUD usando Rails (non solo accesso db, ma viste e controller) con pochi comandi.

(In cima alla mia testa: nuovo progetto, 1 comando scaffold per entità, 1 comando per migrare il database, 1 comando per avviare il server.)

Non ha nulla a che fare con la lingua, riguarda solo gli strumenti. E sembra che i linguaggi dinamici tendano ad avere gli strumenti e i framework che rimuovono molto codice di boilerplate. (Per compensare la nostra mancanza di potenti IDE che generano il bollettino per noi.)

Inoltre ritengo che i linguaggi dinamici tendano a semplificare molto la scrittura di tali strumenti e framework. Riesco a scrivere il codice per esempio, Padrino o Rails (ruby web framework) molto più facilmente di quanto riesca a cercare il codice per dire Spring Roo. Ciò potrebbe essere dovuto al fatto che conosco Ruby molto meglio di quanto conosca Java, però.


24
Personalmente non mi piacciono i linguaggi dinamici. I linguaggi statici mi rendono più produttivo quando posso vedere velocemente tutti gli errori di tipo nel mio IDE e utilizzare gli strumenti di refactoring. Dovresti dare un'occhiata a Play Framework , è un framework Web Java ispirato a Ruby on Rails e ti rende produttivo con Java.
Jonas,

4
Un framework potente, come le rotaie, significa anche che se qualcosa è mal implementato, la maggior parte delle persone non può sostituirla con qualcos'altro, perché quel componente è troppo stretto con il framework. Mentre per Java, se non mi piace Hibernate, posso usare qualcos'altro come Cayenne o JPA per esempio.
Coyote21,

2
Come qualcuno che combatte contro Django, mi permetta di dire solo: Coyote21 ha assolutamente ragione. Puoi ottenere il CRUD di base attivo e funzionante in cinque minuti, ma nel momento in cui inizi ad aggiungere la logica aziendale (quando questo record viene aggiornato, un record deve essere inserito in questa tabella e ...) nel CRUD, hai problemi .
asthasr

Se sei interessato a Rails ma hai bisogno di Java, guarda Seam Forge. Attenzione, usa JSF2, che è terrificante con cui lavorare, ma Forge si è abbastanza buono.
Craig Ringer,

puoi creare app CRUD in Java usando Roo in pochi minuti, la stessa cosa con Grails (non esattamente Java, ma comunque JVM) Play 1.0 aveva generatori / impalcature, mi chiedo dove sia andata però ...
Eran Medan

24

Java è stato posizionato negli ultimi anni come "impresa". Che è dall'altra parte dello spettro di ciò di cui una startup ha bisogno. Nello sviluppo di applicazioni Web sono necessari 4 elementi: accesso al database indolore, ottima manipolazione delle stringhe, zucchero della sintassi e processo iterativo rapido per apportare le numerose piccole modifiche richieste dalla tua app.

Prestazioni, scalabilità e stabilità sono leggermente inferiori nell'elenco delle priorità.

Anche Java è un linguaggio molto poco comune per codificare. Ha ottenuto la capacità rivoluzionaria di usare la stringa in un'istruzione switch proprio ieri. E javascript è un linguaggio molto hackerish quindi dopo aver sviluppato il tuo frontend ti senti molto limitato quando torni a java.

Quindi suppongo che questi siano i motivi per cui i webstartup evitano java.


12
accesso indolore db? Spring JDBC o Hibernate funzionano alla grande. Ottima manipolazione delle stringhe? Non pensare che la manipolazione delle stringhe sia molto più del 5% in qualsiasi progetto. Sintassi zucchero? Cosa intendi con questo. Rapido processo iterativo? Java ce l'ha (Tomcat all'interno di Eclipse è indolore). Java unfun? L'unica cosa che manca sono le classi anonime concise / lambdas / ecc. Le caratteristiche "divertenti" in altre lingue tendono a offuscare e rendere le cose meno chiare. Stringhe in switch ... sì, devo ammettere che fa schifo (tuttavia, la maggior parte delle volte, dovresti usare enums).
alex,

4
@alex: Syntax sugarJava praticamente non può essere utilizzato per DSL, ad esempio, il file di configurazione e route di Play non è un file Java, è in una sintassi esterna che non fa altro che dire settings.py di django e urls.py; nessuna comprensione dell'elenco; i tipi di dati cruciali (ad es. mappe, elenchi) non vengono importati per impostazione predefinita; una classe per file idiota si mette davvero in mezzo; e le API Java tendono ad essere inutilmente prolisse. Inoltre, non è possibile utilizzare enum quando si passa tra le stringhe ricevute dal parametro GET / POST.
Lie Ryan,

4
@alex Interessante. Tendo a usare i generici ovunque in C # - anche se guardandolo dall'esterno, ciò è probabilmente dovuto alla maggiore funzionalità dei lamda - Quindi posso avere un IRepository<T>con un IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Mi chiedo se diventeranno più popolari in Java quando diventerà lambda? Probabilmente è una cosa della zona di comfort, ma Java sembra davvero prolisso - e proprio come se mi avessero consegnato abbastanza pezzi per costruire 50 diversi tipi di auto senza garanzia che 2 parti si incastrassero insieme.
Base

3
Non riesco a credere che due persone abbiano sostenuto che Tomat all'interno di Eclipse sia indolore e che renda efficiente lo sviluppo di Java. Trovo che rende ogni ciclo di sviluppo molto più veloce, ma richiede una manutenzione quotidiana, tra cui ripetutamente aggiornamento, ricostruzione, pulizia di Tomcat, ridistribuzione, riavvio e talvolta riavvio di Eclipse e ripetendo i passaggi precedenti. Se la mia macchina avesse bisogno di così tanta manutenzione, non mi metterei mai al lavoro.
Brandon,

1
@Brandon Lo secondo. Non ho mai, nemmeno una volta lottato con un problema di configurazione in Node o Python / Django. Perdo la pazienza con RoR. La nostra base di codice Java basata sulla dipendenza Ant / Mvn / Spring / Hibernate / eclipse è un incubo di veglia prima ancora di arrivare al codice.
Erik Reppen,

18

Attualmente lavoro in una società che ha parecchi sviluppatori "Odio Java". Era solita stordire anche me. Di certo odio tutti gli accumuli di tecnologie disponibili con Java. Questo rende le decisioni troppo difficili. È come quando hai troppa scelta, non hai scelta. Devi passare il tempo con centinaia di framework per trovare davvero il framework che funziona per te. L'architettura standard di Servelt è complicata per la maggior parte delle applicazioni. Questo non è il caso di Ruby, Django e roba del genere. Sono più di un singolo framework piuttosto che di un linguaggio.

Le maggiori lamentele che sento dagli sviluppatori

  1. La sintassi è troppo lunga. Solo per stampare qualcosa dobbiamo scrivere System.out.print. Non puoi davvero usare un semplice VI come l'editor e scrivere un pezzo di codice funzionante in poche ore.
  2. Quadri di prova deboli. Anche se i framework di test sono molto simili in Java e Ruby, Ruby fa un passo avanti rendendo le cose facilmente disponibili per i test. Ciò è particolarmente vero se si utilizza ampiamente DB nella propria applicazione. Anche molti dei framework Web non pensano ai test.
  3. I modelli sono un dolore. Trasforma il linguaggio relativamente semplice in una zuppa di noodle.
  4. Non bello. La maggior parte delle applicazioni Java sono scritte in grandi aziende, associate alla burocrazia che non va molto bene con gli sviluppatori. Le persone non pensano a Google quando pensano a Java. Google == Python. Deve anche fare molto senza che vengano pubblicati libri che indichino do X in Y giorni.
  5. Non mi piace compilare. Per la maggior parte degli sviluppatori la compilazione è un fenomeno vecchio di dieci anni. Aveva senso negli anni '80 con C, ma i computer moderni possono fare molto di più. Non scrivono codice in lingue compilate. Java è uno dei pochissimi linguaggi che viene compilato e utilizzato per scrivere applicazioni Web.
  6. Troppi concetti di Oops. Anche se gli sviluppatori hanno adottato tranquillamente il dominio Oops. Non gli piace per intero. A loro non piace quando si scrive un'applicazione con 10 classi con ogni classe facendo solo una cosa. Ti fa aprire centinaia di file e immaginare l'interazione tra centinaia di classi, a volte con framework. Rende l'intera attività di programmazione un compito ingrato. Questo potrebbe essere vero con la maggior parte delle lingue, ma ho visto che gli sviluppatori Java prestano molta attenzione a ciò che fa una classe. Sono gli sviluppatori Java che spesso escono con un codice con centinaia di classi. Questo è buono da molte prospettive, ma gli sviluppatori non Java lo odiano.

Quindi tutto sommato Java impone una curva ripida all'inizio del progetto, il che significa troppi soldi da impegnare. Aggiungete a questo un'enorme comunità collegata a Java, ognuno dei quali pensa in modi diversi e nessuno può davvero guidare l'intera comunità. Inoltre, non vedono i colloqui e le conferenze condotte dalla comunità che mettono in mostra tutte le nuove cose interessanti. Nessun nuovo libro interessante. Java sembra andare giù perché è stato usato per risolvere troppi problemi diversi qualche anno fa.


(2) è indirizzato meravigliosamente da JBoss Arquillian ( arquillian.org ). Molto del resto è più un problema di JSF2 che un problema di Java. I maggiori problemi dell'IMO sono la curva di apprendimento e l'immenso buggy dei framework, ma se si evita JSF2 si può fare bene.
Craig Ringer,

5
Adoro OOP. Conosco anche OOP, motivo per cui non sarei d'accordo sul fatto che la stragrande maggioranza degli sviluppatori Java ne faccia troppo. Puoi scrivere una classe ma se il tuo codice è ancora un pasticcio di spaghetti, tutto quello che hai fatto è stato trovare un modo (fagioli) di scrivere codice procedurale di merda con strutture inutili avvolte attorno a quelle che potrebbero anche essere semplici funzioni o strutture al meglio.
Erik Reppen,

2
"Le persone non pensano a Google quando pensano a Java." ... Penso sicuramente ad Android e alla loro VM Dalvik (che è una VM Java) quando penso a Google. Penso anche a cose interessanti come GWT (generazione automatica di JavaScript da Java). Se c'è una società "alta" su Java, è Google. Molto più di Apple o Microsoft. Certo, Oracle e IBM sono ancora più associati a Java di Google ma comunque: miliardi di dispositivi Android che eseguono app Java su una VM Java sono qualcosa di difficile da pensare senza stabilire un collegamento Google / Java molto forte.
Cedric Martin,

Un sacco di odio verso JSF2 da @CraigRinger in questi commenti. :-) Cosa ti irrita? L'ho trovato complesso all'inizio, ma una volta che ci sono andato, lo adoro . Certo, prima usavo Spring, quindi qualsiasi altra cosa sembrerà un miglioramento ... :-)
Brian Knoblauch,

1
Sono uno sviluppatore OOP in Java e non posso sopravvalutare i vantaggi di OOP per gli sviluppatori. Sì, ci vuole un po 'più di tempo durante lo sviluppo, ma ne vale la pena una frequenza di bug più bassa, leggibile e più facile da mantenere. Per non parlare del fatto che il test unitario diventa molto più semplice con OOP eseguito correttamente.
IntelliData,

14

I framework per lo sviluppo web di Java hanno un po 'di curva di apprendimento, sono spesso eccessivi per ciò di cui hai bisogno, e gran parte dell'irregolarità richiesta per far funzionare le cose è solo ... dolorosa ... con cui lavorare.

Lavoravo per un'azienda che sviluppava Spring / Java e trovavo il framework al massimo ingombrante. Non ho molte cose piacevoli da dire sulla struttura di Spring, tranne che avevo un amico che era solito fare lo sviluppo di Struts e pensava che Struts fosse anche peggio. Il web-framework non è come fare applicazioni desktop o applicazioni mobili (ad es .: Android) e ha molte idee molto astratte che richiedono del tempo per afferrarsi davvero (anche se, sicuramente, ti danno molta potenza e capacità se sei un professionista e stai facendo qualcosa di veramente complesso come un'app di livello enterprise). Adoro programmare java per dispositivi mobili o desktop, ma java per app Web? Non così tanto.

Non ho fatto alcuna programmazione personalmente in Ruby / Rails, ma il mio amico che era solito fare Struts ora sta facendo la programmazione Web Ruby e testimonia che le cose che sono difficili da fare nella programmazione Web Java richiedono molto meno codice e complessità per raggiungere Rubino. Esiste sicuramente una curva di apprendimento delle diverse sintassi e regole del linguaggio, ma per le app di prototipazione, presenta dei vantaggi in termini di quantità di codice necessaria per ottenere il risultato desiderato. Come altri hanno già detto, anche la scalabilità è un problema da considerare e uno dei motivi per cui le app più mature non sono viste così frequentemente in più lingue alla moda.


+1 per overkill del framework. Sta diventando pazzo, prima di andare in letargo, trascorri tutto il tuo tempo a scrivere xml config.
Richard,

1
+1 per quadro. Non solo i framework originali tentavano P ** s Poor (JSP, STRUTS), ma ora ne abbiamo una trentina tra cui scegliere, non uno dei quali funziona come RoR.
James Anderson,

Non sono solo i quadri. Sono gli osceni livelli di conformità alle cose che non hanno senso. Esporre molte proprietà significa che stai sbagliando. Schiaffeggiare un getter vanilla e un setter su che aggiunge semplicemente una chiamata di metodo inutile e non cambia nulla, tuttavia nessun sviluppatore Java farà penzolare le proprietà da un oggetto del genere, perché la comunità rinforza che è in qualche modo più sbagliato di quello che stanno già facendo. Ma sul serio, l'XML al posto del codice ... come è durato più di 5 minuti?
Erik Reppen,

14

Dipende da costi e tendenze. Il Web 2.0 Startup è stato creato da un visionario under 30 che ha più talento che denaro (sto generalizzando ovviamente, ma questo è ciò che vedrai "in media"). Userà un linguaggio che gli è familiare perché sta programmando (insieme a forse alcuni amici). È molto probabilmente un programmatore autodidatta.

Java è stato scelto come ambiente aziendale (per Java, intendo il linguaggio, il framework e gli standard). Ci sono un sacco di strumenti costosi che gli IBM, gli Oracoli e gli BEA del mondo vogliono vendere aziende.

I passaggi per acquisire competenza con Java sono complessi e / o costosi. So che il paesaggio sta cambiando lì, ma è troppo poco troppo tardi?

Dopo che la startup guadagna trazione arriva la crescita. È difficile reclutare sviluppatori di talento. La maggior parte dei programmi "diventano programmatori in sei settimane" insegnano Java (o .NET) e il mercato è saturo di "programmatori di sei settimane" (stranamente ho visto sviluppatori con curriculum dire 7 anni di esperienza che mostrano ancora la conoscenza di un sei programmatore settimanale). L'uso di un ambiente non "enterprise" non tradizionale può essere un filtro naturale per i programmatori di sei settimane. Ci vuole dedizione e investimento personale per imparare un Ruby o Scala al di fuori di un requisito di lavoro. Questo è il più grande indicatore per me del potenziale per un candidato.

La conoscenza arriva con l'esperienza, ma un programmatore dedicato / appassionato acquisirà la conoscenza più rapidamente (in media) di qualcuno senza quella dedizione / passione. Proprio come un bambino che ama suonare la chitarra migliorerà più rapidamente di un bambino che prende lezioni perché suo padre l'ha creato.


Penso che questo sia davvero un buon punto +1
sfrj

1
Non sono d'accordo con il paragrafo che dice: Molto probabilmente è un programmatore autodidatta. Questo è falso in questi giorni, al giorno d'oggi la maggior parte delle persone di 30 anni che programma sono programmatori competenti e hanno almeno una laurea.
Coyote21,

1
??? Sto dipingendo il prototipo di web startup. Non ho detto nulla sulla loro competenza. Puoi essere autodidatta e competente allo stesso tempo. Non sono sicuro di cosa tu non sia d'accordo.
Michael Brown,

1
Questa doveva essere la mia risposta. Java è praticamente l'unica tecnologia web attuale che non è progettata in modo tale che qualsiasi sviluppatore competente possa semplicemente prenderlo e usarlo. La seconda parte della tua risposta è praticamente ciò che Paul Graham ha scritto in The Python Pardox
user16764

14

Java è troppo complicato. Faccio un sacco di lavoro in PHP ed è semplicemente più facile e veloce per la maggior parte delle situazioni. La capacità di solo SSH in un server aprire un file php per salvare le modifiche ed essere fatto è grandiosa. Le poche app Java su cui ho lavorato hanno sempre richiesto un riavvio per la modifica più semplice. (non dire che è sempre il caso di ciò che mi piace). Inoltre l'hosting PHP è economico e prontamente disponibile.

Penso anche che quello che hai almeno con PHP siano molti sviluppatori che come me hanno iniziato 14/15 anni fa con HTML statico. Con il progredire delle cose, abbiamo iniziato ad aggiungere PHP ai nostri siti perché era facile, semplice e conveniente. Nel corso degli anni la lingua è cresciuta e ha ampliato le sue capacità ben oltre i suoi umili inizi e ora si sforza di essere ciò che penso sia un sacco di cose che in realtà non lo sono.

Il rovescio della medaglia, la maggior parte degli sviluppatori PHP che conosco vedono Java come questo gigantesco gorilla da 800 lb eccessivamente complesso, quasi come uscire dal semi-camion a 18 ruote per scendere al negozio di alimentari e prendere una pagnotta di pane.

Ho cercato di imparare Java, le mie prime impressioni in cui è stato molto lungo tortuoso e inducendo tunnel carpale. Inoltre, iniziare mi ha lasciato molte domande che probabilmente sembrano facili per un veterano di Java. OpenJDK o Sun? Tomcat, o Glassfish, o? Inoltre, sembra che ogni introduzione al libro Java inizi a scrivere codice per la riga di comando. Penso che la maggior parte delle persone in questi giorni ritenga che una festa a snooze.


3
Prenderò più scelte e un po 'più di complessità rispetto agli oltre 9000 metodi integrati di PHP.
Kaleb Brasee,

1
PHP è così facile da configurare.
Barfieldmv,

9
ma è solo così difficile scrivere un buon codice ... più facile da configurare, più facile da avviare, meno noioso non dovrebbe essere il criterio che usi per scegliere una lingua. Una buona programmazione richiede disciplina, pazienza e impegno ... è un brutto segno se non li hai mentre scegli ...
alex

A meno che non puzzano entrambi, ma uno è molto più di un PITA da installare rispetto all'altro.
Erik Reppen,

12

Il mio team e io stiamo attualmente sviluppando un'applicazione Web greenfield in Java 6 + Stripes. Nell'ultimo anno ho anche lavorato su un'altra applicazione web greenfield usando Java 6 + Stapler (un framework web un po 'sconosciuto sviluppato da Kohsuke Kawaguchi di fama Hudson / Jenkins).

Java è assolutamente utilizzato per lo sviluppo web moderno. Certamente non ha il fascino "sexy" di Ruby o di altri linguaggi dinamici, ma sono tutt'altro che convinto che i linguaggi dinamici siano una buona cosa una volta che un progetto inizia a ridimensionare.

I moderni server di app Java sono molto competitivi con ASP.NET in termini di prestazioni ed entrambi sono ordini di grandezza più veloci di qualsiasi linguaggio dinamico VM che conosco.

Non fraintendetemi ... non sto dicendo che Java è sempre la scelta migliore (non a distanza!) - ma non è nemmeno sempre un torto o di scelta "superata".


1
Tendo a non essere d'accordo con il "più veloce". In teoria dovrebbero esserlo ma ci sono alcuni enormi siti php là fuori e quasi tutti gli aneddoti sui problemi di prestazioni si riferiscono a MySQql o ad altri database sottostanti. D'altra parte, quasi tutte le app J2EE con cui sono venuto in contatto con l'ampia messa a punto necessaria prima che le prestazioni fossero persino accettabili.
James Anderson,

1
@James: hai altro oltre a vaghi aneddoti per sostenerlo? Tutti i primi 10 siti Web disponibili sono in esecuzione su piattaforme gestite (Amazon su Java, Twitter su Scala IIRC, Google su un backend personalizzato di Java e C ++) oppure hanno un'infrastruttura altamente personalizzata (Facebook e Wikipedia utilizzano PHP, ma entrambi hanno enormi quantità di codice nativo personalizzato per la velocità). Java supera regolarmente i linguaggi dinamici nei benchmark. Non sono un fanatico di Java, ma le prestazioni non sono un problema di Java.
Daniel Pryden,

Non ci sono problemi di prestazioni con Java stesso "non abbastanza veloce come C ma più veloce di ogni altra cosa". Tuttavia, J2EE, oltre ai framework, oltre a ORM, oltre all'iniezione di dipendenza, oltre al design di overkill, è quasi garantito per non funzionare; c'è così troppo potenziale per colli di bottiglia nascosti e interazioni impreviste
James Anderson,

1
@Basic: qual è il tuo punto? Esistono molte librerie e framework rotti per qualsiasi lingua. Sì, c'è molta documentazione scadente e obsoleta, ma neanche questo è insolito. Al contrario, ci sono alcune fantastiche librerie, framework e strumenti per Java. Stai seriamente cercando di suggerire che ci dovrebbe essere un framework end-to-end per ogni applicazione di sempre?
Daniel Pryden,

1
@Basic: indietro da cosa? Nell'anno e mezzo dalla prima volta che ho scritto questa risposta, sono passato e sto attualmente lavorando su Google, e posso assicurarti che Java è utilizzato molto pesantemente per lo sviluppo di applicazioni web su Google. Ovviamente, le esigenze di Google sono molto diverse da quelle di molte altre aziende, ma Java è una bestia completamente diversa quando si utilizzano le librerie e i framework giusti: basta dare un'occhiata ad alcune delle cose che Google ha open source (Guava, Guice, GWT, buffer di protocollo, ecc.).
Daniel Pryden,

12
  1. Java è più complesso da imparare rispetto a PHP / Python / Ruby
  2. L'ecosistema Java è molto complesso, molto grande e piuttosto confuso per i principianti
  3. Ci sono molti framework storicamente cattivi con reputazione negativa associata a java, devi sapere quali framework per evitare di perdere tempo
  4. Gli strumenti di compilazione Java sono complessi (maven e ant)
  5. Java non ha un sistema di moduli facile da usare (OSGI è troppo complesso)
  6. Java IDE come Eclipse, sebbene molto potente con incredibili funzionalità, è difficile da configurare per uno sviluppo web efficace senza molta esperienza.
  7. Se si utilizza qualcosa di diverso da Tomcat o Jetty come server, si sarà frustrati dai lunghi tempi di avvio di WebSphere / WebLogic / JBOSS
  8. Java EE risolve i problemi che molte persone non hanno come le transazioni distribuite

Un nuovo sviluppatore che entra nello sviluppo professionale troverà Java un ordine di grandezza più difficile di rails, python o php per andare avanti così che vanno con ciò che è facile da imparare.

Detto questo, ho preso la decisione di utilizzare Java per il mio avvio perché un ambiente di sviluppo Java correttamente configurato è molto produttivo in cui lavorare. Con una configurazione corretta intendo.

  1. Tempo di avvio inferiore a 10 secondi
  2. Area di lavoro eclipse correttamente configurata, con tutti i framework confusi e configurati
  3. Buona selezione di librerie (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, ecc.)
  4. Macchine per sviluppatori veloci con SSD
  5. Abbonamento Orielly Safari

8
Cerchiamo di essere chiari però. La lingua Java non è difficile da imparare. Sono tutti gli strati di merda costruiti intorno a lavorare con Java per compensare le sue carenze (verbosità, proteggerti da te stesso e dai tuoi compagni di squadra essendo inflessibile come tutto il resto, l'assurda quantità di librerie su cui si basava, ecc ...) che è una PITA per imparare.
Erik Reppen,

2
@ErikReppen Molto vero. Sto lavorando a un progetto Java ma ho un background in .Net. La lingua e la sintassi sono facili come tutto ciò che ho incontrato per capire. È la verbosità che mi sta facendo impazzire. Ciò a cui ero abituato in 1 riga ora richiede 5-10 e (spesso) una modifica del file di configurazione XML. Per non parlare del fatto che senza passare ore e ore a leggere, scegliere il framework "giusto" per un lavoro è un incubo - e questo prima di scoprire che il tuo scenario è considerato un caso limite, non è supportato e se non ti piace esso, riscriverlo. Voglio passare il tempo a risolvere i grandi problemi
Basic

"Java è più complesso" - qualcuno potrà mai ricordare gli ordini dei parametri per PHP strposo in_array? E l'interfaccia DOM XML di PHP è ridicola (trasmettere attributi alle stringhe per recuperarle?). OSGi è assolutamente geniale e indipendente dalla lingua.
jevon,

@jevon: I documenti PHP sono molto buoni e il mio IDE è desideroso di ricordarmelo comunque. Inoltre, SimpleXML.
DanMan,

12

Circa 5 anni fa, io e un collega abbiamo avuto un compito di programmazione per alcuni progetti interni. Un'attività abbastanza semplice che ha richiesto l'analisi dei comandi.

Ho trovato l'intera cosa in circa 80 righe di codice java e il mio collega ha impiegato una settimana, circa 20 lezioni di java e molte più righe di codice java per fare lo stesso. Inutile dire che è stato scelto il suo codice.

Questo mi ha fatto meravigliare. Ovunque, la complessità è stata apprezzata. (Lavoravo in una delle più grandi aziende produttrici di software.) Java era lo strumento preferito e i modelli di progettazione erano IL modo di codificare.

Ora, è la mentalità o solo l'arroganza che rifiuta la semplicità. Bene, ho sempre pensato che il buon senso dovesse prevalere. Che si tratti di un'azienda o di una semplice applicazione Web, i casi d'uso di base sono gli stessi. Dovrebbe essere corretto e verificabile.

Non uso più Java per diversi motivi. Ma uno dei fattori - la complessità, è la mentalità prevalente in un sacco di sviluppatori Java quando si tratta di sviluppare software.

Per quanto riguarda il ridimensionamento dei linguaggi dinamici, JVM è il risultato di decenni di ricerca. Stanno succedendo molte cose per Ruby ecc.

Scala è una lingua che trovo estremamente intelligente e pratica. Giocare! con Scala è eccellente per lo sviluppo di applicazioni web / enterprise come qualsiasi altro là fuori.

Per quanto Ruby e Rails siano la novità lucente per le start-up, è estremamente difficile assumere un solido sviluppatore di Rails. In realtà è un ostacolo a qualsiasi avvio, mentre la pletora di sviluppatori Java dovrebbe avere più senso degli affari.


Non sono un fan di Java ma quella "complessità" a cui ti riferisci potrebbe essere stata un'astrazione. L'astrazione è molto utile sia per i test che per la manutenibilità (se usata con moderazione). Difficile dirlo senza essere in grado di confrontare il codice
Basic

11

In una recente intervista a Joseph Snarr, un responsabile tecnico di Google Plus ha spiegato come l'applicazione utilizza Java Servlet per il back-end e JavaScript sul front-end.

Quindi, per rispondere alla tua domanda, Java è ancora utilizzato per lo sviluppo web molto moderno. Solo non per le start-up che hanno ricevuto così tanta stampa di recente.

Penso che il motivo per cui molte start-up utilizzano altre tecnologie è perché sono più sexy e hanno una spinta open source più pubblicizzata dietro di loro.


4
Le start-up usano altre tecnologie perché vogliono farlo adesso. Non più tardi. E ci sono andati per farsi fare da 3 persone, non 30.
Erik Reppen,

La citazione di una persona può solo fornire le sue opinioni e le sue scelte, ma non conferma che qualunque cosa abbia scelto sia / sia stata la decisione giusta.
DivKis01

9

Dal momento che hai menzionato lo sviluppo web e Java, molte persone tendono a dimenticare che all'inizio l'utilizzo delle applet Java in un browser Web non si preformava bene, non solo, ma il "sandbox" per le applet non era completamente sviluppato e c'erano problemi di sicurezza con le applet Java in grado di funzionare nel browser e accedere ai dati del computer locale (noto anche come problema di sicurezza lato client). Sicuramente Java era solido nelle applicazioni back-end e stand-alone, ma penso che associare Java il linguaggio con le applet Java (eseguite sul browser) abbia un po 'rovinato alcune percezioni su Java come componente di sviluppo web. Non credo che si siano mai ripresi da questo.


9
Assolutamente no! In realtà Java è un linguaggio dominante nel mondo lato server. Le applet si sono estinte forse dieci anni fa.
Chirone,

5
Flash ha fatto ciò che gli Applet hanno cercato di essere. Avvio rapido, download veloce, memoria ridotta.

4
Conosco molte persone che non sanno nemmeno distinguere tra Java e Javascript. Anche se sono completamente indipendenti. Questa è un'altra cosa che dà a Java un brutto nome.
Kibbee,

5
@Kibbee ... o dà a Javascript un brutto nome :)
Matthew Schinckel,

9

La domanda dovrebbe essere "Perché Java non viene utilizzato dalle startup o per piccoli progetti?". Java certamente usato per "app Web moderne". In Google, Java viene utilizzato sul back-end per molti servizi e JS o GWT compilati per la chiusura vengono utilizzati per il front-end. Il problema riguarda la velocità e la scala. Le startup devono arrivare al minimo prodotto possibile. Di solito sono piccoli team di 1-3 ingegneri e apprezzano la velocità di iterazione rispetto alle prestazioni o alla manutenibilità. Affrontare problemi di scalabilità o problemi di manutenzione del codice del team è un problema che "ti piacerebbe avere", ovvero quando raggiungi quella fase, è un segno che la tua implementazione iniziale ti ha aiutato a superare la gobba iniziale di ottenere clienti o investimento. A questo punto puoi permetterti di riscrivere l'app.

Una società come Google può permettersi il lusso di costruire cose per scalare in anticipo, anche se potrebbero perdere tempo a implementare il ridimensionamento per qualcosa che potrebbe non avere utenti, perché possono assorbire la perdita.

Almeno, questa è la mia opinione, che molte aziende "moderne", "alla moda" e "moderne" costruiscono piccole app con piccoli team in cui velocità di iterazione e semplicità sono i requisiti più importanti.


1
Dov'è la tua fonte che afferma che le startup non usano Java? Si prega di eseguire il backup del presupposto con alcuni fatti.
Walter,

7

Le applicazioni Web tradizionali su Java, sebbene ben strutturate, sono ben lungi dall'essere "sviluppate rapidamente". Anche se ho mai scritto solo un'applicazione web completa (Java / Tomcat / Struts), è stata estremamente esigente, ha impiegato più tempo del previsto per il debug ed è stata generalmente dolorosa durante l'implementazione del livello di logica aziendale. Nella potenziale difesa di Java, era l'unica applicazione Web che avevo scritto in Java (anche se sono abituata a programmare applicazioni a livello di sistema in Java) e credo di poter scrivere un'altra applicazione Web leggermente più veloce la seconda volta.

Detto questo, ho anche scritto applicazioni in PHP e C #, che funzionano solo meglio e sono molto più indulgenti di Java. Inoltre, Ruby on Rails è stato scritto appositamente per lo sviluppo rapido di applicazioni che, come ha affermato Robbie, consentono un facile accesso CRUD ai database. Il problema è che la maggior parte dei siti Web che svilupperai da solo non ha bisogno del livello di personalizzazione che Java offre (e richiede di eseguire). Inoltre, ogni oggetto di connessione DB deve essere scritto a mano e non è così facile da modellare. Potrebbe esserci un framework migliore, in particolare uno che sfrutta le nuove funzionalità di supporto del linguaggio dinamico di Java 7 , ma non ho ancora fatto la ricerca.


3
Dovresti dare un'occhiata a Play Framework , è un framework Web Java che ti rende produttivo con Java ed è ispirato a Ruby on Rails.
Jonas,

2
@Jonas, considera la possibilità di scrivere alcuni buoni post sul blog che spieghino tutto questo in modo conciso.

@Jonas cosa ha detto Thorbjorn! Lo darei una lettura approfondita. :)
Brian,

@ Thorbjørn: non ho un blog. In breve: con Play Framework è sufficiente salvare il codice sorgente Java, quindi aggiornare il browser Web. Il codice viene compilato automaticamente sul lato server utilizzando il compilatore Eclipse. JPA viene utilizzato per l'accesso al database. Ecco un articolo a riguardo Play! Usabilità del framework
Jonas,

2
@ Thorbjørn & Brian: guarda il video sulla prima pagina del sito web del framework di gioco, lo spiega molto bene, direi.
Bjarke Freund-Hansen,

7

Risposta semplice: curva di apprendimento per basare la produttività.

I sistemi basati su framework come RoR tendono a mettere la "magia" nella lingua / sintassi. È molto semplice aumentare la sintassi RoR di base e avviare un'app.

Java era prima un linguaggio, e strumenti e framework apparvero in seguito. Quindi devi prima imparare Java, e poi devi imparare Spring, Grails, il tuo super IDE o qualsiasi altra cosa. Esempio preferito di Ruby, non richiede setter e getter. Il fatto è che gli IDE Java si sono sbarazzati anche della codifica manuale ... ma è ancora nella tua fonte. Il vantaggio di questo approccio è che sotto il framework esiste un linguaggio coerente con il quale tutti gli sviluppatori Java possono lavorare.

Questo vantaggio è dubbio per le piccole startup in cui il tempo è essenziale. Di solito, stanno facendo ben poco che non potevano fare con un framework fuori dagli schemi. Quindi possono prendere il loro sistema RAD preferito e avere un'app in diretta il giorno successivo.

Ma se si guardano a Facebook e Twitter, mentre si espandono, hanno trovato cose che non potevano essere gestite da framework out-of-box e quindi dovevano usare tecnologie di livello inferiore.

Questa guerra santa che gli sviluppatori di framework hanno di poter fare qualsiasi cosa più velocemente è fasulla, possono fare molto di ciò di cui hanno bisogno più semplice e con meno di una curva di apprendimento. E per molte cose, questo è "abbastanza buono". Usa ciò che è giusto per il problema.


6

Dipende da come si definisce "sviluppo moderno di applicazioni Web". Se stai parlando di siti Web di avvio rapido e di inversione di tendenza, dovrai considerare le lingue e i framework progettati a tale scopo. Se stai cercando uno sviluppo web stabile, scalabile, a livello aziendale, cerchi linguaggi e framework che supportino tali ideali. Nel mio libro, questi sono due obiettivi molto diversi. RoR, Groovy, ecc. Vanno bene per il primo e Java è più appropriato, in generale, per il secondo.


6

Google App Engine supporta Java, in modo da poter scrivere l'intera app Web in Java, utilizzando Eclipse come IDE e interfaccia di distribuzione, con un'API di Google ragionevolmente documentata, quindi non direi che non è utilizzata o non lo è utilizzabile.


5

Nella startup per cui lavoro abbiamo scelto di utilizzare sia Java che JRuby per implementare la nostra API perché si completano a vicenda.

Per l'infrastruttura, la distribuzione dei processi e le comunicazioni sfruttiamo la solidità di Java, mentre per l'implementazione effettiva degli endpoint API abbiamo scelto JRuby poiché tutte le chiamate coinvolgono JSON ed è molto più sensato manipolare una rappresentazione di tipo impreciso (JSON) usando una struttura vagamente linguaggio tipizzato (Ruby).

Se vediamo una delle nostre classi JRuby diventare un collo di bottiglia, lo implementiamo direttamente in Java (in pratica una traduzione riga per riga). Questo può succedere abbastanza spesso con le classi che devono fare molti calcoli, e in questo contesto JRuby si comporta in modo molto simile a un linguaggio di prototipazione.

Abbiamo implementato il nostro caricatore di classi dinamico, il che significa che possiamo cambiare le classi Java al volo senza riavviare il server e siamo rimasti molto soddisfatti della scelta. Quindi l'argomento "è necessario compilare e riavviare ogni volta" non ha molto peso.

La chiave è evitare tutte le cose Java EE: è enorme, ingombrante e anti-agile.


5

Ho ancora la sensazione che Java sia utilizzato in molti sviluppi web. Ma di solito è il tipo di sviluppo più orientato al business, principalmente per le grandi aziende tecnologiche, che in genere sono meno aperte rispetto alle nuove startup che devono ottenere una certa trazione e promuovere il proprio lavoro, oltre a essere più interessate alla tecnologia . Quindi, anche se viene utilizzato in molti siti Web aziendali, probabilmente non lo saprai mai, poiché non si preoccuperanno davvero di parlare pubblicamente del loro stack tecnologico.

Detto questo, commentando tutte le domande originali ...

È un punto debole della lingua? Rispetto ad altre lingue come Python o Ruby, Java è prolisso e tende ad avere bisogno di più codice per fare cose simili. Ma non sono solo le capacità del linguaggio, anche la comunità che lo circonda e il tipo di sviluppatori che utilizzano quegli strumenti. Quindi, la maggior parte dei moduli e degli strumenti su Python, Ruby, PHP, ecc. Sono open source e sono più facili da trovare rispetto al mondo Java, solo perché questo è più focalizzato sulla fornitura (e sulla ricarica) di servizi. Ad esempio, la community di Ruby è davvero orientata allo sviluppo web, quindi ogni sviluppatore che è in grado di usare Ruby conoscerà i problemi e gli strumenti disponibili per un progetto web. Ciò non è necessariamente vero per gli sviluppatori Java, che avrebbero potuto lavorare su altri tipi di sistemi, come i sistemi di reportistica. Naturalmente, qualsiasi buon sviluppatore raggiungerà,

È uno stereotipo ingiusto di Java perché esiste da così tanto tempo (è stato ingiustamente associato alle sue vecchie tecnologie e non riceve il riconoscimento per le sue capacità "moderne")? Java non è poi così vecchio e, essendo onesto, è notevolmente migliorato. Era la piattaforma interessante e interessante circa 10 anni fa. Ma da allora, ci sono state nuove piattaforme con in mente nuovi problemi, come Ruby on Rails. Il settore principale di Java è stato principalmente il mondo aziendale, con diversi problemi, quindi le persone alla ricerca di nuovi progetti al di fuori che sono stati alla ricerca di strumenti diversi. Inoltre, il vantaggio principale della progettazione Java, essendo multipiattaforma, non è rilevante oggi come lo era prima.

Lo stereotipo negativo degli sviluppatori Java è troppo forte? (Java non è più "cool"). Anche questo ha del vero. Java è ancora la lingua per imparare "a trovare un lavoro". Quindi, se non ti interessa, ma vuoi solo imparare qualcosa per guadagnare soldi, finirai per imparare un po 'di Java e non ti preoccuperai mai di migliorare. Ancora una volta, si tratta molto di percezione e visibilità. Ci sono tonnellate di grandi sviluppatori Java che codificano senza condividere le loro conoscenze, mentre ci sono molti sviluppatori PHP, forse non altrettanto bravi, che scrivono blog e collaborano all'open source. Ciò porta a pensare che gli sviluppatori PHP siano migliori di quelli Java, dato che hai un certo feedback su di essi.

Le applicazioni scritte in altre lingue sono davvero più veloci da costruire, più facili da mantenere e offrono prestazioni migliori? Direi che sono più veloci da costruire. I principi di linguaggi come PHP, Python o Ruby li rendono abbastanza buoni per generare software che può cambiare costantemente. Ad esempio, la digitazione dinamica semplifica la modifica di un'interfaccia. In Java è importante avere un'interfaccia ben definita, che porta a interfacce più stabili (e difficili da cambiare). Questo è molto importante in una nuova startup, il cui problema principale è ottenere un prodotto prima di rimanere senza soldi. Per quanto riguarda le prestazioni, è molto facile fraintendere le esigenze e provare a usare i trucchi magici per ottenere le prestazioni richieste, come "Java è più veloce di Ruby. Periodo" o "MongoDB è scala web".

Java è utilizzato solo da grandi aziende che sono troppo lente per adattarsi a una nuova lingua? Sicuramente, avendo già un team esistente di sviluppatori Java in azienda, è più facile continuare a utilizzare la stessa lingua per nuovi progetti. Questa è percepita come "la scommessa sicura", specialmente se il nucleo dell'azienda non è la tecnologia. Ma, comunque, Java non viene utilizzato SOLO nelle grandi aziende, ci sono ancora molte startup che usano Java per cose interessanti (ad esempio, FightMyMonster o Swrve usano ampiamente Java), ma direi che la tendenza generale all'avvio la scena è usare altre lingue. Questo è anche un modo per attirare le persone, poiché la maggior parte delle persone sarà più entusiasmante a lavorare con Ruby, Python o PHP, percepite come più "amichevoli" e "divertenti"


5

Questo è vero, ma non a causa di Java e del suo ecosistema. È a causa delle persone che, quando si utilizza Java, tendono a creare grossi pasticci e pesanti abominazioni.

Ci sono abbastanza framework (spring-mvc, grails, play, ecc.) Che ti permettono di costruire cose velocemente. Il fatto che le persone esagerino nell'ingegnerizzazione dei propri sistemi è un problema che deriva dalla maggiore conoscenza che le persone ottengono quando lavorano con l'ecosistema Java: sai molte più cose e le hai disponibili (ci sono strumenti per tutto) e "tutto sembra un chiodo ".

Se sei "hacky", puoi fare praticamente lo stesso con Java come con altre lingue, ed ecco uno studio che indica che:

Studio di 49 programmatori: il sistema di tipo statico non ha avuto alcun effetto sul tempo di sviluppo ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

Per aggiungere un po 'a ciò che è già stato detto, penso che molto abbia a che fare con la velocità con cui puoi passare dal nulla (letteralmente) a un'applicazione web funzionale.

Se tutto ciò che hai oggi è un'idea, passare da dove sei ora a scrivere la tua applicazione web è quasi facile come cadere, sia che tu scelga un provider di hosting o la tua infrastruttura (come un'immagine EC2). Scegliere Java, secondo la mia esperienza, di solito richiede più lavoro e spesso costa di più.

Inoltre, se utilizzi Linux e PHP / Python / Ruby, gli strumenti e la piattaforma sono gratuiti e progettati per supportarsi a vicenda. Con Java, a volte sembra che i due mondi (OS e Java) a volte non funzionino in armonia tra loro.


La curva di apprendimento è assolutamente verticale. Trascorrerai le prime SETTIMANE solo a capire quali sono gli acronimi, come gli standard si riferiscono alle loro implementazioni, come tutto è stratificato, ecc. Poi le prossime settimane a capire quale stufato di librerie e framework utilizzare. Poi le prossime settimane segnalando bug in loro ...
Craig Ringer l'

3

Chi dice che non lo sia?

Spring MVC + Spring Data JPA o Mongo + Thymeleaf per templating + plug-in coffee-maven per la traspilazione da Coffee a JS e sei pronto per partire.


Sono totalmente d'accordo con te +1
Arshad Ali,

3

Molti potrebbero associare lo sviluppo di applicazioni Java e Web agli orrori di J2EE che, in bundle con i mostruosi server di applicazioni J2EE di grandi società blu e rosse, ha eguagliato settimane di lavoro prima che il "Hello World" di base fosse online.

È vero, le recenti specifiche e implementazioni JEE hanno un peso più leggero, ma penserei ancora tre volte prima di suggerire qualcosa del genere per un progetto di sviluppo rapido a ciclo breve.

Questo è ancora il modo basato su standard per lo sviluppo di applicazioni Web in Java. Le alternative, molte delle quali sono citate in altre risposte, trasmettono un quadro più misto e confuso con troppe scelte da fare.

Altre lingue descrivono un'unica soluzione chiavi in ​​mano anziché questa moltitudine. Questo rende questa scelta più adatta allo scopo quando hai pesci più importanti da friggere.


Java EE 6 potrebbe essere "leggero" (ad eccezione di JSF2) ma è ancora una curva di apprendimento incredibilmente grande, una pila enorme di specifiche complicate e un sistema stratificato immensamente complicato. Leggero forse, ma sicuramente non semplice.
Craig Ringer,

2

Penso che sia usato molto più di quanto si pensi - l'uso è appena sotto la linea di galleggiamento. Ci sono molti, molti rubini su involucri di binari attorno a servizi java spessi e fantasiosi. Soprattutto quando inizi a gestire qualsiasi cosa si avvicini ai big data. . .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.