Pourquoi apprendre des langues impopulaires. Exemple de communauté F #



Il y a des films, des jeux, des livres ou de la musique cultes - ils aiment terriblement une communauté soudée, des professionnels et des critiques. Mais il n'y a pas de succès commercial et de popularité généralisée. Dans de telles situations, je suis généralement douloureusement contrarié.

En développement, les bonnes technologies ne se répandent pas toujours non plus. Par exemple, F #. Tout ce que je sais de lui, c'est un langage incroyablement cool, mais complètement impopulaire, après quoi les développeurs ne peuvent plus simplement revenir à leurs langages habituels.

J'ai essayé d'en découvrir la raison. Et en général - qui sont les gens qui écrivent dessus et pourquoi le font-ils si les entreprises n'ont pas besoin d'une langue? Pour ce faire, j'ai frappé pour parler à la communauté russophone F # dans "Telegram". Voici notre table ronde.

Comment commencer à apprendre F #


Airat Khudaigulov ( Szer ): Je viens moi-même de C #. Nous avions du travail lié à Akka.NET, qui a été transféré d'Akka à Scala. Le port est excellent, mais il n'y avait aucun exemple de cas de documentation rares; ils étaient toujours dans le Scala-dock. Quand j'ai lu ce dock, une question m'est venue à l'esprit - pourquoi tout est écrit en Scala en quelques lignes, et je souffre en C #?

La sortie a été trouvée - F #. Depuis lors, et pas de larmes.

Roman Liman ( kagetoki ): Il s'est avéré être un outil puissant pour résoudre les problèmes quotidiens très réels de tout programmeur. Les difficultés qui étaient considérées comme la norme et l'inévitabilité dans le monde OOP de C # et Java ne sont pas du tout inévitables, et elles peuvent être facilement évitées au lieu d'être surmontées.

Phil Ranzhin ( fillpackart ): Une fois sur Habré, j'ai lu une grande interview avec Vagif Abilov. À ce moment-là, je ne comprenais pas du tout le paradigme de la programmation fonctionnelle, et toute information à ce sujet me gênait sérieusement. Alors cette interview.

Vagif Abilov : Ce matériel peut être lu ici . C'était peu après mon discours à la conférence DotNext de Moscou. En un mot, j'ai commencé à étudier F # par désir d'écrire du code plus compact (moins de code - moins de mal) et de travailler avec des structures de données immuables. Bien sûr, personne n'empêche un programmeur C # ou Java de définir leurs structures de données comme immuables, mais la base des langages qui implémentent la POO est la possibilité de mutations dans les structures de données, et cette possibilité n'ira nulle part. La programmation fonctionnelle vous permet de ne pas consacrer d'efforts à protéger les données contre les modifications incorrectes dans un environnement multithread - les données prendront soin d'elles-mêmes, elles sont immuables.

Phil Rangin : Wagif n'arrêtait pas de dire qu'après le cérémonial C # et Java, F # semblait beaucoup plus adapté au développement. Je ne savais pas alors qui était Vagif, mais, bien sûr, j'ai immédiatement décidé par moi-même qu'il ne comprenait rien. C # n'est pas cérémoniel, C # est exactement ce qu'il devrait être. Puissant et beau. J'ai décidé d'écrire un article sur la façon dont la programmation fonctionnelle est ridicule. J'ai pris une tâche simple et j'ai commencé à l'implémenter en C # et F # pour illustrer mon propos. F # dans le processus m'est venu tellement que je n'ai pas fini d'écrire l'article. J'ai commencé à étudier cette technologie.

Roman Liman : Beaucoup de choses qui sont testées en C # lors de l'exécution ont maintenant migré vers le temps de compilation, donc il semble que la première fois que j'ai essayé la saisie statique - une révélation directe est arrivée.

Là où sur F # vous avez besoin de sept lignes de code, sur C # le code équivalent s'étendra à 200-300, sans exagération (et cela ne compte que le code utile). Le compilateur lui-même génère un tas de passe-partout pour vous, par exemple, l'égalité structurelle.

Phil Rangin : Je n'ai jamais fait ses débuts en code F #, car dans mon code F # tous les bugs sont détectés au stade de la compilation. Je ne plaisante pas.

Est-ce difficile d'apprendre F #


Roman Lyman : Est-ce difficile d'étudier? Pour moi, ce n’est pas difficile du tout. La seule chose au début est un peu tendue si vous rencontrez d'abord un paradigme fonctionnel et des types immuables. Mais ce n'est pas un changement de langue, mais un changement de paradigme.

La syntaxe au début n'est pas évidente, il est donc préférable de laisser la bravade de côté et de lire le langage, plutôt que d'espérer que les connaissances de C # sont suffisantes.

Airat Khudaigulov : F # prend en charge tout ce qui est en C # sauf goto (le langage est entièrement basé sur une expression, il serait étrange de faire une transition impérative dans l'expression calculée) et le mot-clé protégé (c'est par conception, car le rendre n'est évidemment pas difficile). Bien sûr, tout ce que nous aimons OOP - classes abstraites, interfaces, auto-attributs, utilisations et tri-ketchy. Pour les fans de comptage d'octets aussi, tout y est: paramètres ref / out, mutabilité, étendues, non managé, pointeurs, stackalloc.

Toutes les fonctionnalités de C # sont livrées avec un décalage de quelques années par rapport à F # (génériques, tâche asynchrone / attente +, LINQ, correspondance de modèle et bien plus encore). Et de nombreuses fonctionnalités en général, je doute qu'elles surviendront un jour (types de somme représentés par des unions discriminées, currying des fonctions natives). Dans le nouveau C # 8.0, ils promettent d'apporter des enregistrements et un modèle de correspondance récursif. Question d'attention - pourquoi attendre?

Et une autre question: pourquoi apprendre une nouvelle langue pour y écrire exactement de la même manière? Pour obtenir les avantages que F # donne, mais pas C #, vous devez comprendre l'autre côté de la Force. Et ce n'est pas facile.

John Doe : En tant que développeur C #, je suis reconnaissant aux créateurs de F # pour les génériques et l'asynchronie à visage humain en C #. Si quelqu'un ne le sait pas, ces mégafits sont apparus en C # grâce à F #.

Vagif Abilov : Dans le célèbre livre «Pragmatic Programmer», les développeurs sont invités à apprendre un nouveau langage de programmation chaque année. Je ne peux pas me vanter de suivre exactement ce conseil, mais l’essentiel, à mon avis, est ce que les auteurs voulaient leur dire - le programmeur devrait toujours être prêt à réviser les principes d’écriture de leurs programmes.

Beaucoup sont généralement trop occupés avec les langages de programmation, comme un credo de la vie. Si vous êtes passé de Java à Clojure, ils seront parfois traités comme si un chrétien s'était converti à l'islam. Pourquoi, en fait, une telle attention? L'apprentissage de nouveaux langages de programmation vous permet souvent de repenser nos habitudes de travail avec les anciens langages. Ceux qui connaissent F # écrivent différemment en C #.

Roman Melnikov ( neftedollar ): En F #, OOP est plus correct (bien qu'il soit entièrement compatible avec OOP en C #) puisque encourage la programmation sur des abstractions-interfaces, au lieu de classes explicites.

Que pensent-ils des créateurs de la langue


Nikolay Matyushin : Une fois, j'ai contribué au support des fournisseurs de tipe sur .NET Core. Pendant longtemps, ils n'ont pas travaillé, et une personne de la communauté russophone et moi avons décidé de comprendre quel était le problème. En fouillant, nous avons vu que dans .NET Core, il n'y a aucune fonction qui enregistre l'assembly (objet) dans un fichier - cette fonction a été utilisée par les fournisseurs.

Nous avons passé une ou deux semaines sur un prototype qui a fait ça. Il s'est avéré une béquille terrible, mais fonctionnant partiellement. Pendant tout ce temps, nous avons parlé du problème sur le github, puis Don Syme est venu, a écrit «Quelques heures de travail» et a fixé les fournisseurs de tuyaux.

Vagif Abilov : Le créateur de la langue Don Syme est abordable et démocratique. J'espère qu'il arrivera à une conférence russe afin que les développeurs russes puissent le connaître personnellement.

Roman Lyman : Syme est un génie. Étonnamment, il a créé toute cette beauté presque seul.

Pavel Smirnov : Il est mon idole de programmation.

Airat Khudaigulov : Soit dit en passant, Don Syme a poussé les génériques dans .NET, sinon nous aurions pu nous asseoir sur C # et tout diffuser depuis l'objet et le dos, comme c'était (et partiellement) en Java. Syme développe le langage avec un œil sur C #, pour la compatibilité avec ses nouvelles fonctionnalités, ce qui est probablement stratégiquement correct. Mais cela signifie qu'un écho de mauvaises décisions en C # peut également entrer en F #. Il est également opposé à l’introduction de fonctionnalités de FP «abstruses» (salut Scala) et à la réorganisation de la langue, comme ils peuvent effrayer les autres et gonfler la lib standard (bonjour C ++).

Je pense que Syme est un héros. Je suis d'accord avec sa vision de la langue comme multi-paradigmale, mais je plongerais dans la langue quelque chose ci-dessus.

Pourquoi la langue n'est pas populaire


Roman Lyman : La langue n'est pas populaire, à mon avis, car en général la FP est moins populaire que la POO. De plus, il y a un seuil d'entrée. Et puis - astuce 22. Les projets sur F # n'écrivent pas, car il y a peu de programmeurs sur le marché, et les programmeurs n'apprennent pas ce langage, car il n'y a pas de projets sur le marché.

Phil Rangin : Je ne connais pas de gens qui pratiqueraient la programmation fonctionnelle, mais préféreraient orienté objet. Ici F # a été particulièrement malchanceux - il ne convient qu'à ceux qui croient en la symbiose de ces paradigmes.

Pavel Smirnov : Beaucoup le considéraient mort-né à cause de la politique de Microsoft - F # n'était qu'une plate-forme pour battre les fonctionnalités de C #. Mais le langage était initialement positionné davantage pour la science des données que pour le développement industriel.

Roman Melnikov : Resharper. Pour C #, c'est un sujet important, et beaucoup l'ont déjà dépensé. Sans résolveur, écrire en C # est un peu malade, vous devez écrire beaucoup avec des stylos, comme mettre en surbrillance les allocations. Et le resharper élimine beaucoup de douleur des sycharpers. Il n'y a pas une telle douleur en F #, mais ceux qui ont un resharper ne peuvent pas apprécier tous les charmes d'une langue qui ne repose pas sur le tuling.

Vagif Abilov : À mon avis, la raison du retard du succès de Scala réside dans la domination de Microsoft, qui détermine toujours ce qui est prioritaire sur la plate-forme Windows. Alors que F # a été développé par Microsoft Research, il a toujours été positionné par la société comme un langage pour les passionnés. Microsoft a des mesures montrant la faisabilité économique de développer une technologie particulière en fonction des ventes actuelles, et bien sûr, tout SharePoint selon ces mesures semble plus attrayant que F #. Mais une goutte use une pierre.

Phil Rangin : Je crois qu'il va tirer. Toute la puissance de .NET associée à la syntaxe la plus moderne et à l'approche la plus idiomatique de l'histoire ne peut s'empêcher de tirer.

Roman Melnikov : Les perspectives sont incroyables. F # évolue progressivement vers l'analyse des données, grâce aux fournisseurs de types, par exemple. Il existe des compilateurs dans js et la bibliothèque magique elmish (essentiellement Elm pour .NET).

Miguel De Icaza soutient activement F #, et dans Xamarin, son soutien a toujours été comme C #. Il y a un compilateur dans ErlangCore, qui est aussi incroyablement cool. En F #, vous pouvez écrire un backend et un frontend entièrement. SAFE-Stack est une chose bizarre, avec des appels api dactylographiés, des wrappers sympas sur le dessus des websockets (Elmish.Bridge) et bien d'autres.

Vagif Abilov : Je suis très heureux que F # soit utilisé. Je travaille dans un projet de diffusion norvégien, notre système télécharge des fichiers multimédias pour des programmes de télévision et de radio sur le «cloud» pour les rendre disponibles pour la visualisation et l'écoute à partir d'ordinateurs et d'appareils mobiles. Le système est écrit en F # et utilise Akka.NET. Ce n'est pas le seul projet de notre organisation qui utilise F #, et ce qui est particulièrement agréable, c'est que le nombre de ces projets augmente, ainsi que le nombre de développeurs prêts à passer à ce langage.

À quoi convient F #?


Phil Rangin : F # s'intègre parfaitement dans le développement de l'IA. Ce langage est littéralement fait pour m'abstraire des difficultés et se concentrer sur l'essentiel. Lorsque vous faites de l'IA, votre tâche consiste à tracer votre façon de penser le comportement de la machine. Dans de tels cas, le code est votre langage intermédiaire, qui n'est pas capable d'exprimer des choses trop complexes. Ici, F # est capable d'être si abstrait qu'il n'interférerait pas avec vous et votre histoire de fabrication de voiture.

Vagif Abilov : Il est applicable à toutes les tâches, et repose particulièrement bien sur les tâches de modélisation de domaine. Dans l’interview de l’an dernier sur Habré, j’ai dit imprudemment que les langages fonctionnels s’appliquent davantage aux algorithmes et au backend, et dans une moindre mesure à la programmation d’une interface utilisateur et de pages Web.

Puis, dans les commentaires, quelqu'un a remarqué qu'il existe un tel langage fonctionnel Elm, spécialement écrit pour la programmation des pages Web. Le commentateur avait absolument raison. Depuis, j'ai commencé à utiliser Fable, qui vous permet d'écrire des applications Web en F # en les compilant en JavaScript. Une expérience incroyable, la combinaison de F # + Fable (et de la bibliothèque Fable-Elmish) ouvre l'accès à la programmation Web pour les développeurs qui ne comprennent rien en CSS comme moi.

Pavel Sirnov : Développement piloté par les données - un langage FP concis qui prend en charge les fournisseurs de type. Modèle d'acteur - MailboxProcessor dans la bibliothèque standard est un conte de fées.

Roman Melnikov : Il résout parfaitement les tâches Web, s'intègre aux composants React . Les tâches d'analyse des données et d'apprentissage automatique ( fslab.org ), les tâches ETL et les tâches de conception de logique métier sont traitées - le système de type vous permet d'écrire de sorte qu'il n'y ait pas d'états incorrects.
Terribles tâches d'analyse (Fparsec). Idéal pour écrire vos propres langues. Le même TypeScript a été écrit à l'origine en F #. Le code du GPU est écrit.
J'écris moi-même des scripts fsx à la place de bash et python pour ma machine.

Oui, sous les microcontrôleurs, vous ne l'obtiendrez pas. Mais je pense que beaucoup de gens peuvent s'en passer.

Où obtenir des informations


Livres



Internet



Télégramme


  • fsharp_news
  • fsharp_chat

Quelques mots sur la communauté


Roman Liman : La communauté est cool, tout le monde est uni par le désir d'écrire F # pour de l'argent, donc tous les nouveaux arrivants sont grandement aidés à augmenter la communauté, augmentant leurs chances de trouver du travail.

Phil Rangin : Cultistes dangereux. Mais ils ont raison.

Pavel Smirnov : La communauté russophone F # est un endroit très confortable. Surtout j'aime qu'ils ne soient pas indifférents à leur langue, comme cela se produit dans d'autres écosystèmes plus connus.

Nikolai Matyushin : Peut-être parce que la langue n'est pas très populaire et que les personnes toxiques ne s'attardent pas.

Roman Melnikov : Il y a des drames qui n'affectent pas la langue. Mais la vie est rendue plus intéressante.

Source: https://habr.com/ru/post/fr424461/


All Articles