Me ofrecí a entrenar un poco en F # en mi empresa y parecían mostrar cierto interés. Generalmente son programadores de 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 piensas en un asunto funcional, por lo que definitivamente deberían obtener algún beneficio.
¿Alguien puede ofrecer algún consejo sobre cómo debería abordar esto?
Ideas
- No se concentre en la sintaxis, sino en cómo se puede usar este lenguaje y los modismos que promueve.
- Intente y piense en ejemplos que son difíciles de escribir de manera imperativa pero que se traducen en códigos elegantes cuando se escriben de manera declarativa.
c#
f#
training
declarative-programming
ChaosPandion
fuente
fuente
make
es más un lenguaje declarativo que F # o Caml! (Irónicamente, esto hace que su trabajo sea más fácil.)Respuestas:
La programación funcional es una bestia extraña para mí. Aprendí F # y Haskell, escribí algunos programas simples y me encanta usarlos, pero nunca tuve el "destello de revelación" del que algunas personas hablan. Pero lentamente, me di cuenta de que cada vez escribía más código que debía ser inmutable, dividiendo las tareas en más, funciones más pequeñas e intentando usar mucho más a los delegados. Es algo que, si te gusta, se desliza en tu trabajo porque el valor de esas técnicas es evidente.
Ahora, más prácticamente para el entrenamiento: encuentro que dos conceptos realmente hacen clic en Programación funcional como un estilo para mí.
Primero, el estilo FP se basa en la estructura de datos, no en la composición como en OOP. Miré algo como Lista en C # como un truco inteligente para generar listas seguras de tipo, algo que compuso el tipo (cadena) en el otro tipo (lista). Después de aprender FP, miro genéricos más como Monads ahora. La lista es una forma estructurada que puede tomar el código, y decora las cadenas.
En segundo lugar, y quizás más útil para los programadores de C # / ASP, es la idea de que FP funciona en la recursión y la repetición, mientras que OOP funciona en la mutabilidad y el bucle. Ahora tiendo a pensar en el ciclo de vida de la página ASP como una especie de FP: cada solicitud se procesa desde cero a lo largo de todo el ciclo de vida, por lo que toda la página es, en efecto, un gran programa que se repite lentamente. Si puede reducir esa noción, obtendrá 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í, para superar con este enfoque es esa sensación de hundimiento de que estás desperdiciando toneladas de recursos cuando usas objetos mutables ahorrarías una tonelada de memoria. En GC confiamos, y solo tuve que aprender a dejar de lado las preocupaciones de rendimiento hasta que realmente vi que el programa se ejecutaba y verificaba si había alguno, y de ser así, usar un generador de perfiles para ver exactamente dónde estaban los problemas.
fuente
Yo recomendaria:
fuente
Muchos lenguajes de programación imperativos (Ada, C / C ++, Turbo Pascal, FoxPro) tienen la capacidad de definir punteros a funciones o literales de nombre de procedimiento que pueden evaluarse (y los procedimientos nombrados después del literal invocado) en tiempo de ejecución.
El ejemplo tradicional es qsort en C. Construye sobre esa noción de que puedes definir algoritmos que ejecutan otros algoritmos en estructuras de datos. Obviamente, esto es solo una fracción de lo que es la programación funcional. Pero he descubierto que este es un buen punto de partida para que la idea se hunda.
Una vez que se hunde, puede comenzar a profundizar en otras cosas (inmutabilidad, compartir nada, etc.)
fuente
Seguro:
Elija sus ejemplos cuidadosamente para que su código F # no solo resuelva un problema de manera elegante, 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 asincrónicos, 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 cuales F # no es adecuado, así como aquellas para las que es mucho más adecuado que otros lenguajes .NET.
Señale las muestras de juguetes que pueden estudiar, así como los 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. Evita los debates religiosos. Manténgase positivo sobre F #, no negativo sobre otros idiomas. Ármalos con hechos y evidencia, pero déjalos sacar sus propias conclusiones.
fuente