C# 2021: mucha magia y grandes riesgos

Cuanto más veo las nuevas características que están introduciendo C# más “miedito voy sintiendo”. Veo algunas características que se anuncian con un espíritu de “mucha funcionalidad con muy poco código“. Un ejemplo de esto es el tweet de ayer de David Fowler.

Cuando veo este tipo de anuncios no puedo evitar recordar los primeros años de .Net cuando ASP.NET WebForms generaba también ilusiones de simplicidad y productividad. En cierto modo la promesa sonaba como “podes hacer aplicaciones web como si fueran aplicaciones desktop y sin tener que aprender de tecnologías web“. Tiempo después descubrimos que el uso de WebForms tal como era promocionado (sin entender bien la web) tenía un conjunto de efectos colaterales que causaron estragos negativos en muchas aplicaciones y dolores de cabeza en muchos programadores.

Por otro lado, esta constante evolución de los lenguajes me resulta molesta y hasta inconveniente. En el caso de C# no bastaba con tener clases, enums, structs, interfaces, etc. que había que agregar records. Entiendo que la intención de gran parte de estos cambios es proveer mejores niveles de abstracción y simplificar el trabajo de programador. Si es así, estoy de acuerdo con la intención pero no comparto la estrategia. Yo personalmente me inclino más por la estrategia de Smalltalk, mantener el lenguaje al mínimo y agregar funcionalidades mediante el agregado de paquetes de clases.

Y ya que estamos, otra cuestión que no me gusta de .Net/C# es que el modelo de ejecución sync/async resulta extremadamente intrusivo, forzando a que las clases de dominio que contienen la lógica de negocio se vean “contaminadas” con elementos del modelo de ejecución (async, await, etc). Entiendo que esto es en favor de una mejor performance en mi opinión no vale la pena. Prefiero mantener el código más limpio y lidiar con el modelo de ejecución a nivel de infraestructura incluso cuando ello conlleve cierta penalidad de performance.

Es por todo esto que muchas veces mi código C# no hace uso de “las magias” recientes del lenguaje/plataforma y confío en que es mucho más claro que sí usara “esas magias”.

En fin, C# como lenguaje me gustó mucho desde un comienzo así que solo espero que quienes trabajan en su evolución no lo choquen.

One thought on “C# 2021: mucha magia y grandes riesgos

  1. En parte estoy de acuerdo con vos, pero muchos de los cambios parecen bien orientados en el largo plazo.

    Por ejemplo Records: la idea es evitar la mutabilidad y simplificar el uso de buenas prácticas que vienen del ámbito de Functional Programming.

    Lo mismo con los tipos de referencia no nullables. No estoy seguro si lo están haciendo de la mejor manera, pero creo que es encomiable que intenten resolver el problema del billon de dolares en un lenguaje ya establecido.

    Creo que este artículo de hace 6 años, cuando aún algunos preferían usar foreach y List.Add() en lugar de Select puede servirte para verlo de otra manera: https://blog.ploeh.dk/2015/08/03/idiomatic-or-idiosyncratic/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.