¿Por qué debería aprender un lenguaje de programación funcional?

Incluso si nunca terminas usando la programación funcional, aprenderla te enseña nuevas formas de pensar .

Para aprovechar al máximo esto, sugiero elegir el idioma con la perspectiva más diferente: Haskell. Recomiendo Haskell porque es un lenguaje sorprendentemente profundo y básicamente la única opción que pone primero la programación funcional. También tiene una filosofía particular en su comunidad y bibliotecas que es muy difícil de encontrar en cualquier otro lugar.

Cuando menciono la programación funcional a partir de ahora, estoy hablando principalmente de Haskell.

Contrariamente a las impresiones populares, la programación funcional no es solo “programación imperativa sino menos”. De hecho, es una base diferente para el cálculo. Programar funcionalmente no es un subconjunto de programación imperativamente; en cambio, los dos estilos son en realidad en gran medida desarticulados.

De hecho, ni siquiera puede traducir las características una a una: es probable que una única característica imperativa (por ejemplo, for-loops) se asigne a un conjunto de características funcionales diferentes (recursión, pliegues, estructuras de datos diferidas) y viceversa. versa (por ejemplo, las listas de Haskell pueden actuar como estructuras de datos y control de flujo).

Es una nueva perspectiva. Y el aprendizaje de perspectivas radicalmente diferentes le ayuda a abordar los problemas desde nuevas direcciones, lo que podría conducir a soluciones novedosas. Considere, por ejemplo, los “Clasificadores algebraicos”, que es un documento ICML cuyo enfoque central se inspiró en el estilo de programación de Haskell.

Además, aunque muchas técnicas y funciones de programación funcional aún están bloqueadas en los lenguajes funcionales (especialmente Haskell), otras muchas ya se han filtrado a los lenguajes más populares “multiparadigm”: cualquier cosa, desde Scala a C # a C ++. Puede usar ideas que haya aprendido para escribir de forma más limpia y concisa en los idiomas que ya está usando.

Además, no hay nada que decir que no podrá utilizar Haskell o un lenguaje similar en proyectos futuros. Siempre es bueno mantener tus opciones abiertas. Si conoce Haskell, puede evaluarlo razonablemente en el futuro; después de todo, ¡ahora mismo ni siquiera sabes lo que te estás perdiendo! Haskell es en realidad una muy buena opción para una amplia gama de proyectos, incluido mi tipo favorito: análisis estático, DSL, etc.

Finalmente, hay algunas empresas excepcionales que utilizan la programación funcional y son excelentes lugares para trabajar. Hay algunas opciones interesantes en finanzas como Standard Chartered Bank, S&P Capital IQ y Jane Street. También hay algunas de las empresas más interesantes técnicamente fuera de la academia como Galois. Por lo tanto, la programación funcional también podría ser una “entrada” para algunas compañías grandes pero muy selectivas.

Entonces: aprender funcional principalmente para obtener una nueva perspectiva . Pero también tenga en cuenta que puede usar funciones funcionales en otros idiomas, usar un lenguaje de funciones en un proyecto futuro o incluso trabajar en una empresa funcional . Un valor bastante bueno sobre todo, creo.

Aprender cualquier nuevo paradigma de programación seguramente te hace un mejor programador, porque cambia tu forma de pensar. Habiendo dicho eso, te sugiero que vayas con Haskell. Es un lenguaje de programación puramente funcional y bastante diferente de su arsenal actual. Para un programador que ha estado pensando todo en términos de objetos mutables, Haskell ofrece funciones inmutables, pureza y tipos fuertes.
Aquí hay un ejercicio que me gustaría que pruebes:
Escribe un software de tamaño medio utilizando Haskell. No bifurque el código existente, no elija una aplicación web, solo un proyecto simple, como un rastreador web o una base de datos orientada a documentos. Dada la gran cantidad de recursos de Haskell en Internet, bastante fácil de poner en marcha para alguien que aún no conoce el idioma. Notará que puede llevarse bien sin objetos, administración de memoria manual, pruebas de unidad (sé que esto es un reclamo enorme) y mucha verbosidad en general.

Referencias:
¿Cuáles son las ventajas de usar LISP y Haskell? ¿Me harán un mejor programador?
¿Aprender Haskell te hace un mejor programador?
¿Por qué lenguajes funcionales?

Sí.

Oh … quieres razones:

  1. Cualquier ingeniero de software medio decente debería conocer múltiples paradigmas, es parte de nuestro conjunto de herramientas conceptuales.
  2. Aprender LISP (bueno, Scheme) es una buena excusa para leer Estructura e interpretación de lenguajes informáticos.
  3. Pura practicidad. Si va a construir algo que sea masivamente concurrente y / o un sistema distribuido de alta disponibilidad, Erlang es la mejor (tal vez la única) plataforma elegida. Es un lenguaje funcional.
  4. Podría buscar en Quora temas como este: ¿Por qué debería aprender un lenguaje de programación funcional?

Bueno, depende de lo pedante que quieras ser acerca de la palabra “real”.

Si quieres encontrar un empleo en una tienda de Haskell o Scala, eso es un beneficio obvio allí mismo, pero de alguna manera dudo que te refieras a eso.

Una buena razón, creo, es que las características funcionales se están filtrando en el “mundo real” a un ritmo asombroso. Puede esperar que un programador razonablemente competente comprenda las funciones de orden superior, o los beneficios de la inmutabilidad.

Aprender idiomas funcionales le permitiría observar esas características en su hábitat natural, y ambos estar preparados para los nuevos cambios entrantes, así como comprender cómo utilizar correctamente las herramientas que ya se proporcionan en los idiomas generales como C #.

Y seamos claros, lo que estamos haciendo aquí no es solo aprender otro grupo de nuevos idiomas. La programación funcional proporciona un modelo de computación completamente diferente, con diferentes primitivos mentales, diferentes formas de hacer las cosas, diferentes restricciones y diferentes fortalezas.

No necesariamente mejor [1], pero diferente . Creo que forzarte a ti mismo a adoptar una nueva forma de pensar es algo intrínsecamente útil, especialmente en una industria que gira en torno a construir cosas a partir de pensamientos.

Personalmente, acredito a Haskell que aprendí con mi enfoque general actual para crear soluciones. Si bien no presumiría llamarme a mí mismo ningún gran programador maestro, he notado una mejora drástica de mi propio código post-Haskell. Más claro, mejor ubicación de comentarios, menos código, menos anidamiento, menos interdependencia innecesaria.

Es algo así como la transformada de Fourier, supongo. Técnicamente, una señal y su transformación contienen la misma información, pero al exponer diferentes facetas de esa misma información podemos utilizarla de formas nuevas y emocionantes.

Nunca podemos tener demasiadas maneras de pensar acerca de la programación. Recomiendo un desvío profundamente esclarecedor a través de las tierras de Lisp, mientras estás en ello.

[1] En realidad, sí necesariamente mejor. >: C

Como ya sabes Java, te señalaré esta breve nota de apertura de Martin Odersky (creador de The Scala Programming Language) en OSCon 2011, donde habla sobre por qué los lenguajes funcionales están volviendo prominentes y ofrece una breve comparación de Java y Scala.

Menos errores y código más conciso (y legible). Puede sonar arrogante, pero eso es lo que personalmente he logrado al aprender y usar la programación funcional.

Cuando hago una programación imperativa, siento que estoy haciendo una programación del 50% y un 50% de corrección de errores. Cuando se programa de manera funcional (preferiblemente en un lenguaje funcional fuertemente tipado), se siente más como si estuviera haciendo una programación del 95% y un 5% de corrección de errores. Disfruto la programación más que la corrección de errores, así que me gusta la programación funcional.

Por supuesto, puede que no funcione de esta manera para todos, y algunas personas pueden amar la corrección de errores;).

Porque tiene áreas específicas no utilizadas en su cerebro que solo se activarán cuando programe en un lenguaje funcional. ¡Seriamente! 🙂

Mire estos videos del Dr. Erik Meijer en youtube:
https://m.youtube.com/playlist?l

Luego lee “Programación Funcional en Scala” por Paul Chiusano.

Si quieres aprender sobre Scala, lee “Scala para impacientes”.

Si usted tiene que. Sobre todo porque tiene dudas al pensar que puede ser una pérdida de tiempo, demasiado difícil o simplemente más allá de usted. Estas son todas las negatividades. No los necesitas. Es muy posible que descubras lo que muchos han descubierto antes que tú; Ese programa funcional tiene muchos beneficios y pocos, si es que los hay, perjudiciales. Un programador funcional talentoso es más una élite y vale mucho dinero.
Me atrajeron las matemáticas y la programación funcional basada en las matemáticas y su corrección mucho antes de tener un lenguaje de FP delante de mí. Tenía libros y notas. Lo mismo con los sistemas Unix (1983). Sabía cómo usarlos antes de poder usarlos.

Cualquier cosa que aprendas solo te beneficiará. Confiar en ti mismo. Usted puede muy bien sorprendido e incluso impresionado.

La programación funcional en JavaScript es un área que me apasiona desde hace bastante tiempo. Si realmente quieres aprender FP, este es un muy buen comienzo: Programación funcional en JavaScript

Es como “¿Tengo que aprender un idioma extranjero?”
La respuesta es no; Sin embargo, serás mucho mejor si lo haces.
Si ya es un buen programador, no le tomará nada de tiempo aprender, así que adelante, hágalo.