java - programacion - ¿Debo estudiar Scala?
manual de programacion android pdf (8)
Soy un programador experto en C ++ con habilidades promedio de Python. Las razones por las que estudié Python en primer lugar fueron:
- para obtener una perspectiva diferente de la programación (estático frente a dinámico, interpretado frente a compilado, etc.)
- para aumentar la amplitud de los proyectos en los que puedo trabajar (Python me permite hacer desarrollo web, desarrollar teléfonos Symbian o eliminar secuencias de comandos rápidas de administración de sistemas)
- para complementar mis habilidades en C ++.
Creo que Python es genial y creo que he logrado los objetivos anteriores. Continuaré usándolo para pequeños proyectos, scripts y desarrollo web.
Sin embargo, dudo que pueda usarlo para proyectos medianos a grandes. Si bien la escritura dinámica es conveniente, permite una cierta clase de errores que me parecen molestos. Las pruebas unitarias y las salpicaduras pueden aliviar este problema, pero la tipificación estática lo elimina por completo.
Después de mirar algunos lenguajes de programación, creo que Scala parece un buen candidato: me gusta la inferencia de tipo y se ejecuta en la JVM, por lo que debería estar disponible donde esté disponible la JVM. También puedo aprender más sobre la programación funcional cuando la utilizo.
Pero ... también tengo algunas dudas, y aquí es donde espero que la comunidad de Stack Overflow pueda ayudar:
- Portabilidad: Linux y Windows al menos eso espero. ¿Qué pasa con los teléfonos móviles? ¿Es posible hacer que funcione allí?
- Compatibilidad con C ++: ¿puedo mezclar código C ++ con Scala? (JNI?)
- Paradigma de programación: no me siento cómodo con el cambio a la programación funcional (FP) en este momento. ¿Puedo usar objetos orientados a objetos y procedimientos con algunos FP al principio y luego cambiar las proporciones a medida que aprendo?
- Madurez de la cadena de herramientas: ¿cuál es su experiencia con IDEs y depuradores? Estoy usando Eclipse en este momento y parece estar bien.
- Velocidad de aprendizaje: teniendo en cuenta mi experiencia, ¿qué tan rápido crees que puedo alcanzar un nivel viable con Scala?
- Despliegue: ¿cómo despliega exactamente un programa Scala? ¿Es un tarro, es un ejecutable?
Finalmente, ¿qué crees que son algunas de las desventajas de Scalas?
Paradigma de programación: no me siento cómodo con el cambio a FP en este momento. ¿Puedo usar OO y procedimientos con algunos FP al principio y luego cambiar las proporciones a medida que aprendo?
Scala tiene soporte completo para la programación imperativa, escribir programas sin elementos FP es muy sencillo (sin embargo, FP es útil y vale la pena aprender de todos modos).
Velocidad de aprendizaje: teniendo en cuenta mi experiencia, ¿qué tan rápido crees que puedo alcanzar un nivel viable con Scala?
Con rapidez. Hay una serie de características interesantes en Scala que pueden no ser familiares para las personas que provienen de un entorno C ++, Java, como por ejemplo algunas de las características del sistema de tipeo. Algunos argumentan que el hecho de que hay mucho que aprender en Scala antes de conocerlo todo es un problema con el lenguaje; Estoy en desacuerdo. La presencia de esas características es una ventaja del lenguaje. Cuantas más características, mejor. Después de todo, no tiene que usarlos todos a la vez, al igual que no tiene que comprar todo lo que se vende en la tienda.
Velocidad de aprendizaje: teniendo en cuenta mi experiencia, ¿qué tan rápido crees que puedo alcanzar un nivel viable con Scala?
También vengo de un fondo de C ++, una cosa que noté es que ya que escribirás mucho menos código en comparación con C ++ para una tarea similar, tu aprendizaje se acelerará ya que obtendrás más en el mismo período de tiempo. Este fue el mismo fenómeno que experimenté con Ruby.
Aquí hay una evidencia anecdótica sobre la capacidad de aprendizaje de Scala.
En nuestra compañía, obtuvimos varios pasantes de U.Waterloo. Les dijeron que escribieran en Scala; nunca lo había visto antes
Recogieron Scala y Lift notablemente rápido; ahora están produciendo código Scala; puede que no sea perfecto, pero nadie es perfecto.
Por lo tanto, el hecho de que un gerente no conozca a Scala puede no ser el mejor argumento cuando decide sobre la adopción.
De hecho, si fuera usted, estudiaría paradigmas de programación en lugar de idiomas. Por supuesto, debes estudiar un lenguaje de ejemplo para estudiar el paradigma. Conocer los inconvenientes y beneficios de diferentes paradigmas le permite ver sus problemas desde un lado diferente y lo convierte en un mejor programador (incluso en los idiomas que ya conoce).
Recoger un lenguaje de un paradigma ya conocido es una tarea relativamente fácil si es necesario. Como Scala es FP (al menos lo mencionas) y C ++ / Python es OOP, diría que es un buen lenguaje para ti.
Debes registrarte para este curso por el Creador de Scala.
James Strachan (productivo desarrollador de código abierto de Java, para aquellos que no están en el bucle) tiene una interesante discusión sobre Scala here , y por qué siente que es una progresión desde Java (el idioma, no la plataforma).
Scala parece que está ganando mucha tracción. No creo que sea un flash en la sartén, y actualmente está en mi lista de idiomas para aprender (en parte por el aspecto funcional)
Scala es un lenguaje en evolución en el que vale la pena invertir, especialmente si vienes del mundo de Java. Scala está ampliamente cubierto en Artima . Vea este article de Bill Venners y también lea sobre Twitter y Scal a.
En cuanto a tus preguntas:
- Java puede ejecutarse donde haya una JVM. Sin embargo, no tuvimos suerte con los teléfonos móviles. Necesita un JRE completo, no el subconjunto que está disponible allí.
- Esto es posible con JNI. Si algo es posible con Java, entonces es posible con Scala. Scala puede llamar a las clases de Java.
- La programación funcional es un punto fuerte de Scala: necesitas aprenderlo. Sin embargo, también podría comenzar a usarlo sin aprovecharlo al máximo y seguir su camino con él.
- Hay un complemento de Eclipse. No es lo mejor, pero hará el trabajo. Más detalles here .
- Si tienes experiencia, diría muy rápido. Recomiendo que encuentres un libro para empezar.
- Vea esta entrada de faq frecuentes para la implementación.
- Portabilidad: Linux y Windows al menos eso espero. ¿Qué pasa con los teléfonos móviles? ¿Alguien logró que se ejecutara allí?
Sí. Hay bastante movimiento sobre Scala en Android. En cuanto a J2ME, vi algo al respecto, pero no mucho. Hay algún código perteneciente a J2ME en el repositorio de código fuente. No estoy seguro de lo viable que es, pero me parece que no hay mucha demanda para eso.
También mencionaré que hay / había un grupo en Scala-Lang sobre las plataformas objetivo deseadas, y J2ME era uno de ellos, muy bajo en el tótem.
- Compatibilidad con C ++: ¿puedo mezclar código C ++ con Scala? (JNI?)
Así como puedes mezclar C ++ con Java, para lo que sea que valga la pena. Si no tiene experiencia con eso, puede leer los recursos de Java, ya que cualquier cosa en ellos será aplicable con Scala sin cambios (aparte de la sintaxis de Scala).
- Paradigma de programación: no me siento cómodo con el cambio a FP en este momento. ¿Puedo usar OO y procedimientos con algunos FP al principio y luego cambiar las proporciones a medida que aprendo?
Definitivamente, sí. Scala hace todo lo posible para asegurarse de que no necesita programar en un estilo funcional. Esta es la principal crítica de Scala por parte de la gente funcional, como cuestión de hecho: algunos no consideran que un lenguaje sea funcional a menos que obligue al programador a escribir en un estilo funcional.
De todos modos, puedes seguir haciendo las cosas a tu manera. Mi apuesta, sin embargo, es que retomarás los hábitos funcionales sin siquiera darte cuenta de que son funcionales.
Quizás puedas ver la serie de Matrices en mi propio blog sobre cómo escribir una clase de Matrix. Aunque parece el código OO estándar, es, de hecho, muy funcional.
- Madurez de la cadena de herramientas: ¿cuál es su experiencia con IDEs y depuradores? Estoy usando Eclipse en este momento y parece estar bien.
IDEA (IntelliJ), NetBeans y Eclipse tienen un buen soporte para Scala. Parece que IDEA es el mejor, y NetBeans / Eclipse siguen saltando ranas, aunque NetBeans ha sido más estable que Eclipse en los últimos tiempos. Por otro lado, el soporte en Eclipse está tomando una ruta muy prometedora que debería producir resultados en los próximos 6 meses más o menos, es solo que es una ruta de choque. :-)
Algunos signos interesantes de las herramientas Scala para estos entornos es el hecho de que el plugin Eclipse en desarrollo utiliza AOP para fusionarse más fácilmente con todo el IDE, que el complemento de NetBeans está completamente reescrito en Scala, y que hay un Scala Power Pack en IDEA que admite, entre otras cosas, traducir el código Java al código Scala.
La gente de EMACS también tiene herramientas extensas para Scala, y muchos editores más pequeños también lo soportan. Estoy muy cómodo con el soporte de jEdit para pequeños programas y scripts, por ejemplo.
También hay una buena compatibilidad con Maven: de hecho, la forma estándar de instalar Lift es instalar maven y luego construir un arquetipo Lift. Eso traerá una versión apropiada de Scala. Hay un objetivo scala:cc
que también hará la recompilación desencadenada.
Hablando de recompilación, ni Maven, ni particularmente Ant, hacen un buen trabajo identificando lo que necesita ser recompilado. De ese problema surgió SBT (Simple Build Tool), escrito en Scala, que resuelve ese problema mediante el uso del complemento del compilador Scala. SBT utiliza el mismo diseño de proyecto que Maven, así como los repositorios de Maven / Ivy, pero las configuraciones de los proyectos se realizan en código Scala en lugar de XML, con compatibilidad también con los archivos de configuración de Maven / Ivy.
- Velocidad de aprendizaje: teniendo en cuenta mi experiencia, ¿qué tan rápido crees que puedo alcanzar un nivel viable con Scala?
Muy rapido. Como un lenguaje puramente OO, Scala ya presenta algunas características agradables, comparables a algunas cosas que están presentes en C ++ pero no en Java, aunque funcionan de manera diferente. En ese sentido, una vez que te das cuenta de lo que son esas características y las relacionas con C ++, estarás mucho más adelantado que los programadores de Java, ya que ya sabrás qué hacer con ellos.
- Despliegue: ¿cómo despliega exactamente un programa Scala? ¿Es un tarro, es un ejecutable?
Lo mismo que Java. Puede implementar JAR, WAR o cualquier otro objetivo de Java, porque el compilador scala genera archivos de clase. De hecho, usa el jar de Java para generar un archivo JAR de Scala a partir de los archivos de clase, y los objetivos de Maven para la compatibilidad de Lift con los archivos WAR.
Sin embargo, existe una alternativa para los archivos de script. Puede llamar a "scala" para ejecutar el código fuente de Scala directamente, de forma similar a un script de Perl of Shell. También se puede hacer en Windows. Sin embargo, incluso con el uso de un daemon de compilación para acelerar la ejecución, los tiempos de inicio son lo suficientemente lentos para que el uso efectivo de Scala en un entorno de scripting pesado necesite algo como Nailgun .
En cuanto a las desventajas de Scala, eche un vistazo a mi respuesta (y la de los demás) en this pregunta sobre el desbordamiento de pila.