¿es preferible programar aplicaciones libres en C# a hacerlo en Java?

Pregunto aquí para no dejarlo todo en el mismo hilo y tenerlo todo más organizado:
http://elotrolado.net/showthread.php?s=&threadid=472023

Vistos los "problemas" que tiene el desarrollo de aplicaciones Java yo me pregunto, ¿sería mejor desarrollar aplicaciones libres con C#?.

Hasta donde yo sé, la especificación del lenguaje está estandarizada y hay implementaciones libres como Mono. Es cierto que las Windows.Forms son un impedimento, pero hasta donde yo sé existen las GTK# y las librerias GTK están migradas para Windows.

Si existen IDEs libres y máquinas virtuales libres, ¿hay algo que "limite" a C# de la forma que Java está "limitado"?, ¿sería mejor desarrollar con C# en lugar de hacerlo con Java?.
Hola,

seré breve: primero se plantea el problema, y luego el lenguaje.

Depende de tus necesidades... ¿porqué no Python? ¿o PHP? ¿o Ruby? ¿o Pascal?

Particularmente adoro C++, pero también PHP, Python, C#... hasta Javascript. Con AJAX se pueden hacer muchas cosas interesantes.

Lo primero es saber que quieres hacer, luego de que partes se compone y como atacar el problema. Quizás necesites C++.

Yo he programado parte de un software de contabilidad (cálculo de y organización de "asientos") que está INTEGRO en PHP... todo por web, y funciona maravillosamente.

Si quieres dinos que quieres hacer y te podremos aconsejar algo mejor. Pero en principio te recomiendo que aprendas metodología y pseudocódigo... y el lenguaje te dará igual.

Un saludo!
No, si es una pregunta general, no es por nada en particular.

Las aplicaciones propias que puedo las desarrollo principalmente en Java, y si veo que no puedo pues me toca tirar de manuales y aprender, como a todo el mundo :D.

Era simplemente por saber si C# no tiene esos "problemas" que se comentaron en el otro hilo y que explicaste bastante bien, pero la pregunta es a título de curiosidad, nada más.
Creo que entiendo lo que quieres decir...

C# es un lenguaje estándard: está organizado, dirigido y consensuado por una organización (varias empresas y usuarios "sobresalientes") que dictaminan que cambios se han de hacer y cuando. Generalmente los estándares no cambian mucho ya que están bien pensados desde el principio, y lo que suelen tener son "añadidos", que no es lo mismo que remiendos.

JAVA es un lenguaje creado por Sun... que, imaginaros, de la versión 1.1 a la 1.2 hubieron tantos cambios que se la conoció como Java2. En todos sitios se habla de Java2 cuando se habla de la 1.2, 1.3 y 1.4 (y todas las entremedias)... y de Java5 de la 1.5 en adelante. La 1.6 creo que también será Java6. Es para que os hagais una idea de lo que cambió de una versión a otra. Muchos programas dejaron de funcionar. Creo que fué a partir de la 1.2 que emprezaron a "deprecar" funciones. Deprecar (to Deprecate, no se la traducción exacta al castellano, pero ya me la hago yo :D) es cuando una función se sabe que desaparecerá en una versión próxima y te aconsejan no usarla, aunque funcione en la actual. Así te avisan con antelación :) Eso es mejor que darte el susto como pasó de la 1.1 a la 1.2.

En las cosas estándard no se suele dar esto. Y suelen durar muchos años. Hay gente que dice que "no avanzan", y no es así... lo que pasa que dan pasos sobre seguros, en lugar de luego tener que rectificar.

C# ahora está en su versión 2.0... y hace 4 años que apereció. La nueva versión incluye novedades, que no deberían afectar al funcionamiento de los programas creados anteriormente. Si no utilizas las novedades pofale. Son novedades que no se ven como "pegotes".

C# nació a partir de la trifulca legal con Sun por la máquina virtual de MS: Compró a los mejores desarrolladores de JAVA y los puso a programar un lenguaje con el potencial de JAVA, pero eliminando las torpezas y errores de diseño de este (que se son más que conocidos). Compró a los mejores desarrolladores de Borland Delphi y creo Visual Studio .NET... la gente que nunca ha visto Delphi flipa en colores con VS.NET y no pare de decir lo bien que hace las cosas Microsoft.

La jugada de Microsoft fué clara: "Vamos dar este lenguaje tan chulo al mundo entero... pero las librerías más importantes nos las quedamos". C# está tan bien pensado que al poco se hizo estándard de la ECMA, y esta pasó a controlarlo. Pero las Windows.Forms se las quedó MS, diciendo que para asegurar la compatibilidad daría las "especificaciones". Esto ata muchísimo al software de MS... ya que de una versión a otra pueden cambiar como les dé la gana a ellos.

Mono es una muy buena opción a la hora de programar en C#... y utilizar GTk# de las mejores opciones para crear interfaces "portables". Digo "portables" porque obviamente depende de la portabilidad de mono. Pero siempre, programes en lo que programes, dependerá de algo. Ahora WF está implementado en mono... y empieza a tener soporte para WF2.

Si un día MS se le va la pinza (que lo ha hecho miles de veces) y cambia 100.000.003 líneas de código, ¿que pasará con mono? pues... yo soy partidario de: que les de por el kks a MS, porque mis programas siguen iendo en mono, pero ya veremos las de MS si van en su propia máquina virtual. Antes tenía miedo de este tema, y en cierto aspecto lo sigo teniendo, pero me reconforta saber que los primeros afectados serían ellos mismos.

MS ha dado "una versión gratuita" durante un año de VS.NET 2005. Es una trampa más: utilizas durante un año entero su sistema de desarrollo... haciendo que 1) sólo generes software para windows y por lo tanto olvídate de Linux/OSX; 2) si quieres seguir programando debes comprarte la versión completa.

Monodevelop está verde, pero cada día me dá nuevas y gratificantes sorpresas... su integración con Glade cada vez es mejor y GTK es cada día más ligero, estable y portable.

Yo personalmente: programo en C++ lo que necesite acceder al hardware y necesite precisión "puntillista" (lo pillas? eh? lo pillas? cuñaaaao), Python para scripts simples, PHP para web y C#/GTK# para aplicaciones de escritorio... eso sin contar Javascript y todos los lenguajes de blablalba. Y J2ME para móviles :)

No se si me he desviado mucho del tema, pero ahí lo dejo...

Un saludo!
¿Y no has probado Ruby? (Hay que ver la perra que me ha ntrao con "enRubyar" a to Cristo...)

Saludos!!!
Una pregunta, cuando se habla de C# tambien directamente se habla de VB.NET y de J# no?


Ya que utilizan lo mismo, solo cambia la sintaxis, o no es asi?
kr0n, yo creo que habla de C# como lenguaje y no como plataforma, asi que yo creo que no hala de VB.NET o J# :P.

PD: Rurouni warraaaaaaaaaaaaa tu buzon de MP's está lleno, a ver si te veo por jabber que estás perdido como el FuckingFreaky :P.

Un saludo.
Fox escribió:PD: Rurouni warraaaaaaaaaaaaa tu buzon de MP's está lleno, a ver si te veo por jabber que estás perdido como el FuckingFreaky
Jajaja! El otro día estuve a puuuuunto de conectarme, pero de repente recordé que echaban CSI...XD. Esta noche creo que no hay nada en la tele, así que igual me conecto, a vé si te veo.

Bueno... hilo relacionado con Mono donde no esté yo... no existe :).

Aunque tras la gran explicación de Rurouni no creo que haya mucho que aclarar. Para mí C# es como cualquier lenguaje tipo C, C++, Python... Tenemos un standard, y herramientas libres para desarrollarlo. Vamos, para mí es totalmente libre. Siendo Linuxero, obviamente no vas a programar con las Windows.Forms. Mientras el equipo de Mono consiga tener compatibilidad con las Windows.Forms, perfecto, y en el peor de los casos en que no la pudieran mantener, tan sólo sería una parte (importante, no digo que no); aún nos seguiría quedando una plataforma de desarrollo buenísima. Yo, al igual que Rurouni, pienso que cada problema tiene un lenguaje, y para aplicaciones de escritorio me parece una barrabasada meterte a programar en C. C# es muuucho más rápido para programar, es fácilmente mantenible, y las herramientas de Mono cada día avanzan más y más. Ruro, ¿has visto la combinación de Monodevelop con MonoUML? Ya se comunican y se genera código a través del gráfico UML, y se integran bastante bien.

Esto no quita que luego uno se plantee retos como programar juegos en C#, ¿Verdad Ruro?XD.

Rurouni escribió:C# ahora está en su versión 2.0... y hace 4 años que apereció. La nueva versión incluye novedades, que no deberían afectar al funcionamiento de los programas creados anteriormente. Si no utilizas las novedades pofale. Son novedades que no se ven como "pegotes"./QUOTE] Sólo puntualizar que hace un mes o así salió la especificación de C#3.0 con importantes mejoras, muchas de rendimiento, que eso sí, no implementarán ni Mono ni .Net hasta dentro de un tiempo.

Sobre las Windows.Forms... como ha dicho Rurouni, a ellos mismos no les interesa cambiar mucho. Pensemos que .Net se va a utilizar para que las empresas puedan desarrollar software más rápido. Por eso se ha utilizado mucho VisualBasic hasta ahora, a pesar de ser una mierda. .Net pretende eso, crear aplicaciones en poco tiempo, sólo que el salto de calidad respecto VB es notable. Y si a estos programadores, por lo general no muy gustosos ni dados a los cambios, les empiezas a tocar las pelotillas... En fin, ya sabemos como son las empresas: todo atado y que no le toquen lo que funciona. Por eso creo que MS no hará muchos cambios en Windows.Forms. Pero aunque así lo hiciera, como dije arriba, en el peor de los casos nos seguiría quedando una plataforma de desarrollo muy buena.

Ruro, en el post sobre los juegos te pregunté que por qué aquello del acceso a Hardware... Es que yo, que de momento no sé casi nada de C#, tenía entendido que puedes acceder perfectamente al Hardware, e incluso puedes inyectar código C/C++.

flamel escribió:¿Y no has probado Ruby? (Hay que ver la perra que me ha ntrao con "enRubyar" a to Cristo...)
A mí me despertó la curiosidad después de leer varios posts en el foro de Gentoo... ¿qué tiene de especial este lenguaje? Ruby y Ruby on rails es lo mismo ó son distintos? En fin, podemos abrir un hilo de Ruby :).

kr0n escribió:Una pregunta, cuando se habla de C# tambien directamente se habla de VB.NET y de J# no?
Hombre, es básicamente eso, lenguajes distintos que generan el mismo Bytecode, que luego pasa a código nativo de la máquina. Eso es lo que permite todas las chuladas de Mono de derivar de una clase que esté en otro lenguaje en vez de tener que reimplementarla, llamadas sencillas a programas escritos en otros lenguajes al tuyo, etc... En general es un ahorro de esfuerzo muy grande. Ahorro y reinversión del esfuerzo creo que son los puntos más fuertes de esta tecnología.

Y sólo cabe recordar que con Mono, con tan sólo portar la máquina, ya se dispone en ese nuevo sistema portado de tooodo todito Mono. Aquí podéis ver el progreso que llevan. Zoltan Varga se dedica dentro de Novell, única y exclusivamente a portar Mono a otras plataformas.

Yo también siento el rollo.

Salu2!
FuckingFreaky escribió: A mí me despertó la curiosidad después de leer varios posts en el foro de Gentoo... ¿qué tiene de especial este lenguaje? Ruby y Ruby on rails es lo mismo ó son distintos? En fin, podemos abrir un hilo de Ruby .

Pues no es ni más ni menos un lenguaje interpretado más... como lo puede ser python o perl (si no recuerdo más) lo que, para mí, lo hace genial es que plantea una filosofía un poco diferente a la hora de picar código. Puedes hacer las mismas cosas de siempre, pero ahorrandote lineas de código y viendo cosas que (al menos yo) no habías visto nunca antes en un lenguaje de programación.

Ruby on Rails es (si no lo he entendido mal) una extensión para aplicaciones web. Aunque seguro que si buscas un poco no tiene nada que ver con esto, porque no he llegado todavía ha ese tema :D

PD: un libro genial para Ruby es "Programming Ruby, The pragmatic programmer's guide" de Dave thomas y que por cierto está ya en 2ª edición.

Saludos!!!
Gracias a todos por los comentarios, tanto de este hilo como del anterior.
flamel, abusando un poco de tu voluntad... podrías ponerme un par de ejemplos de esas cosas distintas ó que te ahorran código?

Sólo si puedes, no te preocupes ;).

Un saludo!
Bueno... realmente Ruby tiene un problema desde mi punto de vista... y es que no tiene 'list comprehensions'.

De hecho se han propuesto y las han rechazado porque son de naturaleza 'funcional' y no OO. Lo cual es algo discutible ya que Python si las tiene; pero no muy discutible ya que Python es el perfecto lenguaje 'multi-paradigma' y no es ni OO, ni estructurado, ni funcional; sin embargo tiene rasgos de todos.

Oh bien... algo que no tiene nada que ver pero que explica las razones por las que YO no he aprendido Ruby.

Saludos.Ferdy
FuckingFreaky escribió: flamel, abusando un poco de tu voluntad... podrías ponerme un par de ejemplos de esas cosas distintas ó que te ahorran código?


Pues puedo intentarlo, aunque no es que sea un experto ni nada de eso :)

A mi me gusta mucho por ejemplo el manejo de los arrays que hace. Por ejemplo, te permite definir Ranges (rangos) que son "sucesiones" de datos del mismo tipo. (Para ejemplo un botón)

print ('a'..'z').to_a


Con eso imprimes las letras de la 'a' a la 'z'. Además puedes definir rangos para cualquier tipo, simplemente implementando el operador nave espacial <=>.

Para los bucles por ejemplo, puedes usar el tipico for o algo como
5.times{print "hola"}

Y eso te imprime 5 veces hola. Cosas como esas muchas.

Otra cosa que me ha gustado mucho son los bloques, que te dan la posibilidad (al menos como yo los entiendo) de definir un método que actua de forma "genérica" sin completar su funcionalidad y luego completarlo de forma específica cada vez que lo uses (eso es lo que se hace en el 2º Ejemplo.

Imagino que Ruby no habrá descubierto la energia nuclear ni nada de eso, pero yo no había visto nunca un lenguaje así.

Saludos!!!
[OFFTOPIC]
Ya que estais con C#... alguien me recomienda un manual BUENO (como el de Ferdy de zonasiete :P) de C#?
Es que creo que para mi PFC me va a tocar aprenderlo... x)[/OFFTOPIC]
Salu2!
pasate por aqui, te enseñan a hacer un programa simple con una libreria dinamica y te van enseñando de forma facil.

http://www.monohispano.org/
Bien e-Minguez, bieeeeeeeen!!!! Al final con Mono, eh?

Yo que tú me pillaría un libro, aunque yo estoy buscando uno también. Fox me recomendó algunos, pero trataban la especificación 1.0, creo. Estoy buscando alguno para, por lo menos, la 2.0. Y si ya hubiera para la 3.0, la leche.

Luego por la tarde, a ver si saco un ratito y te busco eso que te dije.

Taluego!
Fucking, pesaaaaaaaaao, ajajaj, por ahora con 1.0 te va bien, la 2.0 trae 4 cosas y media, que si metodos anonimos y lo de My. (creo que esto era asi)

Tu aprende 1.0. luego ya aprendes 2.0, pero por lo menos haz algooooooo, yo estoy ahora haciendo mis cosas y perfecto. Ayer salio Mono 1.1.10 q trae ya la 2.0 al completo :P.

Un saludo.
Mira zorrita, tú calla y búscame un buen libro de C# anda... Bueno, a mí y al Minguez, que ya te contaré lo que a lo mejor hace con Mono... :).

Por cierto, flamel, gracias! Se me había pasado darte las gracias por los ejemplos. La verdad es que, así a primera vista, no me resulta demasiado excitante, la verdad, aunque no niego que haya gente que le pueda gustar y lo prefiera. Esto es como todo. Mientras el lenguaje sea abierto... guay! Pero vamos, que el caso es ese... creo que no descubre nada nuevo...

Gracias!

Salu2!
17 respuestas