¿ Porque .NET y no Java ?
En el mundo de la programación os podéis encontrar dos rivales bien diferenciados, mientras uno es Software Propietario el otro es Software Libre, pues me estoy refiriendo a la plataforma .NET de la Microsoft y JAVA de la SUN Microsystem. También vosotros seguramente habéis ya podido daros cuenta que entre los lenguajes mas utilizados figura Java como primer lugar seguido de los legendarios C/C++ y tras ellos los lenguajes soportados por la plataforma .NET (Visual Basic y C#); he aquí os presento algunas características de .NET que hacen favorable su utilización sobre JAVA.
.Net vs J2EE:
En si la verdadera competencia exacta de .Net no es JAVA sino J2EE (Java 2 Enterprise Edition), J2EE es un grupo de especificaciones que forman lo que es denominado Java Application Server, la principal ventaja que J2EE esté basado en especificaciones es la libertad de elección sobre vendedores, esto es, los componentes escritos en Java son interoperables entre productos J2EE desarrollados por IBM, HP, Sun, BEA... A diferencia de .NET donde todo gira alrededor un solo vendedor: Microsoft.
Pero .NET ha tenido la oportunidad de aprender de los errores de J2EE, su diseño esta bien definido y estructurado, cumpliendo todas las exigencias de una buena ingeniera de software (comparado a J2EE).
Esta moderna plataforma fue diseñado con tres objetivos en mente: Primero debería lograr aplicaciones Windows muchos más estables, aunque también debería proporcionar una aplicación con un mayor grado de seguridad. En segundo lugar, debería simplificar el desarrollo de aplicaciones y servicios web que no solo funcionen en plataformas tradicionales sino también en dispositivos móviles. Por ultimo el entorno fue diseñado para proporcionar un solo grupo de bibliotecas que pudieran trabajar con varios lenguajes (que actualmente suman 20).
CLR vs JVM
El entorno de ejecución: Common Language Runtaime (CLR) ha sido, desde sus primeras versiones más eficiente y funcionalmente completo que la Java Virtual Machine (JVM). En la JVM no hay soporte para técnicas tan útiles como los tipos enumerados o el traspaso de parámetros por referencia (especialmente de los tipos de datos primitivos).
Esto se paga en velocidad de ejecución y en menor productividad, al tener el programador que tratar con un lenguaje menos expresivo.
La verdadera obra de ingeniería de .NET es el Microsoft Intermediate Language (MSIL) que es el código maquina del CLR (maquina virtual del .NET). A través de MSIL es posible ejecutar e interoperar diversos fragmentos de código escritos en distintos lenguajes quienes serán convertidos a este lenguaje intermediario a través de un compilador determinado. El bytecode de JAVA muchas veces termina por ser interpretado, en cambio el código MSIL nunca se interpreta, sino que siempre se transforma en eficiente código nativo.
C# vs JAVA
“C# no es un competidor de Java”. Bien, esto es lo que lo demanda Microsoft; cada vez que alguien escribe o compara Java a C#, Microsoft grita siempre “Es injusto comparar los dos lenguajes”. Mientras que más programadores comienzan a jugar con C#, muchos están comenzando a ver semejanzas fuertes entre las dos lenguajes. Microsoft demanda que C# fue derivado de la familia de los lenguajes de programación C/C++, pero algo queda claro cuando programamos en C# “la amplia similitud con Java” pues C# fue diseñado para superar las limitaciones de ambos lenguajes. El compilador de C# compila directamente el código fuente a MSIL, ya que es el único que ha sido diseñado para escribir código para la plataforma .NET, por lo tanto C# es el lenguaje nativo de .NET.
C# incorpora en el propio lenguaje elementos que a lo largo de los años ha ido demostrándose que son muy útiles para el desarrollo de aplicaciones y que en otros lenguajes como Java o C++ hay que simular, como un tipo básico decimal que permita realizar operaciones de alta precisión con reales de 128 bits (muy útil en el mundo financiero), la inclusión de una instrucción foreach que permita recorrer colecciones con facilidad y es ampliable a tipos definidos por el usuario.
En C# se ha optado por hacer que todos los métodos sean por defecto sellados y que los redefinibles hayan de marcarse con el modificador virtual (como en C++), lo que permite evitar errores derivados de redefiniciones accidentales. Además, un efecto secundario de esto es que las llamadas a los métodos serán más eficientes por defecto al no tenerse que buscar en la tabla de funciones virtuales la implementación de los mismos a la que se ha de llamar. Otro efecto secundario es que permite que las llamadas a los métodos virtuales se puedan hacer más eficientemente al contribuir a que el tamaño de dicha tabla se reduzca.
C# es un lenguaje orientado a Componentes, es decir ofrece un amplia variedad de componentes visuales modernos y fácil de usar. La propia sintaxis de C# incluye elementos propios del diseño de componentes además permite definir cómodamente propiedades, eventos y atributos.
C# permite definir, a través de estructuras, tipos de datos para los que se apliquen las mismas optimizaciones que para los tipos de datos básicos. Es decir, que se puedan almacenar directamente en pila (luego su creación, destrucción y acceso serán más rápidos) y se asignen por valor y no por referencia. Para conseguir que lo último no tenga efectos negativos al pasar estructuras como parámetros de métodos, se da la posibilidad de pasar referencias a pila a través del modificador de parámetro ref.
Para facilitar la legibilidad del código y conseguir que los nuevos tipos de datos básicos que se definan a través de las estructuras estén al mismo nivel que los básicos predefinidos en el lenguaje, al igual que C++ y a diferencia de Java, C# permite redefinir el significado de la mayoría de los operadores - incluidos los de conversión, tanto para conversiones implícitas como explícitas - cuando se apliquen a diferentes tipos de objetos. También se da la posibilidad, a través del concepto de indizador, de redefinir el significado del operador [ ] para los tipos de dato definidos por el usuario, con lo que se consigue que se pueda acceder al mismo como si fuese una tabla. Esto es muy útil para trabajar con tipos que actúen como colecciones de objetos.
Podemos seguir mencionando mas características que hacen C# un lenguaje maravilloso y eficiente, pero….
Conclusión:
C# es un lenguaje nuevo que promete grandes cambios en el ambiente de programación multiplataforma; el lado desventajoso de esto incluyendo a la plataforma .NET, es la limitación al concepto de multiplataforma ya que las aplicaciones en .NET solamente se ejecutan en cualquier sistema operativo Windows mas no en Unix, Linux, Solaris, etc.( Aunque hay proyectos que tratan de llevar .NET al mundo Libre), por eso la Tecnología JAVA sigue avanzando dejando atrás a muchos lenguajes y es considerado por muchos como un Lenguaje de Propósito Genérico ya que ha logrado incluirse en casi todas las áreas de la tecnología desde simples aplicaciones hasta sistemas distribuidos, sistemas empotrados, sistemas inteligentes, etc. Todo ello gracias a ser de libre distribución y de código abierto.













.Net sucks
Creo que el principal problema de microsoft es que siempre buscan generar sus propias herramientas que solo funcionan con sus propios estandares y sus propias plataformas amarrandote así a siempre terminar utilizando sus productos por lo que entras en un circulo vicioso por ello lo mejor es desarrollar en entornos que sean "amigables" y realmente funcionen bien.
Es el caso de Java. Creo que Java de lejos le gana a culquier cosa hecha en .Net por el simple hecho de ser multiplataforma. Es más si analizamos cada linea código sabemos lo que pasa, no como en .Net que por su IDE nos complicamos las cosas y si no tenemos el IDE, entender ese codigo es imposible, asi que nuevamente nos amarra a su IDE y sus cientos de archivos que no hacen mas que estorbar y confundir. No veo nada bueno en .Net por otro lado Java sigue creciendo y conviertiéndose en un estandard de desarrollo en las organizaciones
Saluos,
.Net doesn't sucks at all..........
Yo llevo un buen tiempo programando en C(programacion de sistemas), C++ y Java sobre GNU/Linux, sin embargo hace mas o menos 2 años empece a programar, por razones varias, en la plataforma .Net...dejame decir que me siento bien programando en C#......creo que fue por la experiencia ganada trabajando con software libre, que yo me formule la interrogante: ¿Que tan malo puede ser(en este caso) programar en .Net? y la experiencia fue para nada desagradable, tanto asi que realmente no importa mucho que Microsoft "me amarre a sus productos" cuando estos realmente son buenos.....hay muchisimas cosas buenas(que se mencionan en el articulo de arriba) en .Net y hay que saber reconocerlas.....pero claro para poder reconocer que algo es bueno hay que tener un punto de referencia(en mi caso este punto es GNU/Linux)...
Es solo mi humilde opinion.....
saludos
Bueno, esta es mi opinion
Realmente .net es la mejor plataforma de Programacion que halla podido crear Microsoft, marco un antes y un despues en la compania. Actualmente, .Net al igual que Java han evolucionado muchisimo, por ejemplo ahora con el Framework 3.5 (WPF, WCF, etc) se pueden hacer aplicaciones realmente atractivas y poderosas muy rapidamente. En cuanto al comentario que dice alguien por ahi de que se amarra mucho al IDE, en parte es cierto (aunque Borland y otras empresas tienen tmb un IDE para .net), el codigo generado por el VS.Net es bastante bueno, es de hecho de los mejores que he visto (tambien he visto lo que hace el NetBeans y el Eclipse), es increhible la forma en que toco el codigo por debajo del disenador y se sincroiza perfectamente, te permite toca todo, no hay cajas negras (como lo hacia antes de .Net, por ej. en VB6).
Java por otro lado ya le ha ido copiando tambien cositas al lenguaje C#, y Java ha ido mejorando progresivamente su velocidad, pero hasta la fecha no he visto nunca una aplicacion Windows en Java que sea comparable a una hecha en C# (en terminos de Velocidad). En terminos de diseno, los controles Jswing son bonitos, y me gusta mas que los de Windows Forms.
Por otro lado, pienso que lo mejor de .net es la parte web, digamos que en el mundo de windows no aporta mucho, pero en el web, es increhible lo que se puede hacer, lo que lo hace de alguna forma "multiplataforma". para los clientes, y para los desarrolladores la persepcion es de alta productividad en poco tiempo, lo que se traduce en bajo presupuesto.
Y hablando de dinero, las versiones Express, que son versiones gratuitas de VS.net han demostrado ser bastante poderosas, soportando casi cualquier tipo de proyecto.
Ah y otra cosas bastante buena que no he visto tanto en el mundo de Java, es la excelente documentacion, ejemplos, programas de capacitacion (de estos hay docenas y gratuitas), y lo mejor que todo esto de forma gratuita y de excelente calidad. En java por ejemplo no es facil encontrar en espanol buena documentacion avanzada para uno realmente programar como Dios manda, en .net es muchisimo mas facil.
A pesar de todo lo que escribi, debo confesar de que Java me llama mucho la atencion por la multiplataforma y a veces me gustaria aprender mas de el. Vamos a ver que pasa.
Gracias a todos por leer este larguisimo post.
Java es más completo
Sin duda Java es mucho mas completo que la plataforma .NET, pruebalo y te sentiras en un mundo lleno de posibilidades, cualquier cosa que tengas en la mente lo podras solucionar con Java. Solo ten cuidado al momento de escogerlo por su eficiencia, al ser un lenguaje interpretado suele ser menos eficiente que un lenguaje compilado, pero eso ante sus multiples ventajas de interoperabilidad, múltiplataforma, etc, Java sigue llevando la delantera.
Saludos,
Sánchez Enriquez Heider Y.