Cuando alguien se quiere iniciar en la programación y se decide por la plataforma .NET, enseguida le surge la duda: ¿qué lenguaje debo escoger? Y es que la plataforma .NET permite programar en decenas de lenguajes diferentes, si bien los dos principales, de entre los que proporciona Microsoft son Visual Basic .NET y C# (se pronuncia "C Sharp", por cierto).
Vamos a analizar diversos factores de peso, detallando un ganador en cada uno, que espero que te ayuden a tomar una decisión fundamentada. Aunque yo, personalmente, hace unos años que lo tengo claro...
¡Allá vamos!
1.- Capacidades de los lenguajes
Evidentemente si vamos a invertir muchas horas y esfuerzo personal en aprender un lenguaje, no querremos apostar por uno que tenga características inferiores. Nos interesará aprender aquél que tenga mayor potencia y permita hacer más cosas.
En ese sentido la buena noticia es que ambos lenguajes tienen idénticas capacidades.
En primer lugar, porque lo que hacemos con ellos es programar para la plataforma .NET y la mayor parte de la funcionalidad se proporciona a través del framework. Los lenguajes no son más que una forma de "pegar" entre sí la funcionalidad de base que extraemos de .NET, ya que todas las bibliotecas y capacidades de la plataforma están al alcance de cualquier lenguaje válido para ésta.
Al final, ambos se compilan a Lenguaje Intermedio (CIL) de .NET, e incluso es posible traducir el código de uno a otro y viceversa. De hecho uno de los objetivos de Microsoft es que sean totalmente equivalentes y que lo que se pueda hacer con uno, se pueda hacer también con el otro. Es más, la última versión de los compiladores para la plataforma .NET (llamado Roslyn) tiene el compilador de VB escrito en VB y el de C# escrito en C#, de modo que ambos sean funcionalmente equivalentes.
Aún así existen diferencias en la sintaxis de cada lenguaje que hacen que sea más o menos difícil trabajar con ellos. En general el código Visual Basic es más fácil de leer al no usar llaves (tan típicas de otros lenguajes), aunque esto seguro que más de uno me lo discute. Además ofrece "azúcar sintáctico" para ayudarnos con la escritura de código, como por ejemplo, entre otras muchas cosas:
Y estos son solo unos pocos ejemplos. Hay más.
Por otro lado hay algunas cosas de C# que no están disponibles en Visual Basic, como por ejemplo:
- Bloques unsafe: que nos permiten trabajar a más bajo nivel con punteros, de manera parecida a como se hace en C++, y saltarnos la seguridad de tipos.
- palabras clave checked y uncheked: para saltarse la seguridad de tipos en desbordamiento.
- Interfaces parciales: C# permite definir interfaces en diversos archivos, al igual que clases, estructuras y métodos. VB solo estos tres últimos.
- Azúcar sintáctico: y sí, C# también tiene sus propias facilidades para escribir código que no tiene VB, como por ejemplo: cadenas multi-línea y escapeadas, comentarios multi-línea, implementación implícita de interfaces o el operador ?? para comprobar nulos.
En este enlace tienes una buena referencia que compara una a una las características de ambos lenguajes (y alguno más como F# y C++).
Podríamos seguir hablando de este tema largo y tendido, pero como resumen podemos decir que, en general, escribir código con VB.NET es más fácil y además más permisivo (menos estricto) que escribir código C#. Y todo eso sin perder potencia ya que son funcionalmente equivalentes. En ese sentido es más fácil iniciarse a la programación en Visual Basic que en C#.
Aún así, una vez que coges experiencia en cualquiera de los dos, elegir uno u otro es más una cuestión "estética" y de preferencias personales que una diferencia real.
Ganador: Visual Basic, por simplicidad de uso.
2.- Aspectos "sociales"
Uno de los aspectos más importantes a tener en cuenta a la hora de decidirse por un lenguaje de programación, no es solamente su capacidad o facilidad de uso, sino lo que yo llamo sus "aspectos sociales". Con esto me refiero a la adopción que hay por parte de la comunidad de uno u otro lenguaje. Esto es importante porque mide el grado de ayuda que nos vamos a encontrar para cada lenguaje, así como la base de código Open Source con la que podemos contar para acometer algunos proyectos.
Los "aspectos sociales" de un lenguaje miden, en definitiva, lo solos o acompañados que estamos cuando trabajamos y nos encontramos con un problema o una dificultad.
Por un lado tenemos el uso que se le da a cada lenguaje por parte de los profesionales. No es lo mismo llegar a una empresa programando en VB y encontrarte que todos tus compañeros programan en C#, que lo contrario. Eso es difícil de estimar y va a depender de dónde caigas, claro, pero si tuviésemos unas estadísticas generales podría ser un dato importante. Sobre esto no hay datos fiables. Sin embargo, una cosa a tener en cuenta es que en la mayor parte de los institutos y las facultades de informática se enseña o bien C++ o bien Java. Debido a ello muchas personas se sienten más cómodas usando la sintaxis de C#, casi idéntica en todo a la de estos, y luego en el trabajo tienden a utilizar C# y no Visual Basic. Pero como digo, es difícil saberlo.
Una buena pista nos la pueden dar los índices de la industria, que también son inexactos pero proporcionan información interesante que marca tendencias. Uno de los índices más populares, que se actualiza mensualmente, es el de TIOBE de popularidad de lenguajes de programación, que se basa en analizar resultados de búsquedas en más de 110 buscadores en todo el mundo, tratando de determinar qué lenguajes son más populares entre los desarrolladores en función de lo que se publica sobre ellos. En Febrero de 2015 C# ocupaba el 5º puesto con un 5,738% de popularidad, mientras que Visual Basic .NET estaba en el 10º puesto con un 2,026%. Es decir, aparentemente C# es el triple de popular que VB.NET hoy en día. Hace 5 años la cosa no era así e iban prácticamente parejos, pero está claro que en los últimos tiempos la ascensión de C# (o el declive de VB) en cuanto a preferencias de los programadores es imparable. Es más, de esto no tengo números, pero es evidente que hay muchos más blogs y artículos para C# que para VB.
La gracia, por cierto, es que Visual Basic,. es decir la versión original de lenguaje, cuya última versión es de hace más de 15 años, está justo detrás en el undécimo puesto con un 1,718% de popularidad ¡e incluso ha subido respecto a hace un año! Que cada uno saque sus propias conclusiones respecto a este hecho.
Según otros índices los resultados son incluso peores para Visual Basic. Por ejemplo, el índice PYPL que se basa en la disponibilidad de cursos y tutoriales disponibles para cada lenguaje (un indicador de demanda), C# es el 4º lenguaje más popular con un 8,8%, y VB.NET está en decimotercer lugar con un 2.2% y cayendo bastante.
Si consideramos la popularidad dentro de los proyectos Open Source, entonces GitHub es un buen sitio donde mirar, ya que actualmente es donde se "cuece" todo lo que tiene que ver con este movimiento de software libre. Según los datos de GitHub el lenguaje más popular con mucha diferencia es JavaScript, pero de los dos que nos ocupan, el único que aparece siquiera en los rankings es C# (en 10º lugar).
Si consideramos un repositorio de código fuente con más sesgo hacia tecnologías Microsoft, entonces debemos referirnos a Codeplex. En este repositorio de código fuente de tecnología Microsoft, si buscamos a día de hoy los proyectos Open Source más descargados (que son los que realmente tienen algo detrás y no están en planificación o vacíos), vemos que C# tiene 3.154 proyectos mientras que Visual Basic tan solo 319. O sea, gana C# por goleada:
Finalmente, y para tratar de ser exhaustivos, vamos a ver qué pasa con StackOverflow. Este es el sitio más popular del mundo para resolver dudas sobre cualquier cuestión relacionada con la programación. Es tan popular que hay quien dice, con muy mala uva, que si mañana lo cerraran media fuerza laboral del sector TIC se iría al paro pues no sabrían qué hacer ;-) Bien, si vemos en este sitio el número de preguntas que se hacen en cada lenguaje, tenemos los siguientes resultados:
Es decir, la diferencia es de casi 10 a 1 a favor de C#.
Ganador: C# por goleada. Con C# tendremos muchas más probabilidad de ayuda, código fuente de base, aprendizaje, etc...
3.- Ámbitos que abarcan
Esta es otra gran pregunta que debemos hacernos. No solo llega con ver cuál tiene más capacidad o con cuál tenemos más ayuda. Tenemos que ver también con cuál podremos hacer más cosas y seremos capaces de abarcar más ámbitos.
En la actualidad la plataforma .NET está presente en el escritorio, en los servidores, en la nube, en dispositivos móviles, etc... Pero no significa que podamos usar cualquier lenguaje. En este caso solo C# nos deja abarcar cualquier ámbito en el que esté presente .NET, y en concreto el mundo móvil está vedado para Visual Basic .NET.
Sí, podemos programar para Windows Phone con C# y con VB.NET, pero si queremos abarcar cualquier plataforma móvil (iOs, Android...) o tablet usando .NET, es decir, usando Xamarin, entonces el lenguaje que debemos usar obligatoriamente es C#. Y éste es un punto importantísimo que no debemos olvidar. Aunque ahora no programes para móviles ten claro que si te dedicas profesionalmente a esto, más temprano que tarde lo vas a tener que hacer. Y si para ello puedes evitar aprender un nuevo lenguaje, mejor ¿no?.
Debemos tener en cuenta también que, desde hace unos años, prácticamente todas las nuevas tecnologías que va lanzando Microsoft se crean con C#. A esto debemos añadir que además ahora son Open Source, lo cual es un argumento de peso, y si no, echa un vistazo a su código fuente:
Ganador: C#. Podrás hacer muchas más cosas a largo plazo.
4.- Otros factores
Finalmente hay que considerar otros factores, quizá menos importantes, pero que debemos tener en cuenta igualmente a la hora de decidirnos.
Por ejemplo, de qué base partes para aprender.
Si vienes de programar con Visual Basic 6 clásico, en los '90 (hay MUCHÍSIMA gente que viene de ahí y se está pasando aún ahora), seguro que la sintaxis de VB.NET te va a resultar más sencilla y rápida de asimilar. De hecho el lenguaje se diseñó para que fuera compatible lo máximo posible con VB clásico. Sin embargo, hay bastantes diferencias. Aunque la mayoría son cosas tontas (por ejemplo en VB.NET debes poner paréntesis para llamar a todas las funciones y en VB clásico no) pueden suponerte un problema más que una ventaja. Si tienes que mantener código en las dos versiones del lenguaje (clásica y moderna) te encontrarás que cometes muchos más errores por estas pequeñas cosas, lo cual es desesperante. Al final casi te resultará más sencillo marcar mucho más la diferencia entre los dos ambientes usando C# para .NET. Al principio te resultará más complicado, pero cuando te acostumbres cambiarás fácilmente de contexto, irás mucho más rápido y tendrás mayor productividad. Y no lo digo por decir: en su día, hace muchos años, yo mismo pasé por esta situación, así que lo digo por experiencia propia ;-)
Si vienes de programar con C, C++, Java o similar, la sintaxis de C# te resultará mucho más natural y cómoda. Aunque claro, también te puede pasar algo parecido a lo de VB clásico con VB.NET, aunque aquí las diferencias de sintaxis son mucho menores. De hecho, hay fragmentos sencillos de código que si te los ponen delante no sabrías decir si son C# o Java, de tan parecidos que son.
Otra cuestión importantísima es la percepción del lenguaje en el mercado laboral. Se dice que no hay que juzgar un libro por las tapas y que no debes dejarte llevar por la corriente o las modas. Pero al final lo hace todo el mundo. Y si no, por qué cualquier cosa que lance Apple al mercado se vende como si no hubiese un mañana, independientemente de su calidad o bondad técnica. Pues por eso, por el factor "cool" de la marca.
En programación pasa exactamente lo mismo. Hay mucha "pijería". Aunque nos cueste reconocerlo, es la realidad. Y una cosa obvia es que C# hoy por hoy tiene un factor "cool" que no posee Visual Basic .NET. C# se relaciona con lo moderno y VB.NET con un lenguaje de los años 90 que se ha adaptado para la actualidad. En tu currículo va a lucir más C# que Visual Basic. Da igual que VB.NET sea igualmente capaz que C# y que de hecho sea más fácil de leer y de escribir. Puede que no tenga sentido técnico alguno, pero es un hecho.
Obviamente no lo puedo demostrar con datos fehacientes ya que es una cuestión cualitativa, no cuantitativa. Pero si no me crees puedes hacer la prueba y preguntar por ahí o mandar CV iguales con VB y con C# a ver qué pasa ;-)
Ganador: C#
Conclusiones - TL;DR
Seguro que más de un fan de Visual Basic ahora mismo está contando hasta 10 antes de escribir un comentario en total descuerdo con muchas cosas de las que digo. ¡Hey!, yo mismo fui programador de Visual Basic muchos años y me ha dado muchas alegrías. Pero los hechos son los que son:
- Ambos lenguajes son igual de capaces, y de hecho VB.NET es más fácil de leer y puede ser más productivo.
- Pero C# gana con mucha diferencia a Visual Basic .NET en los aspectos sociales del lenguaje (más código y ayuda disponibles)
- C# abarca más ámbitos que VB.NET, sobre todo en lo que respecta a programación multi-plataforma para móviles y tabletas.
- Es más fácil confundirse escribiendo código Visual Basic que C# si vienes de otro lenguaje.
- El factor "cool" está a favor de C#, por lo que te resultará más fácil encontrar trabajo o que te consideren en las empresas (y en ciertos círculos técnicos).
Creo que todos los puntos anteriores que desarrollo en el artículo son bastante objetivos, o al menos así lo he procurado, y creo que hoy por hoy aprender C# es una mucho mejor apuesta de futuro que aprender Visual Basic .NET.
Si estás pensando en aprender .NET y tenías duda sobre qué lenguaje escoger, espero que este artículo te haya ayudado a decidirte.
¡Ah!, y por supuesto no te olvides de nuestro maravilloso curso de aprendizaje de C# y la plataforma .NET. Aprenderás un montón. De verdad.
Fecha de publicación: