
Hay películas de culto, juegos, libros o música: son terriblemente aficionados a una comunidad muy unida, profesionales y críticos. Pero no hay éxito comercial y popularidad generalizada. En tales situaciones, generalmente estoy dolorosamente molesto.
En el desarrollo, las buenas tecnologías tampoco siempre se generalizan. Por ejemplo, F #. Todo lo que sé sobre él es un lenguaje increíblemente genial, pero completamente impopular, después del cual los desarrolladores ya no pueden volver a sus idiomas habituales.
Traté de averiguar la razón. Y en general, ¿quiénes son las personas que escriben en él y por qué lo hacen si las empresas no necesitan un idioma? Para hacer esto, llamé para hablar con la comunidad F # de habla rusa en Telegram. Aquí está nuestra mesa redonda.
Cómo comenzar a aprender F #
Airat Khudaigulov (
Szer ): Yo mismo
vengo de C #. Tuvimos un trabajo relacionado con Akka.NET, que fue trasladado de Akka a Scala. El puerto es excelente, pero no hubo ejemplos de casos de documentación poco frecuentes; siempre estuvieron en el muelle Scala. Cuando leí este muelle, una pregunta apareció en mi cabeza: ¿por qué todo está escrito en Scala en un par de líneas y sufro en C #?
Se encontró la salida: F #. Desde entonces, y sin lágrimas.
Roman Liman (
kagetoki ): Resultó ser una herramienta poderosa para resolver problemas cotidianos muy reales de cualquier programador. Las dificultades que se consideraron la norma y la inevitabilidad en el mundo OOP de C # y Java no son inevitables en absoluto, y pueden evitarse fácilmente en lugar de superarse.
Phil Ranzhin (
fillpackart ): Una vez en Habré leí una gran entrevista con Vagif Abilov. En ese momento, no entendía el paradigma de programación funcional en absoluto, y cualquier información al respecto me molestó seriamente. Entonces esa entrevista.
Vagif Abilov :
Ese material se puede leer aquí . Esto fue poco después de mi discurso en la conferencia DotNext de Moscú. En pocas palabras, comencé a estudiar F # por deseo de escribir código más compacto (menos código, menos maldad) y trabajar con estructuras de datos inmutables. Por supuesto, nadie está impidiendo que un programador de C # o Java defina sus estructuras de datos como inmutables, pero la base de los lenguajes que implementan OOP es la posibilidad de mutaciones en las estructuras de datos, y esta posibilidad no irá a ninguna parte. La programación funcional le permite no gastar esfuerzo en proteger los datos de cambios incorrectos en un entorno de subprocesos múltiples: los datos se encargarán solos, no se pueden cambiar.
Phil Rangin :
Wagif seguía diciendo que después del ceremonial C # y Java, F # parecía mucho más adecuado para el desarrollo. Entonces no sabía quién era Vagif, pero, por supuesto, inmediatamente decidí por mí mismo que no entendía nada. C # no es ceremonial, C # es exactamente lo que debería ser. Potente y bella. Decidí escribir un artículo sobre cómo la programación funcional es ridícula. Tomé una tarea simple y comencé a implementarla en C # y F # para ilustrar mi punto. F # en el proceso me llegó tanto que no terminé de escribir el artículo. Empecé a estudiar esta tecnología.
Roman Liman : Muchas cosas que se prueban en C # en tiempo de ejecución ahora han migrado a tiempo de compilación, por lo que parece que fue la primera vez que probé el tipeo estático: se produjo una revelación directa.
Donde en F # necesita siete líneas de código, en C # el código equivalente se expandirá a 200-300, sin exagerar (y esto solo cuenta el código útil). El compilador mismo genera un montón de repeticiones para usted, por ejemplo, igualdad estructural.
Phil Rangin : Nunca debuté con el código F #, porque en mi código F # todos los errores se detectan en la etapa de compilación. No estoy bromeando
¿Es difícil aprender F #?
Roman Lyman : ¿Qué tan difícil es estudiar? Para mí no es difícil en absoluto. Lo único al principio es un poco tenso si te encuentras con un paradigma funcional y tipos inmutables. Pero esto no es un cambio de idioma, sino un cambio de paradigma.
La sintaxis al principio no es obvia, por lo que es mejor dejar de lado la valentía y leer sobre el lenguaje, en lugar de esperar que el conocimiento de C # sea suficiente.
Ayrat Khudaigulov : F # admite todo lo que está en C # excepto goto (el lenguaje está completamente basado en expresiones, sería extraño hacer una transición imperativa en la expresión calculada) y la palabra clave protegida (esto es por diseño, porque obviamente no es difícil). Por supuesto, todo lo demás que amamos: clases abstractas, interfaces, atributos automáticos, usos y tri-ketchy. Para los fanáticos de contar bytes también, todo está ahí: parámetros de ref / out, mutabilidad, intervalos, no administrado, punteros, stackalloc.
Todas las funciones en C # vienen con un retraso en un par de años en comparación con F # (genéricos, asíncrono / espera + tarea, LINQ, coincidencia de patrones y mucho más). Y muchas características en general dudo que alguna vez aparezcan (tipos de suma representados por uniones discriminadas, función nativa curry). En el nuevo C # 8.0 prometen traer registros y un patrón de coincidencia recursivo. Pregunta de atención: ¿por qué esperar?
Y otra pregunta: ¿por qué aprender un nuevo idioma para escribir en él exactamente de la misma manera? Para obtener los beneficios que F # brinda, pero C # no, debe comprender el otro lado de la Fuerza. Y no es fácil.
John Doe : Como desarrollador de C #, estoy agradecido con los creadores de F # por los genéricos y la asincronía con un rostro humano en C #. Si alguien no sabe, estos megafit aparecieron en C # gracias a F #.
Vagif Abilov : En el famoso libro "Programador pragmático", se aconseja a los desarrolladores que aprendan un nuevo lenguaje de programación cada año. No puedo jactarme de seguir este consejo exactamente, pero lo principal, en mi opinión, es lo que los autores querían decirles: el programador siempre debe estar listo para revisar los principios de redacción de sus programas.
Muchos generalmente están demasiado ocupados con los lenguajes de programación, como un credo de vida. Si cambiaste de Java a Clojure, a veces serán tratados como si un cristiano se hubiera convertido al Islam. ¿Por qué, de hecho, tanta atención? Aprender nuevos lenguajes de programación a menudo le permite repensar nuestros hábitos de trabajar con idiomas antiguos. Aquellos que están familiarizados con F # escriben en C # de manera diferente.
Roman Melnikov (
neftedollar ): en F #, OOP es más correcto (aunque es totalmente compatible con OOP en C #) desde fomenta la programación en abstracciones-interfaces, en lugar de clases explícitas.
¿Qué piensan de los creadores del lenguaje?
Nikolay Matyushin : Una vez que contribuí al soporte de proveedores de tipe en .NET Core. Durante mucho tiempo no funcionaron, y una persona de la comunidad de habla rusa y yo decidimos averiguar cuál era el problema. Revisando, vimos que en .NET Core no hay una función que guarde el ensamblado (objeto) en un archivo: esta función fue utilizada por los proveedores.
Pasamos una o dos semanas en un prototipo que hizo esto. Resultó una muleta terrible, pero parcialmente funcionando. Todo este tiempo hablamos sobre el tema en el github, y luego vino Don Syme, escribió "Pocas horas de trabajo" y arregló los proveedores de tipos.
Vagif Abilov : El creador del lenguaje Don Syme es asequible y democrático. Espero que llegue a alguna conferencia rusa para que los desarrolladores rusos puedan conocerlo personalmente.
Roman Lyman : Syme es un genio. Sorprendentemente, creó toda esta belleza casi solo.
Pavel Smirnov : Él es mi ídolo de programación.
Airat Khudaigulov : Don Syme, por cierto, introdujo genéricos en .NET, de lo contrario nos habríamos sentado en C # y hubiéramos descartado todo, desde el objeto y la parte posterior, como era (y parcialmente es) en Java. Syme está desarrollando el lenguaje con la vista puesta en C #, por compatibilidad con sus nuevas características, lo que probablemente sea estratégicamente correcto. Pero esto significa que un eco de malas decisiones en C # también puede entrar en F #. También está en contra de la introducción de características de FP “abstrusas” (hola Scala), y la reorganización del lenguaje, como pueden ahuyentar a otras personas e inflar la lib estándar (hola C ++).
Creo que Syme es un héroe. Estoy de acuerdo con su visión del lenguaje como multi-paradigmático, pero me sumergiría en el lenguaje algo más arriba.
¿Por qué el idioma no es popular?
Roman Lyman : El lenguaje no es popular, en mi opinión, porque en general FP es menos popular que OOP. Además, hay un umbral de entrada. Y luego, truco 22. Los proyectos en F # no escriben, porque hay pocos programadores en el mercado, y los programadores no aprenden este lenguaje, porque no hay proyectos en el mercado.
Phil Rangin : No conozco personas que practiquen la programación funcional, pero preferirían la orientación a objetos. Aquí F # fue especialmente desafortunado: se adapta solo a aquellos que creen en la simbiosis de estos paradigmas.
Pavel Smirnov : Muchos lo consideraron muerto debido a la política de Microsoft: F # era solo una plataforma para superar las características de C #. Pero el lenguaje se posicionó inicialmente más para la ciencia de datos que para el desarrollo industrial.
Roman Melnikov : Resharper. Para C #, este es un tema importante, y muchos ya lo han gastado. Sin un solucionador, escribir en C # es un poco complicado, debe escribir mucho con bolígrafos, como resaltar asignaciones. Y el resharper elimina mucho dolor de los sycharpers. No hay tal dolor en F #, pero aquellos que tienen un resharper no pueden apreciar todos los encantos de un lenguaje que no depende de tuling.
Vagif Abilov : En mi opinión, la razón del retraso detrás del éxito de Scala radica en el dominio de Microsoft, que aún determina cuál es la prioridad en la plataforma Windows. Si bien F # fue desarrollado por Microsoft Research, la empresa siempre lo ha posicionado como un lenguaje para entusiastas. Microsoft tiene métricas que muestran la viabilidad económica de desarrollar una tecnología en particular dependiendo de las ventas actuales y, por supuesto, cualquier SharePoint de acuerdo con estas métricas parece más atractivo que F #. Pero una gota desgasta una piedra.
Phil Rangin : Creo que disparará. Todo el poder de .NET junto con la sintaxis más moderna y el enfoque más idiomático de la historia no pueden evitar disparar.
Roman Melnikov : Las perspectivas son asombrosas. F # se está moviendo gradualmente hacia el análisis de datos, gracias a los proveedores de tipos, por ejemplo. Hay compiladores en js y la biblioteca mágica de elmish (esencialmente Elm para .NET).
Miguel De Icaza apoya activamente a F #, y en Xamarin su apoyo siempre ha sido como C #. Hay un compilador en ErlangCore, que también es genial. En F # puedes escribir un backend y una interfaz completamente.
SAFE-Stack es algo extraño, con llamadas de API escritas, envoltorios geniales en la parte superior de los websockets (Elmish.Bridge) y mucho más.
Vagif Abilov : Estoy muy contento de que se esté utilizando F #. Trabajo en un proyecto de radiodifusión noruego, nuestro sistema carga archivos multimedia para programas de televisión y radio a la nube para que estén disponibles para verlos y escucharlos desde computadoras y dispositivos móviles. El sistema está escrito en F # y usa Akka.NET. Este no es el único proyecto en nuestra organización que usa F #, y lo que es especialmente agradable es que la cantidad de tales proyectos está creciendo, así como la cantidad de desarrolladores dispuestos a cambiar a este lenguaje.
¿Para qué es adecuado F #?
Phil Rangin : F # encaja perfectamente en el desarrollo de IA. Este lenguaje está literalmente hecho para abstraerme de las dificultades y centrarme en lo principal. Cuando haces IA, tu tarea es trazar tu forma de pensar sobre el comportamiento de la máquina. En tales casos, el código es su idioma intermedio, que no puede expresar cosas demasiado complejas. Aquí F # es capaz de ser tan abstracto que no interferiría con usted y su automóvil haciendo historia.
Vagif Abilov : es aplicable a cualquier tarea y se adapta especialmente bien a las tareas de modelado de dominios. En la entrevista del año pasado sobre Habré, imprudentemente dije que los lenguajes funcionales son más aplicables a algoritmos y backend, y en menor medida a la programación de una interfaz de usuario y páginas web.
Luego, en los comentarios, alguien notó que existe un lenguaje tan funcional Elm, que está especialmente escrito para programar páginas web. El comentarista tenía toda la razón. Desde entonces, comencé a usar Fable, que le permite escribir aplicaciones web en F # compilándolas en JavaScript. Una experiencia increíble, la combinación de F # + Fable (y la biblioteca Fable-Elmish) abre el acceso a la programación web para desarrolladores que no entienden nada en CSS como yo.
Pavel Sirnov : desarrollo impulsado por datos: un lenguaje FP conciso que admite proveedores de tipos. Modelo de actor: MailboxProcessor en la biblioteca estándar es un cuento de hadas.
Roman Melnikov : resuelve perfectamente las tareas web, se integra con
componentes reactivos . Se están
abordando las tareas de análisis de datos y aprendizaje automático (
fslab.org ), tareas de ETL y tareas de diseño de lógica de negocios: el sistema de tipos le permite escribir para que no haya estados incorrectos.
Excelentes tareas de análisis (Fparsec). Genial para escribir tus propios idiomas. El mismo TypeScript se escribió originalmente en F #. El
código para la GPU está escrito.
Yo mismo escribo scripts fsx en él en lugar de bash y python para mi máquina.
Sí, con microcontroladores no lo conseguirás. Pero creo que mucha gente puede prescindir de él.
Dónde obtener información
Libros
El internet
Telegrama
Algunas palabras sobre la comunidad.
Roman Liman : La comunidad es genial, todos están unidos por el deseo de escribir F # por dinero, por lo que todos los recién llegados reciben una gran ayuda para aumentar la comunidad y aumentar sus posibilidades de encontrar trabajo.
Phil Rangin :
Cultistas peligrosos. Pero tienen razón.
Pavel Smirnov : La comunidad de habla rusa F # es un lugar muy cómodo. Lo que más me gusta es que no son indiferentes a su idioma, como sucede en otros ecosistemas más conocidos.
Nikolai Matyushin : Tal vez debido al hecho de que el idioma no es muy popular y las personas tóxicas no se demoran.
Roman Melnikov : Hay dramas que no afectan el idioma. Pero la vida se hace más interesante.