¿Tiene F # un futuro? ¿Vale la pena aprender?

Respuesta corta: sí, aunque solo sea porque es una introducción relativamente fácil a la programación funcional, que abre muchas otras técnicas e idiomas una vez que se sienta cómodo con el paradigma.

Respuesta más larga: con respecto a F # y .NET Core específicamente, creo que es solo que con Core están realmente a la vanguardia del desarrollo lo que les impide hacerlo. El otro factor clave es que relativamente pocas personas aún se sienten cómodas con la programación completamente funcional, es decir, trabajar en ella completamente / a tiempo completo. Sin embargo, cada vez más personas se sienten cómodas con el uso de construcciones funcionales, que les permiten aumentar su productividad y confiabilidad sin tener que estar constantemente inmersas en ellas.

Yo mismo caería en esta definición; Utilizo muchas construcciones funcionales en mi código de C # (tal vez hasta un 50 por ciento), pero la mayoría de las veces, la forma en que creo que es mejor aproximada por la orientación al objeto, por lo que me quedo con ella. Obtengo lo mejor de ambos mundos, desde mi perspectiva. Ciertamente hay momentos en los que pienso que “esto sería más fácil en F #”, pero he intentado trabajar en ello a tiempo completo y simplemente no me encuentro productivo. No es culpa del lenguaje, es la forma en que pienso. Esta es una elección personal, y por lo tanto esto puede ser, será, diferente para los demás.

Por lo tanto, ahora que hemos mencionado ambos factores clave, la síntesis : estoy seguro de que agregarán compatibilidad con F #, pero de manera pragmática, están tratando de inventar e implementar simultáneamente un modelo de .NET radicalmente diferente. de lo contrario, haga compatibles las bibliotecas clave existentes (incluyendo el soporte de muchos de los cuales son proyectos de código abierto), ah, y también desarrolle herramientas confiables y efectivas para este nuevo sistema en rápido cambio. Finalmente, también lo están haciendo abiertamente, en GitHub, y por lo tanto, tienen que coordinar las contribuciones de la comunidad al ecosistema mientras mantienen todo lo más coherente y lo más estable posible: existe una coordinación y planificación mucho menos centralizadas como tales.

¿Agregaría soporte F # en ese momento? Estoy seguro de que no lo haría , especialmente porque, de nuevo, relativamente pocas personas se sienten completamente cómodas al trabajar en un lenguaje funcional.

F # requiere soporte y shims especiales para que el trabajo con él sea coherente, ya que casi todas las bibliotecas de clase base y las bibliotecas populares de código abierto no están escritas en él. Es una cantidad de esfuerzo no trivial. Tratar de hacer esto para Core, y hacerlo bien , en el torbellino existente de un progreso insano sería el suicidio del proyecto, IMO.

Si F # tiene un futuro o no depende de la escala de tiempo, supongo, pero es cierto que F # no es el lenguaje de .NET convencional (¿tiene .NET un futuro que a veces me pregunto?).

Sin embargo, como alguien que comenzó a estudiar F # en 2007 y aunque le gustaba en ese momento, no creía que agregara mucho sobre C #, ahora considero que F # es una influencia muy importante en mis pensamientos sobre la programación.

F # me ha permitido desarrollar mis habilidades en programación funcional de una manera que no creo que C # / Java me hubiera habilitado.

Encuentro que soy mejor construyendo y usando abstracciones funcionales poderosas. Una de mis abstracciones favoritas es la combinación de transformadores monádicos, es muy útil cuando se trata de datos con menos esquema, como JSON.

Al usar y estudiar excelentes bibliotecas de F # como FParsec y FsCheck, ahora tengo más opciones cuando pienso en analizar o probar. En especial, FsCheck ha cambiado fundamentalmente mi forma de pensar acerca de las pruebas unitarias. Me enojo al pensar en cuánto se escribe el código de prueba de unidad deficiente en este momento cuando hay ideas mejores y más productivas.

Uso de tipos de datos algebraicos He modelado cosas como los requisitos funcionales de una estación base de radio. Lo modelé de tal manera que no hay valores ilegales que faciliten la generación de todas las variantes posibles. Además, el experto en dominios que no era programador podía leer y entender la definición de tipo en F # y ponerle su sello de aprobación.

Debido a que vinculo mi desarrollo en dichos temas con el hecho de que hice de F # mi lenguaje de .NET principal, entonces el aprendizaje personal de F # ha merecido la pena.

En primer lugar, no piense que la división sea “funcional” frente a “tipificada estáticamente”: F # sigue siendo un lenguaje tipificado estáticamente.

Aprenda F # aquí: Aprenda F # – Mejores tutoriales de F # | Hackr.io

¿Creo que F # va a reemplazar a C #? No en muchas áreas. En algunos nichos definitivamente dejará su huella … pero personalmente creo que es más importante por una razón diferente: alentará a las personas a pensar más funcionalmente.

Vale la pena mirar de cerca F # para mejorar tu C #. No encontrará que cada tarea se adapte a un enfoque funcional, pero definitivamente vale la pena aprender a pensar de una manera ligeramente diferente.

En este punto, probablemente debería conectar la Programación Funcional del Mundo Real, en su mayoría escrita por Tomas Petricek, con un poco de ayuda de mi parte. Está dirigido precisamente a los desarrolladores que quieren pensar de manera más funcional, con un sesgo considerable en los desarrolladores de C # existentes que están interesados ​​en F #. (Y hoy, 4 de septiembre de 2010, el libro electrónico solo cuesta $ 15. Use el código dotd0904cc en la caja

Basado en tus comentarios, C # es definitivamente el camino a seguir. F # es un lenguaje genial, pero no hay evidencia de que se convierta en una alternativa convencional a C # como lenguaje .NET. C # está lleno de características interesantes, que incluyen la capacidad de escribir código funcional en lugar de solo código orientado a objetos.

Si simplemente desea aprender F # como una forma diferente de ver los lenguajes .NET, entonces asegúrese de que sea divertido y una experiencia de aprendizaje. Realmente no hay ningún inconveniente para hacerlo.

No sé si tiene futuro o no, pero puedo asegurarlo.

Nunca lo he visto en un anuncio de trabajo.