Pregunta

Soy un programador experimentado C ++ con conocimientos medios de Python. Las razones que he estudiado Python en el primer lugar fueron los siguientes:

  • para obtener una perspectiva diferente de la programación (estático vs dinámico, interpretado vs compilado, etc.)
  • para aumentar la amplitud de los proyectos que pueden trabajar en (Python me permite hacer el desarrollo web, desarrollar para teléfonos Symbian o golpear los guiones de administración de sistemas rápidos)
  • para complementar mis conocimientos de C ++.

Creo que Python es grande y creo que he conseguido los objetivos anteriores. Voy a seguir para utilizarla para pequeños proyectos, guiones y desarrollo web.

No creo que lo puedo usar para medianas y grandes proyectos sin embargo. Mientras que el tipado dinámico es conveniente, sino que permite una cierta clase de errores que encuentro perturbador. Prueba de la unidad y la formación de pelusas pueden aliviar este problema, pero los tipos estáticos elimina por completo.

Después de mirar en algunos lenguajes de programación, creo que Scala parece un buen candidato: Me gusta la inferencia de tipos y se ejecuta en la JVM por lo que debe estar disponible siempre que la JVM está disponible. También puedo obtener más información sobre la programación funcional cuando se la usa.

Pero ... también tengo algunas dudas, y aquí es donde espero que la comunidad de desbordamiento de pila puede ayudar:

  • Portabilidad: Linux y Windows, al menos, espero. ¿Qué pasa con los teléfonos móviles, es posible conseguir que se ejecute allí?
  • Compatibilidad 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 utilizar orientado a objetos y de procedimiento con un poco de FP en un primer momento y luego cambiar las proporciones a medida que aprendo?
  • Herramienta de cadena de la madurez: ¿cuál es su experiencia con entornos de desarrollo y depuradores? Estoy usando Eclipse en este momento y parece bien.
  • Velocidad de aprendizaje:? Teniendo en cuenta mi experiencia, la rapidez ¿cree que puedo llegar a un nivel viable con Scala
  • Implementación: ¿cómo es exactamente lo que implementa un programa de Scala? Es un frasco, que es un archivo ejecutable?

Por último, ¿qué te parece que son algunos de los inconvenientes Scalas?

¿Fue útil?

Solución

  • Portabilidad: Linux y Windows, al menos, espero. ¿Qué pasa con los teléfonos móviles, ¿alguien tiene éxito en conseguir que se ejecute allí?

Sí. Hay bastante movimiento sobre Scala en Android. En cuanto a J2ME, vi algo en ese sentido, pero no mucho. Hay algo de código perteneciente a J2ME en el repositorio de código fuente. No estoy seguro de lo viable que es, pero parece a mí que no hay mucha demanda para ello.

También voy a mencionar que hay / había una piscina sobre el Scala-Lang sobre las plataformas de destino deseados, y J2ME era uno de ellos, muy bajo en el tótem.

  • Compatibilidad C ++: ¿Puedo mezclar código C ++ con Scala? (JNI?)

Así como usted puede mezclar C ++ con Java, por lo que vale la pena. Si usted no tiene ninguna experiencia con eso, sólo puede leer los recursos de Java, como cualquier cosa en ellos será aplicable con Scala sin cambios (aparte de sintaxis Scala).

  • paradigma de programación: No me siento cómodo con el cambio a FP en este momento. ¿Puedo utilizar OO y de procedimiento con un poco de FP en un primer momento y luego cambiar las proporciones a medida que aprendo?

Definitivamente, sí. Scala sale de ella de manera de asegurarse de que no es necesario programar en un estilo funcional. Esta es la principal crítica de la Scala de gente funcionales, como una cuestión de hecho:. Algunos no lo consideran un lenguaje funcional a menos que obliga al programador a escribir en estilo funcional

De todos modos, se puede ir a la derecha en hacer las cosas a su manera. Mi apuesta, sin embargo, es que va a retomar hábitos funcionales sin ni siquiera darse cuenta de que son funcionales.

Tal vez se puede ver en la href="http://dcsobral.blogspot.com/search/label/matrix" rel="nofollow noreferrer"> Matrices serie

IDEA IntelliJ (), NetBeans y Eclipse todos tienen un buen soporte para Scala. Parece IDEA, es el mejor, y NetBeans / Eclipse mantener la rana-saltar entre sí, aunque NetBeans sin duda ha sido más estable que el Eclipse en los últimos tiempos. Por otro lado, el apoyo en Eclipse está tomando una ruta muy prometedor que debe producir resultados en los próximos 6 meses más o menos - es sólo que se trata de una ruta golpes. : -)

Algunos de los signos interesantes de Scala utillaje para estos entornos es el hecho de que el plug-in de Eclipse en el desarrollo utiliza AOP para fusionar más a la perfección con todo el IDE, que el plugin de NetBeans está siendo reescrito por completo en Scala, y que hay un paquete de energía Scala en la idea de que es compatible con, entre otras cosas, la traducción de código Java en código Scala.

La gente EMACS tienen amplias herramientas para la Scala también, y un montón de editores más pequeños tienen soporte para él también. Estoy muy cómodo con el apoyo de jEdit para pequeños programas y scripts, por ejemplo.

También hay un buen apoyo Maven - de hecho, la forma estándar para instalar Ascensor es instalar Maven, y luego construir un arquetipo de elevación. Que se tire en una versión apropiada Scala. Hay un objetivo scala:cc que hará recompilación disparada también.

Hablando de recompilación, ni Maven, y en particular ni hormiga hacen un buen trabajo en la identificación de lo que hay que volver a compilar. A partir de ese problema surgido SBT (herramienta de construcción simple), escrito en Scala, que resuelve ese problema mediante el uso de plug-in Scala compilador. SBT utiliza el mismo diseño de proyecto como Maven, así como repositorios Maven / Ivy, pero las configuraciones del proyecto se realiza en código Scala en lugar de XML -. Con soporte para archivos de configuración de Maven / Ivy, así

  • Velocidad de aprendizaje: teniendo en cuenta mi experiencia, la rapidez con qué cree que puedo llegar a unanivel viable con Scala?

Muy rápido. Como un lenguaje puramente orientado a objetos, Scala ya introduce algunas características agradables, comparable a algunas cosas que está presente en C ++, pero no Java, aunque trabajan en diferentes moda. A este respecto, una vez que se da cuenta de lo que estas características son para y relacionarlos con C ++ cosas, serás mucho por delante de los programadores de Java, como ya sabrá qué hacer con ellos.

  • Implementación: ¿cómo es exactamente lo que implementa un programa de Scala? Es un frasco, que es un archivo ejecutable?

Lo mismo que Java. Puede implementar los JAR, WAR, o cualquier otro de los objetivos de Java, porque el compilador Scala generar archivos de clase. De hecho, se utiliza una vasija de Java para generar un archivo JAR de Scala a partir de los archivos de clase, y los objetivos de Maven para archivos WAR de construcción del ascensor de apoyo.

Hay una alternativa para los archivos de comandos, sin embargo. Puede llamar "Scala" para ejecutar el código fuente directamente Scala, similar a un script de Perl de Shell. También se puede hacer en Windows. Sin embargo, incluso con el uso de un demonio de compilación para acelerar la ejecución, tiempos de arranque son lo suficientemente lento que el uso efectivo de la Scala en un entorno de programación pesada necesita algo así como Nailgun .

En cuanto a las desventajas de Scala, echar un vistazo a mi respuesta (y del otro) en esta pregunta desbordamiento de pila.

Otros consejos

Scala es un lenguaje evoluciona bien vale la pena invertir en, sobre todo si viene de mundo Java. Scala es ampliamente difundido en Artima . Ver este artículo de Bill Venners y también leer sobre Twitter y Scal a

.

En cuanto a sus preguntas:

  • Java puede ejecutarse siempre que haya una JVM. No hubo suerte con sin embargo los teléfonos móviles. Es necesario 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 - sí es necesario para aprenderlo. Sin embargo también se puede empezar a usarlo sin tener todas las ventajas de la misma y su forma de trabajo con él.
  • Hay un plug-in de Eclipse. No es el mejor, pero va a hacer el trabajo. Más detalles aquí .
  • Si tiene experiencia, yo diría muy rápido. Le recomiendo que encontrar un libro para empezar.
  • la FAQ para la implementación.
  

paradigma de programación: No me siento cómodo con el cambio a FP en este momento. ¿Puedo utilizar OO y de procedimiento con un poco de FP en un primer momento y luego cambiar las proporciones a medida que aprendo?

Scala tiene soporte completo para la programación imperativa, escribir programas sin elementos de PF en que es una brisa (sin embargo, FP es útil y vale la pena aprender de todos modos).

  

Velocidad de aprendizaje: teniendo en cuenta mi experiencia, la rapidez con qué cree que puedo llegar a un nivel viable con Scala

?

rápidamente. Hay una serie de características interesantes en Scala que pueden ser no familiar para las personas que vienen de un C ++, Java medio ambiente, como por ejemplo algunas de las características del sistema de escritura. Algunos argumentan que el hecho de que hay mucho que aprender en la Scala antes de saber toda ella es un problema con el lenguaje; Estoy en desacuerdo. La presencia de los rasgo es una ventaja de la lengua. Las características más, mejor. Después de todo, usted no tiene que utilizar todos a la vez, al igual que usted no tiene que comprar todo lo que se vende en la tienda.

  

Velocidad de aprendizaje: teniendo en cuenta mi experiencia, la rapidez con qué cree que puedo llegar a un nivel viable con Scala

?

También vengo de experiencia en C ++, una cosa que he notado es que desde que va a escribir mucho menos código en comparación con C ++ para una tarea comparable, su aprendizaje se acelerará a medida que va hacer más cosas en el mismo período de tiempo . Este fue el mismo fenómeno que he experimentado con Ruby.

En realidad - si fuera tú - me estudiaría paradigmas de programación en lugar de idiomas. Por supuesto que tiene que estudiar un idioma ejemplo para estudiar el paradigma. El conocimiento de los inconvenientes y beneficios de los diferentes paradigmas que permite ver los problemas desde un lado diferente y te hace un mejor programador (incluso en las lenguas que ya conoce).

Recogiendo una lengua de un paradigma ya conocido es una tarea fácil relativly si es necesario. Desde Scala es FP (al menos lo mencionas) y C ++ / Python es programación orientada a objetos, es un buen lenguaje para usted, diría yo.

Usted debe inscribirse en este curso por el creador de sí mismo Scala.

https://www.coursera.org/course/progfun

James Strachan (productiva desarrollador de código abierto de Java, para aquellos que no en el bucle) tiene una interesante discusión sobre Scala aquí , y por qué siente que es una progresión de Java (la langauge, no la plataforma).

Scala parece que está ganando mucha tracción. No creo que sea una flor de un día, y se encuentra actualmente en la lista de idiomas para aprender (en parte por el aspecto funcional)

Aquí está una evidencia anecdótica con respecto a la capacidad de aprendizaje de Scala.

En nuestra empresa, tenemos varios pasantes de U.Waterloo. Se les dijo a escribir en Scala; nunca vio antes.

Se han recogido Scala y ascensor muy rápido; Ahora se están produciendo código Scala; no puede ser perfecto, pero nadie es perfecto.

Por lo tanto, el hecho de que un gerente no sabe Scala puede no ser el mejor argumento cuando se decida sobre la adopción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top