Estoy aprendiendo a ser un desarrollador web full stack. ¿Es Scala o Haskell mejor para mi lenguaje de backend?

Son opciones muy similares. Haskell y Scala han desarrollado modelos de programación funcional y sistemas de tipos muy completos, y se basan en muchos de los mismos conceptos subyacentes. Esto no es una sorpresa, porque varios de los contribuyentes principales de Scala también son miembros de la comunidad de Haskell, y la comunidad de Scala en general parece tener una cultura de aprender de los demás y copiar sus mejores ideas, lo cual es un gran soplo de frescura. aire, ya que la mayoría de los lenguajes de programación parecen tener una actitud significativa de “no inventado aquí”.

Algunas respuestas han dicho que es más fácil encontrar un trabajo con otros idiomas, y creo que esto es completamente incorrecto. Es cierto que el número absoluto de, por ejemplo, trabajos de Python es mayor que el número de trabajos de Scala, pero la pregunta relevante es la proporción de trabajos disponibles para los solicitantes calificados. Hay muchos menos desarrolladores calificados de Scala que desarrolladores de Python, por lo que es muy probable que le resulte más fácil encontrar un trabajo con Scala.

En términos de elegir específicamente entre Scala y Haskell, aquí hay algunos factores que pueden inclinar su decisión de una manera u otra:

  • Scala tiene algunos recursos de aprendizaje muy buenos, en particular la programación funcional en Scala y la programación funcional en los cursos de Scala Coursera. En contraste, los recursos de Haskell, la OMI, son sustancialmente más débiles. Leí Learn You a Haskell for Great Good !, Real World Haskell y Programming in Haskell, y descubrí que a los tres les falta bastante en términos de exposición.
  • Scala tiene mucho soporte para análisis y aprendizaje automático en grandes conjuntos de datos, incluidos Spark, Akka y Kafka. Si está interesado en trabajar con grandes conjuntos de datos, Scala es una excelente opción.
  • Las bibliotecas Haskell tienden a tener una mejor calidad de código promedio. Haskell y Scala te permiten escribir un buen código, pero Haskell hace que sea bastante difícil escribir mal, mientras que Scala lo hace relativamente fácil.
  • Las bibliotecas Haskell tienden a tener una mejor seguridad de tipografía, por ejemplo, escucho mejores cosas sobre OpalEye que Slick.
  • Scala tiene muchas, muchas más bibliotecas disponibles que Haskell, y este efecto se magnifica cuando se tiene en cuenta la interoperabilidad JVM. Esto tiene aspectos positivos y negativos: para cualquier tarea que desee hacer, lo más probable es que alguien haya escrito bibliotecas Scala o Java para manejarla. OTOH, esto significa que generalmente tiene que mantenerse al día con más bibliotecas y tener que tomar más decisiones, lo que puede ser un inconveniente, especialmente al comenzar.
  • Si conoces personas con experiencia en Scala o Haskell, diría que ese idioma es muy útil para poder pedir ayuda a un experto cuando estás atrapado, y ese factor probablemente domina otras consideraciones.

Sin embargo, en general, no te preocupes demasiado: ¡ambos son excelentes idiomas con excelentes comunidades, por lo que aprenderás mucho sin importar lo que elijas!

Haskell es una gran opción.

Personalmente, conozco a varias empresas (startups) que lo usan felizmente para sus servicios web de back-end.

Es un lenguaje maravilloso, funciona bien y, y sus bibliotecas, puede hacer cosas que la mayoría de los otros lenguajes simplemente no pueden hacer: paralelismo determinista , memoria transaccional de software y muchas garantías estáticas en su código web.

Hay algunos marcos web viables en Haskell, y tendrá que elegir uno para comenzar. Esto no es un compromiso tan grande como parece: los marcos que he usado son mucho más modulares que otros marcos que he visto y, a medida que adquieras más experiencia, podrás mezclar y combinar las piezas me gusta.

Recomiendo comenzar con Yesod porque es capaz, maduro y tiene un libro completo escrito al respecto :

Puede leer el libro en línea, por lo que no querrá recursos de aprendizaje: Yesod Web Framework Book- Versión 1.4. (Observe cómo la versión en línea obtiene actualizaciones, bueno, manténgala actualizada).

Yesod tiene algunas características bastante increíbles para hacer que su código sea más seguro y ayudar a prevenir errores. Esto es lo que escribí al respecto en otra respuesta:

Yesod Web Framework hace un muy buen trabajo al usar el sistema de tipos de Haskell. Previene estáticamente:

  • Ataques XSS : aseguran que la entrada del usuario se desinfecte y evitan que accidentalmente use la entrada no desinfectada
  • Inyección SQL : la misma idea con las consultas SQL de escape
  • otros errores de SQL : consulta su base de datos utilizando construcciones normales de Haskell, lo que garantiza que las consultas SQL estén bien formadas
  • faltan variables de plantilla : incluso las variables de plantilla se verifican estáticamente para asegurarse de que existan y tengan el tipo correcto
  • enlaces rotos : su sistema garantiza que nunca generes enlaces internos rotos
  • problemas de codificación de caracteres : el sistema de tipos se asegura de que nunca mezcle accidentalmente texto codificado de diferentes maneras

Más importante aún, hace todo esto sin excesivo repetitivo . ¡Esto no es Java! Haskell proporciona un montón de herramientas avanzadas como la inferencia de tipos global y Template Haskell, que le permite salirse con la escritura de teclado tan poco como un lenguaje de escritura dinámica pero con una escritura mucho más estática :).

Toda esa pregunta merece una mirada; ofrece una excelente visión general de las fortalezas de Haskell: un amigo está entusiasmado con la forma en que Haskell ha ayudado a su flujo de trabajo y productividad. ¿Qué ofrece Haskell que lo diferencie de los otros idiomas populares, particularmente en el back-end para desarrollo web y móvil? ¿Para qué es Haskell notablemente bueno?

Absolutamente no te equivocarás aprendiendo Haskell y usando Haskell para aprender habilidades más específicas como la programación completa. Tampoco debería hacerte daño a la hora de encontrar trabajo: incluso las empresas que no usan Haskell lo reconocen como una señal fuerte. Alguien que haya aprendido Haskell —se piensa— probablemente también hará un buen trabajo en otro idioma.

Elegiría C ++, Java o C # porque esos lenguajes son más comunes y, por lo tanto, más fáciles de encontrar un trabajo como desarrollador de back-end. Aprender Scala o Haskell es como aprender inglés medieval en la universidad. Es divertido, pero al final, el mercado laboral para las personas con esas habilidades es muy pequeño.

Scala está fuertemente conectado a Java, por lo que si aprende Scala, también incluya aprender algo de Java. Eso debería aumentar sus opciones en el mercado laboral. Scala compila el código de bytes de Java para que esos dos idiomas se mezclen muy bien.

Haskell es más viejo e incluso es anterior a Java. Es multiplataforma y tiene un estándar mejor definido que Scheme. Haskell también compila en código nativo en lugar de código de bytes, lo que le brinda un rendimiento ligeramente mejor y puede combinarse con otros idiomas para combinar aplicaciones más complejas. Entonces, Haskell y C ++ o Pascal combinados serían interesantes. Y si bien Haskell es popular con fines educativos, hay varias industrias a las que les gusta usarlo. Facebook usa Scala por sus cosas anti-spam. Pero Twitter usa Scala en su lugar y, en general, Scala es más popular.

Lo más probable es que en unos años, Scala pueda reemplazar Java para fines de desarrollo web, por lo que sugeriría que aprenda Scala. Pero Haskell tiene algunos marcos web más como Yesod, Snap y Happstack, por lo que Haskell sería más práctico para los desarrolladores web. Scala solo tiene Play! como marco web. Pero Scala y Java son similares una vez compilados, por lo que puede usar cualquier marco web basado en Java.

Animaría fuertemente a Haskell. Mira, yo uso Scala; es excelente en comparación con C # y Java, y hace que el trabajo diario sea un poco menos malo, pero en comparación con Haskell, es un poco una broma.

  1. Scala realmente no puede manejar la recursividad. Scala no tiene llamadas de cola adecuadas (PTC). Ver ¿Es esta definición de una función fibonacci recursiva de cola recursiva de cola? Tiene “optimización de llamada de cola”, pero en realidad no ofrece un estilo de paso de continuación (CPS), por lo que no puede manejar cosas como el recorrido del árbol. Haskell fue construido para manejar varias formas de recursión.
  2. Desafortunadamente, la idiomática Scala realmente solo está creando una gran cantidad de objetos que empujan el JVM gc a la unidad. La VM de Haskell, por otro lado, fue construida desde cero para lidiar de manera inteligente con un mundo inmutable.
  3. Si aprende Haskell y ya conoce algún tipo de lenguaje OO, esencialmente obtendrá Scala de forma gratuita. Podría aprenderlo en un fin de semana.
  4. Haskell te obligará a adoptar una forma diferente de pensar. Inmediatamente. Scala te permitirá caminar por siempre a tu propio ritmo. No te castiga tanto por usar un estilo imperativo. Tampoco te recompensa tanto por ir a la programación funcional pura.
  5. Por supuesto, el boxeo de primitivas de Scala hace que Scala sea significativamente más lento que Java para operaciones lineales de un solo subproceso. Claro, podría decirse que puede compensar esto de otras maneras, pero los píos de Java nunca te dejan olvidarlo …
  6. Scala es un lenguaje bastante agradable para trabajar, pero en términos de programación funcional, es algo así como en la mesa para niños. Claro que hay ScalaZ, pero por mi parte siempre pensé que era lo peor de ambos mundos; la memoria se pierde por luchar contra la JVM, pero todavía no Haskell …

Amo a Haskell. De los dos es más “puro”. Si quieres sumergirte en el extremo profundo de FP, ahí es donde vas.

Si lo aprende y le encanta, estoy seguro de que puede encontrar trabajos interesantes.

Scala parece diseñado para permitirle combinar diseños FP y OO en una base de código. Algunas personas odian eso. Pero dependiendo de sus antecedentes y gustos, puede ser una entrada más práctica para FP.

Para acceder a la mayor cantidad de oportunidades de trabajo, parece una apuesta más segura trabajar con un lenguaje que se ejecuta en la JVM.

Ahora, no siempre pienso que los gorilas de 800 libras deberían guiar decisiones como esta, pero de acuerdo con este práctico gráfico de Wikipedia, Haskell se usa en producción en Facebook. Scala se usa en producción en Twitter y LinkedIn, y Java en siete de los otros (lo que significa que saben cómo ejecutar código JVM en producción).

Independientemente de cuál elija (o si elige otra cosa como Erlang o Clojure), aprender FP lo convertirá en un programador más fuerte, incluso si su día a día termina en otra cosa.

La entrada más rápida a la programación funcional de back-end web es Phoenix Framework. Los tutoriales son muy fáciles y al grano. Terminas haciendo aplicaciones web. Debido a que está inspirado en Ruby on Rails, la creación primaria de prototipos es la fuerza principal.

No he visto una manera tan fácil de arrancar en otros lenguajes funcionales.

No puede hacer desarrollo web a gran escala a nivel empresarial con una tecnología emergente. Si desea crear sitios web que solo atiendan a unos pocos usuarios, con tiempo de inactividad, y que solo usted pueda mantener, vaya con algo nuevo. Si planea sitios web exitosos que necesitan un equipo de personas para escalar funcionalmente y tecnología confiable para escalar en términos de capacidad y tiempo de actividad, realmente tendrá dificultades con cualquiera de esas tecnologías. Aprenda una de las plataformas probadas y verdaderas. Cuando su gran sitio web exitoso necesita un sitio de administración más pequeño, o un sitio de informes, es cuando puede probar algo nuevo.

Scala tiene más adopción en el desarrollo web porque se ejecuta en la JVM. Para empezar, miraría a Play y Akka como marcos.

More Interesting

Recientemente me uní a una organización como desarrollador, pero me parece terriblemente aburrido en comparación con la programación competitiva. ¿Soy un mal desarrollador? ¿Cómo voy a hacer un trabajo después de graduarme, ya que las aplicaciones web parecen ser todo lo que todos están haciendo?

He estado creando sitios web con PHP usando editores de texto. ¿Cómo empiezo a usar Laravel Framework? No tengo ningún conocimiento sobre su uso.

Casi fallé todas las preguntas durante la entrevista de posición de desarrollador de full stack, pero aún así me contrataron, ¿qué pasó?

Estoy interesado en el desarrollo web. ¿Qué curso debo seguir: J2EE-Struts con Hibernate Framework o J2EE-Hibernate con Spring Framework? ¿Cuál es la diferencia entre los dos?

Quiero comenzar con el desarrollo web, como principiante, ¿qué idioma debo aprender?

Cómo lanzar un sitio web con éxito

¿Dónde construyo un sitio web?

Asumí el proyecto de mi amigo pensando que quería que le escribiera una página web personal. Resulta que quiere que escriba el próximo Craigslist. ¿Cómo decido cortésmente agregar alguna función sin que le pida que le devuelva el dinero?

Soy un desarrollador de Winform / WPF. ¿Qué debo aprender para convertirme en desarrollador de aplicaciones web en ASP .NET 5 o Meteor?

Soy un desarrollador web independiente. Hice un sitio web usando React como me lo pidieron. Puedo abrir el sitio en localhost 8,000 usando NPM start. ¿Mi trabajo está completo? ¿Debo alojarlo en un dominio? ¿Cómo completo el trabajo?

Cómo detener los anuncios de ad.adsmatte.com

Quiero aprender programación, pero odio el desarrollo web. ¿Que puedo hacer?

¿Cómo obtengo un sitio web gratuito?

Si quiero ser un buen desarrollador web, ¿cuál es la secuencia correcta para aprender lenguajes de programación?

¿Cómo creo un sitio web personal? ¿Por lo general, están codificados a mano desde cero o utilizan algún tipo de software de construcción de sitios?