2009-06-21 18 views
40

Estos días me estoy tomando en serio la programación funcional.Haskell vs. programación de procedimientos en el mundo real

Aunque estoy realmente entusiasmado con Haskell y las posibilidades que parece ofrecer, también puedo ver ahora que me va a llevar un tiempo aprender. En una pregunta de SO en How to learn Haskell, una respuesta indica 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 el mundo normal? idiomas que conozco? ¿Vale la pena Haskell la lucha?

En esta pregunta en Why people think functional programming will catch on, la conclusión parece ser que la programación funcional "captará". Pero seguramente la programación de procedimientos se mantendrá en la cima, ¿verdad?

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

+2

¿Cuál es la verdadera pregunta? Si vale la pena aprender el paradigma de programación funcional? Si vale la pena aprender Haskell y por lo tanto el paradigma de programación funcional? –

+0

Principalmente Haskell pero también el paradigma puramente funcional ya que creo que parecen estar estrechamente relacionados. – anderstornvig

+0

Ejecución de una puesta en marcha en Haskell: https://www.youtube.com/watch?v=ZR3Jirqk6W8 –

Respuesta

48

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 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, entonces debe replantear 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.

+24

+1 Creo que los conceptos básicos de C++ (que incluyen el uso eficiente del STL) son incluso más difíciles de dominar que los conceptos básicos de Haskell. – Dario

+0

Muchas buenas respuestas. Gracias a todos hasta ahora. Estoy aceptando esta porque creo que es la respuesta más general y no subjetiva a mi pregunta específica. – anderstornvig

+3

"lleva años", depende de si el idioma al que se dirige es del mismo paradigma. Contraste de OOP a OOP, solo aprendiendo sintaxis. OOP a FOP aprendiendo la sintaxis, la mentalidad y el cambio de paradigma. – WeNeedAnswers

10

Probablemente no deba esperar utilizar Haskell casi 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.

2

Ampliar sus horizontes lo ayuda a ser un mejor programador, sin importar el idioma que esté utilizando 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, escriba inference, closures, and so on, aprender Haskell le dará una ventaja en la vanguardia del mañana en los principales idiomas.

18

Si 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 y lenguajes comunes: incluso C++ va a agregar una lambda (paralizada) en C++ 0x.

Es posible que también desee consultar 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.

+1

En C++, la programación de metaetiquetas es un lenguaje funcional puro, eso es lo que me incitó a ir hacia Haskell en primer lugar. –

5

Veo que la programación funcional puede ser un plus 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.

Ya 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 código funcional puede encontrar fácilmente su camino en un entorno de producción un poco a la vez

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

1

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 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 usted". Pero puedes llegar antes.

7

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

4

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

No, a menos que desee ser miserable. Lucas dice Plant, en Why learning Haskell/Python makes you a worse programmer:

Así, aprendiendo Python y Haskell me ha desmoralizado y alentó mí escribir código que es extraño y difícil de entender ...

(Esto no es del todo una broma.)

5

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 propio Haskell: como un lenguaje puramente funcional, es un poco "hardcore" que, por otro lado, incluso puede 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 lo que se debe hacer, lo que le permite expresar más en menos código (que es incluso 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, para que pueda combinar los beneficios de ambos paradigmas donde se necesiten. Para conocer las ventajas típicas de los lenguajes funcionales, consulte this thread. 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.

1

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

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

1

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 su plan de juego general. ¿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. ser procedimental

+0

conociendo Haskell (o FP en general), tanto por su FP como por las capacidades del sistema de tipo, mientras que en realidad trabajar en más idiomas convencionales puede ser una combinación muy práctica. –

0

Por qué procedimiento y no orientado a objetos, que no se ve utilizado 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 grandes velocidades 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.

8

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

Como resultado, 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 esfuerzo crear una lista de valores en 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.

+0

También utilicé Haskell para una de esas herramientas: tuve que extraer y analizar un mensaje de error de los registros de mi aplicación y generar estadísticas para cargarlas en Excel (la salida era CSV). Me tomó uno o dos días para escribir. En Java o C++ habría tomado al menos tres o cuatro días. No he probado Haskell en proyectos más grandes, pero me gustaría darle una oportunidad en algún momento. – Giorgio

Cuestiones relacionadas