programar plataforma para mumukiç mumuki aprender haskell functional-programming imperative-programming

plataforma - Haskell vs. programación de procedimientos en el mundo real



mumukiç (13)

Estos días me estoy tomando en serio la programación funcional.

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

Ahora, conozco C, PHP, algunas cosas orientadas a objetos, etc. Y habiéndome dicho que Haskell no se usa mucho en "el mundo real", ¿será mejor que mejore mis habilidades en los idiomas regulares que conozco? ¿Vale la pena Haskell la lucha?

En esta pregunta sobre por qué la gente piensa que la programación funcional captará la conclusión parece ser que la programación funcional "captará". Pero seguramente la programación de procedimientos se mantendrá en la cima, ¿verdad?

EDITAR: keparo clarifica 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?


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 convierte en un peor programador :

Por lo tanto, aprender Python y Haskell me ha desmoralizado y me ha alentado a escribir código que es extraño y difícil de entender ...

(Esto no es del todo una broma).


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 concurrente. Los lenguajes de procedimiento del pasado tienden a no tener una noción clara de los efectos colaterales, como resultado la escritura de programas paralelos en ellos es difícil de hacer correctamente. Los lenguajes funcionales (en particular, los que limitan los efectos secundarios como Haskell) tienen mucho más que decir acerca de la programación paralela productiva.

Tener esa habilidad bajo la manga no puede doler.


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 subir.

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 el "origen del proyecto central", pero también eligen o necesitan usar Python para "scripts", como scripts de compilación con SCons, otros scripts que generan Java / etc. código, sistemas de prueba, pruebas de conceptos, etc. Y en otros lugares Python también se usa en el "proyecto central".

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


Ampliar tus horizontes te ayuda a ser un mejor programador sin importar el idioma que estés usando en este momento. Nunca mirará la programación de la misma manera después de haber escrito macros 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 golosinas en C # como lambdas, tipo de inferencia, cierres, etc. , el aprendizaje de Haskell le dará una ventaja en la vanguardia del mañana en los principales idiomas.


Conocí a Haskell porque fue, con mucho, el mejor lenguaje funcional que probé con Scala, Clojure, OCaml y Scheme, pero no esperaba usarlo para el trabajo.

Resulta que es perfecto para esos tipos de trabajos raros que son demasiado pequeños para un equipo y que consumirían demasiado tiempo en Java. Hasta ahora, lo he usado para migraciones de datos ad hoc, es decir, manipular las exportaciones de CSV a otro formato, conversiones por lotes de XML (HXT es más conciso y más poderoso que XSLT), análisis de pantalla de Internet y estimación de proyectos de software incluyendo modelado arriesgar usando la mónada de probabilidad y producir diagramas de Gantt óptimos usando retroceso. Este es todo el trabajo real que necesitaba hacer, que ni siquiera me hubiera molestado en probar y 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 de 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 toma varios meses para llegar a ser competente, pero vale la pena el esfuerzo en mi humilde opinión.


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 en particular es el mismo Haskell: como lenguaje puramente funcional, es un poco "hardcore" que, por otro lado, puede incluso complicar las cosas.

La programación funcional en cambio puede ser extremadamente útil de una manera muy pragmática. Muchos OO / lenguajes imperativos han incluido elementos funcionales por esta razón (Linq, funciones anónimas, valores de solo lectura, indicadores de función / delegados, inferencia de tipo): puede concentrarse en qué debe hacerse, lo que le permite expresar más en menos código (que es aún menos propenso a errores).

Los lenguajes no puramente funcionales (lenguajes funcionales estándar) como Scala o F # pueden integrarse fácilmente en proyectos Java o .NET existentes, para que pueda combinar los beneficios de ambos paradigmas donde se necesiten. Para conocer las ventajas típicas de los lenguajes funcionales, consulte este hilo . Solo piense en el análisis extremadamente potente (Monadic parser combinators / Parsec) o la programación concurrente que es posible con los lenguajes funcionales y verá lo útiles que son.


El concepto funcional está llegando fuerte. Tenga en cuenta la ráfaga de 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 de navegador últimamente. Puede adelantarse al juego buceando ahora, aunque el tiempo invertido podría no dar resultado 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 el primero, enloquece con Haskell. Si este último, se adhieren a la corriente principal, los idiomas "utilizables". Espera a que Haskell despegue y luego salte.


Haskell no es tan difícil como a la gente le gusta aprender. Haskell abre un mundo nuevo que nunca pensaste que existía para ti. Es tan valioso aprender como cualquier otro idioma. Es posible que no encuentres un trabajo que te obligue a programar Haskell, pero ¿eso realmente significa que un idioma no es valioso?

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

Haskell no se usa mucho en el "mundo real" si defines "mundo real" como "generador de efectivo". Entonces, si ese es su objetivo, entonces debe replantearse los objetivos: p

Además, realmente no me gusta esa parte de la respuesta elegida de "cómo aprender Haskell". Lleva meses o años dominar cualquier idioma, no solo Haskell. Dependiendo de cómo definas "maestro". Puedo usar Haskell con bastante buen grado de eficiencia y solo lo he estado aprendiendo durante un mes, y lo he estado tomando con calma incluso.


Por qué procedural y no orientado a objetos, no se usa el procedimiento durante muchos años, aparte de C.

Comercialmente hablando. Me gustaría ir con Java o C #. Realmente no importa que ambos paguen bien y que las habilidades sean intercambiables con otros lenguajes similares 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 el código base a F #.

No creo que FOP se mueva a gran velocidad comercialmente hablando. Pero las técnicas definitivamente están apareciendo en los principales idiomas de estadía. Especialmente con diseños de chips Multi-Core y haciendo que el código corra paralelo a ellos.


Probablemente no deba esperar utilizar Haskell en cualquier lugar con la misma frecuencia que un lenguaje de familia C en entornos profesionales. Si la pregunta es si será valioso para usted 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.


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

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


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

Como 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 esta forma, el código funcional puede encontrar su camino en un entorno de producción de a poco a la vez

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


Si no hay nada más, el cambio en la mentalidad que proporciona Haskell te ayudará cuando tengas que volver a utilizar los lenguajes de procedimiento que todavía se usan en el lugar de trabajo.

El paradigma funcional está comenzando a abrirse camino en varias aplicaciones e idiomas principales: incluso C ++ va a 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 comercio financiero.