¿Cuáles son los mejores recursos en línea para aprender programación funcional para alguien que viene de la programación orientada a objetos?

Mi consejo sería no buscar algo relacionado con la programación orientada a objetos. En su lugar, intente aprender todo desde cero, olvidando todos sus hábitos imperativos y OO tanto como pueda.

Se trata de la mentalidad: ven a la programación funcional con una mente abierta. Obtendrá mucho más de la experiencia que si intenta forzar la programación funcional en un molde orientado a objetos.

Para esto, casi cualquier buen libro o tutorial ayudará. Soy un fan de:

  • Estructura e interpretación de programas informáticos. (y echa un vistazo a las conferencias en línea)
  • ¡Aprende un Haskell para un gran bien!
  • Escríbase un esquema en 48 horas (un gran seguimiento para el SICP)
  • Haskell del mundo real

Esta lista usa Scheme y Haskell en lugar de Clojure y Scala.

Scheme tiene la ventaja de ser extremadamente simple: no solo es rápido de asimilar, sino que es fácil de implementar. Escribir un intérprete de Scheme en Scheme o Haskell es una excelente manera de conocer ambos idiomas y de tener una intuición completa para la programación funcional.

Haskell tiene la ventaja de ser un lenguaje funcional primero y en mucho mayor grado que Scala o incluso Clojure. Muestra los beneficios de la programación funcional mucho más allá de lo que es posible en la mayoría de los otros idiomas. Además de esto, es una excelente manera de hacerte pensar funcionalmente porque no puedes simplemente volver a los imperativos instintivos o los hábitos OO.

Por supuesto, en última instancia, no se trata de los idiomas individuales sino de las ideas fundamentales. Y creo que este conjunto de libros proporciona tanto una base muy completa en estos fundamentos como el conocimiento práctico suficiente para establecer sus propios proyectos una vez que esté listo.

Cuando comencé a aprender Elixir, utilicé las guías y la documentación de Elixir además de Programar Elixir 1.3: Funcional |> Concurrente |> Pragmático |> Diversión. Desde entonces, muchos más recursos solo están disponibles. Mientras leía estos recursos, elegí un proyecto inicial y comencé a trabajar en él. Elegí un proyecto que ya había construido en un lenguaje OO, así que conozco la lógica del proyecto. De esta manera, podría centrarme en el diseño funcional sin atascarme en el dominio del problema.

El otro recurso que utilicé fue leer el código de otras personas. El código fuente de Elixir y otros paquetes de terceros me ayudaron a entender el estilo y los idiomas del idioma.

Fue mucho menos difícil y lento, entonces pensé que sería después de mi exposición inicial al idioma.

Comience con el reino de la raqueta. Haskell no es amigable para los principiantes. Scheme es y Racket es básicamente Scheme. Incluso si no te limitas al lenguaje, te enseñará a pensar más funcionalmente. Eso te ayudará a saltar a cualquier lenguaje funcional.

Si debe tener material gratuito, puede usar Cómo diseñar programas, Segunda edición.