¿Por qué los sistemas de TI en las grandes empresas generalmente se construyen utilizando Java, en lugar de Python o JavaScript?

Veamos las opciones aquí:

JavaScript no es un lenguaje de programación adecuado. Es un lenguaje interpretado utilizado por los navegadores. Me gustaría ver un sistema de gestión de procesos empresariales escrito en JS …

Python es (más o menos) amigable para los principiantes y es muy popular entre las universidades y los principiantes de programación. Además, muchas bibliotecas para tareas del lado del cliente están disponibles de forma gratuita. El mayor inconveniente aquí (en mi opinión) es el bajo rendimiento y la simplificación excesiva de los subprocesos múltiples y el manejo de errores. Es principalmente un lenguaje de scripting para automatizar tareas, no para construir aplicaciones críticas.

Las aplicaciones C # / .NET funcionan (en mi humilde opinión) muy bien, pero parecen muy difíciles de optimizar y de perfilar. Si tienen un bajo rendimiento, a menudo es difícil rastrear la causa real. Además, la utilización de recursos parece un poco pobre.

C ++ / C son lenguajes muy fuertes en los que se ejecuta gran cantidad de software de grandes empresas. El código es más complejo de manejar y el mantenimiento puede ser un gran problema aquí. Cuando necesita tener un código sólido con un rendimiento sólido y hacerse cargo de la administración de recursos (especialmente cuando se trata de cifrado / seguridad), especialmente el manejo de la memoria, la utilización de la CPU, etc., C ++ sigue siendo el arma elegida para muchos programas. .

Java es un lenguaje que maneja varios temas muy bien:

  • Manejo de errores / excepciones. Uno de los componentes clave de una aplicación de nivel empresarial es ser robusto y ser capaz de manejar bien los errores. Cuando se escribe correctamente, una aplicación Java nunca se bloqueará en el escritorio (excepto por problemas de memoria).
  • Buena mantenibilidad. La sintaxis puede causar ganas de amordazar por algún tiempo, pero Java estructura el código muy bien y hace un gran trabajo para alentar a las personas a dividirlo en unidades pequeñas y fáciles de mantener. Esto es crucial cuando cientos de personas están trabajando en una pieza de software.
  • Robusto, fácil multiproceso. Java hace que sea muy fácil escribir aplicaciones que ejecutan código en paralelo.
  • Gran actuación. La gente podría argumentar que Java es aún más lento que C ++. Argumentaría que al comparar el tiempo de desarrollo / optimización con la relación de rendimiento, Java superará cualquier otro lenguaje de programación en cualquier momento. En los puntos de referencia, la JVM puede mantenerse al día con el código C ++ nativo la mayor parte del tiempo y mientras que C ++ requiere mucho esfuerzo cuando se trata de la administración de recursos, la JVM lo hace por usted con resultados aparentemente excelentes. Además, es muy fácil de perfilar, por lo que es una tarea sencilla para identificar cuellos de botella en el código

La mayoría de las veces, cuando se trata de software empresarial , las únicas opciones son Java o C ++. La mayoría de las veces estamos hablando de cifrado, firma, temas de procesamiento distribuido aquí, que Python y otros lenguajes de programación no ofrecen en ese grado. Además, Java sigue siendo la comunidad de desarrolladores más grande y muchas bibliotecas de código abierto. Lucene (si no me equivoco, el índice de búsqueda más popular) se escribió originalmente en Java, Hadoop se basa en Java, al igual que la mayoría del software del servidor de aplicaciones (Java EE).

Cuando terminan con los lenguajes de programación “geniales”, la mayoría de los desarrolladores se dan cuenta de que no hay mucha productividad que ganar con ellos, mientras que sufren mayores gastos de mantenimiento, menos asistencia de la comunidad, menos estandarización. A largo plazo, Java todavía parece ser el mejor compromiso entre una potente sintaxis, una buena capacidad de mantenimiento, accesibilidad y rendimiento general.

Adición a partir del 20.02.15:
Otra constatación dolorosa que tuve hoy es que Java no es adecuado para implementar algoritmos complejos. Si bien, en términos de mantenimiento y comprensibilidad del código, es bueno que Java lo obligue a trabajar con Objetos para encapsular cosas, prefiero tener acceso directo a los punteros y la asignación de memoria cuando implementa cosas específicas. Me di cuenta de que al intentar escribir una implementación avanzada del algoritmo Aho-Corasick (básicamente, autómatas de estado finito para la correspondencia de texto) en Java. Es cierto que solo me tomó unos 20 minutos y menos de 300 líneas de código para hacer eso, pero:
Al cargar todos los nombres de ciudades (> 1000) de nombres geográficos, termino con 2425446 objetos en la memoria, lo que resulta en una sobrecarga de 1,5 GB de memoria para objetos y referencias para aproximadamente 22 MB de datos / valores reales almacenados.
Java lo alienta activamente a tratar todo como un objeto, lo que resulta en un uso masivo de la memoria (¡aunque el rendimiento fue increíblemente bueno!). En C ++, probablemente usaría una estructura de tabla y un par de indicadores para hacer el trabajo y terminaría con mucho menos desperdicio de recursos.

  1. Muchas compañías tienen sistemas que deben mantenerse durante mucho tiempo, sin embargo, no cuentan con personal dedicado para mantenerlos. Más bien, el sistema está escrito por algunos contratistas, luego se queda allí sentado hasta que se necesita algo nuevo, cuando entra en juego un conjunto diferente de contratistas, etc. Con este enfoque, es importante que use algo estandarizado que sea popular para este tipo general de sistema , por lo que siempre puede encontrar a alguien que lo mantenga por usted. Java y C # son muy populares para escribir sistemas de automatización de grandes empresas, por lo que hay muchos contratistas que pueden escribir sistemas de automatización de grandes empresas en ellos, por lo que siguen siendo populares para escribir sistemas de automatización de grandes empresas. Esto se convierte en una profecía autocumplida, pero eso hace que no sea menos convincente de un argumento.
  2. Por razones similares, es importante que uses algo estable . Con muchos lenguajes dinámicos / de scripting como los que mencionó, se considera que 3 años son más que un aviso adecuado para dejar de usar un idioma o una función de biblioteca. Con Java, por otro lado, aún puede ejecutar un programa de 10 años sin modificaciones. Esto suele ser muy importante para las personas que realizan automatización de negocios.
  3. La presencia de una gran corporación que respalda un idioma y el conjunto asociado de bibliotecas y herramientas tranquiliza a los responsables de la toma de decisiones en las grandes corporaciones que lo respaldan es bueno y no desaparecerá pronto. (Si esto es realmente cierto, es una cuestión totalmente diferente). Python, PHP y Ruby son originalmente proyectos de pasatiempo / académicos, y han crecido un poco de apoyo corporativo, pero en su mayoría de firmas bastante pequeñas que no impresionan su fortuna típica 500 CIO. C # está respaldado por Microsoft, y Java sale de Sun, que puede haberse deteriorado, pero aún está respaldado en gran medida por Oracle, IBM y otros.
  4. Los proyectos de automatización de grandes empresas requieren bibliotecas y marcos diferentes a los que utilizan los sitios web dinámicos típicos. Quieres poder hablar con Oracle y SAP, por ejemplo. Este tipo de marcos y bibliotecas tienden a ser Java o C #, y esto también se auto perpetúa.
  5. A veces, Java o C # puede ser una alternativa técnicamente mejor . Menciono este argumento al final, pero no es solo para señalar la posibilidad lógica. Por ejemplo, Java tiene un modelo de subprocesos decente y existen bibliotecas de estructuras de datos concurrentes de alto rendimiento. La implementación estándar de Python tiene subprocesos mal implementados, y la implementación estándar de PHP no tiene subprocesos para todos los propósitos prácticos. Además, la escritura fuerte y la resolución de nombres en tiempo de compilación, al mismo tiempo que ralentizan la programación exploratoria, aumentan el número de errores que pueden detectarse de forma estática.

Y ahora, un comentario algo fuera de lugar: la pregunta menciona lenguajes con mucho tiempo de compilación que son tediosos de usar, como Java y C #, e idiomas con muy poco tiempo de compilación que no son tediosos de usar, como Python y ruby. Para completar, debe decirse que la cantidad de tiempo de compilación que verifica un idioma no tiene por qué relacionarse directamente con la cantidad de texto que debe escribir para ayudarlo a hacerlo. Entre los lenguajes que tienen un control de tiempo de compilación muy ajustado pero que son considerablemente más inteligentes que Java para inferir qué es lo que se supone que deben verificar, vale la pena conocer ML (OCaml, Standard ML, F #), Haskell y Scala. Entre estos, Scala tiene las mejores oportunidades de convertirse en una empresa realmente convencional, porque se integra muy bien con el tiempo de ejecución y las bibliotecas de Java de código abierto y maduro.

Las grandes empresas han existido el tiempo suficiente para reconocer algunas cosas sobre el desarrollo de software y el comportamiento organizacional:

  • El software vive mucho tiempo
  • Muchos programadores tendrán en sus manos un software a lo largo de su vida útil.
  • Esos programadores tendrán diferentes niveles de competencia
  • Esos programadores tendrán diferentes niveles de comunicación con los programadores anteriores, incluyendo “ninguno en absoluto”.

Java tiene dos ventajas principales sobre Python y Javascript:

  • Mecanografía estática Los programas son autodocumentados; los programadores nunca pierden el tiempo pensando en preguntas como “¿qué es esta variable?”, “¿cuál es el contrato de este método?”, “¿quién llama a este método?”, “¿quién reemplaza este método?”. Se eliminan categorías gigantes de errores (por ejemplo, pasar el tipo incorrecto a una función), lo que reduce la huella de la prueba y mitiga el daño causado por los programadores inevitables que se vuelven descuidados con las pruebas.
  • Soporte IDE robusto , hecho posible por la escritura estática. Los IDE de Java modernos prácticamente escriben el código para usted, pero lo más importante es que facilitan la navegación por un código de código desconocido. Navegar a las definiciones de métodos es un simple clic de comando (o control). Al pasar sobre los métodos se muestra la documentación. Las respuestas a todas las preguntas anteriores están a solo un clic de distancia. Si escribe algo que sea incluso un poco incorrecto, el IDE pone un subrayado ondulado rojo debajo del área problemática. Y si desea realizar cambios importantes en una base de código, no importa cuán grande, la refactorización automática es rápida y confiable.

Estos dos aspectos, más que cualquier otra cosa, hacen que sea relativamente fácil escalar bases de código Java a altos niveles de complejidad. Cuando tiene docenas (o cientos, o miles) de ingenieros que agregan código a una empresa en funcionamiento, termina con sistemas muy complejos incluso cuando tiene programadores de primera categoría, y cualquier organización grande no puede contar con que este sea siempre el caso. Ni siquiera Google.

En particular, vale la pena destacar a Javascript como extraordinariamente poco adecuado para escalar en sistemas complejos debido a la necesidad de programación asíncrona. Las reglas de negocios para una gran empresa son a menudo bizantinas; forzarlos en un modelo asíncrono magnifica la complejidad diez veces.

En una nota personal, trabajo profesionalmente en Java, Python, Javascript y Ruby. He tenido el dudoso placer de trabajar en dos bases de código de escenario de pesadilla: la plataforma central de Electronic Arts (todo Java) y CloudFoundry (casi todo Ruby, aunque eso está cambiando). Ambos son enormes; ambos están llenos de código cuyos desarrolladores originales se han ido; ambos incluyen la salida de programadores de habilidad enormemente variable; Ambos fueron fundados originalmente en malas prácticas arquitectónicas. Entre los dos, el código base de Java fue significativamente más fácil de “saltar”, aunque fue significativamente más grande. El peor de los casos para lenguajes dinámicos es mucho peor que el peor de los casos para lenguajes estáticos.

Python y JavaScript le dan velocidad y funcionan bien cuando la base del código y el tamaño del equipo son relativamente pequeños. Es mucho más fácil comenzar a utilizar estos dos idiomas. Pero también es mucho más fácil escribir código incorrecto en estos dos idiomas. A medida que su base de código y el tamaño de su equipo aumentan, se vuelve difícil mantener, depurar y mejorar un sistema escrito en Python y JavaScript, a menos que haya creado un estándar y un marco realmente bien definidos sobre ellos. Java, cuando se usa con ciertos marcos estándar, ofrece una forma muy disciplinada de escribir código.

No veo el rendimiento como una de las principales razones para elegir un idioma en lugar de otro para la mayoría de las aplicaciones.

Hay algunos casos, aunque sea una pequeña fracción, donde la elección de un idioma es mejor que la de otros. La elección depende principalmente del tipo de aplicación que esté desarrollando. Por ejemplo, para una aplicación de mensajería puede elegir Erlang. La elección de Python puede ser mejor para el desarrollo de aplicaciones de PNL, estadísticas o M / L; puede experimentar e iterar más rápido.

En general, Java es un buen lenguaje de propósito general, tiene una gran cantidad de talento, fácil de aprender, amplia adopción y ha mejorado de manera continua y constante durante muchos años.

En Spotify, usamos Java extensivamente en el backend. Esto no es por razones de legado, es una opción activa. También usamos Python, pero nos hemos movido más y más a Java. La razón es que Java es mucho más fácil de obtener para un buen desempeño. Python es fácil de escribir inicialmente, pero lograr que funcione bien cuando son golpeados por 15 millones de usuarios pagadores es otra.

Personalmente, no entiendo cómo a una persona médicamente sana le puede gustar la sintaxis de Java. Sin embargo, ninguna persona inteligente puede negar que la JVM es bastante buena. Es rápido, está bien probado, está bien documentado y se encuentra en desarrollo activo. Esto no se puede decir acerca de muchas herramientas en el desarrollo de software.

Solíamos tener un montón de servicios de C ++, pero aunque también puedes obtener C ++ muy rápido, es más difícil escribir, especialmente si quieres que el código sea mantenible. Java es un compromiso que nos alcanza un punto dulce.

Clojure está ganando tracciones en Spotify, muchos servicios nuevos están escritos en él, pero aún no está tan extendido. Si bien Clojure es ciertamente un lenguaje mejor, Java tiene la ventaja de no ser raro . Java es un lenguaje de programación no controvertido al que todos los programadores experimentados pueden acceder con poco esfuerzo, y eso es una gran ventaja.


Enchufe desvergonzado: si te gustan mis divagaciones sobre la programación en Quora, puedes disfrutar de mi programa de YouTube: Fun Fun Function

He trabajado en aplicaciones escritas tanto en Java como en Python. Francamente, la flexibilidad que viene con Java y la máquina virtual de Java al tiempo que agrega nuevas funciones y soluciona problemas (principales) es inmejorable. Python es muy bueno y decente cuando tienes aplicaciones relativamente pequeñas o algunas herramientas internas, API, etc., pero si quieres escalarlo a nivel empresarial no sabes en qué te estás metiendo. Mattias tiene puntos fuertes sobre por qué. Unos cuantos más puedo pensar.

  • JVM ofrece mucha flexibilidad para ejecutar la aplicación de la manera que queremos ejecutar en la memoria. Se necesita experiencia práctica para darse cuenta de por qué.
  • En Python, realmente no sabes algunas excepciones hasta que el tiempo de ejecución a pesar de que escribes pruebas unitarias, faltan algunas. En Java, su pereza se ahorra gracias a problemas de compilación.
  • Java está allí el tiempo suficiente para tener una arquitectura sólida. Oracle ha estado haciendo un gran trabajo para mantener lo que Sun había hecho.
  • La compatibilidad inter en las versiones es mejor en Java sobre Python. Python tiene muchas dependencias entre 2.6 a 2.7 y 2.7 a 3.x. Java por otro lado no tiene mucho entre 1.6 a 1.7 o 1.8.
  • Otra ventaja de Java es que fuerza la escritura estática, que puede ser mala para los principiantes, pero tiene control sobre los tipos de datos de las estructuras de datos. Si es dinámico nunca se sabe cuándo se rompe. Desafortunadamente, la flexibilidad no es una buena opción aquí IMO.
  • Fácil de encontrar buenos ingenieros. Puede ser trivial, pero tener a los ingenieros de Java a bordo es tan fácil y rápido como conseguir ingenieros de Informatica.

Supongamos que usted es dueño de un banco.

La mayoría de las cosas que hace un banco es tomar dinero de los depositantes (prestamistas) y dar dinero a los prestatarios.

La mayoría de las operaciones en los bancos son realmente simples y conocidas. Necesitan computadoras para almacenar toda la información (básicamente, eso es todo lo que hace el banco y en qué puede mejorar).

Así que las computadoras y el software son la competencia central del banco. Pero también los bancos son muy lentos para moverse.

Necesitan cientos de programadores. Y si usted es el propietario del banco, puede seleccionar varios idiomas. Puedes probar C ++, Java, Python, etc.

Entonces, ¿cuál es el problema? Las personas no son intercambiables. No puedes agarrar a una persona que trabaja en un idioma y hacer que trabaje en otro.

C ++ tiene muy baja productividad. Contrariamente a la creencia popular, un sistema C ++ generalmente funciona mal y está escrito en 8 veces más tiempo que un programa Java equivalente. Por supuesto, el rol de un gerente es tener números, calcular el ROI y cosas por el estilo. Una vez que obtenga los números, usted, el propietario, seleccionará el entorno más productivo. Simplemente porque quieres vencer a la competencia: otros bancos.

Así que la mayoría de los bancos se subieron al carro de Java hace unos 15 años.

Python es un lenguaje de scripting. No se puede obtener el rendimiento de un lenguaje compilado como Java.

Además, usualmente los lenguajes de scripting “mejoran” con el tiempo. He escrito varias aplicaciones en PHP. Ninguno de ellos se ejecuta ahora, porque por alguna razón los autores no se dan cuenta de que una empresa “invierte” en el desarrollo de código, y no, no les gusta reescribir las cosas, eso se llama gasto, no inversión.

C # tuvo este problema hace 10 años. Tenías que volver a escribir tu código cada 3 años. Por supuesto, todos los bancos que decidieron codificar algunas aplicaciones en C #, fueron mordidos y C # prohibido en todos los bancos.

Ahora Java 8 no es 100% compatible con Java 7. ¡¡¡Es un gran camino para Oracle !!!

El problema parece estar en las bibliotecas de colecciones. Por supuesto, las empresas se mostrarán renuentes a aceptar Java 8. O bien esto está arreglado o reinará algún otro idioma. Antes de Java había guerras de lenguaje. Existe la posibilidad de que entremos de nuevo en ese estado.

Bueno, hay muchas razones, pero aquí va una lista de algunos de ellos:

  1. Se sabe históricamente que Java casi nunca rompe la compatibilidad con versiones anteriores. Este es un factor enorme en las empresas, donde la previsibilidad y la estabilidad son muy deseadas.
  2. Java puede tener una sintaxis algo aburrida y detallada, pero los proyectos escritos en Java son órdenes de magnitud más fáciles de mantener que los proyectos escritos en lenguajes compilados no estáticamente. Otra gran victoria para las empresas, donde algunos proyectos pueden vivir durante décadas.
  3. No tendrá problemas para encontrar buenos especialistas en Java en todo el mundo. Tenga en cuenta que las personas van y vienen, incluso (especialmente) en empresas.
  4. Java puede funcionar muy bien (sí, lo dije en voz alta). La JVM se ha optimizado durante años y años, con resultados que varían de buenos a excelentes. Por otra parte, he visto mucha decepción por el rendimiento de los lenguajes dinámicos, como Python y JS. Como siempre, tenga en cuenta que ningún idioma es lo suficientemente rápido / con un rendimiento suficiente para una pila y / o equipo de tecnología mal seleccionado.
  5. Hay literalmente cientos de herramientas y marcos de trabajo escritos en Java, con algunos de ellos de muy alta calidad. Independientemente de lo que crea que necesita, es probable que ya esté hecho en Java 🙂 Es probable que encuentre un conector para un sistema backend orientado a la empresa, una biblioteca inteligente para la integración con “su módulo de empresa comúnmente utilizado”, etc. .

La lista puede seguir y seguir, estas son solo algunas de las razones que vienen a la mente.

Seguramente, uno puede traer profesionales para los lenguajes dinámicos que existen, pero al final, para mí, usar Java en la empresa es, en su mayoría, una opción segura y sabia.

Java no solo está muy extendido en los sistemas de grandes empresas, sino también en proyectos de gran escala (como muchas nuevas empresas). Las principales razones para ello:

  • La escritura estática permite cosas, como la verificación de códigos, el análisis de códigos (verificadores de errores), las revisiones de códigos más rápidas, la exposición de errores desagradables en el tiempo de compilación (y no durante la ejecución, lo que no es costoso). Y muchas más cosas.
  • Soporte IDE. Hay al menos 3 IDEs bien mantenidos (IntelliJ, Eclipse, Netbeans) que ofrecen muchas características, como depuración remota, análisis de seguimiento de pila, etc.
  • Interfaces. Bueno, yes interfaces es el componente más útil de la programación orientada a objetos y puede hacer que los proyectos sean mucho más fáciles de mantener.
  • La interoperabilidad de JVM permite aprovechar otros lenguajes con Java, como Clojure, Scala, Javascript, Jruby o incluso ejecutar funciones nativas utilizando JNI
  • Actuación. A pesar de las afirmaciones de que la JVM es lenta, es realmente buena en el manejo de altas cargas, logrando rendimientos y latencias notables, cuando se aprovecha la biblioteca de concurrencia. JMX también proporciona una gran vista en la parte interna durante la ejecución, permitiendo el monitoreo de aplicaciones muy fácilmente.
  • Ecosistema. Alrededor del 90% de los proyectos de Apache están escritos en Java, especialmente los más grandes, como Cassandra, Hadoop, etc. Esto facilita mucho la integración con estas herramientas.

Java es más adecuado para aplicaciones de nivel empresarial. Es un lenguaje amigable para las empresas. Por lo tanto, si está desarrollando una aplicación de negocios de gran tamaño que se supone que es compatible con muchos programadores diferentes con diferentes niveles de habilidades y competencias en diferentes períodos de tiempo, Java es una de las pocas opciones que puede elegir. Pero cuando sus necesidades son específicas y sabe de antemano que solo las personas con un nivel específico de habilidad y competencia mantendrían el proyecto, entonces no tiene sentido usar Java. Al igual que si desea escribir un gestor de paquetes, es mejor que lo escriba en python, que desee una aplicación gtk + multiplataforma, que lo haga en vala, que necesite una aplicación web escalable que sirva para un propósito específico, pruebe nodejs o Ruby on rails o python lo que sea. C / C ++ son lenguajes hardcore de nivel de sistema. Lo que estoy tratando de decir es que algo escrito en C / C ++ o python o JavaScript para resolver un problema específico en un dominio específico requiere programadores que tengan cierta experiencia en ese dominio. Pero los sistemas empresariales a nivel empresarial requieren una gran cantidad de programadores con muy poca experiencia en algún campo específico para poder mantener las cosas que han existido durante algún tiempo. Es por eso que usan tanto java.

De hecho, preguntar por qué las empresas de TI usan Java es casi como por qué no usamos C para escribir sitios web.

Como muestra un estudio de la Universidad de California, los softwares escritos en Java posiblemente no son de mejor calidad que los softwares escritos en JavaScript o CoffeeScript. El lenguaje de mejor rendimiento en términos de calidad de código en este estudio es TypeScript, que es un superconjunto de JavaScript. ¡Los softwares escritos en TypeScript tenían un 43% menos de errores que el promedio!

El estudio también muestra que la escritura débil o fuerte, estática o dinámica de un idioma no afecta considerablemente la calidad del código. Además, TypeScript resuelve el problema de la escritura estática y hace que JavaScript sea elegible para el desarrollo empresarial.

Descargue el estudio: http://macbeth.cs.ucdavis.edu/la

Las grandes empresas están atascadas en Java o en los ecosistemas de C #. Java se quema en los cerebros de los gerentes, cuenta con el respaldo de proveedores, etc., toda la mentalidad de las empresas empresariales está capacitada para usar Java.

Si está trabajando para una gran compañía, intente convencer a su gerente, que debe convencer a su gerente, que debe convencer a su gerente, etc., que toda la alta gerencia debe estar convencida de que de ahora en adelante, el nuevo sistema será escrito, por ejemplo, en python. (Y, por lo tanto, se necesitan un nuevo equipo de programadores, nuevos proveedores, nuevos procesos, etc.). Casi imposible, o muy, muy lento.

Las personas con poca experiencia en el desarrollo de grandes sistemas suelen hacer preguntas como esta, a menudo después de haber aprendido la programación o de haber realizado algunos trabajos de pequeños proyectos en los primeros idiomas en los que han adquirido conocimientos.

Para empezar, ni Python ni JavaScript son lenguajes modernos en comparación con Java. JavaScript es solo un par de años más joven que Java y antes se llamaba LiveScript. Python es más viejo que Java por varios años.

“Moderno” no significa “mejor”.

Hablar con otros sistemas es una función de los protocolos, no de los idiomas. Necesitas entender esa distinción. Siempre que pueda hablar el protocolo, como HTTP o SOAP, elija el idioma más adecuado para el trabajo.

Java no es legado. Es la corriente principal. Y es la corriente principal por una razón. Prácticamente todas las tareas empresariales comunes que uno podría querer realizar están disponibles en Java de forma nativa o a través de muchos marcos.

Puede escalar y tiene muchos años de retraso en cómo hacer esto. Eso es enorme en grandes empresas con sistemas de alto volumen. Las bibliotecas de JavaScript se están poniendo al día aquí y probablemente pasarán de 5 a 10 años antes de que se resuelvan todos los problemas para hacer esto bien y las actuales guerras marco que se están librando ahora sacudan a los ganadores y surgen los estándares de facto.

¿Qué pasa con las habilidades? Demasiadas personas que hablan sobre JavaScript y Python no lo consideran. Las empresas necesitan contratar personas. La cantidad de personas capacitadas determina qué tan difícil y cuán cara será la tarea. Las habilidades de Java son más fáciles de encontrar. Paradójicamente, también son más difíciles de encontrar porque la demanda de desarrolladores Java con experiencia es tan alta que es difícil encontrarlos porque no se mueven mucho.

Java ha tenido mucho tiempo para descubrir qué funciona bien en un contexto moderno de desarrollo web y desarrollo de servicios. Python tiene un par de opciones conocidas como Django o TurboGears.

JavaScript está en todo el mapa ahora mismo jugando el juego “Vamos a reinventar Java porque es genial hacerlo”. Nunca se pretendió que JavaScript fuera un lenguaje de fondo y adaptarlo a ese rol llevará tiempo. Demonios, los desarrolladores de .NET han estado viendo el “nuevo” marco MVC de Microsoft en los últimos dos años. ¡Los desarrolladores web de Java están rodando por el suelo aullando de risa por eso! Lo hicimos hace 15 años y hemos usado ese tiempo para refinar lo que funciona y lo que no. Microsoft y los idiomas “modernos” se pondrán al día durante algún tiempo.

La gestión de grandes bases de código de Java es bien conocida en este momento. Heredó eso de su ascendencia C. Las tuberías de control de origen, construcción y despliegue y la mayoría de las metodologías de desarrollo como Agile tienen sus raíces en el espacio de Java.

¿Legado? Me burlo de eso. Dame un par de buenos desarrolladores de Java y probablemente pueda limpiar el espacio con cualquier persona que use Python o JavaScript para implementar una idea y hacerlo en la misma cantidad de tiempo y riqueza de capacidades. Con la ventaja de que cuando la idea necesita crecer, sé que mi solución de nivel empresarial podrá escalar porque la habré diseñado de esa manera aplicando años de larga experiencia. Porque no reinventaré la rueda cuando agriete mis marcos JDBC, marcos NoSQL, JSF2, Primefaces, componentes de servicios web y similares. Seguirá escribiendo el código de orquestación o un widget de front-end mientras estoy negociando con mis clientes sobre qué texto deben tener sus etiquetas, mucho trabajo detrás de mí.

Y digo esto como algunos que dominan Python y JavaScript y los usan en sistemas de producción. Y lo creas o no, a pesar de la fuerte tipificación de Java, en realidad es tan dinámico en su comportamiento como lo son Python o JavaScript. Java Reflection es el núcleo de prácticamente todos los marcos Java modernos y hemos estado realizando inspecciones en tiempo de ejecución, inyección de dependencias en tiempo de ejecución y tipificación dinámica y determinación del tipo de tiempo de ejecución durante más de una década. Casi todas las piezas de código Java que escribo, especialmente en una aplicación web, son más o menos una solución de tipo dinámico (es decir, propiedades JavaBean y clases de dependencia inyectada).

Los idiomas son un medio para un fin. No existen únicamente para justificarse a sí mismos. Son herramientas. Estás escribiendo soluciones de negocios, no soluciones de programación. Esta es la primera gran epifanía que debes entender.

OK, aquí vamos, cebo de llamas totales subiendo.

Java es un lenguaje mucho mejor que Python, y más aún, mucho mejor que Javascript.

Los idiomas tipificados dinámicamente, y los idiomas sin tipificación explícita son buenos para los principiantes, pero si no eres un principiante, es un dolor total.

Pitón:

def getUser (auto, usuario):
pasar

Java:

UserDescription getUser (nombre de usuario) {
}

Consulte con Python, no puede ver el tipo de objeto que el método toma como argumento o lo que devuelve.

Lo mismo ocurre con JavaScript, y apesta totalmente en un proyecto grande. Usaré Python para unos cientos de líneas de script, claro, no hay problema, para un gran proyecto, apesta por completo.

Escribir dinámicamente y definir cosas como esta:

var usuario = getUser ();

no

UserDescription user = getUser ();

Está muy de moda en este momento, pero intente mantener ese código en 10 años.

Python y JavaScript son lenguajes fáciles de usar, fáciles de comenzar, pero Java es, simplemente, un lenguaje mucho mejor que los dos combinados.

Eso es antes de que ingresemos inquietudes prácticas como subprocesos múltiples y autocompletado de IDE, lo que no es posible con JavaScript ni con Python, porque no se puede saber qué método o función está devolviendo sin ejecutarla, incluso en ese caso, una función. Fácilmente podría devolver algo diferente cada vez que corría.

Escribí todo esto antes de leer la respuesta de Jeff Schnitzer, que lo resume mucho mejor que yo.

Básicamente, la gente usa Java porque es mejor que las alternativas.

Los recién llegados a la programación piensan que Python, JavaScript, Ruby, etc. son nuevos y modernos, y Java, C # y C son antiguos. Ellos no están. Son mejores en todos los sentidos, excepto en la comercialización para los recién llegados.

En términos de por qué Java está tan extendido, es más antiguo que muchos de los lenguajes de la competencia en el espacio y tiene una base gigantesca de usuarios y organizaciones comprometidas con la JVM. Python nunca tuvo el respaldo ni la mente de Java. Esto es un poco simplista, pero hace quince años el mundo estaba dividido en Java, Microsoft, C / C ++ y todo lo demás. Muchas organizaciones eligieron Java y se quedaron con él porque satisfacía sus necesidades. Para organizaciones más conservadoras que ya usan Java, se necesitaría una tecnología radicalmente mejor para sacar a estas empresas de la JVM. Con la JVM desarrollada de manera tan activa, las probabilidades de que ocurra un cambio de tecnología de este tipo en el corto plazo son muy bajas.

Sin embargo, no descartes JavaScript. NodeJS está ganando terreno rápidamente entre las compañías de tecnología por su escalabilidad y facilidad de uso. Netflix, por ejemplo, ha estado migrando sus servicios de Java y Scala a JavaScript con un tremendo éxito. Incluso para las compañías comprometidas con la JVM, Java 8 trae Nashorn, un motor de JavaScript similar a NodeJS que se ejecuta en la JVM. Nashorn le da a las compañías la oportunidad de meter sus dedos en el agua sin saltar primero.

Otros idiomas como Haskell, Clojure y Go están haciendo incursiones en varios lugares.

Dibujemos una analogía con lenguajes de computadora y lenguajes hablados humanos.

Ahora, por su aceptación mundial y el estado de Rockstar, el inglés, simplemente hablando, es un lenguaje muy ineficiente para la comunicación.

Hay muchos otros idiomas en el mundo, como el sánscrito o el mandarín, que pueden transmitir ideas en un formato mucho más conciso y claro que el inglés.

Pero esto no ha llevado a una reducción en la aceptación del inglés en todo el mundo y ahora personas de más y más países están tratando de aprender inglés, particularmente del subcontinente indio, donde hablar inglés con fluidez nos considera una piedra angular del elitismo.

Aunque existen lenguajes más eficientes, aprenderlos y cambiar nuestros estilos de vida podría ser muy difícil.

El caso de la TI empresarial y Java es casi similar. Aunque los lenguajes como python y JavaScript se consideran mucho más eficientes para el cálculo, no son muy amigables para los desarrolladores.

Simplemente tome cualquier código estándar para acceder a una base de datos a través de Java y muestre los resultados como una colección. Podría ser bastante simple para que un codificador promedio comprenda y depure.

Ahora piense en la misma función escrita en node.js (JavaScript): con todos sus modelos asíncronos y funciones de devolución de llamada y notaciones json, podría ser un dolor de cabeza para un programador novato solo para entender el código, y dejarlo solo depurándolo.

El código en node.js o python podría ser mucho más corto y eficiente en comparación con Java, pero podría ser una debacle para la depuración y el mantenimiento.

Creo que esta es una de las razones principales por las que las grandes empresas aún no están seguras de cambiar a JavaScript u otros idiomas modernos.

¿Alguna vez ha intentado escribir un software con 20 desarrolladores, la mitad de ellos descentralizados y 3 de ellos han abandonado la empresa?

Si es así, la respuesta debe ser obvia. Java necesita una compilación que verifique la existencia y los tipos de todas las variables y funciones en 10000 programas. Tiene un documento técnico automatizado, y en caso de un error (sí, sucede) puede desplazar el código hasta donde está el problema.

Por lo tanto, a diferencia de JavaScript o Python, está seguro de que sus programas son sintácticamente correctos (ningún idioma puede garantizar que son semánticamente correctos).

Y esa es una de las razones por las que Java es particularmente poco amigable con respecto a la sintaxis. Cuando su sintaxis sea correcta, puede estar 99% seguro de haber cruzado todos los problemas semánticos potenciales.

Java tiene la ventaja de ejecutarse en la JVM. Eso significa que tienes una gran elección para cualquier tipo de biblioteca que puedas imaginar.

Java es fácil de aprender, su sintaxis está ligeramente relacionada con C o C ++, por lo que es fácil pasar de C / C ++ a Java, y C / C ++ todavía son lenguajes esenciales, lo que significa que hay una comunidad.

Java se posicionó como un lenguaje de negocios muy temprano.

Esto se acumula en una gran comunidad de desarrolladores, un lenguaje probado en la batalla, una JVM de gran rendimiento y un entorno rico en características.

Eso significa que el riesgo de usar Java es muy bajo.

Además, después de que se abrió la JVM para otros idiomas, obtuvo una comunidad y opciones aún más grandes.

Scala
Clojure
JRuby
JavaScript
Y otros

Sin mencionar las clases de Nio, que permiten mapear archivos en la memoria, o el proyecto de Yakarta que le permite usar la GPU para problemas lineales como cálculos vectoriales, que en combinación con Nio y Lambdas ofrece una configuración extremadamente poderosa.

Estoy usando Scala (corriendo en JVM), es genial. Podría pasar a un nuevo lenguaje completo y solo puedo usar todas las bibliotecas de Java -> sin riesgos, rendimiento máximo, mayor productividad de programación, gran abstracción, modelado de clase potente y expresivo

E incluso puedes usar librerías nativas si es necesario, y envolverlas en tu código.

JavaScript y Python son interesantes en nichos, pero para las operaciones de back-end, Java es la elección definitiva.

Hay otros lenguajes interesantes como Haskell, Erlang, D y Go, pero de alguna manera están aislados en comparación con Java.

Si comienza un nuevo proyecto, analice en serio Scala (más fácil de aprender que Clojure). Clojure es un poco más poderoso con respecto a las listas, pero la diferencia con respecto a la productividad entre Scala y Clojure está nivelada por la confusa sintaxis de Clojure.

Sugeriría que no hay una respuesta concreta, y que al igual que las personas adoptan diferentes creencias personales, los desarrolladores (que también son personas) a veces toman decisiones irracionales o imperfectas basadas en experiencias o hábitos que formaron hace mucho tiempo.

No usamos Java para nuestro CRM y ERP, y nunca usaríamos .NET o Ruby. Todos son IMHO demasiado grandes para sus botas. Intentan hacer demasiado y, a menudo, crean bases de código monolíticas que pueden tardar años en revisarse. Python se usa con moderación donde agregará valor, y también lo es JS. Ocasionalmente, podemos usar VBA u otro idioma para completar una característica específica, pero nuestra aplicación principal es PHP con orgullo. Considere también que ninguna aplicación a nivel empresarial debe escribirse en un solo idioma. La competencia y el movimiento de los desarrolladores se venden en exceso, y la mayoría de los desarrolladores tienen especialidades …

En lugar de forzarnos a convertirnos en un modelo restrictivo con mucha sobrecarga, inicialmente construimos en el front-end de prueba de concepto de PHP. Esto se debe a que somos una pequeña empresa, pero también porque sabemos que podemos sorprender a grandes clientes cuando les decimos que su proyecto de 6 meses tomó menos tiempo para escribir en PHP y es solo un 20-30% más lento sin agregar procesamiento paralelo, y puede Es probable que se haga más eficiente y se mueva a C más tarde. Junto con nuestras huellas de memoria y procesador extremadamente bajas, podemos y hemos logrado velocidades superiores a los sistemas de producción compilados en C, Java, Python y 4GL. Esto no se debe a que PHP sea más rápido, es porque sabemos lo que tenemos que hacer y lo que no tenemos que hacer y nos encanta impulsar un código ambiental específico con reglas restrictivas para impulsar el beneficio empresarial. Después de que su oficina fue diseñada pensando en un solo proveedor, ¿por qué su código debería ser compatible con MySQL, SQL Server y Oracle?

Nuestro uso de RAM transaccional típico es <2MB - 50MB con <10MB para todos los códigos que no son de investigación, por lo que no estamos seguros de por qué tantos tout Java o Python o Node son tan eficientes como tienen una carga general mucho mayor para VM, analizador y su base de archivos lib. hinchado y, a menudo, lleno de código muerto (raramente usamos otros PHP por las mismas razones). Más bien famoso (internamente) escribí una biblioteca ODS que puede generar más de mil millones de filas (mucho más que cualquier hoja de cálculo que se pueda leer o escribir) en PHP para buscar enormes conjuntos de datos para importar y exportar. Parece que la mayoría de los desarrolladores de otros lenguajes parecen enfocarse en hacer tareas como una entidad, en lugar de permitir que tareas como la salida de todas las filas con criterios sean iterables, escalables o más allá de los límites de una sola máquina ...

También es muy difícil mantener nuestro código C dentro de estos límites sin implementar Java, PHP o similar, por lo que todos los servicios respaldados por C incluyen reescrituras de código PHP en C, aplicaciones como Redis, MySQL, etc. necesitan más RAM (la mayoría no escribimos estos servicios si es posible). Esto significa dividir las tareas en componentes muy pequeños, lo que también nos ayuda a la hora de madurar el código PHP y volver a factorizar utilizando otros idiomas.

Rompiendo las cosas hacia mí, en lugar del lenguaje específico, Nuance es la clave para las necesidades empresariales sólidas, eficaces y rentables, y con frecuencia es la caída de los idiomas que menciona en su pregunta. Seguir una arquitectura orientada a servicios para su aplicación, permitiéndole agregar una funcionalidad que consiste en pasos compuestos más pequeños que nos permiten emparejar código asíncrono y lineal es probablemente un paso mejor que saltar en cualquier tren de idiomas y montarlo en el abismo.

Python y JavaScript son lenguajes cualitativamente diferentes de Java. Y ciertamente argumentaría que JavaScript es “más moderno” que Java: vienen de la misma época.

Python y JavaScript son lenguajes interpretados (sí, sé que Python cumple con .pyc) mientras que Java es un lenguaje compilado. Java se ejecuta bajo la JVM, que es un entorno seguro cuidadosamente diseñado; Python y JavaScript están diseñados deliberadamente como lenguajes inseguros “puedes hacer cualquier cosa”. Java tiene construcciones de lenguaje diseñadas para hacer posible la gestión de grandes proyectos con millones de líneas de código; Ni Python ni JavaScript lo hacen. Mi experiencia con Python es que no es adecuado para grandes proyectos.

Si quisiera un lenguaje “más moderno” que el de Java, probablemente buscaría algo como Scala.

Java es la tecnología de elección para crear aplicaciones utilizando código administrado que puede ejecutarse en dispositivos móviles.

Android es una plataforma de software de código abierto y un sistema operativo basado en Linux para dispositivos móviles. La plataforma Android permite a los desarrolladores escribir código administrado utilizando Java para administrar y controlar el dispositivo Android. Las aplicaciones de Android se pueden desarrollar utilizando el lenguaje de programación Java y el SDK de Android. Por lo tanto, la familiaridad con los conceptos básicos del lenguaje de programación Java es un requisito previo para la programación en la plataforma Android. Este artículo explica dónde encaja Java en el desarrollo de aplicaciones móviles y cómo podemos usar Java y Android SDK para escribir aplicaciones que puedan funcionar en dispositivos Android.

La edición móvil de Java se llama Java ME. Java ME se basa en Java SE y es compatible con la mayoría de los teléfonos inteligentes y tabletas. La Java Platform Micro Edition (Java ME) proporciona un entorno flexible y seguro para crear y ejecutar aplicaciones dirigidas a dispositivos integrados y móviles. Las aplicaciones que se crean utilizando Java ME son portátiles, seguras y pueden aprovechar las capacidades nativas del dispositivo. Java ME aborda las restricciones involucradas en la creación de aplicaciones dirigidas a dispositivos móviles. En esencia, Java ME aborda el desafío de ejecutar aplicaciones en dispositivos que tienen poca memoria disponible, pantalla y energía.

El lenguaje de programación Java es uno de los lenguajes más preferidos cuando se trata del desarrollo de aplicaciones para Android. Un lenguaje de programación orientado a objetos desarrollado en Sun Microsystems (ahora propiedad de Oracle), puede ejecutarse de dos maneras diferentes, ya sea en una ventana del navegador o en una máquina virtual que puede funcionar sin un navegador.

Y esta flexibilidad tiende a significar mucho cuando se trata de reutilizar el código y actualizar el software. Aunque Java no tiene mucho que hacer si está considerando el desarrollo de iOS, ciertamente puede estar en su lista elegida cuando se trata de aplicaciones móviles en todas las plataformas. Es decir, aplicaciones multiplataforma.