Funcional como primer idioma

13

¿Cuáles son algunas ventajas y desventajas de aprender la programación funcional antes que otros paradigmas?

    
pregunta yodie 04.05.2011 - 07:04

7 respuestas

16

Un problema importante es que si comienzas con un lenguaje como Haskell, todo lo demás parecerá inferior al estándar.

Sinceramente, creo que comenzar con un lenguaje como Haskell o esquema sería una gran idea.

(Admito que soy adicto al lenguaje funcional) EDITAR:

Aceptar lo que me gusta de ambos idiomas:

Scheme toma un lenguaje muy simple y se construye a partir de él de una manera maravillosamente robusta. Lenguaje para el desarrollo. También se escribe SICP sobre el esquema que hace que valga la pena aprender allí. Scheme es lo más simple que puedas imaginar que podría ser un lenguaje completo.

Haskell Lo que realmente está creciendo en mí es el sistema de tipos. Muchos de los errores que veo en otros idiomas se deben a que el tipo incorrecto aparece en alguna parte. En Haskell eso es casi imposible. Además, la idea de un lenguaje perezoso tiene algunas cosas interesantes que se le escapan. Por ejemplo, puede crear infinitas estructuras de datos en Haskell y luego solo crear la parte que necesita.

    
respondido por el Zachary K 04.05.2011 - 08:41
6

La mayor ventaja de aprender un lenguaje funcional antes de aprender un lenguaje OOP es que sus habilidades de programación se desarrollan primero y luego puede comprender fácilmente los conceptos de OOP. Si usted comienza directamente con un lenguaje OOP, tendrá que aprender dos cosas simultáneamente: "pensar en el código" y "pensar en el OOD". Se puede distraer. Primero practica con un lenguaje funcional y desarrolla tus habilidades de programación. Luego aprende OOP y otros paradigmas. Dado que OOP fue diseñado para compensar las deficiencias en la programación estructural, será más fácil entender por qué. Esa es la razón por la que los cursos de CS comienzan con C y luego pasan a C ++.

    
respondido por el DPD 04.05.2011 - 07:35
6

Sobre la pregunta de cómo para aprender a programar, comenzando con la programación funcional, dos recomendaciones clásicas:

  • El primero, y obvio, es el clásico Estructura e interpretación de programas de computadora , de Abelson y Sussman, que sigue siendo una de las mejores introducciones a la CS, y se enseña desde Una perspectiva funcional, utilizando el esquema. Es disponible en línea completa . Si no empiezas aquí, deberías llegar aquí en algún momento.

  • Un texto más reciente que cubre la mayor parte del mismo terreno a un ritmo más suave, y con un mayor énfasis en la ingeniería de software es Cómo diseñar programas , por Matthew Felleisen y muchos otros. del equipo de Racket / PLT, que utiliza el dialecto de Racket de Scheme. Es también disponible en línea , al igual que el segunda edición . Este libro tiene la ventaja de que está diseñado para ser utilizado con el entorno de programación DrRacket, que proporciona una interfaz muy amigable para principiantes y expertos para experimentar con el código.

Sobre la pregunta de por qué comenzar con la programación funcional, me gustaría señalar Blog de Bob Harper . Carnegie Mellon ha actualizado recientemente su currículo de CS para enseñar primero la programación funcional, y Harper ha estado cubriendo su progreso golpe por golpe en su blog. Como uno de los tipos detrás de la definición de Estándar ML, es obvio que está a favor de este movimiento, y argumenta bien las razones para ello.

Finalmente, advierto contra el aprendizaje de Haskell primero, aunque otros pueden estar en desacuerdo. Si bien el enfoque puro de Haskell hacia la FP sin duda generará buenos hábitos, el enfoque del lenguaje en la computación perezosa no es necesariamente una buena combinación para el principiante; Una de las primeras y más importantes cosas que deberá aprender a hacer como programador es razonar exactamente sobre lo que está haciendo su programa al observar la fuente y sobre el costo relativo de los diferentes enfoques para el mismo problema. Según mi experiencia, la pereza de Haskell hace de estas dos actividades un desafío para los programadores experimentados, aunque su millaje puede variar.

    
respondido por el jimwise 04.05.2011 - 16:11
5

La principal ventaja (o la no desventaja) de comenzar con FP es que la mayoría de los conceptos también se pueden aplicar a la programación imperativa. Realm of Racket utiliza analogías de videojuegos para enseñar conceptos funcionales e imperativos, y los estudiantes dedicados no solo tienen un juego funcional (npi), pero una comprensión sólida de condicionales, recursión, bucles, ADT y diseño dirigido por eventos. Estos conceptos son prácticamente omnipresentes en la programación moderna y se utilizan constantemente.

Aún más importante, sin embargo, es aprender cómo codificar abstracciones , algo en lo que destaca la PF, con el uso de funciones de orden superior y tipos de datos. Cómo diseñar programas adopta un enfoque único al enseñar mediante la inducción. Por ejemplo, los estudiantes aprenden cómo funciona fold mirando el código para tomar tanto la suma como el producto de una lista, encontrar lo que tienen en común y derivar la implementación ellos mismos.

El equivalente de POO de lo anterior probablemente involucre uno o más de los siguientes: interfaces, clases abstractas, genéricos, functores o (si lo está haciendo mal) singletons. Si bien estos son patrones de diseño perfectamente aceptables en Java, en mi humilde opinión no pertenecen a un plan de estudios introductorio y solo sirven para ofuscar los principios subyacentes. Incluso como alguien que se introdujo en los idiomas de PF "tarde", puedo decir que navegar por el siempre cambiante mar de OOP se ha simplificado enormemente al tener un fuerte ancla funcional.

    
respondido por el bug 23.06.2013 - 04:07
4

La programación funcional hace las cosas mucho más fáciles. En los idiomas OOP, tiene que lidiar con la administración del estado a través de múltiples hilos sin arruinar ese estado. En los lenguajes funcionales, cuando la mayoría del trabajo que se realiza se realiza mediante funciones puras, no tiene que preocuparse por ello.

En términos de velocidad / rendimiento, no soy un verdadero jockey de rendimiento, pero ser funcional no significa ser lento, y la estructura de los lenguajes funcionales tiene poco que ver con su velocidad. La sintaxis de los lenguajes funcionales varía mucho, como las diferencias entre Clojure y Haskell. Clojure es muy rápido tal como está, y puede alcanzar (y algunas veces exceder) las velocidades de Java con optimización posterior al hecho.

Entonces, todo depende realmente de lo que estés buscando

    
respondido por el MattyD 04.05.2011 - 07:21
2

Creo que la disponibilidad de material de aprendizaje, algunos buenos ejemplos de códigos y mentores son muy importantes al aprender lenguajes de programación. Dependiendo de su situación, es posible que tenga un mentor que pueda enseñarle, etc., pero creo que los recursos de lenguaje funcional son muy pocos en comparación con los idiomas principales. Significa que progresarás más lento en comparación con el aprendizaje de los idiomas principales. Pero si no tiene prisa, esto no es un problema.

    
respondido por el Endy Tjahjono 04.05.2011 - 07:18
1

Quizás la razón más importante para considerar el aprendizaje de lenguajes de programación funcionales es la comprensión de los tipos de datos algebraicos. El mapeo mental ayudará a modelar las relaciones de clase OO e incluso el diseño de bases de datos.

El enfoque en sistemas multi-core / multi-procesador enfatiza el uso de algoritmos paralelos que pueden expresarse de manera más clara y concisa en FP. Es probable que la rama lambda de idiomas vea un fuerte aumento en el uso en las próximas dos décadas.

Pero también hay algunos escollos comunes. Creer que la PF es más simple es un gran error, ya que calcular la complejidad de espacio y tiempo, así como la entrega de pruebas de detención, puede ser mucho más difícil en el cálculo lambda, especialmente en idiomas que admiten la evaluación perezosa.

Entonces, aprende ambos! O quizás mejor: primero aprenda un lenguaje que abarque a ambos, como Scala. Si no te importa las camisetas empatadas y un ligero acento holandés, quizás encuentres el conferencias de FP por el Dr. Erik Meijer útiles, que están en MSDN.

    
respondido por el Dibbeke 04.05.2011 - 08:43

Lea otras preguntas en las etiquetas