¿Cuáles son algunas buenas prácticas al tratar de enseñar programación declarativa a programadores imperativos?

13

Ofrecí hacer un poco de entrenamiento en F # en mi empresa y parecían mostrar cierto interés. Generalmente son programadores VB6 y C # que no siguen la programación con demasiada pasión. Dicho esto, siento que es más fácil escribir el código correcto cuando se piensa en un asunto funcional, por lo que definitivamente deberían obtener algún beneficio de él.

¿Puede alguien ofrecer algún consejo sobre cómo debo abordar esto?

Ideas

  • No te concentres en la sintaxis, en lugar de eso, enfócate en cómo se pueden usar este lenguaje y los modismos que promueve.
  • Pruebe y piense en ejemplos que son difíciles de escribir de manera imperativa pero que se traducen en código elegante cuando se escriben de manera declarativa.
pregunta ChaosPandion 21.09.2010 - 21:21

4 respuestas

5

La programación funcional es una bestia extraña para mí. Aprendí F # y Haskell, escribí algunos programas simples y me encantó usarlos, pero nunca tuve el "destello de revelación" del que hablan algunas personas. Pero poco a poco, me di cuenta de que, cada vez más, estaba escribiendo código destinado a ser inmutable, dividiendo las tareas en más funciones más pequeñas y tratando de usar a los delegados mucho más. Es una cosa que, si te gusta, se introduce en tu trabajo porque el valor de esas técnicas es evidente por sí mismo.

Ahora, más práctico para entrenar: Encuentro que dos conceptos realmente hacen clic en Programación Funcional como un estilo para mí.

Primero, el estilo de PF se basa en la estructura de los datos, no en la composición como en OOP. Miré algo como List in C # como un truco inteligente para generar listas de tipos seguros, algo que compuso el tipo (cadena) en el otro tipo (lista). Después de aprender FP, ahora veo genéricos más como mónadas. La lista es una forma estructurada que el código puede tomar, y decora las cadenas.

En segundo lugar, y quizás más útil para los programadores de C # / ASP, está la idea de que FP trabaja en la recursión y repetición, mientras que OOP funciona en la mutabilidad y el bucle. Tiendo a pensar en el ciclo de vida de la página ASP como un tipo de FP ahora: cada solicitud se procesa desde cero a través de todo el ciclo de vida, por lo que toda la página es, en efecto, un gran programa recurrente. Si puede reducir esa noción, tendrá una mejor idea de cómo se puede estructurar un programa imperativo alrededor de bucles de funciones que toman datos, operan sobre ellos y devuelven datos nuevos en lugar de modificar los antiguos.

El obstáculo más difícil, al menos para mí, de superar con este enfoque es que la sensación de que está perdiendo toneladas de recursos al usar objetos mutables ahorraría un montón de memoria. Confiamos en GC y tuve que aprender a dejar de lado los problemas de rendimiento hasta que vi que el programa se ejecutaba y verificaba si existía alguno, y si es así, utilizaba un generador de perfiles para ver exactamente dónde estaban los problemas. / p>     

respondido por el CodexArcanum 12.10.2010 - 21:24
1

Yo recomendaría:

respondido por el Jonas 23.09.2010 - 17:43
1

Muchos lenguajes de programación imperativos (Ada, C / C ++, Turbo Pascal, FoxPro) tienen la capacidad de definir punteros a funciones o literales de nombres de procedimientos que se pueden evaluar (y los procedimientos nombrados después del literal invocado) en tiempo de ejecución.

El ejemplo tradicional es qsort en C. Aproveche la noción de que puede definir algoritmos que ejecuten algoritmos de otros en estructuras de datos. Obviamente esto es solo una fracción de lo que es la programación funcional. Pero me he dado cuenta de que este es un buen punto de partida para que la idea se hunda.

Una vez que eso se sumerja, entonces puedes comenzar a profundizar en otras cosas (inmutabilidad, compartir-nada, etc.)

    
respondido por el luis.espinal 13.10.2010 - 01:00
1
  

¿Puede alguien ofrecer algún consejo sobre cómo debo abordar esto?

Claro:

  • Elija sus ejemplos con cuidado para que su código F # no solo resuelva un problema con elegancia, sino que también sea mucho más elegante de lo que es posible con C # / VB . La coincidencia de patrones y la inferencia de tipos son tus amigos aquí.

  • Use un ejemplo para resaltar los beneficios de la nueva función que se encuentra en F #, por ejemplo. flujos de trabajo asíncronos, patrones activos.

  • No tenga miedo de dar ejemplos impuros utilizando estructuras de datos mutables cuando sea apropiado. F # es impuro por una razón.

  • No presente F # como una panacea. Describa las aplicaciones para las que F # no es adecuado, así como aquellas para las que es mucho mejor que otros lenguajes .NET.

  • Señale muestras de juguetes que puedan estudiar, así como proyectos exitosos del mundo real que usaron F # (Bing AdCenter, Halo 3, etc.).

  • Explique todo en términos de cómo F # puede ayudarlos a resolver problemas más fácilmente. Evitar los debates religiosos. Manténgase positivo sobre F #, no negativo sobre otros idiomas. Dales información y evidencia, pero déjalos sacar sus propias conclusiones.

respondido por el Jon Harrop 29.12.2010 - 20:14

Lea otras preguntas en las etiquetas