Pourquoi Java n'est-il pas utilisé pour le développement d'applications Web modernes? [fermé]


393

En tant que programmeur professionnel Java, j'essaie de comprendre: pourquoi la haine envers Java pour les applications Web modernes?

J'ai remarqué une tendance selon laquelle, dans les startups Web modernes, un pourcentage relativement faible d'entre elles semble utiliser Java (par rapport à la popularité globale de Java). Quand j'ai posé quelques questions à ce sujet, j'ai généralement reçu une réponse du type "Je hais Java avec passion." Mais personne ne semble vraiment être en mesure de donner une réponse définitive.

J'ai également entendu dire que cette même communauté de start-up Web faisait référence aux développeurs Java, ce qui impliquait plus ou moins qu'ils étaient lents, pas créatifs, anciens.

En conséquence, j'ai passé du temps à ramasser Ruby / Rails, essentiellement pour découvrir ce qui me manque. Mais je ne peux m'empêcher de penser «je pourrais le faire beaucoup plus rapidement si j'utilisais Java», principalement en raison de mon niveau d'expérience relatif.

Mais aussi parce que je n'ai rien vu de "manqué" critique dans Java, m'empêchant de construire la même application.

Ce qui m'amène à ma (mes) question (s) :

Pourquoi Java n'est-il pas utilisé dans les applications Web modernes?

  • Est-ce une faiblesse de la langue?

  • Est-ce un stéréotype injuste de Java parce qu'il existe depuis si longtemps (il a été associé injustement à ses technologies plus anciennes et ne reçoit pas la reconnaissance de ses capacités "modernes")?

  • Le stéréotype négatif des développeurs Java est-il trop fort? (Java n'est plus "cool")

  • Les applications écrites dans d'autres langues sont-elles vraiment plus rapides à créer, plus faciles à gérer et fonctionnent-elles mieux?

  • Java est-il utilisé uniquement par les grandes entreprises qui sont trop lentes pour s’adapter à un nouveau langage?


142
Je pense que vous vous trompez: il est toujours utilisé, il ne fait que perdre le facteur cool.

41
@ Graham Lee: Java a déjà été cool? J'ai dû manquer quelque chose. Eh bien, je suppose que c'est du café froid, mais cool? Je pense que la raison principale est que Java, en particulier les frameworks Java d'entreprise, ont été et sont encore largement conçus. Vous ne pouvez pas les considérer comme légers, vous les utilisez simplement parce que vous avez besoin des fonctionnalités de distribution / équilibrage / évolutivité de la plate-forme et que vous souhaitez utiliser un framework pour le front-end réalisé avec java, également, dans un souci d'homogénéité.
Falcon

20
Peut-être parce que ce n'est pas moderne ? : P Et Java n'a jamais été cool, simplement parce qu'il a jeté la partie piratage de la programmation.
back2dos

28
@Falcon Java était cool quand il a été introduit, Sun a fait du bon travail. Java, que le battage médiatique soit justifié ou non n'a rien à voir avec le fait que ça soit cool ou pas, beaucoup de choses cool sont mises en avant sans raison.
Mahmoud Hossam

11
@ Falcon, vous devriez jeter un coup d'œil à la création d'applications Web avec JSF 2.0 dans Java EE 6 et les comparer à votre expérience. Vous pouvez être agréablement surpris.

Réponses:


174

Les startups modernes doivent arriver sur le marché le plus rapidement possible. Ils n'ont pas besoin de passer environ six mois pour publier leur application Web Java.

Twitter, par exemple, a été créé à l'aide de Rails / Ruby, mais une fois devenu inaccessible, ils ont migré vers la JVM.

Sans oublier que le processus de développement n'est pas productif: code -> compiler -> déployer alors qu'il se trouve dans des cadres tels que (Rails / Django / Grails): exécutez le serveur de test -> code -> changez les choses et voyez ce qui se passe.

La bonne nouvelle est que JRebel vous permet de voir les changements de code instantanément.


81
Play Framework est également semblable à Ruby on Rails, mais pour Java. Code -> mettez à jour votre navigateur.
Jonas

34
Essayez simplement de vous débarrasser de certaines idées fausses. Java EE n'est pas la seule chose du côté serveur Java, comme beaucoup semblent le penser.
Jonas

22
Facebook fait aussi quelque chose de similaire. Leur base de code est en PHP, mais à cause de problèmes de rapidité et d'évolutivité, ils ont dû écrire un compilateur (HipHop) qui compilait PHP en C ++, qui était ensuite compilé en utilisant g ++. C'est drôle de voir comment tout le monde parle de l'excellent ruby ​​et du PHP et du fait que tous les sites sont construits autour d'eux, mais quand on voit leur inefficacité, la plupart des grandes entreprises doivent passer à autre chose. Si je me souviens bien, Craigs List a beaucoup de code backend écrit en C / C ++ pour cette raison même.
Kibbee

28
1) En utilisant Eclipse, la compilation se produit au fur et à mesure que vous tapez et vous le remarquerez rarement. De plus, en exécutant Tomcat dans Eclipse, je peux redémarrer une application en moins d'une seconde. Le redémarrage de mes applications me gène rarement 2) Il n'y a pas de solution miracle, les gars. Ruby ou n'importe quelle langue ne vous rend pas 10x plus rapide. Le problème avec Java dev est souvent le temps de montée en puissance, mais si vous savez ce que vous faites, vous pouvez travailler dans un projet en moins de 10 min.
alex

5
Java et tout autre langage statique présentent deux avantages considérables: un refactoring presque sans souci et une découverte d'API sans documentation.
Eran Medan

136

D'après mon expérience, Java pour les applications Web est excessif pour les petites applications. Un blog simple avec une table de base de données contenant des entrées de blog, par exemple, pourrait être fait de manière beaucoup plus simple.

J’ai généralement constaté que Java se débrouillait beaucoup mieux dans des applications Web beaucoup plus vastes (banques et sociétés d’assurance) qui communiquent avec un certain nombre d’autres systèmes (tels que les bases de données mainframe et les bases de données et les systèmes de traitement par lots de services Web homologues ...). tous dans la même application).

D'après ce que j'ai vu, l'architecture d'une application Web JavaEE est généralement supérieure à celle requise pour les applications Web petites / simples.


5
Cela est encore plus vrai pour les "petites" applications si vous devez (parce que c'est le "standard" et que la société l'utilise) travailler avec des serveurs d'applications monstres tels que Websphere, alors que le plus souvent Tomcat est suffisant, par exemple. .. Pourquoi oh pourquoi dois-je travailler avec cette console d’administration en désordre? Soupir ...
Jalayn

7
@Jalayn: D'après mon expérience, c'est parce qu'ils ne souhaitent gérer qu'un seul programme de serveur d'applications, plutôt que d'administrer WebSphere pour l'équipe A, Tomcat pour l'équipe B, Glassfish (ou autre chose) pour l'équipe C ... et je peux comprendre que ressentir aussi, mais oui, cela me frustre aussi.
FrustratedWithFormsDesigner

3
Ceci est vrai pour Java EE, mais il existe désormais un framework qui rendra vos applications Web Java aussi légères et productives que Ruby on Rails.
Jonas

9
Le nouveau Java 6 EE - en particulier le profil Web - permet de créer des applications Web assez simples.

4
@ ThorbjørnRavnAndersen L'application est peut-être simple, mais la compréhension du cadre ne l'est pas, pas plus que la compréhension des outils principaux tels que Ant ou Maven. La courbe d'apprentissage d'un débutant est énorme et regorge de couches imbriquées de soupe d'acronymes, de confusion entre les spécifications (par exemple, JAX-RS) et les imples (par exemple, Jackson), etc. C'est VRAIMENT compliqué de faire quelque chose de simple si vous voulez réellement comprendre ce que vous faites.
Craig Ringer

135

J'ai programmé des applications Web java pendant 10 ans avant de passer à Python, il y a 4 ans. Je pense que je suis beaucoup plus productif avec Python et que je peux faire beaucoup plus en moins de temps. Pour être honnête, je suis beaucoup plus heureux lorsque je développe en python. Voici quelques-unes des raisons pour lesquelles j’estime que python est meilleur que Java sur la base de mon expérience personnelle.

Cadres Web:

Lorsque j'ai commencé à programmer des applications Web en Java, Struts est apparu et ce n'était pas génial, mais c'était la meilleure chose disponible. J'ai créé de nombreuses applications Struts et quelques autres dans d'autres cadres. Chaque fois qu'un nouveau framework est sorti (Tapestry, Wicket, GWT, rayures, grails, AppFuse, Play, RichFaces, Spring, etc.), je l'essayais et voyais s'il était meilleur, et la plupart du temps, ce n'était qu'un peu mieux et parfois pas mieux du tout. Je dois dire que le cadre de jeu est un pas dans la bonne direction.

Piles non incluses:

L'un des aspects les plus ennuyeux de Java est le fait que la plupart des bibliothèques que vous utilisez ne sont pas incluses dans java, vous devez donc inclure une tonne de bibliothèques tierces provenant d'endroits comme apache commons. Si vous utilisez quelque chose comme hibernate avec une autre grande bibliothèque, vous vous retrouverez dans l'enfer de la dépendance à Jar, où hibernate nécessite une version d'un fichier jar et quelque chose d'autre nécessite une autre version. Si vous chargez les fichiers jar dans le mauvais ordre, vous n’avez pas de chance. Vous devez vous fier à des outils tels que maven et ivy pour gérer vos dépendances, ce qui ne fait qu'augmenter le nombre de dépendances dans votre projet, ce qui en fait des projets énormes. J'avais quelques fichiers de guerre de 100 Mo + fichiers de guerre pour les applications Web les plus simples.

Trop d'options:

Pour une raison quelconque, il semble y avoir beaucoup trop de façons différentes de faire la même chose en Java. Il existe plus de 38 frameworks Web différents pour Java selon wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) et 23 ORM différents ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_server_software#). Java ) pour ne citer que quelques exemples. Si vous regardez d'autres langues, leur nombre est plus raisonnable. Certaines personnes pensent qu’avoir beaucoup d’options est une bonne chose, mais cela n’entraîne pas beaucoup de gaspillage d’efforts de la part de la communauté des développeurs, tout le monde réinvente la même roue et si vous êtes un nouvel utilisateur de la langue que vous utilisez. trop d'options à choisir.

Serveurs d'applications:

Les applications Web Java sont très lourdes et nécessitent beaucoup de ressources pour s'exécuter. Ils ont particulièrement faim de mémoire. Comme tout logiciel, ils peuvent être réglés pour réduire leur empreinte sur les ressources, mais par rapport à d'autres langues, leur configuration immédiate est horrible. Dans mon passé, j'ai utilisé weblogic, Websphere, Jboss, Tomcat et Jetty. J'ai utilisé les trois premiers uniquement lorsque j'ai été forcé d'utiliser des EJB, mais même si vous n'utilisiez pas d'EJB, il s'agissait de serveurs d'applications volumineux et parfois difficiles à configurer et à exécuter correctement. Tomcat et Jetty sont bien meilleurs et plus faciles à configurer, mais restent des ressources.

Hébergement d'applications:

Si vous n'exécutez pas votre propre serveur, il est très difficile de trouver un hébergement partagé pour vos applications java à un prix raisonnable. La raison principale en est que les applications java nécessitent beaucoup plus de mémoire que d’autres langues. Il n’est donc pas logique pour un fournisseur d’hébergement partagé de dépenser sa précieuse mémoire RAM pour exécuter un site java, alors qu’ils pourraient exploiter 5 sites php au même endroit. Cela signifie qu'il y a moins de fournisseurs proposant l'hébergement java, ce qui entraîne des coûts plus élevés pour l'exploitation de votre site Web.

Temps de développement:

Lorsque je développais en Java, je me trouvais beaucoup plus lent que ce que je pouvais faire en python. J'aurais besoin de faire un changement, de compiler, de redéployer puis de tester, ce qui ralentit le processus itératif. Je sais qu'il y a moyen de rendre cela plus rapide, mais même au mieux, je me suis senti beaucoup plus lentement que ce que je peux faire en python.

Il y a aussi beaucoup moins de code standard pour faire la même chose en python, je passe donc moins de temps à développer le code.

Java semble trop complexe dans de nombreux domaines. De nombreuses API et interfaces ne sont que très compliquées pour ce que vous voulez faire. Et chacun, ainsi que son frère, pense être un architecte java, ce qui se traduit par de gros systèmes compliqués, difficiles à utiliser et à développer.

IDE:

Quand je me développais à Java, je me sentais collé à l'IDE, j'étais perdu sans cela. IntelliJ est le meilleur IDE sur le marché, et il était difficile de passer à python car il n’y avait rien de tel pour python. Donc, au lieu d’un IDE, j’ai juste utilisé textmate, qui n’est qu’un éditeur de texte normal. C'était difficile au début, mais parce que c'était juste un éditeur de texte, c'était une application très rapide et réactive. Je pouvais ouvrir tout mon projet en quelques secondes, alors que lorsque je souhaite ouvrir un projet dans un IDE, cela peut prendre une minute ou plus, avec une machine disposant de beaucoup de RAM. Les fabricants d'IntelliJ sont sortis avec un éditeur de python appelé pycharm, je l'ai acheté quand il est sorti et c'est génial. Mais ce que j’ai compris, c’est que je n’ai pas besoin d’un IDE pour Python, je suis satisfait d’un éditeur de texte. Lorsque je reviens à travailler sur des applications Web Java, ce que je dois faire de temps en temps, j'essaie d'utiliser l'éditeur de texte, mais je ne l'ai pas encore parfaitement maîtrisé. Personnellement, j'ai plus besoin de l'EDI pour Java, car si je perds quelque chose, la recompilation et le redéploiement prennent plus de temps, ce qui me ralentit.

ORM:

Quand j'ai commencé à utiliser Hibernate comme ORM, je trouvais ça génial, il y avait des problèmes, et ce n'était pas parfait, mais c'était mieux que ce que je faisais auparavant. J'en étais content, jusqu'à ce que je fasse une application avec l'ORM de Django sur un projet en python, ce qui m'a ouvert les yeux, c'est ainsi qu'un ORM est censé fonctionner. Après ce projet, je suis retourné en hibernation et je me suis senti déçu. J'avais envie de retourner à l'ORM de Django. Sqlalchemy est un autre grand ORM en python, similaire au ORM de Django, mais un peu différent. J'ai peu d'expérience avec l'ORM de ROR, mais d'après ce que je me souviens, c'était assez bon aussi.

Modèles:

Les systèmes de templates Web en Java ne sont pas très bons, et je pense les avoir tous essayés (tuiles, freemarker, vélocité, etc.). La plupart d'entre eux n'offrent que des fonctionnalités de base et sont difficiles à utiliser. Du côté de Python, mes deux favoris sont les modèles Django et Jinja2, ils ont tout ce dont je pourrais avoir besoin dans un moteur de templates et sont vraiment faciles à utiliser.


10
Je suis avec vous sur de nombreux points, mais contestez-en certains. Boucle de compilation / test : utilisez le module Web dynamique d’Eclipse et / ou JRebel. génial. Heavyness : JBoss AS 7 est assez léger et rapide. et si vous ne voulez pas d'EE, vous pouvez utiliser Tomcat ou Jetty, qui sont à peine identiques. Test : Arquillian est le meilleur outil de test que j'ai utilisé dans N'IMPORTE QUEL langage, même s'il est juste assez développé pour être utilisable. L'enfer de la dépendance : Il suffit d'utiliser Maven; ce devrait être une partie standard et obligatoire de JAva.
Craig Ringer

Notez que tout ce qui précède ajoute au problème "piles non incluses", qui est énorme. On se sent comme Java EE est un sous-cadre sur lequel vous êtes censé construire votre propre cadre pour ensuite créer votre application. Très inefficace. Chaque outil est également horriblement bogué et JSF2 est simplement un instrument de destruction de la productivité des développeurs.
Craig Ringer

2
Je pense aussi que vous avez manqué un point critique: la courbe d'apprentissage et les bugs ralentissent vraiment les choses.
Craig Ringer

@CraigRinger Je n'ai pas utilisé le module Web dynamique d'éclipse ni JRebel, alors vous avez raison, il est peut-être parti.
Ken Cochrane le

2
Si vous avez aimé IntelliJ, essayez PyCharm - il est basé sur le même noyau.
Tamlyn

94

Start Ups veulent le brillant. Quel que soit le brillant: RoR, Groovy, Grails, POO avec PHP, Foobar, Wibble, Narf, etc.

Enterprise veut une solution stable, fiable et évolutive: Java et .NET répondent à cette exigence (une fois correctement effectués).

Concert actuel: Services financiers. Plate-forme: ColdFusion (essentiellement une bibliothèque de balises Java) et Java.

Les concerts précédents:

  1. Services de test d'éducation - ColdFusion
  2. Assurance à haut risque - ColdFusion et Java
  3. 401k - ColdFusion et Java
  4. Travel - Applications Java internes à ColdFusion
  5. Securities - ColdFusion (version antérieure à Java)

Ce sont tous des sites à fort volume et haute sécurité. Personne dans aucune de ces sociétés n’a jamais envisagé PHP, certaines ont examiné RoR et ont vu trop de problèmes. La société 401k avait une société soeur exécutant une application .NET avec des développeurs compétents, l’application ne cessant de planter chaque semaine. Ils l'ont finalement convertie en Java et ont gagné en stabilité.

Les seules personnes qui méprisent Java sont celles qui n’en ont que peu ou pas d’expérience ou qui ont été impliquées dans des mises en œuvre médiocres et qui craignent désormais les armes à feu. Ils voient le brillant et pensent que si tous les enfants cool l'utilisent, pourquoi pas moi?


23
"La société 401k avait une société soeur qui exécutait une application .NET avec des développeurs compétents, mais l'application ne cessait de planter chaque semaine. Elle l'a finalement convertie en Java et a gagné en stabilité." Lol :), ont entendu parler du cas opposé.
Den

12
Bien sûr que vous avez. Les applications Web ne se limitent pas à l'écriture de code. Vous devez savoir comment ajuster vos serveurs, écrire du code SQL optimal, etc. Cette société avait 2 développeurs .NET et aucun administrateur de serveur réel. La société qui a acheté la société avec laquelle j'étais appartenait également à cette application. Ils constituaient un énorme magasin Java et disposaient donc de davantage de ressources pour garantir la stabilité.
Adrian J. Moreno

48
Il me semble malhonnête que vous ayez écrit cette phrase avec pour cause et pour effet. Convertir en Java = gain de stabilité? Nous savons tous que ce n'est pas pour ça. Aussi, désolé pour toute cette expérience ColdFusion;)
Jordan

3
Pour être juste, les investisseurs ont tendance à vouloir voir la saveur de l'année. Mais personnellement, je ne peux toujours pas penser à un pire choix pour le développement rapide de prototypes, à l’exception des développeurs Java de très haute qualité qui ne sont pas faciles à trouver.
Erik Reppen

9
Devs Java de très haute qualité qui ne sont pas faciles à trouver - En effet.
luis.espinal

73

Un ajout à la réponse de FrustratedWithFormsDesigner : Puisque je suppose que votre question concerne davantage les sites plus petits, il existe un aspect important que vous devez prendre en compte pour un grand nombre de personnes: L' hébergement est omniprésent pour PHP, mais plus difficile pour les sites Java ou ASP. Ce n'est cependant pas un défaut de ces langues.


Je pense que cela a changé, cependant, vous pouvez désormais héberger gratuitement des applications Web Java sur GAE.
Mahmoud Hossam

+1 pour l'hébergement de Java. Bien que ASP.Net ne soit pas difficile à trouver et qu’il soit bon marché. Je paie 8 $ par mois pour mon hébergement partagé ASP.Net. D'autre part, je voulais essayer d'obtenir un site en Java et je ne pouvais pas trouver un hôte partagé exécutant Java. Devoir utiliser un VPS ne m'intéresse pas pour un projet d'apprentissage.
Jetti

9
+1 pour cela. Il est beaucoup plus facile d'héberger de nombreux sites sur un serveur pour PHP que pour Java. De plus, il est beaucoup plus facile de trouver des solutions d'hébergement Web bon marché pour PHP que pour Java.
Jonas

Vous avez raison @Marque, corrigé.
sebastiangeiger

1
@Kibbee - Arvixe C'est ce que j'utilise. J'ai le plan personalASP Pro.
Jetti

70

Java est absolument utilisé pour le développement d'applications Web modernes. Particulièrement lorsque vous arrivez à l'extrémité légèrement plus grande / plus complexe / évolutive du spectre des applications Web.

Si vous êtes intéressé par les outils et les cadres modernes et productifs, consultez:

Mais je pense que le développement Web le plus moderne sur la plate-forme JVM sera probablement effectué dans l'un des nouveaux langages JVM plutôt que d'utiliser Java directement, Java fournissant simplement le noyau central en termes de bibliothèques sous-jacentes et d'infrastructure back-end. Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) et Clojure ( Noir , Ring / Enlive + de nombreux frameworks personnalisés) pour n'en citer que quelques-uns.

Avec toutes les innovations apportées au nouvel espace de langage JVM, je soupçonne personnellement que Java deviendra finalement "l'assembleur de la programmation côté serveur".


Vaadin est un excellent outil pour créer des applications intranet et grande entreprise. Je suppose que ce n'est pas très bien adapté à une startup. C’est à moins que vous n’ayez à quoi ça ressemble, car il est trop difficile de le changer.
mardi

7
D'accord; Java EE 6 est génial dès que vous abandonnez JSF2 et utilisez quelque chose de sain et productif. La courbe d'apprentissage est encore immense cependant.
Craig Ringer

1
Vous pouvez ajouter Tapestry5 ( tapestry.apache.org ) à votre liste de cadres Web Java modernes.
Neeme Praks

@CraigRinger JSF est facile. Votre commentaire se lit comme la question elle-même: un discours religieux
jwenting

@jwenting Eh bien, cela fait trois ans , donc il s'est un peu amélioré en termes de documentation et d'outils externes depuis. Sur la pile EE 6, lorsque je travaillais avec elle, c’était horrible, plus si nous soutenions Glassfish 3 et AS 7.
Craig Ringer le

41

Google, Amazon ou LinkedIn sont-ils considérés comme modernes?

Java est utilisé pour les applications Web modernes. Si vous regardez dans l’entreprise, c’est le langage le plus utilisé pour les applications Web (internes).

Cela étant dit, Java a connu une période difficile au cours de laquelle les normes de développement Web ont été adoptées. "Ne vous répétez pas" était une réponse à l'enfer xml et aux longs cycles de construction du développement Web Java. En conséquence, Java (EJB, Struts, JSF, etc.) est apparu comme la chose que tous les nouveaux paradigmes tentaient de surmonter.

Java, le langage est commenté. C'est un avantage et un inconvénient (excellent pour la maintenance, c'est nul pour le dev). Un certain nombre de fonctionnalités du langage moderne qui ne sont pas encore intégrées à Java peuvent réduire considérablement le temps de codage (propriétés, événements, fermetures, générateurs, compréhension de liste, etc.). Cela peut donc être frustrant de parler dans une langue plus moderne. Cela dit, ils sont difficiles à ajouter à un langage mature sans devenir le nid de rats que C # est en train de devenir.

De nombreuses langues utilisées dans le développement Web moderne sont typées de manière dynamique. Cela active un outil capable de recharger dynamiquement le code au fur et à mesure de son écriture (cela est plus difficile à réaliser dans un langage statique - jrebel). Étant donné que le développement Web se prête à de rapides itérations, le rechargement dynamique représente un gain considérable. Il réduit considérablement le cycle de développement sur les projets "greenfield" et facilite l'obtention des droits d'interface utilisateur et d'UX (essais et erreurs par nature).

Les langues statiques ont aussi leur place. Pour une logique d’arrière-plan complexe, qui doit durer des années, doit évoluer sans problèmes, doit être très rapide et totalement exempte d’erreur, les langages à typage statique (comme Java ou même C) sont préférés.

En outre, à mesure que le nombre de développeurs / le nombre de développeurs augmente et que les produits mûrissent, il est probable que des personnes bien intentionnées introduisent des explosions de bugs. La rigueur et la discipline qu'un projet Java bien conçu (interfaces, modèles et eau bénite pour les vampires php :)) permettent de réduire les risques à long terme. Bien que cela puisse également être réalisé via des tests unitaires, le filet de sécurité issu de la vérification statique (et des analyseurs statiques tels que findbugs et clang) offre un niveau de couverture de code intégré qu'il est difficile de reproduire avec des tests manuscrits. Ne vous méprenez pas, il devrait y avoir des tests unitaires et des tests fonctionnels, mais les vraies organisations n'atteignent jamais une couverture de 100%. Pour ce qu'ils vérifient, les analyseurs statiques le font.

Ainsi, dans les grands projets (définis davantage par la taille de l'équipe que par la taille du code), où l'interopérabilité est complexe entre des fragments de code développés indépendamment, les langages comme Java sont toujours préférés. Les exemples incluent des applications Web volumineuses / complexes telles que celles de courtiers financiers (ameritrade), des échanges financiers (nasdaq, nyse, peut-être Londres après la défaillance du réseau .net), des services bancaires en ligne (presque tous), des courriels (google), des enchères (ebay) , etc.

Du point de vue des performances et de l’échelle, rien ne surpasse la plate-forme Java en ce qui concerne l’évolutivité et les performances des applications Web (en fonction de la manière dont vous comptez le partitionnement des applications de Facebook). Twitter, par exemple, a dû réécrire de grandes parties de son infrastructure Ruby dans Scala sur la machine virtuelle Java afin de remettre le problème en échec. J'ai entendu parler d'autres grands exemples, mais ils m'échappent pour le moment.

Cela vaut également la peine de prendre en compte la sécurité. Alors que les plug-ins de navigateur Java ont subi leur part de vulnérabilité en matière de sécurité, la plate-forme Java elle-même est l'une des plates-formes les plus sécurisées créées. Les applications Web Java ont la réputation d'être très sécurisées. Ses pratiques de codage, ses bibliothèques et son architecture ont longtemps découragé les erreurs qui rendent possibles des attaques telles que l’injection SQL ou les dépassements de mémoire tampon. Alors que les autres plates-formes Web (rails) jouissent d'une bonne réputation en matière de sécurité, aucune ne surpasse Java.

En bout de ligne, la plupart des applications Web sont techniquement simples. Pour simplifier, Java est souvent excessif (comme au bon vieux temps quand nous les écrivions en C :)). Si, toutefois, l'application Web est complexe (backend ou autre) ou si elle compte plus de 100 développeurs, Java est difficile à battre.

-

Sur une note personnelle, j'utilise beaucoup Grails parce que cela me donne le meilleur des deux mondes (on peut en dire autant de JRuby, qui selon moi est de plus en plus populaire dans le monde Ruby).

BTW - Je trouve la montée de PHP vraiment déroutante. PHP en tant que langage est l'équivalent approximatif de perl en lisibilité et de VB en qualité des résultats. Cela encourage les pratiques horribles, est presque impossible à maintenir, les bibliothèques tierces fonctionnent rarement comme prévu et il a une syntaxe qui ferait monter Larry Wall ... enfin ... un mur. La seule explication que je puisse évoquer est qu’elle se prête à un apprentissage incrémental (comme VB). En d’autres termes, vous pouvez accomplir quelque chose d’utile en sachant très peu de choses sur la programmation / l’administration et vous pouvez étendre vos connaissances d’un petit morceau à la fois. Il y a beaucoup à dire pour cela du point de vue de l'adoption. Cependant, pour tous ceux qui ont tous eu à supporter ou à remplacer l'une des milliards d'applications VB écrites par des "programmeurs" dans le monde de l'entreprise / de la fabrication, vous secouez probablement la tête et planifiez votre retraite. :)


3
Vous souhaitez élaborer sur le point "le nid de rats que C # est en train de devenir"?
XåpplI'-I0llwlg'I -

1
Je ne sais pas trop pourquoi vous dites: "Ne vous répétez pas" était une réponse à l'enfer xml et aux longs cycles de construction du développement Web Java. " DRY est apparu comme un concept dans la communauté Agile, dont la plupart utilisaient des langages autres que Java à l'époque.
Jules

38

Eh bien, j’ai récemment rencontré un gars de Java qui était vraiment excité par le nouveau projet Spring Data, en raison du peu de code nécessaire pour obtenir un accès CRUD de base à votre base de données.

Je peux créer une application CRUD en utilisant Rails (pas seulement l'accès à la base de données, mais aussi les vues et les contrôleurs) avec quelques commandes.

(De mémoire de tête: nouveau projet, 1 commande d'échafaudage par entité, 1 commande pour migrer la base de données, 1 commande pour démarrer le serveur.)

Cela n’a rien à voir avec le langage, c’est tout ce qui concerne les outils. Et il semble que les langages dynamiques ont tendance à avoir les outils et les frameworks qui suppriment beaucoup de code standard. (Pour compenser notre manque d'IDE puissants qui génèrent des résultats optimaux pour nous.)

De plus, j’ai le sentiment que les langages dynamiques ont tendance à faciliter l’écriture de tels outils et frameworks. Je peux utiliser le code pour, par exemple, Padrino ou Rails (frameworks Web ruby) beaucoup plus facilement que pour le code pour, par exemple, Spring Roo. Cela pourrait être dû au fait que je connais Ruby beaucoup mieux que Java.


24
Personnellement, je n'aime pas les langages dynamiques. Les langages statiques me rendent plus productif quand je peux voir toutes les erreurs de type rapidement dans mon IDE et utiliser des outils de refactoring. Vous devriez jeter un coup d'œil sur Play Framework , un framework Web Java inspiré de Ruby on Rails et qui vous rend productif avec Java.
Jonas

4
Un framework puissant, comme des rails, signifie également que si quelque chose est mal implémenté, la plupart des gens ne peuvent pas le remplacer par autre chose, car ce composant est trop étroit avec le framework. Tandis que pour Java, si je n'aime pas Hibernate, je peux utiliser autre chose, comme Cayenne ou JPA, par exemple.
Coyote21

2
En tant que combattant de Django, permettez-moi de dire simplement: Coyote21 a absolument raison. Vous pouvez commencer à utiliser CRUD de base en cinq minutes, mais dès que vous ajoutez une logique métier (lorsque cet enregistrement est mis à jour, un enregistrement doit être inséré dans ce tableau et ...) dans CRUD, vous avez des problèmes. .
asthasr

Si vous aimez Rails mais avez besoin de Java, consultez Seam Forge. Attention, il utilise JSF2, ce qui est horrible à travailler avec, mais Forge lui-même est assez bon.
Craig Ringer

vous pouvez créer des applications CRUD en Java en utilisant Roo en quelques minutes, même chose avec Grails (pas exactement Java, mais encore JVM) Jouer 1.0 avait des générateurs / échafaudages, je me demande où il est allé bien ...
Eran Medan

24

Java s'est positionné ces dernières années comme "entreprise". Ce qui est de l’autre côté du spectre des besoins d’une jeune entreprise. Dans le développement d'applications Web, vous avez besoin de 4 éléments: un accès à la base de données sans douleur, une excellente manipulation des chaînes, un sucre syntaxique et un processus itératif rapide pour apporter les nombreuses modifications mineures requises par votre application.

Les performances, l'évolutivité et la stabilité sont un peu plus faibles sur la liste des priorités.

De plus, Java est un langage peu codé pour coder. Il a eu la capacité révolutionnaire d'utiliser une chaîne dans une instruction switch juste hier. Et javascript est un langage très hacker, donc après avoir développé votre interface, vous vous sentez très contraint lorsque vous revenez à java.

Donc, je suppose que ce sont les raisons pour lesquelles webstartups évite Java.


12
accès sans douleur à la base de données? Spring JDBC ou Hibernate fonctionnent très bien. Grande manipulation de cordes? Ne pensez pas que la manipulation des cordes représente beaucoup plus que 5% dans n'importe quel projet. Sucre de syntaxe? Qu'entendez-vous même par là? Processus itératif rapide? Java l'a (Tomcat à l'intérieur d'Eclipse est indolore). Java unun? La seule chose qui manque est concise classes anonymes / lambdas / etc. Les fonctionnalités "amusantes" dans d'autres langues ont tendance à obscurcir et à rendre les choses moins claires. Les chaînes en switch ... ouais, je dois admettre que c'est nul (cependant, la plupart du temps, vous devriez utiliser des énums).
alex

4
@alex: Syntax sugarJava ne peut pratiquement pas être utilisé pour DSL, par exemple, le fichier config and routes de Play n'est pas un fichier Java, il utilise une syntaxe étrangère qui fait moins que dire les paramètres settings.py et urls.py de django; pas de compréhension de liste; Les types de données cruciaux (cartes, listes, etc.) ne sont pas importés par défaut; une classe par fichier idiote est vraiment un obstacle; et les API Java ont tendance à être inutilement prolixes. En outre, vous ne pouvez pas utiliser d’énum quand vous passez d’une chaîne à l’autre que vous avez reçue du paramètre GET / POST.
Lie Ryan

4
@alex Intéressant. J’ai tendance à utiliser des génériques partout en C # - même si vu de l’extérieur, c’est probablement dû à la fonctionnalité accrue de lamdas - Je peux donc avoir IRepository<T>un IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Je me demande s'ils vont devenir plus populaires en Java quand ils auront des lambdas? Il s’agit probablement d’une zone de confort, mais Java est simplement prolixe - et j’ai le sentiment que j’ai reçu assez de bits pour construire 50 types de voitures différents sans aucune garantie que les 2 pièces s’emboîtent parfaitement.
Basic

3
Je ne peux pas croire que deux personnes aient soutenu que Tomat dans Eclipse est indolore et rend le développement Java efficace. Je trouve que chaque cycle de développement est beaucoup plus rapide, mais nécessite une maintenance quotidienne, notamment l'actualisation, la reconstruction, le nettoyage, le redéploiement, le redémarrage et parfois le redémarrage d'Eclipse, ainsi que la répétition des étapes précédentes. Si ma voiture nécessitait autant d'entretien, je ne me mettrais jamais au travail.
Brandon

1
@ Brandon, je vais appuyer cela. Je n'ai jamais, pas une seule fois, lutté contre un problème de configuration dans Node ou Python / Django. Je perds patience avec RoR. Notre base de code Java dépendant de dépendances Ant / Mvn / Spring / Hibernate / eclipse est un cauchemar éveillé avant même d’obtenir le code.
Erik Reppen

18

Je travaille actuellement dans une entreprise qui compte quelques développeurs "je déteste les développeurs Java". Cela m'étourdissait aussi. Je déteste certainement tous les hordes de technologies disponibles avec Java. Cela rend les décisions trop difficiles. C'est comme quand tu as trop de choix tu n'as pas le choix. Vous devez passer du temps avec des centaines de frameworks pour vraiment créer le framework qui vous convient. L'architecture standard de Servelt est extrêmement compliquée pour la plupart des applications. Ce n'est pas le cas avec Ruby, Django et d'autres choses. Ils sont plus d'un cadre unique que d'un langage.

Les plus grosses plaintes que j'entends des développeurs

  1. La syntaxe est trop longue. Juste pour imprimer quelque chose, nous devons écrire System.out.print. Vous ne pouvez pas vraiment utiliser un simple VI comme un éditeur et écrire un morceau de code fonctionnel en quelques heures.
  2. Cadres de test faibles. Même si les frameworks de test sont très similaires en Java et en Ruby, Ruby fait un pas en avant en rendant les choses facilement disponibles pour les tests. Cela est particulièrement vrai si vous utilisez abondamment la base de données dans votre application. Même de nombreux frameworks Web ne pensent pas aux tests.
  3. Les modèles sont une douleur. Transforme le langage relativement simple en une soupe de nouilles.
  4. Pas cool. La plupart des applications Java sont écrites dans de grandes entreprises, ce qui est associé à une bureaucratie qui va moins bien avec les développeurs. Les gens ne pensent pas à Google quand ils pensent à Java. Google == Python. Il doit également en faire beaucoup, aucun livre ne indiquant que faire X dans Y jours.
  5. N'aime pas compiler. Pour la plupart des développeurs, la compilation est un phénomène vieux de dix ans. C était logique dans les années 80 avec C, mais les ordinateurs modernes peuvent faire beaucoup plus. Ils n'écrivent pas de code dans les langages compilés. Java est l’un des rares langages compilés et utilisés pour écrire des applications Web.
  6. Trop de concepts Oups. Même si les développeurs ont discrètement adopté le domaine Oops. Ils n'aiment pas ça en entier. Ils n'aiment pas quand vous écrivez une application avec 10 classes, chaque classe ne faisant qu'une chose. Vous permet d'ouvrir des centaines de fichiers et d'imaginer une interaction entre des centaines de classes, parfois avec des frameworks. Fait de toute l'activité de programmation une corvée. Cela pourrait être vrai avec la plupart des langages mais j'ai vu que les développeurs Java accordaient beaucoup d'attention à ce que faisait une classe. Ce sont les développeurs Java qui proposent souvent un code avec des centaines de classes. C'est bon à bien des points de vue, mais les développeurs non Java le détestent.

Donc dans l’ensemble, Java impose une courbe abrupte au début du projet, ce qui signifie trop d’argent à engager. Ajoutez à cela une énorme communauté attachée à Java, chacun pensant de manière différente et personne pour diriger vraiment la communauté dans son ensemble. Ils ne voient pas non plus les discours et les conférences organisés par la communauté montrant toutes les nouveautés intéressantes. Pas de nouveaux livres cool. Il semble que Java va baisser car il a été utilisé pour résoudre trop de problèmes différents il y a quelques années.


(2) est traité à merveille par JBoss Arquillian ( arquillian.org ). Une grande partie du reste est davantage un problème JSF2 qu'un problème Java. Les problèmes les plus importants auxquels l’OMI est confrontée sont l’apprentissage de la courbe et l’immense bugginess des frameworks, mais si vous évitez JSF2, vous pourrez réussir.
Craig Ringer

5
J'aime OOP. Je connais aussi OOP, c’est pourquoi je ne dirais pas que la grande majorité des développeurs Java en fait trop. Vous pouvez écrire une classe, mais si votre code est toujours un fouillis de spaghettis enchevêtrés, tout ce que vous avez fait a été de trouver un moyen (de haricots) d’écrire du code procédural merdique avec des structures inutiles entourées de ce qui pourrait aussi bien être de simples fonctions ou des structures.
Erik Reppen

2
"Les gens ne pensent pas à Google quand ils pensent à Java." ... Je pense certainement à Android et à leur VM Dalvik (une machine virtuelle Java) quand je pense à Google. Je pense aussi à des choses intéressantes comme GWT (génération automatisée de JavaScript à partir de Java). S'il y a une société qui est "haute" sur Java, c'est Google. Beaucoup plus que Apple ou Microsoft. Certes, Oracle et IBM sont encore plus associés à Java que Google, mais néanmoins: des milliards d'appareils Android exécutant des applications Java sur une machine virtuelle Java sont difficiles à imaginer sans établir un lien très fort entre Google et Java.
Cedric Martin

Beaucoup de haine envers JSF2 forme @CraigRinger dans ces commentaires. :-) Qu'est-ce qui t'énerve? J'ai trouvé cela complexe au début, mais une fois que je suis parti, j'adore ça. Bien sûr, j'utilisais Spring avant, donc tout ce qui va ressembler à une amélioration ... :-)
Brian Knoblauch

1
Je suis un développeur OOP en Java et je ne saurais trop exagérer les avantages de la POO pour les développeurs. Oui, le développement prend un peu plus de temps, mais le taux de bogues plus bas, lisible et plus facile à gérer, en vaut la peine. Sans oublier que les tests unitaires deviennent beaucoup plus faciles avec une POO bien faite.
IntelliData

14

Les frameworks pour le développement Web Java ont un peu de courbe d'apprentissage, ils sont souvent en train de trop demander ce dont vous avez besoin, et une grande partie de l'indirection requise pour faire fonctionner les choses est juste… douloureuse… avec laquelle travailler.

Auparavant, je travaillais pour une entreprise qui développait Spring / Java et je trouvais le cadre lourd au mieux. Je n'ai pas beaucoup de choses agréables à dire sur le framework Spring, à l'exception d'un ami qui avait l'habitude de développer Struts et qui pensait que Struts était encore pire. L'infrastructure Web n'a rien à voir avec les applications de bureau ou les applications mobiles (par exemple: Android). Elle contient de nombreuses idées très abstraites qu'il faut un certain temps pour saisir vraiment (bien que, certes, cela vous donne beaucoup de puissance et de capacité si êtes un pro et faites quelque chose de vraiment complexe comme une application de niveau entreprise). J'adore programmer Java pour les appareils mobiles ou de bureau, mais Java pour les applications Web? Pas tellement.

Je n'ai pas fait de programmation personnellement dans Ruby / Rails, mais mon ami qui avait l'habitude de faire Struts est maintenant en train de faire de la programmation Web avec Ruby et témoigne que les choses difficiles à faire dans la programmation Web en Java nécessitent beaucoup moins de code et de complexité. Rubis. Les différentes règles de syntaxe et de langage nécessitent un apprentissage, mais pour les applications de prototypage, cela présente un avantage en termes de quantité de code nécessaire pour obtenir le résultat souhaité. Comme d'autres l'ont mentionné, l'évolutivité est également un problème à prendre en compte, et l'une des raisons pour lesquelles les applications les plus matures ne sont pas aussi fréquentes dans les langues les plus en vogue.


+1 pour l'overkill du framework. Cela devient fou, au printemps j2ee maven ant hibernate, vous passez tout votre temps à écrire xml config.
Richard

1
+1 pour le cadre. Non seulement les tentatives initiales de cadres P ** s Poor (JSP, STRUTS), mais nous en avons maintenant une trentaine à choisir, dont l'une ne fonctionne pas aussi bien que RoR.
James Anderson

Ce ne sont pas que les cadres. Ce sont les niveaux obscènes de conformité aux choses qui n'ont aucun sens. Exposer beaucoup de propriétés signifie que vous le faites mal. Le fait de gifler un getter et un setter vanilla ajoute un appel de méthode inutile et ne change rien. Cependant, aucun développeur Java ne perdra les propriétés d'un objet comme celui-ci, car la communauté renforce le fait que c'est encore plus faux que ce qu'il est déjà en train de faire. Mais sérieusement, le XML au lieu du code ... Comment cela a-t-il duré plus de 5 minutes?
Erik Reppen

14

Cela se résume aux coûts et aux tendances. La Web 2.0 Startup est créée par un visionnaire de moins de 30 ans qui a plus de talent que d’argent (je généralise bien sûr mais c’est ce que vous verrez "en moyenne"). Il va utiliser un langage qu'il connaît bien parce qu'il programme (avec peut-être quelques amis). Il est probablement un programmeur autodidacte.

Java a été ciblé en tant qu'environnement d'entreprise (par Java, j'entends le langage, le cadre et les normes). Il existe de nombreux outils coûteux que les sociétés IBM, Oracles et BEA du monde veulent vendre aux entreprises.

Les étapes pour maîtriser Java sont complexes et / ou coûteuses. Je sais que le paysage change, mais est-ce trop peu, trop tard?

Après le démarrage, la croissance s'accélère. Recruter des développeurs talentueux est difficile. La plupart des programmes "Devenir programmeur en six semaines" enseignent Java (ou .NET) et le marché est saturé en "programmeurs de six semaines" (curieusement, j'ai vu des développeurs avec des curriculum vitae affirmant que 7 ans d'expérience témoignaient encore des connaissances acquises depuis six ans. programmeur hebdomadaire). Utiliser un environnement non-entreprise non traditionnel peut constituer un filtre naturel pour les programmeurs de six semaines. Il faut du dévouement et un investissement personnel pour apprendre un Ruby ou une Scala en dehors des exigences d'un poste. C'est pour moi le plus gros indicateur de potentiel pour un candidat.

La connaissance vient avec l'expérience, mais un programmeur passionné / passionné acquerra des connaissances plus rapidement (en moyenne) que quelqu'un sans ce dévouement / passion. Tout comme un enfant qui aime jouer de la guitare va devenir meilleur plus rapidement qu'un enfant qui prend des leçons parce que son père l'a fait.


Je pense que c'est un très bon point +1
sfrj

1
Je ne suis pas d'accord avec le paragraphe qui dit: Il est très probablement un programmeur autodidacte. C'est faux ces jours-ci, de nos jours, la plupart des personnes âgées de plus de 30 ans qui participent à ce programme sont des programmeurs compétents et au moins titulaires d'un diplôme.
Coyote21

1
??? Je suis en train de peindre la startup web prototypique. Je n'ai rien dit sur leur compétence. Vous pouvez être autodidacte et compétent en même temps. Je ne suis pas sûr de ce avec quoi vous êtes en désaccord.
Michael Brown

1
Ce devait être ma réponse. Java est à peu près la seule technologie Web actuelle qui n’a pas été conçue pour que tout développeur compétent puisse la récupérer et l’utiliser. La deuxième partie de votre réponse est à peu près ce que Paul Graham a écrit dans The Python Pardox
user16764

14

Java est trop compliqué. Je fais une tonne de travail en PHP et c'est simplement plus facile et plus rapide dans la plupart des situations. La possibilité de simplement SSH sur un serveur pour ouvrir un fichier php, pour effectuer des modifications, est très utile. Les quelques applications Java sur lesquelles j'ai travaillé ont toujours nécessité un redémarrage pour les modifications les plus simples. (ne dis pas que c'est toujours le cas avec ce que j'ai déjà fait). De plus, l'hébergement PHP est bon marché et facilement disponible.

Je pense aussi que vous avez au moins avec PHP beaucoup de développeurs qui, comme moi, ont commencé il y a 14/15 ans avec le HTML statique. Au fur et à mesure que les choses progressaient, nous avons commencé à ajouter PHP à nos sites, parce que c'était facile, simple et abordable. Au fil des ans, la langue a grandi et a étendu ses capacités bien au-delà de ses modestes débuts et s'efforce maintenant d'être ce que je pense être beaucoup de choses qui ne le sont vraiment pas.

D'un autre côté, la plupart des développeurs PHP que je connais voient Java comme un gorille gigantesque d'une complexité de 300 kg, presque comme si on sortait du camion semi-remorque de 18 roues pour se rendre à l'épicerie et obtenir un pain.

J'ai essayé d'apprendre Java, mes premières impressions où il était très long et induisant un canal carpien. En plus de commencer, cela m'a laissé beaucoup de questions qui semblent probablement faciles à un ancien combattant de Java. OpenJDK ou Sun? Tomcat, ou Glassfish, ou? De plus, chaque introduction au livre Java semble vous aider à écrire du code pour la ligne de commande. Je pense que la plupart des gens trouvent qu’il s’agit d’une fête de la sieste.


3
Je prendrai plus de choix et un peu plus de complexité par rapport aux plus de 9 000 méthodes intégrées de PHP.
Kaleb Brasee

1
PHP est tellement facile à installer.
Barfieldmv

9
mais c'est tellement difficile de rédiger un bon code ... plus facile à configurer, plus facile à démarrer, moins ennuyeux ne devrait pas être le critère que vous utilisez pour choisir une langue. Une bonne programmation nécessite de la discipline, de la patience et des efforts ... c'est un mauvais signe si vous ne les avez pas tout en choisissant ...
alex

À moins qu'ils ne puent tous les deux, mais l'un est beaucoup plus un PITA à mettre en place que l'autre.
Erik Reppen

12

Mon équipe et moi-même développons actuellement une application Web greenfield en Java 6 + Stripes. Au cours de la dernière année, j'ai également travaillé sur une autre application Web greenfield utilisant Java 6 + Stapler (un framework Web quelque peu inconnu développé par Kohsuke Kawaguchi de la célèbre marque Hudson / Jenkins).

Java est absolument utilisé pour le développement Web moderne. Certes, il n’a pas l’appel "sexy" de Ruby ou d’autres langages dynamiques, mais je suis loin d’être convaincu que les langages dynamiques sont une bonne chose une fois que le projet commence à s’étendre.

Les serveurs d’applications Java modernes sont très compétitifs sur ASP.NET en termes de performances. Ils sont tous les deux beaucoup plus rapides que toute autre machine virtuelle à langage dynamique que je connaisse.

Ne vous méprenez pas ... Je ne dis pas que Java est toujours le meilleur choix (pas à distance!) - mais ni est - il toujours un mauvais choix ou « dépassé ».


1
J'ai tendance à être en désaccord avec le "plus rapide". En théorie, ils devraient l'être, mais il existe de nombreux sites php et presque toutes les anecdotes sur les problèmes de performances concernent MySQql ou d'autres bases de données sous-jacentes. D'un autre côté, presque toutes les applications J2EE que j'ai rencontrées nécessitaient un réglage important avant que les performances ne soient même acceptables.
James Anderson

1
@ James: avez-vous autre chose que de vagues anecdotes à l'appui? Les 10 meilleurs sites Web fonctionnent sur des plates-formes gérées (Amazon sur Java, Twitter sur Scala IIRC, Google sur un backend personnalisé en Java et C ++) ou disposent d'une infrastructure hautement personnalisée (Facebook et Wikipedia utilisent PHP, mais ils ont tous deux énormément de code natif personnalisé pour la vitesse). Java surperforme régulièrement les langages dynamiques dans les tests. Je ne suis pas un fanatique de Java, mais la performance n'est pas le problème de Java.
Daniel Pryden

Il n'y a pas de problèmes de performances avec Java lui-même "pas tout à fait aussi vite que C mais plus vite que tout le reste". Cependant, les frameworks J2EE, plus, plus ORM, plus l'injection de dépendance, ainsi que la conception overkill sont quasiment garantis. il y a tellement trop de potentiel pour des goulots d'étranglement cachés et des interactions imprévues
James Anderson

1
@Basic: Quel est votre point? Il y a beaucoup de bibliothèques et de frameworks cassés pour toutes les langues. Oui, il existe de nombreux documents cruels et obsolètes, mais ce n’est pas inhabituel non plus. Inversement, il existe des bibliothèques, des frameworks et des outils fantastiques pour Java. Essayez-vous sérieusement de suggérer qu'il devrait y avoir un cadre de bout en bout pour chaque application?
Daniel Pryden

1
@Basic: en arrière de quoi? Cela fait un an et demi que je réponds pour la première fois à cette question. Depuis, je suis chez Google et je peux vous assurer que Java est très utilisé pour le développement d’applications Web chez Google. Bien entendu, les besoins de Google sont très différents de ceux de nombreuses autres entreprises, mais Java est une bête complètement différente lorsque vous utilisez les bonnes bibliothèques et frameworks - il suffit de consulter quelques-unes des fonctionnalités ouvertes par Google (Guava, Guice, GWT, protocoles tampons, etc.).
Daniel Pryden

12
  1. Java est plus complexe à apprendre que PHP / Python / Ruby
  2. L'écosystème Java est très complexe, très vaste et assez déroutant pour les débutants
  3. Il existe de nombreux frameworks historiquement mauvais avec une réputation négative associés à Java, vous devez savoir sur quels frameworks éviter de perdre du temps.
  4. Les outils de construction Java sont très complexes (maven & ant)
  5. Java n'a pas de système de module facile à utiliser (OSGI est beaucoup trop complexe)
  6. Les IDE Java tels qu'Eclipse, bien que très puissants avec des fonctionnalités étonnantes, sont difficiles à configurer pour un développement Web efficace sans beaucoup d'expérience.
  7. Si vous utilisez autre chose que Tomcat ou Jetty en tant que serveur, vous serez frustré par les longs délais de démarrage de WebSphere / WebLogic / JBOSS.
  8. Java EE résout des problèmes que beaucoup de gens n'ont pas, comme les transactions distribuées

Un nouveau développeur débutant dans le développement professionnel trouvera Java un ordre de grandeur plus difficile que les rails, le python ou le php.

Cela dit, j’ai pris la décision d’utiliser Java pour mon démarrage car un environnement de développement Java correctement configuré est très productif. Par correctement configuré, je veux dire.

  1. Temps de démarrage inférieur à 10 secondes
  2. Espace de travail eclipse correctement configuré, avec tous les frameworks discutés et configurés
  3. Bonne sélection de bibliothèques (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... etc)
  4. Développeurs rapides avec SSD
  5. Abonnement Orielly Safari

8
Soyons clairs cependant. Le langage Java, n'est pas difficile à apprendre. Ce sont toutes les couches de merde construites autour du travail avec Java pour compenser ses lacunes (verbosité, vous protéger de vous-même et de vos coéquipiers en étant inflexible comme un moyen de s'en sortir, la quantité absurde de bibliothèques sur lesquelles on s'appuie, etc.) qui est un PITA apprendre.
Erik Reppen

2
@ErikReppen Très vrai. Je dois travailler sur un projet Java mais avoir une formation en .Net. Le langage et la syntaxe sont faciles à comprendre. C'est la verbosité qui me rend vraiment dingue. Ce que j’avais l'habitude de faire en une ligne prend maintenant 5 à 10 et (souvent) une édition de fichier de configuration XML. Sans oublier que, sans passer des heures à lire, choisir le "bon" cadre pour un travail est un cauchemar - et c'est avant que vous ne découvriez que votre scénario est considéré comme un cas extrême, qu'il n'est pas pris en charge et que vous n'aimez pas le réécrire. Je veux passer mon temps à résoudre les gros problèmes
Basic

"Java is more complex" - Quelqu'un peut-il jamais se souvenir des ordres de paramètres pour PHP strposou in_array? Et l'interface XML DOM de PHP est ridicule (attribuer des attributs aux chaînes pour les récupérer?). OSGi est absolument génial et indépendant de la langue.
Juin

@jevon: La documentation PHP est très bonne et mon IDE a hâte de me le rappeler de toute façon. Aussi, SimpleXML.
DanMan

12

Il y a environ 5 ans, un collègue et moi-même avons reçu une tâche de programmation pour un projet interne. Une tâche assez simple qui nécessitait l'analyse de la commande.

J'ai tout inventé dans environ 80 lignes de code java et mon collègue a pris une semaine, environ 20 classes java et beaucoup plus de lignes de code java pour faire de même. Inutile de dire que son code a été choisi.

Cela m'a fait me demander. Partout, la complexité était appréciée. (Je travaillais dans l'une des plus grandes sociétés de produits logiciels.) Java était l'outil de choix et les modèles de conception étaient LA méthode de code.

Maintenant, est-ce la mentalité ou juste l'arrogance qui rejette la simplicité. Eh bien, j'ai toujours pensé que le bon sens devait prévaloir. Qu'il s'agisse d'une entreprise ou d'une simple application Web, les cas d'utilisation de base sont les mêmes. Cela devrait être correct et vérifiable.

Je n'utilise plus Java pour plusieurs raisons. Mais l'un des facteurs - la complexité - est la mentalité qui prévaut dans une tonne de développeurs Java lorsqu'il s'agit de développer des logiciels.

En ce qui concerne la mise à l'échelle des langages dynamiques, JVM est le résultat de décennies de recherche. Il en va de même pour Ruby, etc.

La scala est une langue que je trouve extrêmement intelligente et pratique. Jouer! avec Scala est tout aussi excellent pour le développement d’applications Web / d’entreprise.

Quant à Ruby and Rails en tant que nouveauté brillante pour les start-ups, il est extrêmement difficile d'embaucher un développeur Rails solide. Il s’agit en fait d’un obstacle à la création d’une nouvelle entreprise alors que la pléthore de développeurs Java devrait être plus rationnelle sur le plan commercial.


Je ne suis pas un fan de Java, mais cette "complexité" à laquelle vous faites allusion pourrait bien avoir été une abstraction. L'abstraction est très utile à la fois pour les tests et la maintenabilité (lorsqu'elle est utilisée avec modération). Difficile à dire avec certitude sans pouvoir comparer le code
Basique

11

Dans une récente interview avec Joseph Snarr, un responsable technique de Google Plus, a expliqué comment l'application utilise les servlets Java pour le back-end et le JavaScript pour le front-end.

Donc, pour répondre à votre question, Java est encore utilisé pour le développement Web très moderne. Pas pour les start-ups qui ont fait couler beaucoup d'encre récemment.

Je pense que la plupart des start-up utilisent d’autres technologies parce qu’elles sont plus sexy et qu’elles ont plus de publicité pour promouvoir l’open source.


4
Les start-up utilisent d'autres technologies parce qu'elles veulent le faire maintenant. Pas plus tard. Et ils y sont allés pour se faire maintenant par environ 3 personnes, pas 30.
Erik Reppen

Citer une personne ne peut que donner son point de vue et ses choix, mais ne permet pas de conclure que ce qu’elle a choisi est / était la bonne décision.
DivKis01

9

Depuis que vous avez parlé de développement Web et de Java, beaucoup de gens ont tendance à oublier qu'au début, utiliser des applets Java dans un navigateur Web ne fonctionnait pas bien, mais le "bac à sable" des applets n'était pas complètement développé et des problèmes de sécurité se posaient. les applets Java pouvant s'exécuter dans le navigateur et accéder aux données de la machine locale (problème de sécurité côté client). Certes, Java était solide dans les applications backend et autonomes, mais je pense qu'associer le langage Java à des applets Java (exécutées sur le navigateur) ensemble a un peu faussé certaines perceptions à propos de Java en tant que composant de développement Web. Je ne pense pas qu'ils aient jamais récupéré de cela.


9
Absolument pas! En réalité, Java est une langue dominante dans le monde côté serveur. Des applets éteints il y a peut-être une décennie.
Chiron

5
Flash a fait ce que les applets ont essayé d'être. Démarrage rapide, téléchargement rapide, faible encombrement mémoire.

4
Je connais beaucoup de gens qui ne peuvent même pas faire la distinction entre Java et Javascript. Même s'ils sont complètement indépendants. Ceci est une autre chose qui donne à Java un mauvais nom.
Kibbee

5
@Kibbee ... ou ça donne un mauvais nom à Javascript :)
Matthew Schinckel

9

La question devrait être "Pourquoi Java n'est-il pas utilisé par les startups ou pour les petits projets?". Java est certainement utilisé pour les "applications Web modernes". Chez Google, Java est utilisé sur le backend pour de nombreux services, et JS ou GWT compilé pour la fermeture est utilisé pour le frontend. Le problème est celui de la vitesse par rapport à l’échelle. Les entreprises en démarrage doivent obtenir un produit minimum viable. Ce sont généralement de petites équipes de 1 à 3 ingénieurs qui attachent une grande importance à la vitesse d’itération par rapport aux performances ou à la facilité de maintenance. Se heurter à des problèmes d’évolutivité ou de maintenance du code de code d’équipe est un problème "que vous aimeriez avoir", c’est-à-dire qu’au moment où vous atteignez ce stade, c’est un signe que votre implémentation initiale vous a aidé à surmonter les difficultés rencontrées pour obtenir des clients ou investissement. Vous pouvez vous permettre de réécrire l'application à ce stade.

Une entreprise telle que Google peut se permettre le luxe de construire des choses pour la montée en gamme, même si elle perd peut-être son temps à mettre en œuvre la mise à l'échelle pour quelque chose qui pourrait ne pas attirer d'utilisateurs, car ils peuvent absorber la perte.

Au moins, c’est mon avis, beaucoup d’entreprises «cool», «branchées», «modernes» construisent de petites applications avec de petites équipes où la vitesse d’itération et la simplicité sont les exigences les plus grandes.


1
Où est votre source indiquant que les startups n'utilisent pas Java? Veuillez sauvegarder votre hypothèse avec quelques faits.
Walter

7

Les applications Web traditionnelles sur Java, bien que bien structurées, sont très loin d'être "rapidement développées". Bien que je n’aie jamais écrit qu’une seule application Web intégrale (Java / Tomcat / Struts), c’était extrêmement pointilleux, son débogage était plus long que prévu et il était généralement pénible lors de l’implémentation de la couche de logique applicative. En ce qui concerne la défense potentielle de Java, c’était la seule application Web que j’ai écrite en Java (même si je suis habitué à programmer des applications de niveau système en Java), et je pense pouvoir écrire une autre application Web un peu plus rapidement la deuxième fois.

Cela dit, j'ai également écrit des applications en PHP et en C #, et elles fonctionnent mieux et sont beaucoup plus tolérantes que Java. Plus que cela, Ruby on Rails a été spécialement conçu pour le développement rapide d'applications, qui, comme l'a dit Robbie, permettent un accès CRUD facile aux bases de données. Le problème est que la plupart des sites Web que vous allez développer vous-même n'ont pas besoin du niveau de personnalisation offert par Java (et que vous devez exécuter). De plus, chaque objet de connexion à la base de données doit être écrit à la main et la modélisation n’est pas aussi simple. Il existe peut-être un meilleur cadre, en particulier un qui tire parti des nouvelles fonctionnalités de prise en charge du langage dynamique de Java 7 , mais je n'ai pas encore effectué de recherche.


3
Vous devriez jeter un coup d'œil sur Play Framework , un framework Web Java qui vous rend productif avec Java et qui s'inspire de Ruby on Rails.
Jonas

2
@Jonas, pensez à rédiger de bons billets de blog expliquant tout cela avec concision.

@ Jonas ce que Thorbjorn a dit! Je lui donnerais une lecture approfondie. :)
Brian

@ Thorbjørn: Je n'ai pas de blog. En bref: avec Play Framework, il vous suffit de sauvegarder votre code source Java, puis de mettre à jour le navigateur Web. Le code est automatiquement compilé côté serveur à l'aide du compilateur Eclipse. JPA est utilisé pour l'accès à la base de données. Voici un article à ce sujet Play! Cadre d'utilisation
Jonas

2
@ Thorbjørn & Brian: Regardez la vidéo en première page du site Web de la structure de jeu, elle l'explique très bien, je dirais.
Bjarke Freund-Hansen

7

Réponse simple: courbe d'apprentissage pour baser la productivité.

Les systèmes basés sur un framework comme RoR ont tendance à mettre la "magie" dans le langage / syntaxe. Il est très facile d'intégrer votre syntaxe de base RoR et de créer une application.

Java était une langue d'abord, et les outils et les frameworks sont apparus plus tard. Vous devez donc d'abord apprendre Java, puis Spring, ou Grails, ou votre super IDE, ou peu importe. Exemple préféré de Ruby, il ne nécessite pas de setters et de getters. Le fait est que les IDE Java se sont également débarrassés du codage manuel ... mais il est toujours dans votre source. L'avantage de cette approche est que, sous la structure, il existe un langage cohérent que tous les développeurs Java peuvent utiliser.

Cet avantage est douteux pour les petites startups où le temps presse. Habituellement, ils font très peu de choses qu’ils ne pourraient pas faire avec un cadre hors de la boîte. Ainsi, ils peuvent saisir le système RAD de leur choix et faire vivre une application le lendemain.

Mais si vous regardez Facebook et Twitter, alors qu’ils se développaient, ils trouvaient des choses impossibles à gérer avec des frameworks prêts à l’emploi et devaient donc utiliser des technologies de bas niveau.

Cette guerre sainte dont disposent les développeurs de frameworks pour pouvoir faire n'importe quoi plus rapidement est fausse, ils peuvent faire beaucoup de ce dont ils ont besoin plus simplement et avec moins de courbe d'apprentissage. Et pour beaucoup de choses, c'est "assez bon". Utilisez ce qui convient au problème.


6

Cela dépend de la définition du "développement d’applications Web modernes". Si vous parlez de sites Web de démarrage rapide, vous devrez tenir compte de langages et de cadres conçus à cet effet. Si vous recherchez un développement Web stable et évolutif au niveau de l'entreprise, vous recherchez des langages et des frameworks prenant en charge ces idéaux. Dans mon livre, ce sont deux objectifs très différents. RoR, Groovy, etc., sont bons pour le premier et Java est plus approprié, en général, pour le second.


6

Google App Engine prend en charge Java pour vous permettre d'écrire l'intégralité de votre application Web en Java, en utilisant Eclipse comme interface de déploiement et IDE, avec une API Google raisonnablement documentée. Je ne dirais donc pas qu'elle n'est pas utilisée ou non. utilisable.


5

Dans le démarrage pour lequel je travaille, nous avons choisi d'utiliser Java et JRuby pour implémenter notre API, car ils se complètent.

Nous exploitons la robustesse de Java pour l’infrastructure, la distribution des processus et les communications, tandis que JRuby a été choisi pour l’implémentation des points de terminaison de l’API, car tous les appels impliquent JSON. -type de langue (Ruby).

Si nous constatons qu'une de nos classes JRuby est en train de devenir un goulot d'étranglement, nous devons simplement la ré-implémenter directement en Java (essentiellement une traduction ligne par ligne). Cela peut arriver assez souvent avec des classes qui font beaucoup de calcul, et dans ce contexte, JRuby se comporte beaucoup comme un langage de prototypage.

Nous avons implémenté notre propre chargeur de classes dynamique, ce qui signifie que nous pouvons modifier les classes Java à la volée sans redémarrer le serveur. Nous avons été très satisfaits du choix. Donc, l'argument "vous devez compiler et redémarrer à chaque fois" n'a pas beaucoup de poids.

La clé est d’éviter tout ce qui concerne Java EE - c’est énorme, encombrant et anti-agile.


5

J'ai toujours le sentiment que Java est utilisé dans de nombreux développements Web. Mais il s’agit généralement de projets de développement plus orientés vers les entreprises, qui ne sont généralement pas principalement axés sur la technologie, qui sont généralement moins ouverts que les nouvelles startups qui doivent s’engager et promouvoir leur propre travail et qui sont plus intéressés par la technologie. . Ainsi, même s’il est utilisé dans de nombreux sites Web d’entreprise, vous ne le saurez probablement jamais, car ils ne se soucieront pas vraiment de parler publiquement de leurs technologies.

Cela dit, en commentant toutes les questions initiales ...

Est-ce une faiblesse de la langue? Comparé à d'autres langages tels que Python ou Ruby, Java est détaillé et a tendance à nécessiter plus de code pour effectuer des tâches similaires. Mais ce ne sont pas seulement les capacités du langage, mais aussi la communauté qui l’entoure et le type de développeurs qui utilisent ces outils. Ainsi, la plupart des modules et outils sur Python, Ruby, PHP, etc. sont open source et sont plus faciles à trouver que dans le monde Java, tout simplement parce que celui-ci est davantage axé sur la fourniture (et la facturation) de services. Par exemple, la communauté Ruby est vraiment très orientée vers le développement Web. Ainsi, chaque développeur capable d’utiliser Ruby sera au courant des problèmes et des outils disponibles pour un projet Web. Ce n'est pas nécessairement vrai pour les développeurs Java, qui auraient pu travailler sur d'autres types de systèmes, tels que les systèmes de rapports. Bien sûr, tout bon développeur rattrapera son retard,

Est-ce un stéréotype injuste de Java parce qu'il existe depuis si longtemps (il a été associé injustement à ses technologies plus anciennes et ne reçoit pas la reconnaissance de ses capacités "modernes")? Java n’est pas vraiment aussi vieux et, pour être juste, il s’est beaucoup amélioré. C'était la plate-forme cool et pertinente il y a environ 10 ans. Mais depuis lors, de nouvelles plates-formes ont été créées, telles que Ruby on Rails. Le secteur de base de Java était principalement le monde de l'entreprise, avec des problèmes différents, de sorte que les personnes à la recherche de nouveaux projets à l'extérieur ont recherché différents outils. En outre, le principal avantage de la conception Java, la multiplateforme, n’est plus aussi pertinent qu’auparavant.

Le stéréotype négatif des développeurs Java est-il trop fort? (Java n'est tout simplement plus "cool") Cela a aussi une part de vérité. Java est toujours la langue à apprendre "pour trouver un emploi". Donc, si vous ne vous en souciez pas, mais que vous voulez juste apprendre quelque chose pour gagner de l'argent, vous finirez par apprendre un peu de Java et ne plus vous soucier de vous améliorer. Encore une fois, il y a beaucoup de perception et de visibilité. Il y a des tonnes de grands développeurs Java qui codent sans partager leurs connaissances, alors qu'il y a beaucoup de développeurs PHP, peut-être moins bons, qui écrivent des blogs et collaborent en open source. Cela donne à penser que les développeurs PHP sont meilleurs que ceux de Java, car vous avez certains retours à leur sujet.

Les applications écrites dans d'autres langues sont-elles vraiment plus rapides à créer, plus faciles à gérer et fonctionnent-elles mieux? Je dirais qu'ils sont plus rapides à construire. Les principes de langages tels que PHP, Python ou Ruby les rendent très utiles pour générer des logiciels pouvant changer en permanence. Par exemple, le typage dynamique facilite le changement d'interface. En Java, il est important d’avoir une interface bien définie, ce qui conduit à des interfaces plus stables (et difficiles à changer). Ceci est très important dans une nouvelle startup, dont le principal problème est d’obtenir un produit avant de manquer d’argent. En ce qui concerne les performances, il est très très facile de mal comprendre les besoins et d'essayer d'utiliser des tours de magie pour atteindre les performances requises, comme "Java est plus rapide que Ruby. Période" ou "MongoDB, c'est l'échelle Web".

Java est-il utilisé uniquement par les grandes entreprises qui sont trop lentes pour s’adapter à un nouveau langage? Avoir une équipe de développeurs Java déjà existante dans la société facilite le maintien du même langage pour les nouveaux projets. Ceci est perçu comme "la valeur sûre", en particulier si le cœur de l'entreprise n'est pas la technologie. Quoiqu'il en soit , Java n'est pas utilisé UNIQUEMENT dans les grandes entreprises, il y a encore beaucoup de startups qui utilisent Java pour des choses cool (par exemple, FightMyMonster ou Swrve utilise Java de manière intensive), mais je dirais que la tendance générale dans le démarrage la scène est d'utiliser d'autres langues. C’est aussi une façon de faire venir les gens, car la plupart des gens seront plus enthousiastes de travailler avec Ruby, Python ou PHP, perçus comme plus "amicaux" et "amusants".


5

Cela est vrai, mais pas à cause de Java et de son écosystème. C'est à cause des gens qu'en utilisant Java, on a tendance à créer de gros dégâts et de grosses abominations.

Il y a suffisamment de cadres (spring-mvc, grails, jeux, etc.) qui vous permettent de construire rapidement. Le fait que les utilisateurs aient trop d'ingénierie dans leurs systèmes est un problème lié à la connaissance accrue dont ils disposent lorsqu'ils travaillent avec l'écosystème Java - vous en savez beaucoup plus et vous les avez à disposition (il existe des outils pour tout) un ongle".

Si vous êtes "hacky", vous pouvez faire à peu près la même chose avec Java comme avec d'autres langages, et voici une étude qui indique que:

Etude sur 49 programmeurs: le système de type statique n’a aucun effet sur le temps de développement ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

Pour ajouter quelques mots à ce qui a déjà été dit, je pense que cela dépend en grande partie de la rapidité avec laquelle vous pouvez passer de rien (littéralement) à une application Web fonctionnelle.

Si tout ce que vous avez aujourd’hui, c’est une idée, écrire votre application Web est presque aussi simple que de tomber, que vous choisissiez un fournisseur d’hébergement ou votre propre infrastructure (comme une image EC2). D'après mon expérience, choisir Java nécessite généralement plus de travail et coûte souvent davantage.

De plus, si vous utilisez Linux et PHP / Python / Ruby, les outils et la plate-forme sont complémentaires et conçus pour se soutenir mutuellement. Avec Java, il semble parfois que les deux mondes (OS et Java) ne semblent pas parfois fonctionner en harmonie l'un avec l'autre.


La courbe d'apprentissage est absolument verticale. Vous passerez les premières SEMAINES à déterminer quels sont les acronymes, comment les normes s’appliquent à leurs implémentations, comment tout est superposé, etc. Ensuite, les semaines à venir pour déterminer le choix de bibliothèques et de frameworks à utiliser. Puis les semaines à venir rapportant des bugs en eux ...
Craig Ringer

3

Qui a dit que ce n'est pas?

Spring MVC + Spring Data JPA ou Mongo + Thymeleaf pour les templates + coffee-maven-plugin pour le transfert de café à JS et vous êtes prêt à partir.


Je suis totalement d'accord avec toi +1
Arshad Ali

3

Beaucoup pourraient associer le développement d'applications Java et Web aux horreurs de J2EE qui, combinées à des serveurs d'applications J2EE monstrueux de grandes sociétés bleues et rouges, équivalaient à des semaines de travail avant la mise en ligne de la base "Hello World".

Certes, les spécifications et les implémentations JEE récentes sont plus légères, mais je réfléchirais encore trois fois avant de suggérer quoi que ce soit de ce genre pour un projet de développement rapide à cycle court.

C’est toujours la méthode normalisée de développement d’applications Web en Java. Les alternatives, dont beaucoup sont mentionnées dans d'autres réponses, donnent une image plus mélangée et déroutante, avec trop de choix à faire.

D'autres langues décrivent une solution clé en main au lieu de cette multitude. Cela fait en sorte que ce choix semble plus adapté aux besoins lorsque vous avez des poissons plus importants à frire.


Java EE 6 est peut-être "léger" (sauf pour JSF2), mais il reste une courbe d'apprentissage incroyablement énorme, une pile gigantesque de spécifications compliquées et un système multicouche extrêmement complexe. Léger peut-être, mais certainement pas simple.
Craig Ringer

2

Je pense qu'il est utilisé beaucoup plus que vous ne le pensez - l'utilisation est juste en dessous de la ligne de flottaison. Il y a beaucoup, beaucoup de ruby ​​on rails enveloppent des services java épais et sophistiqués. Surtout quand vous commencez à faire face à tout ce qui s'approche du Big Data. . .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.