Pregunta

En estos días me estoy metiendo en serio en la programación funcional.

Si bien estoy realmente entusiasmado con Haskell y las posibilidades que parece ofrecer, también puedo ver ahora que me tomará un tiempo aprender. En una pregunta SO sobre Cómo aprender Haskell , una respuesta indica que tomará meses si no años para realmente "dominar"

Ahora, sé que C, PHP, algunas cosas orientadas a objetos, etc. Y después de que me hayan dicho que Haskell no es muy usado en el mundo real, ¿estaré mejor mejorando mis habilidades en la rutina? idiomas que conozco? ¿Haskell vale la pena la lucha?

En esta pregunta sobre ¿Por qué la gente cree que la programación funcional atrapará? en la conclusión parece ser que la programación funcional "se pondrá al día". Pero seguramente la programación procesal se mantendrá en la cima, ¿verdad?

EDITAR: keparo aclara muy bien mi pregunta a: A diferencia de los lenguajes de procedimiento, ¿será valioso para mí estudiar Haskell y los paradigmas de programación funcional?

¿Fue útil?

Solución

Haskell no es tan difícil como a la gente le gusta besarse para aprender. Haskell abre un mundo nuevo que nunca supiste que existía para ti. Es tan valioso aprender como cualquier otro idioma. Es posible que no encuentre un trabajo que requiera que realice la programación de Haskell, pero ¿eso realmente significa que un lenguaje no es valioso?

Haskell le enseñará muchas cosas nuevas y le mostrará cómo programar aún mejor en los idiomas con los que trabaja / trabaja. Puede hacer sus propios proyectos personales en su tiempo libre con él.

Haskell no se usa mucho en el "mundo real" si define "mundo real" como " generador de efectivo " ;. Entonces, si ese es su objetivo, es posible que deba repensar los objetivos: p

Además, realmente no me gusta esa parte de elegida " cómo aprender haskell " responder. Se necesitan meses o años para dominar cualquier idioma, no solo Haskell. Dependiendo de cómo defina "maestro". Puedo usar Haskell con bastante eficiencia y solo lo he estado aprendiendo durante un mes, y lo he estado tomando con calma incluso.

Otros consejos

Si nada más, el cambio de mentalidad que proporciona el aprendizaje de Haskell te ayudará cuando tengas que volver a usar esos lenguajes de procedimiento que todavía se usan en el lugar de trabajo.

El paradigma funcional está comenzando a abrirse camino en varias aplicaciones y lenguajes convencionales: incluso C ++ agregará una lambda (paralizada) en C ++ 0x.

También es posible que desee ver algunos de los idiomas híbridos como Scala u OCaml. Scala se está utilizando en Twitter, y OCaml se está utilizando en Jane's Street en una plataforma de negociación financiera.

Probablemente no debería esperar usar Haskell en cualquier lugar con tanta frecuencia como un lenguaje familiar C en entornos profesionales. Si la pregunta es si será valioso estudiar Haskell y los paradigmas de programación funcional, la respuesta es sí. Puede aplicar su conocimiento enriquecido de programación a todo su trabajo.

Aprendí Haskell porque era, con mucho, el mejor lenguaje funcional que probé en Scala, Clojure, OCaml y Scheme, pero no esperaba seriamente usarlo para trabajar.

Como resultado, es perfecto para ese tipo de trabajos extraños que son demasiado pequeños para un equipo y que en Java consumirían demasiado tiempo. Hasta ahora, lo he usado para migraciones de datos ad-hoc, es decir, manipular las exportaciones de CSV a otro formato, las conversiones por lotes de XML (HXT es más conciso y más poderoso que XSLT), eliminar la pantalla de Internet y estimar proyectos de software, incluido el modelado arriesgarse usando la mónada de probabilidad y producir diagramas de Gantt óptimos usando retroceso. Todo este es un trabajo real que necesitaba hacer, que ni siquiera me habría molestado en intentar hacer en Java, ya que sería una tarea de varios días.

Ahora lo uso en lugar de Excel para cualquier cosa vagamente matemática, ya que es un poco más de esfuerzo crear una lista de valores en la fuente haskell en un editor de texto que escribirlos en Excel. Una vez en Haskell, puedo hacer todo tipo de magia como retroceder, distribuciones de probabilidad, etc. que Excel no puede hacer. Si necesito un gráfico, escupo los valores como CSV (2 líneas de código) y los cargo en Excel.

El único inconveniente es que lleva varios meses dominarlo, pero vale la pena en mi humilde opinión.

  

A diferencia de los lenguajes de procedimiento, ¿será valioso para mí estudiar Haskell y los paradigmas de programación funcional?

Si tener un conjunto de habilidades ampliado es valioso, entonces: sí.

Una ventaja que puede obtener: programación paralela y simultánea. Los lenguajes de procedimiento del pasado tienden a no tener una noción clara de los efectos secundarios, por lo que es difícil escribir programas paralelos en ellos correctamente. Los lenguajes funcionales (en particular, los que limitan los efectos secundarios como Haskell) tienen mucho más que decir sobre la programación paralela productiva.

Tener esa habilidad bajo la manga no puede doler.

Puedo ver que la programación funcional puede ser una ventaja en un entorno de producción si es muy fácil de usar con código no funcional. MS también pudo ver eso cuando se les ocurrió F #, supongo.

Dado que ambos compilan a IL, puede manejar problemas que requieren un enfoque funcional funcional y usar esas soluciones muy fácilmente en su código de procedimiento.

De esa manera, el código funcional puede encontrar fácilmente su camino en un entorno de producción poco a poco

Por lo tanto, y dado que la base de usuarios de MS es tan grande, supongo que si F # no se aplicará en un futuro muy cercano, Haskell tampoco lo hará.

Creo que vale la pena la lucha. Le ayudará a comprender cómo se resuelven los problemas y no solo cómo funciona una computadora.

Tal vez un problema particular es el propio Haskell: como lenguaje puramente funcional, es un poco "duro". lo que, por otro lado, incluso puede complicar las cosas.

La programación funcional en su lugar puede ser extremadamente útil de una manera muy pragmática: muchos lenguajes OO / imperativos ahora han incluido elementos funcionales por este motivo (Linq, funciones anónimas, valores de solo lectura, punteros / delegados de funciones, inferencia de tipos): puede concéntrese en lo que debe hacerse, que le permite expresar más en menos código (eso es aún menos propenso a errores).

Los lenguajes no puramente funcionales (lenguajes funcionales estándar) como Scala o F # se pueden integrar fácilmente en proyectos Java o .NET existentes, por lo que puede combinar los beneficios de ambos paradigmas donde sea necesario. Para conocer las ventajas típicas de los lenguajes funcionales, consulte este hilo . Solo piense en el análisis extremadamente poderoso (combinadores de analizador monádico / Parsec) o la programación concurrente que es posible con lenguajes funcionales y verá lo útiles que son.

  

A diferencia de los lenguajes de procedimiento, ¿será valioso para mí estudiar Haskell y los paradigmas de programación funcional?

No, a menos que quieras ser miserable. Luke Plant dice, en ¿Por qué aprender Haskell / Python te hace un peor programador? :

  

Entonces, aprender Python y Haskell me ha desmoralizado y alentado   que escriba código extraño y difícil de entender ...

(Esto no es del todo una broma)

Ampliar tus horizontes te ayuda a ser un mejor programador sin importar el idioma que estés usando en este momento. Nunca verás la programación de la misma manera después de haber escrito las macros de Lisp, por ejemplo. Después de comenzar a pensar en términos de Haskell, se encontrará componiendo funciones y deseando cierres en idiomas menos avanzados.

A juzgar por las ventajas en C #, como lambdas, inferencia de tipos, cierres, y así sucesivamente , aprender Haskell le dará una ventaja sobre la vanguardia de mañana en los idiomas principales.

Algunas personas disfrutan de la programación en Haskell. Si puede elegir su entorno, y el disfrute es una consideración, entonces tal vez debería entrar.

Muchos programadores no están en posición de elegir sus herramientas y el disfrute no es un factor para sus elecciones. Muchos de ellos pueden usar C / Java / etc. en su lugar de trabajo para la "fuente principal del proyecto", pero luego también eligen o necesitan usar Python para "secuencias de comandos". tales como scripts de compilación con SCons, otros scripts que generan código Java / etc., sistemas de prueba, pruebas de conceptos, etc. Y en otros lugares, Python también se usa en el "proyecto principal".

En 8 años, será Haskell, no Python, el que "vendrá a ti". Pero puedes llegar antes.

Puede combinar el uso de la programación funcional y ser pragmático sobre el lenguaje.

Todos los lenguajes de scripting modernos s.a. JavaScript o Lua permiten el uso del paradigma funcional.

El concepto funcional se está fortaleciendo. Tenga en cuenta la gran actividad e interés en torno a Ruby. También he notado un poco más de interés en JavaScript más allá de un simple lenguaje de scripts del navegador últimamente. Puede adelantarse al juego sumergiéndose ahora, aunque el tiempo invertido podría no dar sus frutos este año o el próximo.

Depende de tu plan general de juego. ¿Estás en la programación como un fin en sí mismo o como un medio para un fin? Si es lo primero, enloquece con Haskell. Si es lo último, quédese con la corriente principal, "empleable". idiomas Espere a que Haskell despegue y luego salte.

Por qué los procedimientos y no los orientados a objetos, los procedimientos no vistos se utilizan durante muchos años aparte de C.

Comercialmente hablando. Yo iría con Java o C #. Realmente no importa cuál ambos paguen bien y las habilidades son intercambiables con otros lenguajes afines como python, Ruby y JavaScript.

Haskell vale la pena el tiempo y el esfuerzo, aunque es muy académico, algunos bancos lo usan, aunque muchos en Europa y el Reino Unido están trasladando la base del código a F #.

No creo que FOP se mueva a grandes velocidades comercialmente hablando. Pero las técnicas definitivamente están apareciendo en los principales idiomas de estancia. Especialmente con diseños de chips Multi-Core y hacer que el código se ejecute en paralelo en ellos.

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