Jeffrey Richter, Pavel Yosifovich, Greg Young et tout-tout. Hardcore et architecture à DotNext 2018 Moscou

Très prochainement, du 22 au 23 novembre, se tiendra le prochain DotNext de Moscou. Le programme est devenu plus spécifique, je voudrais donc partager quelques observations sur les rapports hardcore et architecturaux.

Premièrement, il y a des haut-parleurs «sans catégorie». Ce sont des gens qui pourraient eux-mêmes remplir une conférence distincte. Vous connaissez leurs noms: Jeffrey Richter , Pavel Yosifovich et Greg Young .

Habituellement, dans les articles sur Habré à côté de l'orateur, nous donnons immédiatement sa photo. Dans le cas de Jeffrey et Paul, un cas spécial - vous vous souvenez mieux de ces personnes sur les couvertures de livres:




À droite, les livres de Pavel Yosifovich . Il est connu comme l'auteur de Windows Internals, WPF Cookbook, Mastering Windows C ++ App Development et de cinq cours à Pluralsight. Si vous êtes soudainement également intéressé par le C ++, alors Pavel a récemment publié une vidéo sur YouTube sur le modèle de mémoire C ++. De plus, il est un développeur, formateur et conférencier bien connu, mais dans ce rôle, nous l'avons à peine vu - il n'arrive presque jamais en Russie. Et donc, Pavel - nous l'avons sur DotNext. C'est un grand succès et une victoire, que tout a fonctionné et qu'il viendra vraiment. Dans son nouveau rapport, «Windows 10 internes pour les développeurs .NET», il parlera des fonctionnalités internes intéressantes de Windows 10, de la façon dont ces fonctionnalités affectent les développeurs .NET et de la façon dont vous pouvez les mettre utilement à votre service.



À gauche, le livre de Jeffrey Richter . Nous avons déjà fait une interview détaillée avec lui pour Habr, si vous voulez vraiment savoir ce que pense la personne qui définit la direction du développement d'Azure, vous devriez y aller. Jeffrey est le créateur en série de livres classiques. Ayant gagné en popularité au début des années 90 grâce au livre sur la programmation de Windows 3.1, il ne s'est pas arrêté. Le prochain gros livre, "Programming Applications for Microsoft Windows", est devenu un classique, publié plus tard sous le nom de "Windows via C / C ++" et a résisté à plusieurs éditions. La même chose s'est produite avec «CLR via C #». Les gens demandent toujours quand la prochaine réédition de "CLR via C #" sera (si vous êtes également intéressé, venez à la conférence et demandez-vous!). Il est maintenant architecte logiciel partenaire chez Microsoft, travaillant dans les applications et le stockage dans le cloud distribué, et entraîne la plate-forme entière vers un avenir radieux. Nous vous recommandons fortement de consulter ses applications réactives et évolutives Building , un rapport sur l'utilisation efficace du cloud iron - d'une personne qui sait tout à ce sujet.



Quant à Greg Young , il n'a pas de livres particulièrement médiatisés. Il n'est «que» l'inventeur du terme CQRS, l'une des figures les plus célèbres et emblématiques dans ce sens. Comme vous l'avez probablement déjà deviné, au CQRS, tout n'est pas aussi simple et compréhensible qu'il n'y paraît à première vue, et Greg est la personne même avec laquelle vous pouvez discuter de tout cela. Si vous voulez voir ce que dit Greg, il a immédiatement recherché sur YouTube , il a écrit une fois sur CodeBetter , et si vous regardez des livres sur CQRS sur Amazon, alors il lui a été confié la rédaction d'une introduction au livre Exploring CQRS and Event Sourcing écrit par le directeur Splunk



Vidéo de la conférence de Greg Young "Comment devenir productif dans un projet en 24h"



Hardcore


DotNext s'est imposé comme une conférence à laquelle des conférenciers de premier plan apparaissent encore et encore, révélant les problèmes spéciaux les plus complexes. Il existe plusieurs sujets qui transforment presque n'importe quel rapport en hardcore, par exemple, garantissant des performances maximales et des détails de mise en œuvre de technologies complexes.

Détails de bas niveau


Nous avons déjà parlé de Jeffrey Richter et Pavel Yosifovich. Mais ce n’est pas tout! Voyons ce que Raffaele Rialdi, Chris Bacon et Yegor Grishechko nous ont préparé.

Eh bien, allons-y avec des atouts, avez-vous déjà voulu écrire votre runtime .NET? Cela at-il fonctionné? Chris Bacon a réussi à faire un projet pilote, DotNetAnywhere , un runtime vraiment compatible avec la prise en charge de choses comme le multithreading, PInvoke, le garbage collection, etc. C'est ce projet qui a été utilisé pour construire le framework Blazor , qui vous permet d'exécuter .NET directement dans le navigateur en utilisant la technologie WebAssembly. (Soit dit en passant, le reportage sur Blazor a été réalisé par Nikita Tsukanov, la vidéo est sur YouTube ). En général, ce DotNext dira "Donc, vous voulez créer votre propre runtime .NET?" - Un rapport très geek et inhabituel sur l'écriture d'exécution.



Passons à des sujets plus pratiques. Si vous avez visité DotNext, vous devez déjà être familier avec Rafael Rialdi et les sujets dans lesquels il se spécialise. Sinon, c'est le moment de vous familiariser!

Enregistrements vidéo de Raphaël de DotNext 2018 Piter et DotNext 2017 Moscou





Cette fois, Rafael présentera un nouveau rapport, «Booster la gestion de la mémoire dans les scénarios d'interopérabilité» . Vous avez peut-être remarqué que les nouvelles API Span<T> et Memory<T> sont apparues, et vous pouvez désormais accéder à la mémoire non managée sans avoir à effectuer de copie inutile vers des objets gérés. Rafael, au cours du rapport, va explorer ces API, montrer des détails sur des exemples pratiquement intéressants comme l'IoT, et qu'un simple mortel dans les activités quotidiennes peut faire tout cela.

Récemment, ValueTask, les types de tâches et IValueTaskSource sont apparus dans les versions récentes du langage. Beaucoup ne savent même pas que ces types existent et la plupart de ceux qui connaissent leur existence ne comprennent pas pourquoi ils existent. Egor Grishechko dans son rapport «ValueTask: quoi, pourquoi et pourquoi» vous dira quels sont ces nouveaux outils, pourquoi ils sont utilisés et quand ils sont justifiés, et quand ils ne le sont pas.



Performances maximales


Presque tous les rapports se rapportent d'une manière ou d'une autre aux performances, même en passant. Ceci est une fonctionnalité du développeur. Mais certains que je veux souligner spécifiquement, ce sont les rapports de quatre orateurs:

  • Konrad Kokosa
  • Egor Bogatov
  • Evgeny Peshkov
  • Alexandre Mutel


Nous avons déjà vu une présentation de notre propre runtime .NET. Et votre propre GC? Aurons-nous besoin de patcher un fichier terrible d'une taille de deux mégaoctets de code C ++ généré? Heureusement non. Dans .NET Core 2.1, ils ont ajouté une nouvelle fonctionnalité appelée Local GC, qui vous permet de remplacer complètement le garbage collector standard par quelque chose de générique, ou vice versa - utilisez le collecteur standard en dehors de l'environnement .NET habituel. Dans le rapport «Créez votre GC .NET personnalisé -« pourquoi »et« comment », Konrad Kokosa nous expliquera comment procéder. Il sera intéressant et utile principalement pour ceux qui veulent mieux comprendre la gestion de la mémoire et le comportement du GC. L'essence principale du rapport n'est pas tant que vous êtes rentré de la conférence et que vous avez immédiatement transféré le prod à quelque chose d'auto-écrit. C'est plutôt un rapport inspirant qui repousse les limites de ce qui est possible. Vous n'avez pas à le faire, mais vous avez maintenant la possibilité d'expérimenter. GC semble de moins en moins une chose incompréhensible en soi et de plus en plus tombe entre vos mains comme un outil pratique et obéissant.



Mais GC n'est qu'un début. Récemment, dans de nombreux environnements d'exécution, il est devenu populaire de donner à l'utilisateur un accès pour générer des instructions de processeur SIMD, telles que SSE et AVX. Par exemple, dans JS, SIMD.js a été ajouté (et supprimé), dans Java, le projet Panama le fait, etc. Ce mod n'a pas non plus contourné .NET. Ils nous ont donné des super-pouvoirs, mais ils sont tels que cela ne suffit pas - il faut quand même pouvoir les utiliser, et c'est difficile. D'une part, le contrôle à un tel niveau nécessite une motivation et une qualification considérables: pour écrire un code vectoriel dont les performances sont supérieures à scalaires, vous devez non seulement forcer des choses comme l'alignement, mais également suivre des ensembles d'instructions spécifiques, penser au résultat de la génération et des choses qui se produire si vous sortez de la voie rapide. D'un autre côté, si vous écrivez vraiment l'application aux performances maximales et enregistrez chaque mesure, vous pouvez rencontrer la lourdeur des compilateurs même les plus avancés. Même un problème relativement étudié, comme l'allocation de registres, est NP-complet ( un , deux ), nécessitant une intervention humaine, et la situation SIMD ne semble pas être meilleure.

Cette année, Yegor Bogatov arrive avec un nouveau rapport, "Optimization Inside .NET Core", dans lequel il vous expliquera comment générer SIMD à partir de code de haut niveau. Avec Yegor, nous publierons prochainement une interview détaillée sur Habré. Maintenant, je veux dire qu'Egor travaille chez Microsoft, spécialisé dans Mono et .NET Core, et ce n'est pas la première fois qu'il fait une présentation sur DotNext. Conservez quelques entrées précédentes:

Enregistrements vidéo des rapports d'Egor avec DotNext 2017 Moscou et DotNext 2016 Moscou





Egor est très intéressé par la création de jeux informatiques et mobiles, dans lesquels toutes ces optimisations peuvent être appliquées. Une histoire récente avec la récente version d'Assassin's Creed Odyssey le confirme: les développeurs devaient spécifier des processeurs prenant en charge AVX / SSE 4.1 dans la configuration minimale requise, même en dépit d'une diminution de la base de clients (il s'agit de processeurs Intel de 2e génération: Intel Core i5-2400 et supérieurs, qui étaient plus tôt). appelé Sandy Bridge et que tout le monde n'a pas).

Si l'exemple du jeu le plus vendu ne vous a pas convaincu, Alexandre Mutel vous convaincra certainement. Ceci est le deuxième orateur avec lequel nous aurons une interview détaillée pour Habr. Il travaille pour Unity Technologies, la société qui crée l'un des moteurs de jeux les plus populaires, Unity . (Soit dit en passant, ils ont récemment ouvert le code C # pour la lecture). Alexandre sait avec certitude qu'il existe un code si critique que le C # normal ne peut toujours pas le gérer. Par conséquent, ils ont inventé un compilateur spécial "burst": il transforme un sous-ensemble limité de C # en code natif optimisé en utilisant LLVM, ce qui vous permet d'obtenir des performances comparables à C ++, et parfois même plus rapides. Comment générer du code mieux que RyuJIT? Quel sous-ensemble de C # est logique pour écrire du code ultra-rapide? Ces questions et d'autres seront abordées dans le rapport «Derrière le compilateur de rafales, conversion de .NET IL en code natif hautement optimisé en utilisant LLVM» - vous ne voudrez certainement pas manquer cela!



Je voudrais terminer la description de cette catégorie par quelque chose qui peut immédiatement bénéficier directement. Apparemment, «Mesures du système: collecter les pièges» convient parfaitement à ce rôle. Evgeny Peshkov de Kontur vous expliquera comment surmonter les mesures: comment elles diffèrent entre elles, que faire des problèmes de performances dans Process et PerformanceCounter , comment les compteurs de performances sont organisés à l'intérieur et ce qui en découle, etc.



Le rapport précédent d'Evgeny, «Special Exceptions in .NET», avait pris la deuxième place lors de la conférence DotNext Piter 2018. Il décrit les fonctionnalités de chaque type d'exception, par exemple, StackOverflowException , ThreadAbortException , AccessViolationException et OutOfMemoryException qui se produisent lorsque des erreurs se produisent au niveau du système d'exploitation ou de l'exécution.



Exceptions spéciales vidéo dans .NET



Meilleures pratiques et architecture



Après nos annonces, il peut parfois sembler que DotNext est une sorte de hardcore solide pour les développeurs de bas niveau. En fait, le programme comporte suffisamment d'autres catégories. Jetez un œil au programme - il y a des balises à côté de la plupart des rapports. Lors du choix du rapport à suivre, faites-y attention. Hardcore est une balise sur les performances et les détails du compilateur, à côté d'eux est une icône parlante avec une «chèvre». Mais regardez combien de thèmes universels vous pouvez appliquer dès maintenant!



Pendant ce temps, trouver de bons rapports sur les «bonnes pratiques» et «l'architecture» est une chose très difficile. Le fait que l'un semble être une idée brillante, pour d'autres, cela ressemble à un non-sens complet et vice versa. L'orateur de l'entreprise avait-il une certaine architecture pour le système, mais pour nous d'une manière différente? Et qu'est-ce que cela signifie? Heureusement, il existe un ensemble de sujets qui peuvent être discutés non seulement pour des raisons de goût.

Meilleures pratiques


Premièrement, ce sont des domaines dans lesquels des problèmes se manifestent évidemment. Chaque fois que vous prenez l'avion, vous voulez écouter une collection de musique, et un service cloud russe bien connu dit que c'est bien que vous ayez téléchargé votre collection sur le disque intégré et que vous soyez hors ligne, mais pouvez-vous vérifier la licence? Avant la vérification de licence, dix kilomètres verticalement. La prochaine fois que vous téléchargerez tout en haute résolution sur le disque intégré et que vous allez écouter l'application du lecteur. Et quelque part au milieu du vol, un joueur honnêtement acheté demande - tout va bien, mais j'ai oublié de vérifier la licence et de télécharger quelque chose. Vous sautez à travers dix kilomètres verticalement. Du point de vue du développeur, cela semble encore plus infernal, car de nombreux frameworks familiers n'impliquent pas du tout l'absence de connexion réseau. Dans certains cas, vous devez écrire beaucoup de choses laides comme du code en double pour la lecture directe et en cache. Maintenant, nous multiplions tout cela sur la plateforme croisée et restons au creux. Ou semble-t-il ainsi au début? Écrivez dans les commentaires. Sur DotNext, il y aura un merveilleux rapport sur ce sujet, "Création d'applications Xamarin à l'épreuve du mode avion" de Gerald Versluis, que vous pouvez connaître à partir de nombreux discours et articles de blog et de quelques livres. Malgré son nom, ce rapport sera intéressant même pour les personnes qui ne connaissent pas Xamarin.



Il y a des sujets éternels, dont la réponse exacte n'a pas encore été trouvée, mais avec chaque année la compréhension se développe rapidement. L'une des batailles sans fin est TDD vs TestLast. Pour commencer, beaucoup de gens ont des problèmes avec les tests en général, au niveau du processus - dans le monde du développement axé sur les délais, vous ne serez pas spécialement développé. Nous avons même organisé une conférence de test spéciale, Heisenbug . Les programmeurs sont encore plus compliqués - TDD a été inventé vers l'an 99 dans le cadre de Extreme Programming. Malgré tout son génie, il n'a jamais conquis le monde, ce qui est facilité par un certain nombre de facteurs. Dans la vie ordinaire, il s'avère même pas Test-First, mais le vrai Test-Last. Cette approche présente également à la fois des avantages (elle s'intègre beaucoup plus facilement dans les délais) et un certain nombre d'inconvénients évidents. Rappelez-vous l'article impitoyablement impitoyable "TDD is Dead" du créateur de Ruby on Rails? Il a été écrit en 2014. 4 ans se sont écoulés et le pendule n'est pas resté en place. Que pensez-vous de ce problème? Sur DotNext, il y aura «Test Last, Test First, TDD: Quand utiliser l'une ou l'autre approche» - un rapport avec un titre parlant d'Alexander Kugushev. Alexander s'attardera en détail sur toutes ces approches et examinera leur applicabilité à des exemples spécifiques plutôt complexes.

Un autre rapport fait écho à ce rapport - «Les tests unitaires pragmatiques» de Vladimir Khorikov, spécialiste d'un type différent, expert dans la sauvegarde de projets hérités d'entreprise de grande envergure. Oui, nous n'aimons pas en parler, mais parfois les choses les plus stupides conduisent à l'effondrement même des projets les plus durables construits éternellement . L'un des facteurs techniques du succès à long terme des entreprises technologiques est le bon test unitaire. Nous connaissons tous un tas de pratiques, mais à long terme, toutes les pratiques ne sont pas également utiles. Ce rapport n'est pas destiné aux débutants - il s'adresse à ceux qui peuvent passer des tests et qui souhaitent porter leur compréhension à un nouveau niveau. Soit dit en passant, Vladimir a un excellent blog dans lequel il analyse les problèmes architecturaux les plus intéressants. La fiction est fortement recommandée pour les juniors débutants pour l'illumination et les seniors chevronnés pour la systématisation.



Dans la section sur les bonnes pratiques, je voudrais mentionner un autre rapport - «Comment survivre sous charge: un serveur tolérant aux pannes, un client intelligent» par Igor Lukanin. Igor est une personne qui, en tant que représentant de Kontur, a assisté à presque toutes nos dernières conférences. Phillennium et moi l'avons interviewé à plusieurs reprises et avons rapidement remarqué qu'il était capable de donner une réponse profonde et précise à un grand nombre de questions pratiques. Il n'était pas nécessaire de se préparer spécialement pour un entretien avec Igor - nous lui avons posé des questions et il a répondu à presque tout. Outre la question la plus importante: quand viendrez-vous à notre conférence en tant que conférencier? Et c'est arrivé. La description du rapport dit simplement: "Vous apprendrez du rapport comment créer de tels microservices et effectuer des tests de résistance pour vous assurer qu'ils résistent à la charge." Il ne fait aucun doute qu'il en sera ainsi, et cela vaut beaucoup. Au final, l'infrastructure Contour est probablement la plus grande production de .NET en Russie. Dans tous les cas, vous pouvez toujours poser des questions supplémentaires à Igor dans la zone de discussion.



L'architecture


Et enfin, notre dernière catégorie pour aujourd'hui est l'architecture. Beaucoup d’entre nous se souviennent de l’article de Joel Spolsky «Ne laissez pas les astronautes de l’architecture vous effrayer» . Si vous ne l’avez pas lu, regardez, rien n’a beaucoup changé depuis. «N'oubliez pas que les amateurs d'architecture résolvent généralement les problèmes qu'ils pensent pouvoir être résolus. Pas du tout ceux qui sont utiles à résoudre », nous rappelle Spolsky. Nos rapports «architecturaux» sont sélectionnés sur une base commune: ils doivent avoir une utilité pratique concrète, un public cible spécifique, communiquer clairement les réflexions en seulement quarante minutes allouées au rapport. Malgré la simplicité extérieure de ces exigences, toutes les applications ne les satisfont pas.

Alors, qui avons-nous cette fois? Nous avons déjà discuté de Greg Young au tout début de l'article. Il s'agit d'un haut-parleur "hors catégories", qui vaut la peine d'y aller juste parce que c'est Greg.

Vagif Abilov ( VagifAbilov ) présentera un rapport "La vie des acteurs du cluster: pourquoi, quand et comment" . Wagif est un conférencier de renom et membre du comité du programme DotNext. Soit dit en passant, des exigences particulièrement élevées sont imposées au rapport du participant PC - cela devrait être un exemple de la façon de dire de bons rapports architecturaux. Cette fois, il y aura un rapport puissant sur le modèle d'acteur, Akka et les limites de leur applicabilité. Nous discuterons de la mise à l'échelle et des modèles de décision de cluster de base. Il est clair que l'on peut en dire plus, mais il est difficile de se passer de spoilers. Venez au rapport et découvrez tout cela vous-même. Toutes les décisions ne sont pas une fuite de pensée de l'astronaute, mais sont testées sur l'expérience de la Norwegian Broadcasting Corporation (NRK).



Vagif n'était pas immédiatement membre du PC, mais a commencé en tant que conférencier sur le précédent DotNext.

Trois vidéos de rapports précédents







Les gens apprennent l'architecture à partir de vieux livres écrits pour Java. Les livres sont bons, mais ils apportent une solution aux problèmes de l'époque avec des instruments de l'époque. Le temps a changé, C # ressemble plus à Scala léger qu'à Java, et il y a peu de nouveaux bons livres.

Dans le rapport "Instant Design", Maxim Arshinov parlera des critères du bon code et du mauvais code, comment et comment le mesurer. Il fera un aperçu des tâches et des approches typiques, il analysera les avantages et les inconvénients. À la fin, il donnera des recommandations et des meilleures pratiques pour la conception d'applications Web. Maxim - comme vous l'avez peut-être deviné, le célèbre auteur-auteur @marshinov . Il est co-fondateur de la société d'externalisation de haute technologie High Tech Group, et en plus de faire des affaires, il enseigne à la Higher School of Information Technology. Autrement dit, il s'agit du rapport d'une personne qui a été dans le problème "des deux côtés de la barricade": à la fois du côté de l'apprentissage des nouvelles technologies et du côté de l'utilisation dans les affaires réelles.


Vous pouvez connaître Maxim de la performance précédente sur DotNext à Saint-Pétersbourg



Et enfin, le dernier rapport de l'examen d'aujourd'hui. Alexey Merson avec le rapport «Conception orientée domaine: une recette pour un pragmatique» nous dévoilera l'essence du DDD. Plus précisément, celui qui ne le sait pas le découvrira. Qui sait - sait mieux. Une riche expérience personnelle permet de raconter à Alexei des choses complexes dans un langage simple et compréhensible.



Vous pouviez déjà voir l'un de ses discours lors de la réunion de la communauté SpbDotNet.



Nous vous rappelons que DotNext 2018 Moscou se tiendra très prochainement - du 22 au 23 novembre au Radisson Royal Moscow Congress Park. Les billets peuvent toujours être achetés sur le site Web de la conférence .

Et aussi, nos amis DevZen Podcast ont récemment publié une version PC DotNext, que vous pouvez écouter à votre guise.

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


All Articles