urriellu.net => Artículos => Software => Ventajas C#

¿Por qué C#?

Continuamente hablo con distintas personas sobre C#, y lo que suelo ver es que la gente es rehacia al cambio. Es normal, nos pasa a todos, pero con un poco de esfuerzo y sabiendo Java o C++ (por ejemplo) es muy fácil empezar a programar en C#, pero ¿por qué debería aprenderlo?.

Aviso: defiendo C# para aplicaciones de escritorio y quizás para PDAs y juegos, no para sistemas embebidos (como microcontroladores), sistemas en tiempo real ni kernels, así que las ventajas siguientes no necesariamente deben cumplirse para aplicaciones que no son de escritorio.

Actualización: Estoy trabajando en el proyecto Pigmeo, que permite desarrollar fácilmente aplicaciones (en tiempo real y diseñado para generar código muy eficiente) escritas en cualquier lenguaje de .NET (incluido C#) para microcontroladores.

Ventajas frente a C y C++

  • Compila a código intermedio (CIL) independiente del lenguaje en que haya sido escrita la aplicación e independiente de la máquina donde vaya a ejecutarse
  • Recolección de basura automática
  • Eliminación del uso punteros, en C# no se necesitan
  • Capacidades de reflexión
  • No hay que preocuparse por archivos de cabecera ".h"
  • No importa el orden en que hayan sido definidas las clases ni las funciones
  • No hay necesidad de declarar funciones y clases antes de definirlas
  • No existen las dependencias circulares
  • Soporta definición de clases dentro de otras
  • No existen funciones, ni variables globales, todo pertenece a una clase
  • Todos los valores son inicializados antes de ser usados (automáticamente se inicializan al valor estandarizado, o manualmente se pueden inicializar desde constructores estáticos)
  • No se pueden utilizar valores no booleanos (enteros, coma flotante...) para condicionales. Es mucho más limpio y menos propenso a errores
  • Puede ejecutarse en una sandbox restringida

Ventajas frente a C++ y java

  • Concepto formalizado de los métodos get y set, con lo que se consigue código mucho más legible
  • Gestión de eventos (usando delegados) mucho más limpia

Ventajas frente a java

  • El rendimiento es, por lo general, mucho mejor
  • CIL (el lenguaje intermedio de .NET) está estandarizado, mientras que los bytecodes de java no lo están
  • Soporta bastantes más tipos primitivos (value types), incluyendo tipos numéricos sin signo
  • Indizadores que permiten acceder a cualquier objeto como si se tratase de un array
  • Compilación condicional
  • Aplicaciones multi-hilo simplificadas
  • Soporta la sobrecarga de operadores, que aunque pueden complicar el desarrollo son opcionales y algunas veces muy útiles
  • Permite el uso (limitado) de punteros cuando realmente se necesiten, como al acceder a librerías nativas que no se ejecuten sobre la máquina virtual

Subjetivamente

Está claro que si programas en tu tiempo libre lo que quieres es sentirte bien programando. Si te gusta la programación, aunque el aprendizaje (que es fácil) no te guste demasiado, en cuanto tengas algo de experiencia te empezará a gustar C#, seguro. Tras todas las ventajas y desventajas técnicas que pueda tener un lenguaje lo más importante es que te sientas bien utilizándolo, y gracias a la cantidad de detalles imperceptibles que te facilitan la vida cuando programas en C# usando IDEs como Visual Studio, SharpDevelop, Monodevelop... programas mucho más rápido, cómodamente y con menos fallos que en la mayoría de lenguajes.

Mitos y realidades

  • "Es propiedad de Microsoft" - ¡No! Microsoft lo desarrolló, y la verdad es que hizo un buen trabajo, pero tanto C# como el Framework de .NET están estandarizados por la ECMA (2) y por la ISO (2). No obstante, ADO.NET, ASP.NET y Windows.Forms no están incluidos en el estándar. Además, Microsoft mantiene unas patentes en EEUU sobre C# y el CLI pero se pueden desarrollar libremente implementaciones de la máquina virtual gracias a estos términos. En resumen, que no hay ningún problema por usar C#, personal o comercialmente (ojo, no hablo de programas desarrollados por Microsoft, como su implementación de la máquina virtual para Windows).
  • "Está demasiado orientado a entornos Windows". Es cierto para Visual Studio, que sólo es un programa, y Windows Forms, que no pertenece al estandar de C# ni del .NET Framework. Puedes desarrollar aplicaciones multiplataforma por consola o incluso con interfaz gráfica basadas en GTK+ (ver GTK#), QT/KDE (ver Qyoto/Kimono) u otras librerías gráficas, que no utilizan absolutamente ninguna librería relacionada con entornos Windows (la inmensa mayoría del .NET Framework no depende en absoluto de Windows, y puedes utilizarlo en cualquier sistema operativo). Por ejemplo, cada día hay más aplicaciones que corren sobre mono orientadas a entornos GNOME.
  • "Es sólo para Windows". "En Linux va mal". Mono es una implementación del CLR de .NET 1.1, 2.0 (generics, clases parciales, iteradores, delegados anónimos...) y 3.5 (LINQ, tipos anónimos, expresiones lambda, extension methods...) e incluye un compilador de C#. Es libre y multiplataforma. Tiene bindings para GTK+, OpenGL (TAO), LDAP, Cairo, CORBA... y soporta completamente WinForms 1.1 y 2.0. En Linux (con Mono) también se pueden utilizar otros lenguajes como Boo, Java, Nemerle, Visual Basic .NET...