Como programador profesional de Java, he estado tratando de entender: ¿por qué odio a Java por las aplicaciones web modernas?
He notado una tendencia de que de las nuevas empresas web modernas, un porcentaje relativamente pequeño de ellas parece estar usando Java (en comparación con la popularidad general de Java). Cuando le pregunté a algunos sobre esto, típicamente recibí una respuesta como, "Odio Java con pasión". Pero nadie parece ser capaz de dar una respuesta definitiva.
También he escuchado que esta misma comunidad de inicio web se refiere negativamente a los desarrolladores de Java, lo que implica más o menos que son lentos, no creativos, antiguos.
Como resultado, pasé tiempo trabajando para recoger Ruby / Rails, básicamente para descubrir lo que me falta. Pero no puedo evitar pensar: "Podría hacer esto mucho más rápido si estuviera usando Java", principalmente debido a mis niveles de experiencia relativa.
Pero también porque no he visto nada crítico "perdido" de Java, lo que me impide construir la misma aplicación.
Lo que me lleva a mi pregunta (s) :
¿Por qué no se utiliza Java en las aplicaciones web modernas?
¿Es una debilidad del lenguaje?
¿Es un estereotipo injusto de Java porque ha existido durante tanto tiempo (se ha asociado injustamente con sus tecnologías más antiguas y no recibe reconocimiento por sus capacidades "modernas")?
¿El estereotipo negativo de los desarrolladores de Java es demasiado fuerte? (Java ya no es "genial")
¿Las aplicaciones escritas en otros idiomas son realmente más rápidas de construir, más fáciles de mantener y funcionan mejor?
¿Java solo lo utilizan las grandes empresas que son demasiado lentas para adaptarse a un nuevo lenguaje?
fuente
Respuestas:
Las nuevas empresas modernas deben llegar al mercado lo antes posible. No necesitan pasar unos seis meses para lanzar su aplicación web Java.
Twitter, por ejemplo, se creó con Rails / Ruby, pero una vez que dejó de ser escalable, migraron a la JVM.
Sin mencionar que el proceso de desarrollo no es productivo: código -> compilar -> implementar mientras está en marcos como (Rails / Django / Grails): ejecutar servidor de prueba -> código -> cambiar cosas y ver qué sucede.
La buena noticia es que JRebel le permite ver los cambios de código al instante.
fuente
En mi experiencia, Java para aplicaciones web es excesivo para aplicaciones pequeñas. Un blog simple con una tabla de base de datos contiene entradas de blog, por ejemplo, podría hacerse en algo mucho más simple.
Por lo general, he visto que Java funciona mucho mejor en aplicaciones web mucho más grandes (piense en bancos y compañías de seguros) que se comunican con una serie de otros sistemas (como back-end de mainframe y bases de datos y sistemas de procesamiento por lotes en segundo plano de servicios web similares ... todo en la misma aplicación).
Por lo que he visto, la arquitectura de una aplicación web JavaEE es generalmente más de lo que se necesita para aplicaciones web pequeñas / simples.
fuente
Programé aplicaciones web de Java durante 10 años antes de cambiarme a Python, hace más de 4 años. Siento que soy mucho más productivo usando Python y puedo hacer mucho más en un período de tiempo más corto, y para ser honesto, estoy mucho más feliz cuando me desarrollo en Python. Estas son algunas de las razones por las que creo que Python es mejor que Java basado en mi experiencia personal, su milagro puede muy.
Marcos web:
Cuando comencé a programar aplicaciones web en Java, Struts acaba de salir, y no fue genial, pero fue lo mejor disponible. Creé un montón de aplicaciones struts, y algunas en otros marcos a lo largo del camino. Cada vez que salía un nuevo marco (Tapiz, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring, etc.), lo probaba y veía si era mejor, y la mayoría de las veces era solo un poco mejor , y a veces no mejor en absoluto. Tengo que decir que el marco de juego es un paso en la dirección correcta.
Baterías no incluidas:
Una de las partes más molestas de Java fue el hecho de que la mayoría de las bibliotecas que usa no estaban incluidas en Java, tenía que incluir un montón de librerías de terceros de lugares como apache commons. Si usa algo como hibernar con cualquier otra biblioteca grande, termina en el infierno de dependencia de Jar, donde hibernate necesita una versión de un jar, y algo más necesita otra versión. Si carga los archivos jar en el orden incorrecto, no tiene suerte. Debe depender de herramientas como maven y hiedra para administrar sus dependencias, y esto solo trae más dependencias a su proyecto, lo que resulta en proyectos que son enormes. Tenía algunos archivos de guerra de 100 MB + archivos de guerra para las aplicaciones web más simples.
Demasiadas opciones:
Por alguna razón, parece haber demasiadas formas diferentes de hacer lo mismo en Java. Hay más de 38 marcos web diferentes para java según wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) y 23 ORM diferentes ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) solo por nombrar un par de ejemplos. Si nos fijamos en otros idiomas, tienen un número más razonable. Algunas personas piensan que tener muchas opciones es algo bueno, pero no lo es, lleva a un gran esfuerzo desperdiciado en la comunidad de desarrolladores, todos están reinventando la misma rueda, y si eres una persona nueva en el idioma que tienes demasiadas opciones para elegir.
Servidores de aplicaciones:
Las aplicaciones web Java son realmente pesadas y requieren muchos recursos para ejecutarse. Son especialmente hambrientos de memoria. Al igual que cualquier pieza de software, pueden ajustarse para reducir su huella de recursos, pero en comparación con otros idiomas, su configuración inmediata es horrible. En mi pasado he usado weblogic, websphere, Jboss, tomcat y jetty. Solo usé los primeros tres cuando me vi obligado a usar EJB, pero incluso si no está usando EJB, eran servidores de aplicaciones grandes y, a veces, difíciles de configurar y ejecutar correctamente. Tomcat y Jetty son mucho mejores y más fáciles de configurar, pero siguen siendo grandes recursos.
Alojamiento de aplicaciones:
Si no está ejecutando su propio servidor, es realmente difícil encontrar alojamiento compartido para sus aplicaciones java a un precio razonable. La razón principal es porque las aplicaciones Java requieren mucha más memoria en comparación con otros idiomas, por lo que no tiene sentido que un proveedor de alojamiento compartido gaste su valiosa RAM ejecutando un sitio Java, cuando podrían ejecutar 5 sitios php en el mismo lugar. Eso significa que hay menos proveedores que ofrecen alojamiento Java, lo que a su vez significa mayores costos para ejecutar su sitio web.
Tiempo de desarrollo:
Cuando desarrollé en Java, me encontré mucho más lento que lo que puedo hacer en Python. Tendría que hacer un cambio, compilar, volver a implementar y luego probar, y esto ralentiza el proceso iterativo. Sé que hay formas de hacer esto más rápido, pero incluso en el mejor de los casos, me sentí mucho más lento que lo que puedo hacer en Python.
También hay mucho menos código repetitivo para hacer lo mismo en Python, por lo que también paso menos tiempo desarrollando el código.
Java simplemente se siente sobredimensionado en muchas partes, muchas de las API e interfaces son demasiado complicadas para lo que quieres hacer. Y todos y su hermano piensan que son arquitectos de Java y esto da como resultado grandes sistemas complicados que son difíciles de usar y desarrollar.
IDE:
Cuando estaba desarrollando en Java, me sentí atrapado en el IDE, me perdí sin él. IntelliJ es el mejor IDE del mercado, y fue difícil cambiar a python porque no había nada parecido para python. Entonces, en lugar de un IDE, simplemente utilicé textmate, que es solo un editor de texto normal. Al principio fue difícil, pero como era solo un editor de texto, era una aplicación realmente rápida y receptiva. Podría abrir todo mi proyecto en unos segundos, mientras que cuando quiero abrir un proyecto en un IDE podría llevar un minuto o más, con una máquina con una tonelada de RAM. Los creadores de IntelliJ salieron con un editor de python llamado pycharm, lo compré cuando salió por primera vez, y es genial. Pero me di cuenta de que no necesito un IDE para Python, estoy bien con un editor de texto. Cuando vuelvo a trabajar en aplicaciones web Java que tengo que hacer de vez en cuando, trato de usar el editor de texto, pero todavía no lo he dominado. Personalmente necesito más el IDE para Java porque si estropeo algo, lleva más tiempo volver a compilar y volver a implementar, lo que me ralentiza.
ORM:
Cuando comencé a usar Hibernate como ORM, pensé que era genial, que tenía sus problemas y que no era perfecto, pero era mejor que lo que estaba haciendo antes. Estaba contento con eso, hasta que hice una aplicación con el ORM de Django en un proyecto de Python, y eso me abrió los ojos, así es como se supone que funciona un ORM. Después de ese proyecto, volví a hibernar, y me sentí decepcionado y deseé volver al ORM de Django. Otro gran ORM de Python es sqlalchemy, que es similar al ORM de Django, pero un poco diferente. Tengo una experiencia limitada con el ORM de ROR, pero por lo que recuerdo, también fue bastante bueno.
Plantillas:
Los sistemas de plantillas web en Java no son tan buenos, y creo que los he probado todos (mosaicos, marcadores libres, velocidad, etc.). La mayoría de ellos ofrecen solo funcionalidades básicas y son difíciles de trabajar. En el lado de Python, mis dos favoritos son las plantillas de Django y Jinja2, tienen todo lo que podría necesitar en un motor de plantillas y son realmente fáciles de usar.
fuente
Los principiantes quieren lo brillante. Cualquiera que sea el brillo: RoR, Groovy, Grails, OOP con PHP, Foobar, Wibble, Narf, etc.
Enterprise quiere estable, confiable y escalable: Java y .NET se ajustan a esa factura (cuando se hace correctamente).
Concierto actual: Servicios financieros. Plataforma: ColdFusion (esencialmente una biblioteca de etiquetas Java) y Java.
Conciertos anteriores:
Todos estos son sitios de alto volumen y alta seguridad. Nadie en ninguna de estas compañías consideró PHP, algunos miraron RoR y vieron demasiados problemas. La compañía 401k tenía una compañía hermana que ejecutaba una aplicación .NET con desarrolladores competentes, la aplicación seguía fallando cada semana. Finalmente lo convirtieron a Java y ganaron estabilidad.
Las únicas personas que menosprecian a Java son aquellas que tienen poca o ninguna experiencia real con él o han estado involucradas con implementaciones deficientes y ahora son tímidas. Ven el brillo y la figura si todos los niños geniales lo están usando, ¿por qué no yo?
fuente
Una adición a la respuesta de FrustratedWithFormsDesigner : dado que supongo que su pregunta se dirige más a sitios más pequeños, hay un aspecto importante que debe tener en cuenta para muchas personas: el alojamiento es ubicuo para PHP pero es más difícil para los sitios Java o ASP. Sin embargo, esto no es un defecto de esos idiomas.
fuente
Java se utiliza absolutamente para el desarrollo moderno de aplicaciones web. Particularmente una vez que llegue al extremo ligeramente más grande / más complejo / escalable del espectro de aplicaciones web.
Si está interesado en herramientas y marcos modernos y productivos, eche un vistazo a:
Pero creo que el desarrollo web más moderno en la plataforma JVM probablemente se realice en uno de los nuevos lenguajes JVM en lugar de usar Java directamente, con Java simplemente proporcionando la columna vertebral en términos de bibliotecas subyacentes e infraestructura de back-end. Hay mucho desarrollo web en Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) y Clojure ( Noir , Ring / Enlive + muchos frameworks personalizados) por nombrar solo algunos.
Con toda la innovación que está ocurriendo en el nuevo espacio de lenguaje JVM, personalmente sospecho que Java finalmente se convertirá en el "ensamblador de la programación del lado del servidor".
fuente
¿Google, Amazon o LinkedIn cuentan como modernos?
Java se usa para aplicaciones web modernas. Si observa la empresa, es el lenguaje más utilizado para aplicaciones web (internas).
Dicho esto, Java pasó por un período en el que sus estándares de desarrollo web intentaron ser todo para todos (posiblemente todavía lo sean). "No te repitas" fue una respuesta al infierno xml y a los largos ciclos de desarrollo del desarrollo web Java. Como resultado, Java (EJB, Struts, JSF, etc.) se convirtió en lo que todos los nuevos paradigmas intentaban superar.
Java, el lenguaje es detallado. Eso es un profesional y una estafa (excelente para el mantenimiento, apesta para el desarrollador). Hay una serie de características modernas del lenguaje que aún no se han incorporado a Java que pueden reducir sustancialmente el tiempo de codificación (propiedades, eventos, cierres, generadores, comprensión de listas, etc.). Por lo tanto, puede ser frustrante cuando viene de un lenguaje más moderno. Dicho esto, son difíciles de agregar a un lenguaje maduro sin convertirse en el nido de ratas en el que se está convirtiendo C #.
Muchos lenguajes utilizados en el desarrollo web moderno se escriben dinámicamente. Esto permite herramientas que pueden recargar dinámicamente el código a medida que se escribe (esto es más difícil de lograr en un lenguaje estático: jrebel). Dado que el desarrollo web se presta a iteraciones rápidas, la recarga dinámica es una gran victoria. Reduce significativamente el ciclo de desarrollo en proyectos nuevos y hace que sea más fácil obtener la interfaz de usuario y la experiencia de usuario correctas (prueba y error por naturaleza).
Los idiomas estáticos también tienen su lugar. Para la lógica de backend que es compleja, debe ejecutarse durante años, debe escalar sin problemas, debe ser muy rápida y debe estar completamente libre de errores, se prefieren los lenguajes estáticamente escritos (como Java o incluso C).
Además, a medida que crece el recuento / rotación de desarrolladores y los productos maduran, la probabilidad de que personas bien intencionadas introduzcan errores se dispara. El rigor y la disciplina que impone un proyecto Java bien diseñado (interfaces, patrones y agua bendita para esos vampiros php :)) ayuda a reducir el riesgo a largo plazo. Si bien esto también se puede lograr mediante pruebas unitarias, la red de seguridad derivada de la verificación estática (y analizadores estáticos como findbugs y clang) ofrece un nivel incorporado de cobertura de código que es difícil de replicar con pruebas escritas a mano. No me malinterpreten, debería haber pruebas unitarias y pruebas funcionales, pero las organizaciones reales nunca alcanzan el 100% de cobertura. Por lo que verifican, los analizadores estáticos lo hacen.
Por lo tanto, en proyectos grandes (como se define más por el tamaño del equipo que por el tamaño del código), donde existe una interoperación compleja entre fragmentos de código desarrollados independientemente, aún se prefieren lenguajes como Java. Los ejemplos incluyen aplicaciones web grandes / complejas como las de los corredores financieros (ameritrade), intercambios financieros (nasdaq, nyse, tal vez Londres después de la falla de .net), banca en línea (casi todos), correo electrónico (google), subasta (ebay) etc.
Desde una perspectiva de rendimiento y escala, nada supera a la plataforma Java por su combinación de escalabilidad y rendimiento para aplicaciones web (dependiendo de cómo cuente la partición de aplicaciones de Facebook). Twitter, por ejemplo, tuvo que reescribir grandes partes de su infraestructura de Ruby en Scala en la máquina virtual Java para poder devolver la ballena falsa al mar. He escuchado de otros grandes ejemplos, pero ahora me eluden.
También vale la pena considerar la seguridad. Si bien los complementos del navegador Java han sufrido una buena cantidad de vulnerabilidades de seguridad, la plataforma Java en sí misma es una de las plataformas más seguras creadas. Las aplicaciones web Java tienen la reputación de ser muy seguras. Sus prácticas de codificación, bibliotecas y arquitectura han desalentado durante mucho tiempo los errores que hacen posible ataques como la inyección SQL o el desbordamiento del búfer. Mientras que otras plataformas web (rieles) tienen una buena reputación de seguridad, ninguna supera Java.
En pocas palabras, la mayoría de las aplicaciones web son técnicamente simples. Por simple, Java a menudo es excesivo (al igual que en los viejos tiempos cuando los escribimos en C :)). Sin embargo, si la aplicación web es compleja (backend o no) o se espera que tenga más de 100 desarrolladores, Java es difícil de superar.
-
En una nota personal, uso mucho Grails porque me da lo mejor de ambos mundos (lo mismo se puede decir de JRuby, que escucho que se está volviendo cada vez más popular en el mundo de Ruby).
Por cierto, creo que el aumento de PHP es realmente desconcertante. PHP como lenguaje es el equivalente aproximado de perl en legibilidad y VB en la calidad de los resultados. Fomenta prácticas horribles, es casi imposible de mantener, las bibliotecas de terceros rara vez funcionan como se esperaba, y tiene una sintaxis que llevaría a Larry Wall hacia arriba ... bueno ... un muro. La única explicación que puedo conjurar es que se presta al aprendizaje incremental (como VB). En otras palabras, puede lograr algo útil sabiendo muy poco sobre programación / administración y puede ampliar su conocimiento un poco a la vez. Hay mucho que decir al respecto desde una perspectiva de adopción. Sin embargo, para cualquiera que haya tenido que apoyar o reemplazar una de las miles de millones de aplicaciones VB que fueron escritas por "programadores" en el mundo corporativo / MFG, probablemente esté sacudiendo la cabeza y planeando su jubilación. :)
fuente
Bueno, recientemente me reuní con un chico de Java que estaba realmente entusiasmado con el nuevo proyecto Spring Data, debido al poco código que se necesita para obtener acceso CRUD básico a su base de datos.
Puedo construir una aplicación CRUD usando Rails (no solo db access, sino también vistas y controladores) con algunos comandos.
(Fuera de mi cabeza: nuevo proyecto, 1 comando de andamio por entidad, 1 comando para migrar la base de datos, 1 comando para iniciar el servidor).
No tiene nada que ver con el lenguaje, se trata de las herramientas. Y parece que los lenguajes dinámicos tienden a tener las herramientas y los marcos que eliminan una gran cantidad de código repetitivo. (Para compensar nuestra falta de IDE potentes que generan repeticiones para nosotros).
También siento que los lenguajes dinámicos tienden a facilitar la escritura de tales herramientas y marcos. Puedo asimilar el código para decir, Padrino o Rails (marcos web de rubíes) mucho más fácilmente de lo que puedo asimilar el código para decir Spring Roo. Sin embargo, esto podría deberse al hecho de que conozco a Ruby mucho mejor que Java.
fuente
Java ha sido posicionado en los últimos años para ser "empresarial". Que está al otro lado del espectro de lo que necesita una startup. En el desarrollo de aplicaciones web, necesita 4 cosas: acceso sencillo a la base de datos, excelente manipulación de cadenas, sintaxis de azúcar y proceso iterativo rápido para realizar los numerosos pequeños cambios que su aplicación requiere.
El rendimiento, la escalabilidad y la estabilidad son un poco inferiores en la lista de prioridades.
También Java es un lenguaje muy poco divertido para codificar. Obtuvo ayer la capacidad revolucionaria de usar cadenas en una declaración de cambio. Y javascript es un lenguaje muy hacker, por lo que después de desarrollar su interfaz, se siente muy limitado cuando regresa a java.
Así que supongo que estas son las razones por las que los webstartups evitan Java.
fuente
Syntax sugar
Java prácticamente no se puede usar para DSL, por ejemplo, el archivo de configuración y rutas de Play no es un archivo Java, está en una sintaxis externa que hace menos que decir django settings.py y urls.py; sin listas de comprensiones; los tipos de datos cruciales (por ejemplo, mapas, listas) no se importan por defecto; una clase idiota por archivo realmente se interpone en el camino; y las API de Java tienden a ser innecesariamente detalladas. Además, no puede usar enumeraciones cuando cambia entre cadenas que recibió del parámetro GET / POST.IRepository<T>
con unIQueryable<T> Where(Expression<Func<T, Boolean> Expression)
. Me pregunto si se volverán más populares en Java cuando tenga lambdas. Probablemente sea una cuestión de zona de confort, pero Java simplemente se siente detallado, y al igual que me han entregado suficientes partes para construir 50 tipos diferentes de automóviles sin garantía de que las 2 partes encajen.Actualmente trabajo en una compañía que tiene bastantes desarrolladores de "Odio Java". Solía aturdirme también. Ciertamente odio todas las acumulaciones de tecnologías que están disponibles con Java. Esto hace que tomar decisiones sea demasiado difícil. Es como cuando tienes demasiadas opciones, no tienes otra opción. Tienes que pasar tiempo con cientos de marcos para realmente crear el marco que funcione para ti. La arquitectura estándar de Servelt es muy complicada para la mayoría de las aplicaciones. Este no es el caso con Ruby, Django y otras cosas. Son más un marco único que un lenguaje.
Las mayores quejas que escucho de los desarrolladores
En general, Java impone una curva pronunciada al comienzo del proyecto, lo que significa demasiado dinero para comprometerse. Agregue a esto una gran comunidad unida a Java, cada uno pensando de diferentes maneras y nadie realmente encabeza a toda la comunidad. Tampoco ven charlas y conferencias conducidas por la comunidad mostrando todas las cosas nuevas y geniales. No hay nuevos libros geniales. Parece que Java disminuirá porque se usó para resolver muchos problemas diferentes hace unos años.
fuente
Los marcos para hacer desarrollo web Java tienen bastante curva de aprendizaje, a menudo son excesivos para lo que necesita, y gran parte de la indirección requerida para hacer que las cosas funcionen es simplemente ... doloroso ... trabajar con ellos.
Solía trabajar para una empresa que hacía desarrollo de Spring / Java, y encontré el marco engorroso en el mejor de los casos. No tengo muchas cosas agradables que decir sobre el marco de Spring, excepto que tenía un amigo que solía hacer el desarrollo de Struts y pensó que Struts era aún peor. El marco web no se parece en nada a las aplicaciones de escritorio o las aplicaciones móviles (p. Ej .: Android), y tiene muchas ideas muy abstractas que tardan un tiempo en captar realmente (aunque, ciertamente, eso le da mucha potencia y capacidad si usted eres un profesional y haces algo realmente complejo como una aplicación de nivel empresarial). Me encanta programar java para dispositivos móviles o de escritorio, pero ¿java para aplicaciones web? No tanto.
No he hecho ninguna programación personalmente en Ruby / Rails, pero mi amigo que solía hacer Struts ahora está haciendo programación web Ruby y testifica que las cosas que son difíciles de hacer en la programación web Java requieren mucho menos código y complejidad para lograrlo. Rubí. Ciertamente, hay una curva de aprendizaje para las diferentes reglas de sintaxis y lenguaje, pero para las aplicaciones de creación de prototipos, tiene ventajas en términos de cuánto código se requiere para lograr el resultado deseado. Como otros han mencionado, la escalabilidad también es un tema a considerar, y una de las razones por las que las aplicaciones más maduras no se ven con tanta frecuencia en los idiomas más modernos.
fuente
Se trata de costos y tendencias. La Web 2.0 Startup es creada por un visionario menor de 30 años que tiene más talento que dinero (estoy generalizando, por supuesto, pero esto es lo que verá "en promedio"). Utilizará un lenguaje con el que está familiarizado porque está haciendo la programación (junto con quizás algunos amigos). Es muy probable que sea un programador autodidacta.
Java se ha dirigido como un entorno empresarial (por Java, me refiero al lenguaje, el marco y los estándares). Hay un montón de herramientas costosas que los IBM, Oracles y BEA del mundo quieren vender a las empresas.
Los pasos para dominar Java son complejos y / o costosos. Sé que el paisaje está cambiando allí, pero ¿es demasiado poco y demasiado tarde?
Después de que la startup gana tracción viene el crecimiento. Reclutar desarrolladores talentosos es difícil. La mayoría de los programas de "convertirse en programador en seis semanas" enseñan Java (o .NET) y el mercado está saturado de "programadores de seis semanas" (curiosamente, he visto desarrolladores con currículums que dicen 7 años de experiencia que todavía muestran el conocimiento de un seis programador semanal). El uso de un entorno no convencional y no "empresarial" puede ser un filtro natural para los programadores de seis semanas. Se necesita dedicación e inversión personal para aprender un Ruby o Scala fuera de un requisito de trabajo. Este es el mayor indicador para mí de potencial para un candidato.
El conocimiento viene con la experiencia, pero un programador dedicado / apasionado obtendrá conocimiento más rápidamente (en promedio) que alguien sin esa dedicación / pasión. Al igual que un niño al que le encanta tocar la guitarra, mejorará más rápidamente que un niño que toma lecciones porque su padre lo hizo.
fuente
Java es demasiado complicado. Hago un montón de trabajo PHP y es más fácil y rápido para la mayoría de las situaciones. La capacidad de simplemente SSH en un servidor, abrir un archivo php, hacer que los cambios se guarden y se haga es excelente. Las pocas aplicaciones Java en las que he trabajado siempre han requerido un reinicio para el cambio más simple. (No digo que siempre sea el caso con lo que he deltido). Además, el alojamiento PHP es barato y está fácilmente disponible.
También creo que lo que tienes al menos con PHP es que muchos desarrolladores que, como yo, comenzaron hace 14/15 años con HTML estático. A medida que las cosas progresaron, comenzamos a agregar PHP a nuestros sitios porque era fácil, simple y asequible. Con los años, el lenguaje ha crecido y ha expandido sus habilidades mucho más allá de sus humildes comienzos y ahora se esfuerza por ser lo que creo que son muchas cosas que realmente no es.
Por otro lado, la mayoría de los desarrolladores de PHP que conozco ven a Java como este gorila gigante de 800 lb demasiado complejo, casi como salir del camión de 18 ruedas para conducir a la tienda de comestibles y obtener una barra de pan.
Traté de aprender Java, mis primeras impresiones eran muy largas y provocaban el túnel carpiano. Además, comenzar me dejó con muchas preguntas que probablemente parezcan fáciles para un veterano de Java. OpenJDK o Sun? Tomcat, o Glassfish, o? Además, parece que cada introducción al libro de Java comienza a escribir código para la línea de comandos. Creo que la mayoría de la gente en estos días encuentra que un festival de repetición.
fuente
Mi equipo y yo actualmente desarrollando una aplicación web totalmente nueva en Java 6 + rayas. En el último año también trabajé en otra aplicación web totalmente nueva usando Java 6 + Stapler (un marco web algo desconocido desarrollado por Kohsuke Kawaguchi de Hudson / Jenkins).
Java se usa absolutamente para el desarrollo web moderno. Ciertamente no tiene el atractivo "sexy" de Ruby u otros lenguajes dinámicos, pero estoy lejos de estar convencido de que los lenguajes dinámicos son algo bueno una vez que un proyecto comienza a escalar.
Los servidores de aplicaciones Java modernos son muy competitivos con ASP.NET en términos de rendimiento, y ambos son mucho más rápidos que cualquier lenguaje dinámico VM que conozco.
No me malinterpreten ... No digo que Java sea siempre la mejor opción (¡ni remotamente!), Pero tampoco es siempre una elección incorrecta u "desactualizada".
fuente
Un nuevo desarrollador que se inicie en el desarrollo profesional encontrará que Java es un orden de magnitud más difícil que los rieles, python o php para comenzar, por lo que van con lo que es fácil de aprender.
Habiendo dicho todo lo anterior, tomé la decisión de usar Java para mi inicio porque un entorno de desarrollo Java configurado correctamente es muy productivo para trabajar. Quiero decir, configurado correctamente.
fuente
strpos
oin_array
? Y la interfaz XML DOM de PHP es ridícula (¿convertir atributos en cadenas para recuperarlos?). OSGi es absolutamente brillante e independiente del idioma.Alrededor de 5 años atrás, a mí y a un colega nos asignaron una tarea de programación para algún proyecto interno. Una tarea bastante simple que requería el análisis de comandos.
Se me ocurrió todo en aproximadamente 80 líneas de código de Java y mi colega tomó una semana, alrededor de 20 clases de Java y muchas más líneas de código de Java para hacer lo mismo. No hace falta decir que su código fue elegido.
Esto me hizo preguntarme. En todas partes, la complejidad fue apreciada. (Estaba trabajando en una de las compañías de productos de software más grandes). Java era la herramienta elegida y los patrones de diseño eran LA forma de codificar.
Ahora, ¿es la mentalidad o la arrogancia lo que rechaza la simplicidad? Bueno, siempre pensé que debería prevalecer el sentido común. Ya sea una empresa o una aplicación web simple, los casos de uso básicos son los mismos. Debe ser correcto y verificable.
Ya no uso java por varias razones. Pero uno de los factores, la complejidad, es la mentalidad predominante en una tonelada de desarrolladores de Java cuando se trata de desarrollar software.
En cuanto a escalar lenguajes dinámicos, JVM es el resultado de décadas de investigación. Sucede lo mismo para Ruby, etc.
Scala es un idioma que me parece extremadamente inteligente y práctico. ¡Jugar! con Scala es tan excelente para el desarrollo de aplicaciones web / empresariales como cualquier otro.
En cuanto a que Ruby y Rails son lo nuevo y brillante para las nuevas empresas, es extremadamente difícil contratar a un desarrollador de Rails sólido. En realidad, es un impedimento para cualquier puesta en marcha, mientras que la gran cantidad de desarrolladores de Java debería tener más sentido comercial.
fuente
En una entrevista reciente con Joseph Snarr, director técnico de google plus, explicó cómo la aplicación usa Java Servlets para el back-end y JavaScript en el front-end.
Entonces, para responder a su pregunta, Java todavía se usa para el desarrollo web muy moderno. Simplemente no para las nuevas empresas que han recibido tanta prensa recientemente.
Creo que la razón por la cual muchas de las nuevas empresas están utilizando otras tecnologías es porque son más sexys y tienen un impulso de código abierto más publicitado detrás de ellas.
fuente
Como mencionó el desarrollo web y Java, muchas personas tienden a olvidar que al principio el uso de Applets Java en un navegador web no se realizó bien, no solo eso, sino que el "entorno limitado" para los applets no se desarrolló completamente y hubo problemas de seguridad con Java Applets pudiendo ejecutarse en el navegador y acceder a los datos de la máquina local (también conocido como problema de seguridad del lado del cliente). Claro que Java era sólido en el backend y en las aplicaciones independientes, pero creo que asociar Java el lenguaje con los applets de Java (ejecutados en el navegador) juntos arruinó algunas percepciones sobre Java como un componente de desarrollo web. No creo que se hayan recuperado de eso.
fuente
La pregunta debería ser "¿Por qué las startups o los proyectos pequeños no utilizan Java?". Java ciertamente se usa para "aplicaciones web modernas". En Google, Java se usa en el backend para muchos servicios, y JS o GWT compilados para el cierre se usan para la interfaz. El problema es uno de velocidad vs escala. Las startups necesitan llegar al producto mínimo viable. Por lo general, son pequeños equipos de 1-3 ingenieros, y valoran la velocidad de iteración sobre el rendimiento o la capacidad de mantenimiento. Enfrentarse a problemas de escalabilidad o problemas de mantenimiento del código de código del equipo es un problema "que le gustaría tener", es decir, para cuando llegue a esa etapa, es una señal de que su implementación inicial lo ayudó a superar el obstáculo inicial de conseguir clientes o inversión. Puedes permitirte reescribir la aplicación en ese momento.
Una empresa como Google puede permitirse el lujo de construir cosas para escalar por adelantado, a pesar de que pueden estar desperdiciando su tiempo implementando el escalado para algo que podría no tener usuarios, porque pueden absorber la pérdida.
Al menos, esa es mi opinión, que muchas empresas "modernas", "modernas" y "modernas" crean pequeñas aplicaciones con pequeños equipos donde la velocidad de iteración y la simplicidad son los requisitos más importantes.
fuente
Las aplicaciones web tradicionales en Java, aunque bien estructuradas, están muy lejos de "desarrollarse rápidamente". Aunque solo he escrito una aplicación web completa (Java / Tomcat / Struts), fue extremadamente exigente, tardó más de lo esperado en depurar y fue generalmente doloroso al implementar la capa de lógica de negocios. En defensa potencial de Java, era la única aplicación web que había escrito en Java (aunque estoy acostumbrado a programar aplicaciones de nivel de sistemas en Java), y creo que podría escribir otra aplicación web un poco más rápido la segunda vez.
Dicho esto, también he escrito aplicaciones en PHP y C #, y funcionan mejor, y son mucho más indulgentes que Java. Más que eso, Ruby on Rails fue escrito específicamente para el desarrollo rápido de aplicaciones, que, como dijo Robbie, permiten un fácil acceso CRUD a las bases de datos. El problema es que la mayoría de los sitios web que desarrollará por su cuenta no necesitan el nivel de personalización que ofrece Java (y requiere que lo realice). Además, cada objeto de conexión de base de datos debe escribirse a mano y no es tan fácil de configurar. Puede haber un mejor marco, especialmente uno que aproveche las nuevas características de soporte de lenguaje dinámico de Java 7 , pero aún no he investigado.
fuente
Respuesta simple: curva de aprendizaje para basar la productividad.
Los sistemas basados en framework como RoR tienden a poner la "magia" en el lenguaje / sintaxis. Es muy fácil aumentar su sintaxis básica de RoR y poner en marcha una aplicación.
Java fue primero un lenguaje, y las herramientas y los marcos aparecieron más tarde. Entonces, primero debes aprender Java, y luego debes aprender Spring, o Grails, o tu súper IDE, o lo que sea. Ejemplo favorito de Ruby, no requiere setters y getters. El hecho es que los IDE de Java también se deshicieron de la codificación manual ... pero todavía está en su fuente. El beneficio de este enfoque es que, debajo del marco, hay un lenguaje coherente con el que todos los desarrolladores de Java pueden trabajar.
Este beneficio es dudoso para las nuevas empresas pequeñas donde el tiempo es esencial. Por lo general, están haciendo muy poco que no podrían hacer con un marco fuera de la caja. Para que puedan tomar su sistema RAD de elección y tener una aplicación en vivo al día siguiente.
Pero si nos fijamos en Facebook y Twitter, a medida que se expandieron, encontraron cosas que no podían ser manejadas por los marcos de fábrica y, por lo tanto, tuvieron que usar tecnologías de nivel inferior.
Esta guerra santa que tienen los desarrolladores de frameworks de que pueden hacer cualquier cosa más rápido es falsa, pueden hacer mucho de lo que necesitan de manera más simple y con menos curva de aprendizaje. Y para muchas cosas, eso es "lo suficientemente bueno". Use lo que sea correcto para el problema.
fuente
Depende de cómo se defina el "desarrollo moderno de aplicaciones web". Si está hablando de sitios web de inicio rápido y de respuesta rápida, deberá considerar los idiomas y los marcos diseñados para ese propósito. Si busca un desarrollo web estable, escalable y de nivel empresarial, busque lenguajes y marcos que admitan esos ideales. En mi libro, esos son dos objetivos muy diferentes. RoR, Groovy, etc., son buenos para el primero y Java es más apropiado, en general, para el segundo.
fuente
Google App Engine es compatible con Java, por lo que puede escribir toda su aplicación web en Java, utilizando Eclipse como IDE e interfaz de implementación, con una API de Google razonablemente documentada, por lo que no diría que no se usa o no usable.
fuente
En el inicio para el que trabajo, elegimos usar Java y JRuby para implementar nuestra API porque se complementan entre sí.
Para la infraestructura, la distribución de procesos y las comunicaciones, aprovechamos la solidez de Java, mientras que para la implementación real de los puntos finales API elegimos JRuby ya que todas las llamadas involucran a JSON y tiene mucho más sentido manipular una representación de tipo libre (JSON) usando lenguaje tipo (Ruby).
Si vemos que una de nuestras clases JRuby se está convirtiendo en un cuello de botella, simplemente la volvemos a implementar directamente en Java (básicamente, una traducción línea por línea). Esto puede suceder con bastante frecuencia con clases que deben hacer muchos cálculos, y en este contexto JRuby se comporta de manera muy similar a un lenguaje de creación de prototipos.
Implementamos nuestro propio cargador de clases dinámico, lo que significa que podemos cambiar las clases de Java sobre la marcha sin reiniciar el servidor, y estamos muy contentos con la elección. Por lo tanto, el argumento "necesita compilar y reiniciar cada vez" no tiene mucho peso.
La clave es evitar todas las cosas de Java EE: es enorme, engorroso y anti-ágil.
fuente
Todavía tengo la sensación de que Java se está utilizando en muchos desarrollos web. Pero generalmente está en el tipo de desarrollos más orientados a los negocios, no principalmente a las grandes empresas tecnológicas, que generalmente son menos abiertos que las nuevas empresas que tienen que obtener cierta tracción y promover su propio trabajo, así como más interesados en la tecnología . Por lo tanto, incluso si se usa en muchos sitios web corporativos, probablemente nunca lo sabrás, ya que realmente no les importará contar públicamente sobre su pila de tecnología.
Dicho eso, comentando todas las preguntas originales ...
¿Es una debilidad del lenguaje? En comparación con otros lenguajes como Python o Ruby, Java es detallado y tiende a necesitar más código para hacer cosas similares. Pero no son solo las capacidades del lenguaje, también la comunidad que lo rodea y el tipo de desarrolladores que usan esas herramientas. Por lo tanto, la mayoría de los módulos y herramientas en Python, Ruby, PHP, etc. son de código abierto y son más fáciles de encontrar que en el mundo Java, solo porque este está más enfocado en dar (y cobrar) servicios. Por ejemplo, la comunidad Ruby está realmente orientada al desarrollo web, por lo que cada desarrollador que pueda usar Ruby sabrá sobre los problemas y las herramientas disponibles para un proyecto web. Eso no es necesariamente cierto para los desarrolladores de Java, que podrían haber estado trabajando en otro tipo de sistemas, como los sistemas de informes. Por supuesto, cualquier buen desarrollador se pondrá al día,
¿Es un estereotipo injusto de Java porque ha existido durante tanto tiempo (se ha asociado injustamente con sus tecnologías más antiguas y no recibe reconocimiento por sus capacidades "modernas")? Java no es realmente tan viejo y, para ser justos, ha mejorado mucho. Fue la plataforma interesante y relevante hace unos 10 años. Pero desde entonces, ha habido nuevas plataformas con nuevos problemas en mente, como Ruby on Rails. El sector central de Java ha sido principalmente el mundo corporativo, con diferentes problemas, por lo que las personas que buscan nuevos proyectos fuera de ese país han estado buscando diferentes herramientas. Además, la principal ventaja del diseño de Java, al ser multiplataforma, no es tan relevante hoy como lo era antes.
¿El estereotipo negativo de los desarrolladores de Java es demasiado fuerte? (Java ya no es "genial") Eso también tiene algo de verdad. Java sigue siendo el lenguaje para aprender "a conseguir un trabajo". Entonces, si no te importa, pero solo quieres aprender algo para ganar dinero, terminarás aprendiendo un poco de Java y no volverás a preocuparte por mejorar. Nuevamente, se trata mucho de percepción y visibilidad. Hay toneladas de grandes desarrolladores de Java que están codificando sin compartir sus conocimientos, mientras que hay muchos desarrolladores de PHP, tal vez no tan buenos, que están escribiendo blogs y colaborando en código abierto. Eso lleva a pensar que los desarrolladores de PHP son mejores que los de Java, ya que tiene ciertos comentarios sobre ellos.
¿Las aplicaciones escritas en otros idiomas son realmente más rápidas de construir, más fáciles de mantener y funcionan mejor? Yo diría que son más rápidos de construir. Los principios de lenguajes como PHP, Python o Ruby los hacen bastante buenos para generar software que puede cambiar constantemente. Por ejemplo, la escritura dinámica facilita el cambio de una interfaz. En Java, tener una interfaz bien definida es importante, lo que lleva a interfaces más estables (y difíciles de cambiar). Esto es muy importante en una nueva startup, cuyo principal problema es obtener un producto antes de que se quede sin dinero. Sobre el rendimiento, es muy fácil entender mal las necesidades e intentar usar trucos de magia para lograr el rendimiento requerido, como "Java es más rápido que Ruby. Period" o "MongoDB es escala web".
¿Java solo lo utilizan las grandes empresas que son demasiado lentas para adaptarse a un nuevo lenguaje? Definitivamente, tener un equipo existente de desarrolladores de Java en la compañía, hace que sea más fácil seguir usando el mismo lenguaje para nuevos proyectos. Esto se percibe como "la apuesta segura", especialmente si el núcleo de la empresa no es la tecnología. Pero, de todos modos, Java NO se usa SOLO en grandes empresas, todavía hay muchas startups que usan Java para cosas geniales (por ejemplo, FightMyMonster o Swrve usa Java ampliamente), pero diría que la tendencia general en el inicio La escena es usar otros idiomas. Esa también es una forma de atraer a la gente, ya que la mayoría de las personas será más emocionante trabajar con Ruby, Python o PHP, percibido como más "amigable" y "divertido".
fuente
Esto es cierto, pero no por Java y su ecosistema. Es a causa de las personas que, cuando usan Java, tienden a crear grandes problemas y abominaciones pesadas.
Hay suficientes marcos (spring-mvc, grails, play, etc.) que le permiten construir cosas rápidamente. El hecho de que las personas diseñen en exceso sus sistemas es un problema que viene con el mayor conocimiento que las personas obtienen cuando trabajan con el ecosistema de Java: usted sabe muchas más cosas y las tiene disponibles (hay herramientas para todo) y "todo parece una uña".
Si eres "hacky", puedes hacer más o menos lo mismo con Java que con otros lenguajes, y aquí hay un estudio que indica que:
Estudio de 49 programadores: el sistema de tipo estático no tuvo efecto en el tiempo de desarrollo ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf
fuente
Para agregar un poco a lo que ya se ha dicho, creo que mucho tiene que ver con la rapidez con la que puede pasar de la nada (literalmente) a una aplicación web funcional.
Si todo lo que tiene hoy es una idea, pasar de donde está ahora a escribir su aplicación web es casi tan fácil como caerse, ya sea que elija un proveedor de alojamiento o su propia infraestructura (como una imagen EC2). Elegir Java, en mi experiencia, suele ser más trabajo y, a menudo, también cuesta más.
Además, si utiliza Linux y PHP / Python / Ruby, las herramientas y la plataforma son complementarias y están diseñadas para apoyarse mutuamente. Con Java, a veces parece que los dos mundos (SO y Java) a veces no parecen funcionar en armonía entre sí.
fuente
¿Quién dice que no lo es?
Spring MVC + Spring Data JPA o Mongo + Thymeleaf para crear plantillas + coffee-maven-plugin para Coffee to JS transpiling y listo.
fuente
Muchos podrían asociar el desarrollo de aplicaciones web y Java con los horrores de J2EE que, junto con los monstruosos servidores de aplicaciones J2EE de las grandes corporaciones azules y rojas, equivalía a semanas de trabajo antes de que el "Hello World" básico estuviera en línea.
Es cierto que las especificaciones e implementaciones recientes de JEE son más livianas, pero aún así pensaría tres veces antes de sugerir algo como esto para un proyecto de desarrollo rápido de ciclo corto.
Esta sigue siendo la forma basada en estándares de desarrollar aplicaciones web en Java. Las alternativas, muchas de las cuales se mencionan en otras respuestas, transmiten una imagen más confusa y confusa con demasiadas opciones para tomar.
Otros idiomas representan una única solución llave en mano en lugar de esta multitud. Esto hace que esta elección parezca más adecuada para su propósito cuando tiene que freír peces más importantes.
fuente
Creo que se usa mucho más de lo que piensas: el uso está justo debajo de la línea de flotación. Hay muchos, muchos envoltorios de rubí en rieles alrededor de servicios gruesos y elegantes de Java. Especialmente cuando comienzas a lidiar con cualquier cosa que se acerque a Big Data. . .
fuente