Cambiar mi forma de pensar en preparación para la programación funcional

9

Al cambiar a un estilo funcional de programación después de proceder de procedimientos y OOP, ¿qué cosas necesito saber por adelantado sobre "esta nueva forma de pensar"?

¿Cómo te preparas para bucear en el mundo FP y conseguirlo por primera vez?

¿Cuáles son los principios básicos para aprender y enderezar primero?

JohnDoDo
fuente
2
Esto es demasiado general, en mi humilde opinión. ¡Solo comienza a leer! La mayoría de los libros y manuales sobre programación funcional hoy en día comienzan con las respuestas a su pregunta.
devmiles.com
Pruébalo y luego publica una pregunta si te quedas atascado en algo
Tom Squires
@Vladimir Volodin: Eso sería bueno, pero no es obligatorio para todos los libros. ¿Me puede recomendar algunos buenos (preferiblemente independientes del idioma)?
JohnDoDo
No tienes que bucear . Puede probar la expresión lambda en un lenguaje OOP como c # para suavizar la transición de OOP a FP.
TomCaps
44
Creo que lo tienes al revés. Pruebe la programación funcional y su forma de pensar cambiará.
Kevin Cline

Respuestas:

6

Necesitará un pensamiento declarativo en lugar del procedimiento "primero haga esto, luego haga esto, luego haga esto ..." para resolver los problemas. Comprender la recursividad podría ser un buen punto de partida, ya que es una especie de punto óptimo entre el pensamiento procesal y el declarativo.

Joonas Pulakka
fuente
4

Has puesto el carro delante del caballo. No necesitas prepararte. Simplemente elija un idioma que parezca interesante, busque documentación y pruébelo. Si te quedas atascado, entonces detente y busca una respuesta. A medida que progreses, tu forma de pensar cambiará.

Kevin Cline
fuente
3

FP se basa en el cálculo de lamdba. Necesitas saber eso. Es un buen punto de partida. Las funciones lo son todo. No existe un concepto de estado (aunque puede simularlo en un nivel superior).

En OOP,

a = 1 a = a + 1

es aceptado. No es así en FP. Simplemente no puede asignar a la variable otro valor. Si quieres aprender FP a largo plazo, aprende Haskell. Es la versión más pura de FP que existe y también es bastante complicada (acabo de comenzar a aprenderla) pero aún así vale la pena aprenderla.

Una Introducción a la Programación Funcional le brinda una visión general de alto nivel de lo que se trata FP.

Aunque dos advertencias

  1. Si quieres aprender FP para trabajos, entonces no hay muchas vacantes disponibles. Procedural y OOP todavía gobierna el mercado laboral. Pero FP puede ayudarlo mucho a explorar nuevas formas de resolver un problema.
  2. Los compiladores de FP no son increíblemente rápidos. Como FP está más preocupado por resolver el problema, no puede esperar la velocidad C. Pero aún puede emitir instrucciones al compilador (en Haskell) para acelerar el proceso de ejecución. La compensación es que tienes mucho tiempo enfocándote en el programa en lugar de en los errores de lucha contra incendios.
Ubermensch
fuente
8
"FP se basa en el cálculo de lamdba. Necesitas saber eso". No, tu no. Conocer el cálculo lambda no es necesario para comprender la programación funcional más que conocer las máquinas (o ensamblaje) de Turing para comprender la programación imperativa.
sepp2k
@ sepp2k Para ser bueno en FP con un objetivo a largo plazo, honestamente creo que es necesario aprender cálculo lambda. Puedes aprenderlo sin el cálculo lambda, pero aprenderlo te haría mejor en FP.
Ubermensch
2
FP certianly tiene el estado de que ese estado generalmente es inmutable, y tampoco estoy seguro de que esté de acuerdo con la afirmación de que los compiladores son lentos
jk.
@jk. Seguramente, tienen estado pero no en la forma OO (los estados se pueden incluir en funciones o como patrones coincidentes y de manera más sutil). Y un estado inmutable significa que tiene un solo estado. Es por eso que una función siempre debe devolver el mismo valor. Con respecto a los compiladores, no creo que puedan coincidir con C / C ++ en términos de velocidad pura, ya que el compilador se encarga de los pasos necesarios para calcular el resultado en lugar de que especifiquemos el orden. FP tiene su mayor ventaja en la reducción de los costos del desarrollador y la computación paralela en lugar de la velocidad pura de la CPU.
Ubermensch
3

Hago mi mejor esfuerzo para recordar el siguiente mantra:

Datos de entrada -> Transformar datos -> Datos de salida

o

TransformData (Entrada de datos) -> Salida de datos

Noche oscura
fuente
1
Debe ser TransformData (DataIn) -> DataOut
Ubermensch
:) como matra "Datos de entrada, Transformar datos, Datos de salida" es más fácil de decir "Transformar datos, Abrir corchete, Datos de entrada, Cerrar corchete, Datos de salida" Estoy bromeando. Estoy de acuerdo con usted.
Darknight
Es solo un comentario amable amigo. Gracias por la respuesta.
Ubermensch
Lo sé, solo bromeaba contigo, sin ofender, de hecho creo que actualizaré mi matra.
Darknight
Hombre, tu conjunto de habilidades es bastante grande.
Ubermensch