Cerrada. Esta pregunta está
fuera de tema . Actualmente no acepta respuestas.
Comentarios
Respuesta
Ya que quieres una práctica idioma:
Tenga en cuenta que Haskell y Lisp se utilizan más que los demás en la industria, aunque hay Ha habido un interés reciente en Clojure y F #.
Pero mira lo que sucede cuando agregamos Scheme a la mezcla:
Hmm, ahora no se parece tanto a un lenguaje académico, ¿verdad?
En realidad, el gráfico anterior probablemente sea una mentira; la palabra «esquema» puede aparecer en ayuda anuncios buscados en otros contextos además de los lenguajes de programación. 🙂
Así que aquí hay otro gráfico que probablemente sea (un poco) más representativo:
Si quieres explorar un dialecto realmente genial de Scheme, echa un vistazo a Raqueta.
Comentarios
Respuesta
Si desea aprender programación funcional, es mejor que aprenda Haskell primero y luego use el idioma que desee. Puede aprender programación funcional usando los otros lenguajes, pero aún permiten código imperativo y orientado a objetos. Si escribe un programa real en Haskell, aprenderá programación funcional más rápido porque los otros paradigmas no estarán disponibles para recurrir.
Después de escribir su programa Haskell, tendrá herramientas como mónadas y técnicas. como la codificación sin puntos para llevarlo al idioma de su elección. Los conceptos parecen corresponder especialmente bien a Scheme.
Comentarios
Respuesta
De hecho, si pudieras implementar un sistema razonablemente complejo en Scheme, estarías bastante deseable en las empresas en las que probablemente desee trabajar. Al principio de mi carrera, me encontré con algunos estudiantes que habían trabajado bastante en Scheme, y la única vez que fue una desventaja fue cuando no podían explicar su trabajo o no lo entendían lo suficientemente bien como para implementar datos básicos. estructuras y algoritmos en un período de tiempo razonable. Siempre dejo que los candidatos respondan estas preguntas en su idioma preferido; me encontré con algunas personas que pensaban que eran mejores en Scheme y que se las arreglaban para luchar bastante con cosas que deberían ser fáciles, como agregar un elemento a una lista vinculada, lo cual me desconcertó.
Pero si pudieras «entender» Scheme lo suficientemente bien como para escribir incluso una aplicación web promedio, eso sería un buen punto de venta como mucho empresas de software serias.
Si estuvieras entrevistando en una tienda de «blub» y los desarrolladores simplemente pensaran que eres raro debido a tu competencia en Scheme, Haskell o F #, probablemente no querrías trabajar allí. En la mayoría de los casos, los desarrolladores competentes pueden elegir trabajos, así que no se preocupe por la «practicidad» a menos que las únicas opciones que pueda imaginar en su futuro sean corporativas. Trabaje para ser competente, flexible y resolver problemas.
La universidad no se trata de practicidad. Se trata de crear un entorno seguro para explorar y aprender. Eso es, de hecho, útil, incluso si terminas escribiendo software común durante el resto de tu carrera.
Dicho esto, no » No veo por qué querría limitarse a una de esas opciones tan pronto. Podría tener una idea de los cuatro idiomas en aproximadamente 4 semanas y luego elegir uno para concentrarse en el que mejor se adapte a sus caprichos actuales. Luego Vuelva a otra de sus opciones e intente implementar algo similar. Pase a algo más complejo y considere sus opciones nuevamente. La experimentación es buena. A menos que esté tratando de ganarse la vida el próximo mes, no necesita conviértase en un especialista todavía.
He escrito algo en Scheme, F #, Emacs Lisp y Common Lisp, y he leído al menos un poco de Haskell, al menos ocasionalmente durante los últimos años. No puedo decir que sea un experto en ninguno de ellos, pero cada incursión en esos lenguajes me ha beneficiado en todos los demás lenguajes en los que trabajo profesionalmente (C #, Java, Ruby y ocasionalmente Boo, Perl y Python). La curiosidad te ayudará a construir una carrera más duradera y satisfactoria que cualquier otra cosa.
Comentarios
Respuesta
Me sumergí en Haskell por un tiempo, pero la conclusión a la que llegué fue que era demasiado académico. Fue muy difícil hacer algo práctico. En un lenguaje funcional puro, cosas como IO no encajan del todo en el modelo, así que tienes que lidiar con las mónadas. Decidí que tendría que dedicar una gran cantidad de tiempo para ser apenas competente, así que seguí adelante. .
Hice Scheme en la universidad. Puede sonar trivial, pero todos los parens realmente distraen / molestan. Es difícil volver a eso después de usar lenguajes como Python.
Recientemente he estado explorando F #. Es funcional, pero también puede ser imperativo y estar orientado a objetos cuando lo desee. Esto, junto con la posibilidad de usar cualquier biblioteca .NET, hace posible mezclar fácilmente sus partes funcionales puras con cosas más prácticas como GUI, IO y redes. Puede obtener una versión independiente de F #.
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en
Comentarios
Respuesta
Evalué todos los principales lenguajes funcionales hace uno o dos años, desde la perspectiva de querer un lenguaje de programación funcional práctico y de propósito general.
Terminé eligiendo Clojure , que posteriormente ha demostrado ser una excelente opción.
En términos generales, las razones clave fueron:
-
Ecosistema de bibliotecas : para que un idioma sea útil, necesita acceso a las buenas bibliotecas. Estar en la JVM significa que tiene fácil acceso al ecosistema de herramientas y bibliotecas de código abierto más grande, por lo que optar por un lenguaje JVM fue una obviedad desde una perspectiva pragmática. Scala también obtuvo una puntuación alta aquí.
-
Macro-metaprogramación – Este aspecto of Lisp siempre me atrajo, especialmente porque anticipé hacer bastante generación de código. Aprecio mucho los argumentos presentados en el breve ensayo de Paul Graham « Superando los promedios «. Todos los Lisps obtuvieron una puntuación alta aquí.
-
El rendimiento fue «bueno suficiente «- Clojure siempre se compila y obtiene los beneficios del optimizador JVM JIT y el excelente GC. Como siempre, hay algunos gastos generales en el uso de un lenguaje funcional, pero con Clojure estaba claro que cada uno puede acercarse a la velocidad de Java con un poco de esfuerzo (Clojure admite primitivas de Java y escritura estática opcional para aquellas situaciones en las que lo necesite). Mi estimación es que Clojure es aproximadamente 2-5 veces más lento de lo que podría lograr con el código optimizado de Java o C ++, que es consistente con lo que ve en los puntos de referencia defectuosos y, con el tiempo, espero que esa brecha se reduzca aún más. Además, es bastante fácil escribir código particularmente sensible al rendimiento en Java puro y llamarlo desde Clojure.
-
Concurrencia : Clojure tiene un enfoque bastante único y poderoso para la concurrencia, particularmente para la concurrencia de múltiples núcleos. Es un poco difícil de explicar, pero este video es excelente para dar una idea de los principios. Creo que Clojure tiene actualmente la mejor respuesta a la complicada pregunta «¿cómo se debe administrar el estado compartido, concurrente y mutable en un lenguaje de programación funcional?».
-
Diseño de lenguaje – Clojure es, en mi opinión, un diseño de lenguaje muy bien pensado. Algunos ejemplos son tener literales vectoriales [] y map {} además de los paréntesis Lisp regulares, el uso de estructuras de datos persistentes inmutables, el apoyo a la pereza en todo el lenguaje a través de la abstracción de secuencias y proporcionar al programador una variedad de características ortogonales para resolver diferentes problemas . Vea el arte de la abstracción y simple hecho fácil .
-
Comunidad – siempre subjetiva, pero me gustó lo que vi en la comunidad de Clojure. La actitud fue muy útil, constructiva y pragmática. Hay un fuerte énfasis en «hacer las cosas», posiblemente reflejando el hecho de que muchas personas de Clojure (incluido el propio Rich Hickey) provienen de una experiencia en la construcción de sistemas empresariales complejos. El hecho de que la comunidad de Clojure también tenga fuertes vínculos con la comunidad de Java fue importante para convencerme de que Clojure no correría el riesgo de quedarse atascado en un «nicho».
Si tuviera que nombrar un par de desventajas menores de Clojure, estas serían:
-
Tipeo dinámico : a menudo esto es una ventaja en términos de productividad, pero en promedio creo que lo cambiaría por una verificación e inferencia de tipos más sólida. En su mayoría, esto se mitiga con un buen conjunto de pruebas automatizadas, pero si le gustan los tipos validados estáticamente por el compilador, entonces Haskell o Scala pueden ser más su taza de té.
-
Vanguardia – Clojure se está desarrollando muy rápido y hay «sa Hay mucha innovación en marcha: la desventaja de esto es que hay mucha experimentación, algunas bibliotecas y herramientas aún son inmaduras, y hay cambios ocasionales entre las versiones principales de Clojure que debe vigilar.
Sin embargo, en general, ¡no creo que pueda equivocarse con Clojure si desea un lenguaje funcional moderno excelente y pragmático!
Comentarios
Respuesta
It parece que has hecho tu tarea, así que probablemente ya lo sepas, pero Scheme es un dialecto de Lisp al igual que Common Lisp. Si te gustan muchas cosas de Scheme, pero no te gusta su naturaleza académica, prueba Common Ceceo. Según el índice TIOBE , es el decimotercer idioma más popular frente a Scheme en la posición 26.
Pocos de los idiomas que ha que mencioné aparecen en las descripciones de puestos que he visto recientemente, aunque ese podría ser mi pequeño conjunto de muestra. Yo personalmente aprenderé Haskell, aunque no espero usar ese idioma directamente en mi trabajo. Los conceptos de programación funcional son más valiosos para mí para futuros diseños de programas que la comercialización directa del lenguaje en sí.
Comentarios