¿Scala sería una buena opción en lugar de Java?

11

Comenzaremos un nuevo proyecto que incluirá la capacitación de todos los desarrolladores .net en Java (frameworks / sistema ECO, etc.). Tenemos mucho código escrito en C # y parece que todo esto se desperdiciará ya que tenemos que volver a escribirlo todo en Java. El problema que veo es que el primer año más o menos (probablemente 2 años) no tendremos nada que entregar, ya que pasaremos la mayor parte del tiempo reproduciendo lo que teníamos antes pero ahora en Java.

Dado que nuestro equipo está distribuido en diferentes oficinas en todo el mundo y tenemos una gran cantidad de desarrolladores de Java (20 a 30) y 10 desarrolladores que usan .net, queremos que todos los desarrolladores utilicen el mismo idioma / plataforma para que podamos comenzar a reutilizar componentes / módulos. Entonces puedo entender el punto de vista de la gestión.

Ayer me encontré con Scala y me preguntaba si sería mejor usar esto con el producto actual (que está escrito en C #) y luego al menos tendremos un producto que funcione en un año. También en un año tenemos módulos que se pueden usar en el mundo Java mientras migramos otras partes del producto.

¿Sería Scala una mejor opción que Java teniendo en cuenta lo que estamos tratando de lograr?

JD01
fuente
2
¿Reescribir todo en otro idioma? ¿Y 2 años sin nada que entregar? Suena como una terrible decisión de gestión y es posible que necesite un nuevo trabajo en medio año;)
zvrba
Sí, eso fue considerado. No estoy seguro de dónde debería comenzar a buscar ahora y seguir con C # :)
JD01
1
Eso suena como si
estuvieras

Respuestas:

15

Algunos puntos a considerar:

  • Scala es un gran idioma, pero vale la pena señalar que también es un lenguaje bastante difícil de aprender y usar correctamente. No solo mi opinión, incluso expertos experimentados en Scala lo dicen . Dependiendo del nivel de habilidades en su equipo, probablemente sea la herramienta más adecuada para sus desarrolladores más experimentados / expertos
  • Java y C # son bastante similares en muchos aspectos: no pasará mucho tiempo para que los desarrolladores entrenados en uno se muevan (la sintaxis es similar, se trata principalmente de aprender las peculiaridades de cada uno y comprender las diferentes bibliotecas, que a menudo tienen una funcionalidad similar pero se empaquetan de manera diferente y / o tienen nombres diferentes). Personalmente cambié de Java a C # y volví a Java nuevamente sin ninguna dificultad.
  • También vale la pena señalar que todos los lenguajes JVM (Java y Scala, pero también JRuby y Clojure, etc.) son muy compatibles: comparten la misma plataforma JVM fundamental y pueden compartir código / bibliotecas muy fácilmente.

Dado todo esto, es posible que desee cubrir sus apuestas y optar por una estrategia mixta Java / Scala , es decir, migrar a la plataforma JVM y centrarse inicialmente en Java, pero mantenga abierta la opción de usar Scala cuando sus desarrolladores estén cómodos y / o Se ajusta al problema en cuestión.

Desde una perspectiva de gestión, esto tiene muchas ventajas:

  • Aún puede compartir todas las bibliotecas para que sus inversiones estén seguras
  • Sus desarrolladores menos experimentados podrán transferir C # -> Java bastante rápido
  • Sus desarrolladores más experimentados pueden aprovechar al máximo las funciones avanzadas de Scala
  • Todas las herramientas son compatibles / se pueden compartir (sistemas de construcción, IDE, herramientas de implementación, etc.)
  • Obtiene acceso gratuito al ecosistema de bibliotecas de código abierto muy amplio en la JVM (junto con la portabilidad multiplataforma, esta es posiblemente la mejor razón para estar en la plataforma JVM)
  • Sus desarrolladores pueden usar el lenguaje que los hace más productivos dadas sus habilidades / la tarea en cuestión (Java en algunos casos, Scala en otros, tal vez otros lenguajes como Clojure en el futuro)

La desventaja es que todavía tiene dos idiomas principales para admitir. Pero probablemente ya tenga muchos más que solo dos (scripts de shell, formatos XML específicos del dominio, archivos de configuración, motores de reglas, HTML, Javascript), por lo que podría argumentar que en realidad no es tan importante.

mikera
fuente
Gracias por la información. Solo estoy tratando de averiguar cuál es el mejor camino a seguir y usted me ha brindado información excelente. Por el momento tenemos algunos buenos desarrolladores de OO pero nadie familiarizado con la programación funcional.
JD01
1
¡Encantado de ayudar! Vale la pena ser consciente de que Scala es más un lenguaje basado en múltiples paradigmas / OOP. Si bien ciertamente puede hacer FP en Scala, si desea idiomas que tengan un enfoque más claramente funcional, entonces Haskell o Clojure probablemente estén más cerca de la marca.
mikera
En cuanto a la reutilización del código, si utilicé Clojure o Scala desde el primer día o incluso como dijiste en una estrategia mixta, ¿podría reutilizar el código Clojure / Scala en .net y Java? Me pregunto si este es un buen punto de venta para la gerencia. De esta manera, aún podríamos sacar un producto (el producto antiguo con nuevas características) y también estar en camino de reescribir el código existente en Java con la reutilización de código de los módulos clojure / scala. ¿Estoy en lo correcto al pensar aquí o esto abre otros problemas?
JD01
1
Si lo desea, puede exponer la funcionalidad Clojure / Scala como un servicio web o una interfaz REST. Eso es algo más elevado que simplemente construir directamente una biblioteca (que sería la mejor opción si quisiera llamar a la funcionalidad desde Java / otro lenguaje JVM) pero sin duda le daría la flexibilidad de llamar al código desde cualquier cliente que desee (. Net, Java, Ruby, etc.)
mikera
Gracias Mike Creo que la ruta de reutilización del código al menos le mostrará a la gerencia que no es necesaria una reescritura completa con la opción Scala / Clojure. No quiero que terminemos como Netscape :). Volviendo a la construcción de una biblioteca, ¿no podría usarla en .net y java sin servicios web?
JD01
15

Agregaré una tercera opción. ¿Alguien en su organización ha analizado la interoperabilidad entre sus módulos C # y Java? ¿Cómo expones la funcionalidad de C #? ¿Los servicios web SOAP o RESTFul son una opción?

Una reescritura de 2 años puede ser una sentencia de muerte para una organización (solo pregunte a Netscape). Sin embargo, una migración gradual mientras el código existente juega bien entre sí tiene potencialmente menos impacto comercial.

Martijn Verburg
fuente
3

Reescribir C # en Scala será tan difícil como reescribir en Java. En cuanto a qué idioma es "mejor", ese punto es discutible, cada idioma tiene sus propios puntos positivos y negativos.

No sé qué tan grande es su base de código, pero 2 años para 30 desarrolladores parece enorme para una simple reescritura. Aprender Java cuando sabes que C # es fácil. Me tomó un día o dos para sentirme cómodo con eso.

Mi consejo sería dejar que la administración se salga con la suya y disfrutar el hecho de que le pagan para ampliar su conjunto de habilidades.

Tom Squires
fuente
Solo unos 10 desarrolladores trabajarán en el nuevo producto. Solo estoy tratando de descubrir cuáles serían los pros y los contras de ir con Scala.
JD01
1
No sé lo suficiente sobre los detalles de su proyecto o Scala para darle una respuesta desafiante. Sin embargo, me parece que introducir un tercer idioma que nadie sabe complicaría las cosas.
Tom Squires
Puede que tengas razón. Lo estaba pensando en términos de sacar un producto en aproximadamente un año y al mismo tiempo poder reutilizar el código en .net y java. Tus puntos están bien notados :)
JD01
1

Creo que la opción más fácil sería lograr que los desarrolladores de Java aprendan C #. Ambos lenguajes son muy similares en muchos aspectos y no le lleva mucho tiempo a un desarrollador de Java elegir C #. He trabajado con muchos desarrolladores de Java que aprendieron C # y generalmente es una transición sin problemas. La única área en la que podrían quedar atrapados por un tiempo es el modelo de programación de WebForms. Los desarrolladores de Java se ajustan mejor al paradigma MVC. De esta manera, no necesita esperar un año antes de comenzar a desarrollar nuevas funciones. En cuanto a Scala, me temo que eso introducirá un problema completamente nuevo con los 30 desarrolladores que intentan aprender un nuevo idioma.

Sriram
fuente
Hay muchos productos escritos en Java, por lo que hacer que aprendan C # sería difícil. Esperaba con Scala, una vez que tengamos el nuevo producto, los desarrolladores de Java podrían usar las bibliotecas tal como están sin necesidad de aprender Scala.
JD01
2
¿No estaría bien si expone su código .Net existente como servicios que los desarrolladores de Java pueden invocar y desarrollar todas las nuevas características en Java?
Sriram
Eso se había sugerido en el pasado, pero se decidió que nos alejamos de .net.
JD01
¡Guauu! Luego lo mantendría simple y reescribiría el código en Java. Creo que Scala introduciría una complejidad más para administrar y sería difícil de vender para la administración.
Sriram