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?
la source
Réponses:
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.
la source
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.
la source
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.
la source
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:
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?
la source
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.
la source
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".
la source
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. :)
la source
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.
la source
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.
la source
Syntax sugar
Java 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.IRepository<T>
unIQueryable<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.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
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.
la source
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.
la source
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.
la source
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.
la source
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é ».
la source
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.
la source
strpos
ouin_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.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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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".
la source
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
la source
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 source
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.
la source
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.
la source
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. . .
la source