Muy pronto, del 22 al 23 de noviembre, se celebrará el próximo Moscú DotNext.
El programa se ha vuelto más específico, por lo que me gustaría compartir algunas observaciones sobre informes hardcore y arquitectónicos.
En primer lugar, hay algunos oradores "sin categoría". Estas son personas que podrían completar una conferencia por separado. Ya sabes sus nombres:
Jeffrey Richter ,
Pavel Yosifovich y
Greg Young .
Por lo general, en los artículos sobre Habré junto al orador, inmediatamente le damos su foto. En el caso de Jeffrey y Paul, un caso especial: es mejor que recuerdes a estas personas en las portadas de los libros:

A la derecha están los libros de Pavel Yosifovich . Es conocido como el autor de Windows Internals, WPF Cookbook, Mastering Windows C ++ App Development y cinco cursos en Pluralsight. Si de repente también está interesado en C ++, Pavel recientemente publicó un video en YouTube sobre el modelo de memoria C ++. Además, es un conocido desarrollador, entrenador y orador, pero en este papel apenas lo vimos, casi nunca sucede en Rusia. Y así, Pavel, lo tenemos en DotNext. Este es un gran éxito y victoria, que todo salió bien y él realmente vendrá. En su nuevo informe, "Elementos internos de Windows 10 para desarrolladores de .NET" , hablará sobre características internas interesantes de Windows 10, cómo estas características afectan a los desarrolladores de .NET y cómo puede ponerlas a su servicio de manera útil.
A la izquierda está el libro de Jeffrey Richter . Ya hicimos una entrevista detallada con él para Habr, si realmente quieres saber qué piensa una persona que marca la dirección del desarrollo de Azure, debes ir allí. Jeffrey es el creador en serie de libros clásicos. Después de haber ganado popularidad a principios de los 90 gracias al libro sobre programación de Windows 3.1, no se detuvo. El próximo gran libro, "Aplicaciones de programación para Microsoft Windows", se convirtió en un clásico, más tarde publicado como "Windows a través de C / C ++", y ha resistido varias ediciones. Lo mismo sucedió con "CLR a través de C #". La gente todavía pregunta cuándo será el próximo relanzamiento de "CLR vía C #" (si también está interesado, ¡venga a la conferencia y pregúntese!). Actualmente es Partner Software Architect en Microsoft, trabaja en Distributed Cloud Apps & Storage y está arrastrando toda la plataforma hacia un futuro brillante. Le recomendamos encarecidamente que vaya a sus Aplicaciones de creación de capacidad de respuesta y escalables , un informe sobre el uso efectivo del hierro en la nube, de una persona que lo sabe todo.
En cuanto a Greg Young , no tiene ningún libro particularmente destacado. Él es "solo" el inventor del término CQRS, una de las figuras más famosas e icónicas en esta dirección. Como probablemente ya haya adivinado, en CQRS todo no es tan simple y comprensible como parece a primera vista, y Greg es la persona con la que puede discutir todo esto. Si quiere ver lo que dice Greg, él lo buscó instantáneamente en YouTube , una vez escribió en CodeBetter , y si mira libros sobre CQRS en Amazon, se le encomendó escribir una introducción al libro Exploring CQRS y Event Sourcing escrito por el director Splunk
Video de la charla de Greg Young "Cómo ser productivo en un proyecto en 24 horas"
Hardcore
DotNext se ha establecido como una conferencia en la que los principales oradores aparecen una y otra vez, revelando los problemas especiales más complejos. Hay varios temas que convierten casi cualquier informe en hardcore, por ejemplo, asegurando el máximo rendimiento y detalles de implementación de tecnologías complejas.
Detalles de bajo nivel
Ya hemos hablado de Jeffrey Richter y Pavel Yosifovich. ¡Pero eso no es todo! Veamos qué nos han preparado Raffaele Rialdi, Chris Bacon y Yegor Grishechko.
Bueno, entremos con las cartas de triunfo, ¿alguna vez has querido escribir tu tiempo de ejecución .NET? ¿Funcionó? Chris Bacon logró hacer un proyecto piloto, DotNetAnywhere , un tiempo de ejecución realmente compatible con soporte para cosas como subprocesamiento múltiple, PInvoke, recolección de basura, etc. Fue este proyecto suyo el que se utilizó para construir el marco de Blazor , que le permite ejecutar .NET directamente en el navegador utilizando la tecnología WebAssembly. (Por cierto, el informe sobre Blazor fue hecho por Nikita Tsukanov, el video está en YouTube ). En general, este DotNext dirá "¿Entonces quieres crear tu propio tiempo de ejecución .NET?" - Un informe muy geek e inusual sobre la escritura de tiempo de ejecución.
Pasemos a temas más prácticos. Si ha estado en DotNext, entonces ya debe estar familiarizado con Rafael Rialdi y los temas en los que se especializa. Si no, ¡ahora es el momento de familiarizarse!
Grabaciones de video de Raphael de DotNext 2018 Piter y DotNext 2017 Moscú
Esta vez, Rafael vendrá con un nuevo informe,
"Impulso de la gestión de memoria en escenarios de interoperabilidad" . Es posible que haya notado que han aparecido las nuevas API
Span<T>
y
Memory<T>
, y ahora puede acceder a la memoria no administrada sin tener que hacer copias sin sentido en los objetos administrados. Rafael, en el curso del informe, profundizará en estas API, mostrará detalles sobre ejemplos prácticamente interesantes como IoT, y que un simple mortal en las actividades cotidianas puede hacer todo esto.
Recientemente, ValueTask, tipos similares a tareas e IValueTaskSource han aparecido en versiones recientes del lenguaje. Muchos ni siquiera saben que existen estos tipos, y la mayoría de los que saben de su existencia no entienden por qué lo son. Egor Grishechko en su informe "ValueTask: qué, por qué y por qué" le dirá cuáles son estas nuevas herramientas, por qué se usan y cuándo están justificadas, y cuándo no.
Máximo rendimiento
Casi todos los informes de una forma u otra se relacionan con el rendimiento, incluso de pasada. Esta es una característica del trabajo del desarrollador. Pero algunos que quiero destacar específicamente, estos son los informes de cuatro oradores:
- Konrad Kokosa
- Egor Bogatov
- Evgeny Peshkov
- Alexandre Mutel
Ya hemos visto una charla sobre nuestro propio tiempo de ejecución .NET. ¿Qué hay de tu propio GC? ¿Necesitaremos parchear un archivo terrible con un tamaño de dos megabytes de código C ++ generado? Afortunadamente no. En .NET Core 2.1, agregaron una nueva característica llamada GC local, que le permite reemplazar por completo el recolector de basura estándar con algo genérico, o viceversa: use el recolector estándar fuera del entorno habitual de .NET. En el informe "Haga su GC personalizado .NET -" por qué "y" cómo ", Konrad Kokosa nos presentará cómo se hace esto. Será interesante y útil principalmente para aquellos que desean comprender mejor la gestión de la memoria y el comportamiento del GC. La esencia principal del informe no es tanto que llegaste a casa de la conferencia e inmediatamente transferiste el producto a algo escrito por ti mismo. Más bien, es un informe inspirador que expande los límites de lo que es posible. No tiene que hacer esto, pero ahora existe la oportunidad de experimentar. GC parece cada vez menos una cosa incomprensible en sí misma y cada vez más cae en tu mano como una herramienta conveniente y obediente.
Pero GC es solo el comienzo. Recientemente, en muchos tiempos de ejecución se ha vuelto popular dar acceso al usuario para generar instrucciones del procesador SIMD, como SSE y AVX. Por ejemplo, en JS, SIMD.js fue agregado (y eliminado), en Java, el proyecto de Panamá hace esto, y así sucesivamente. Este mod tampoco omitió .NET. Nos dieron superpoderes, pero son tales que no es suficiente tenerlos; de todos modos, necesitas poder usarlos, y esto es difícil. Por un lado, el control a tal nivel requiere una motivación y calificación tremendas: para escribir un código vectorial que sea superior en rendimiento al escalar, necesita forzar no solo cosas como la alineación, sino también seguir conjuntos específicos de instrucciones, pensar en el resultado de la generación y cosas que ocurrir si te sales de la vía rápida. Por otro lado, si realmente escribe la aplicación de
máximo rendimiento y guarda cada medida, puede encontrar la opacidad incluso de los compiladores más avanzados. Incluso un problema relativamente estudiado, como la asignación de registros, es NP completo (
uno ,
dos ), que requiere intervención humana, y la situación SIMD no parece ser mejor.
Este año, Yegor Bogatov llega con un nuevo informe,
"Optimization Inside .NET Core", en el que le dirá cómo generar SIMD a partir de código de alto nivel. Con Yegor, pronto lanzaremos una entrevista detallada sobre Habré. Ahora quiero decir que Egor trabaja en Microsoft, se especializa en Mono y .NET Core, y esta no es la primera vez que realiza una presentación en DotNext. Mantenga un par de entradas anteriores:
Grabaciones de video de los informes de Egor con DotNext 2017 Moscú y DotNext 2016 Moscú
Egor está muy interesado en la creación de juegos informáticos y móviles, en los que se puedan aplicar todas estas optimizaciones.
La historia reciente con Assassin's Creed Odyssey recientemente publicado confirma esto: los desarrolladores
tuvieron que especificar procesadores con soporte para AVX / SSE 4.1 en los requisitos mínimos del sistema, a pesar de la disminución en la base de clientes (estos son procesadores Intel de segunda generación: Intel Core i5-2400 y superiores, que eran anteriores llamado Sandy Bridge y que no todos tienen).
Si el ejemplo del juego más vendido no te convenció, entonces Alexandre Mutel definitivamente te convencerá. Este es el segundo orador con el que tendremos una entrevista detallada para Habr. Trabaja para Unity Technologies, la compañía que crea uno de los motores de juegos más populares, Unity . (Por cierto, recientemente abrieron el código C # para leer). Alexandre sabe con certeza que existe un código tan crítico que C # aún no puede manejar. Por lo tanto, inventaron un compilador especial "burst": convierte un subconjunto limitado de C # en código nativo optimizado utilizando LLVM, lo que le permite lograr un rendimiento comparable a C ++ y, a veces, incluso más rápido. ¿Cómo generar código mejor que RyuJIT? ¿Qué subconjunto de C # tiene sentido para escribir código ultrarrápido? Estas y otras preguntas se abordarán en el informe "Detrás del compilador de ráfagas, convirtiendo .NET IL a código nativo altamente optimizado usando LLVM" - ¡definitivamente no querrá perderse esto!
Me gustaría finalizar la descripción de esta categoría con algo que pueda beneficiarse directamente de inmediato. Aparentemente, "Métricas del sistema: recopilación de dificultades" es perfectamente adecuado para este papel. Evgeny Peshkov de Kontur le dirá cómo superar las métricas: cómo difieren entre sí, qué hacer con los problemas de rendimiento en Process
y PerformanceCounter
, cómo se organizan los contadores de rendimiento en el interior y lo que se deduce de esto, etc.
El informe anterior de Evgeny, "Excepciones especiales en .NET", ocupó el segundo lugar en la conferencia DotNext Piter 2018. Analiza las características de cada tipo de excepción, por ejemplo, StackOverflowException
, ThreadAbortException
, AccessViolationException
y OutOfMemoryException
que se producen cuando se producen errores en el sistema operativo o en el nivel de tiempo de ejecución.
Excepciones especiales de video en .NET
Mejores prácticas y arquitectura
Después de nuestros anuncios, a veces puede parecer que DotNext es una especie de hardcore sólido para desarrolladores de bajo nivel. De hecho, el programa tiene suficientes otras categorías. Observe de cerca el programa: hay etiquetas junto a la mayoría de los informes. Al elegir qué informe continuar, preste atención a ellos. Hardcore contiene etiquetas sobre el rendimiento y los detalles del compilador, junto a ellas hay un ícono parlante con una "cabra". ¡Pero mira cuántos temas universales puedes aplicar ahora mismo!

Mientras tanto, encontrar excelentes informes sobre "buenas prácticas" y "arquitectura" es algo muy difícil. El hecho de que uno parece ser una idea brillante, para otros, suena como un completo disparate y viceversa. ¿El orador en la compañía tenía una cierta arquitectura para el sistema, pero para nosotros de una manera diferente? ¿Y qué significa eso? Afortunadamente, hay una serie de temas que pueden discutirse no solo por razones de gusto.
Mejores prácticas
En primer lugar, estas son áreas en las que obviamente están ocurriendo problemas. Cada vez que vuela en un avión, quiere escuchar una colección de música, y un famoso servicio ruso en la nube dice que es bueno que haya descargado la colección en su disco incorporado y se haya desconectado, pero ¿puede verificar la licencia? Antes de la verificación de la licencia, diez kilómetros verticalmente. La próxima vez que descargue todo en alta resolución en el disco incorporado y vaya a escuchar la aplicación del reproductor. Y en algún lugar en el medio del vuelo, un jugador comprado sinceramente pregunta: todo está bien, pero olvidé verificar la licencia y descargar algo. Saltas diez kilómetros verticalmente. Desde el punto de vista del desarrollador, esto parece aún más infernal, porque muchos marcos familiares no implican en absoluto la ausencia de una conexión de red. En algunos casos, debe escribir muchas cosas feas como el código duplicado para la lectura directa y en caché. Ahora multiplicamos todo esto en la plataforma cruzada y permanecemos en el canal. ¿O lo parece al principio? Escribe en los comentarios. En DotNext habrá un informe maravilloso sobre este tema,
"Creación de aplicaciones Xamarin a prueba de modo avión" de Gerald Versluis, que puede conocer de numerosos
discursos y publicaciones de blog y un par de libros. A pesar del nombre, este informe será interesante incluso para aquellas personas que no están familiarizadas con Xamarin.

Hay temas eternos, cuya respuesta exacta aún no se ha encontrado, pero con cada año la comprensión está creciendo rápidamente. Una de las batallas interminables es TDD vs TestLast. Para empezar, muchas personas tienen problemas con las pruebas en general, a nivel de proceso: en el mundo del desarrollo impulsado por los plazos, no estará especialmente desarrollado. Incluso hicimos una conferencia de prueba especial,
Heisenbug . Los programadores son aún más complicados: TDD se inventó alrededor del año 99 como parte de Extreme Programming. A pesar de todo su genio, nunca capturó el mundo, lo que se ve facilitado por una serie de factores. En la vida ordinaria, resulta que ni siquiera Test-First, sino el verdadero Test-Last. Este enfoque también tiene ventajas (se ajusta mucho más fácilmente a los plazos) y una serie de desventajas obvias. ¿Recuerdas el artículo
"TDD is Dead" sin piedad del creador de Ruby on Rails? Fue escrito en 2014. Pasaron 4 años y el péndulo no permaneció en su lugar. ¿Cómo te sientes acerca de este problema? En DotNext habrá
"Test Last, Test First, TDD: When to Use One or Another Approach" , un informe con un título parlante de Alexander Kugushev. Alexander se detendrá en detalle en todos estos enfoques y considerará su aplicabilidad a ejemplos específicos bastante complejos.
Otro informe se hace eco de este informe: "Prueba de unidad pragmática" por Vladimir Khorikov, un especialista de un tipo diferente, un experto en salvar grandes proyectos de legado empresarial. Sí, no nos gusta hablar de eso, pero a veces las cosas más estúpidas conducen al colapso de incluso los proyectos más duraderos construidos eternamente . Uno de los factores técnicos para el éxito a largo plazo de las empresas de tecnología son las pruebas unitarias correctas. Todos conocemos un montón de prácticas, pero a la larga, no todas las prácticas son igualmente útiles. Este informe no es para principiantes, es para aquellos que pueden escribir exámenes y desean llevar su comprensión a un nuevo nivel. Por cierto, Vladimir tiene un excelente blog en el que analiza los problemas arquitectónicos más interesantes. La ficción es muy recomendable tanto para principiantes juniors para la iluminación, como para seniors experimentados para la sistematización.
En la sección sobre buenas prácticas, me gustaría mencionar otro informe: “Cómo sobrevivir bajo carga: un servidor tolerante a fallas, un cliente inteligente” de Igor Lukanin. Igor es una persona que, como representante de Kontur, ha asistido a casi todas nuestras últimas conferencias. Phillennium y yo lo entrevistamos repetidamente y notamos rápidamente que podía dar una respuesta profunda y precisa a una gran cantidad de preguntas prácticas. No fue necesario prepararse especialmente para una entrevista con Igor: le hicimos cualquier pregunta y él respondió casi todo. Además de la pregunta más importante: ¿cuándo vendrá a nuestra conferencia como orador? Y así sucedió. La descripción del informe dice simplemente: "Aprenderá del informe cómo crear dichos microservicios y realizar pruebas de estrés para asegurarse de que resisten la carga". No hay duda de que será así, y vale mucho. Al final, la infraestructura Contour es probablemente la mayor producción de .NET en Rusia. En cualquier caso, siempre puede hacer preguntas adicionales a Igor en el área de discusión.
Arquitectura
Y finalmente, nuestra última categoría para hoy es la arquitectura. Muchos de nosotros recordamos el artículo de Joel Spolsky
"No dejes que los astronautas de la arquitectura te asusten" . Si no lo has leído, mira, nada ha cambiado mucho desde entonces. “Recuerde que los aficionados a la arquitectura generalmente resuelven problemas que creen que pueden resolverse. Para nada aquellos que son
útiles para resolver ”, nos recuerda Spolsky. Nuestros informes "arquitectónicos" se seleccionan sobre una base común: deben tener una utilidad práctica concreta, un público objetivo específico, comunicar claramente los pensamientos en solo cuarenta minutos asignados para el informe. A pesar de la simplicidad externa de tales requisitos, no todas las aplicaciones los cumplen.
Entonces, ¿a quién tenemos esta vez? Ya hemos hablado de Greg Young al comienzo del artículo. Este es un orador "fuera de categoría", que vale la pena ir solo porque es Greg.
Vagif Abilov ( VagifAbilov ) vendrá con un informe "La vida de los actores en el grupo: por qué, cuándo y cómo" . Wagif es un orador de renombre y miembro del comité del programa DotNext. Por cierto, se presentan demandas especialmente altas en el informe del participante de PC: este debería ser un ejemplo de cómo contar buenos informes arquitectónicos. Esta vez habrá un poderoso informe sobre el modelo de actor, Akka y los límites de su aplicabilidad. Discutiremos la escala y las plantillas básicas de decisión de clúster. Está claro que se puede decir más, pero es difícil hacerlo sin spoilers. Solo ven al informe y descubre todo esto tú mismo. Todas las decisiones no son un vuelo de pensamiento del astronauta, sino que se prueban según la experiencia de la Norwegian Broadcasting Corporation (NRK).
Vagif no fue inmediatamente miembro de la PC, pero comenzó como orador en DotNext anterior.
Tres videos de informes anteriores.
La gente aprende arquitectura de viejos libros que fueron escritos para Java. Los libros son buenos, pero proporcionan una solución a los problemas de esa época con instrumentos de esa época. El tiempo ha cambiado, C # es más similar a Light Scala que Java, y hay pocos libros nuevos y buenos.
En el informe "Diseño instantáneo", Maxim Arshinov hablará sobre los criterios para el código bueno y el código malo, cómo y cómo medirlo. Hará una descripción general de las tareas y enfoques típicos, analizará los pros y los contras. Al final, dará recomendaciones y mejores prácticas para diseñar aplicaciones web. Maxim, como habrás adivinado, el famoso autor de autor @marshinov . Es cofundador de la empresa de alta tecnología de outsourcing High Tech Group y, además de hacer negocios, enseña en la Escuela Superior de Tecnología de la Información. Es decir, este es un informe de una persona que ha estado en el problema "en ambos lados de la barricada": tanto desde el lado del aprendizaje de nuevas tecnologías como desde el lado del uso en negocios reales.
Puedes conocer a Maxim de la actuación anterior en DotNext en San Petersburgo
Y finalmente, el último informe en la revisión de hoy. Alexey Merson con el informe "Diseño impulsado por el dominio: una receta para un pragmático" nos revelará la esencia de DDD. Más precisamente, el que no sabe lo descubrirá. Quién sabe, sabe mejor. La rica experiencia personal permite contarle a Alexei cosas complejas en un lenguaje simple y comprensible.
Ya podías ver uno de sus discursos en la reunión de la comunidad SpbDotNet.
Le recordamos que DotNext 2018 Moscú se llevará a cabo muy pronto, del 22 al 23 de noviembre en el Radisson Royal Moscow Congress Park. Los boletos aún se pueden comprar en el sitio web de la conferencia .
Y también, nuestros amigos DevZen Podcast lanzaron recientemente una versión para PC DotNext, que puede escuchar a su gusto.