Buscando tecnología
Pongamos que queremos hacer una aplicación. Se trata de una aplicación clásica, de escritorio, no una aplicación web ni nada parecido. Ya que estamos ¿porqué no hacerla para varios sistemas operativos? Contemos como mínimo Linux, Windows y MacOS X. Y la aplicación se tiene que ver bien en cada sistema, no tiene que parecer un alien venido del espacio (o de otro sistema operativo). Idealmente se debería poder instalar con un instalador propio sin requerir demasiado trabajo previo, como complicadas instalaciones de interpretes, etc. Bueno, podríamos aceptar la instalación previa de un interprete o máquina virtual si ella misma no es difícil de instalar, doble click y basta.
Vamos allá, pensemos, pensemos, ¿qué opciones tenemos?
Algunas ideas:
- Usar el antiguo y fiable C++ con una librería gráfica multiplataforma tipo wxWidgets (antes wxWindows). C++ no es un dechado de portabilidad en cuanto a código fuente, pero con los #ifdef adecuados, puede ser una buena opción. Incluso creo que existen librerías para recolección automática de basura, porque muchachos, estamos en el siglo 21, gestionar uno mismo la memoria para lo que no sea programación de sistema parece una perdida de tiempo.
- Python más librería gráfica. Python está reconocido como un excelente lenguaje. Y seguimos con la opción de wxWidgets, ya que existe binding del mismo para python. Por supuesto, es necesario instalar el interprete de python previo a nuestro programa, pero no parece complicado. Además es posible que se pueda crear un paquete con nuestro programa más el interprete.
- Java. Ya, ya se que tiene muy mala prensa. Pero que le vamos a hacer, me gusta. Y como ya dije, una aplicación como jPlucker me demuestra que se puede hacer una buena aplicación de escritorio con él. Nuevamente tiene el problema de tener que instalar previamente la JVM. Pero no es complicado, de veras. Además siempre se puede hacer un cobundle de la JVM junto al programa.
- .Net y/o Mono. No tengo claro cómo está esto. ¿Lo que se hace en .Net es compatible con Mono y viceversa? ¿O mejor desarrollar sólo para Mono? ¿Está suficientemente maduro? ¿Es fácil instalar la máquina virtual de mono? ¿se puede instalar junto con la aplicación?
Bueno, hagan juego señores. Ideas, experiencias con las opciones anteriores, nuevas opciones. Cualquier cosa es bienvenida.
Idea extra: ¿No sería interesante hacer una especie de banco de pruebas donde implementasemos una pequeña aplicación con todas las opciones posibles para comparar?
Mi opción sería Java+SWT o Mono. El problema de Mono (o Portalbe.NET, o DotGnu) es que está todo muy verde sobre todo en el aspecto de la interfaz de usuario (mira la última entrada en mi weblog, http://hronia.blogalia.com/historias/18092) y para ser compatible con Windows Forms hay que vender el alma al diabl... digo a Wine, con lo que normalmente acabarías desarorllando en Gtk#, lo que no te quita compatibilidad con Windows pero la complica un poco.
El caso de Python es interesante, pero no me interesa aprender un lenguaje relativamente marginal como Python -al menos desde un punto de vista profesional-. De todas formas, Python tiene a su favor al formidable Boa Constructor, un IDE completísimo al estilo de Delphi. Y Python, por supuesto, es un magnífico lenguaje.
Java tiene otras virtudes. La primera en tu caso es que dominas la tecnología, lo cual es un punto a favor. Otra podría ser la existencia de entornos muy maduros como NetBeans o Eclipse (aunque los editores de GUIs en ambos son relativamente recientes, si no me equivoco) Lo malo es que tengo la sensación de que la máquina virtual .NET es más veloz que la de Java -insisto en que es una sensación-.
Yo también tengo mi pequeño proyeco doméstico y estoy embarcado en la aventura usando Mono + Gtk# (debo de ser algo masoca).
Lo del banco de pruebas es una idea cojonuda, lástima que no sobre tiempo para probar todas las alternativas...
Como quieres que sea portable, sin duda yo me decantaría por JAVA. En todo caso, si más adelante esa aplicación quieres orientarla hacia servicios web, simplemente deberías implementarla utilizando la tecnología EJBs (Enterprise Java Beans), cosa que es relativamente sencilla utilizando Eclipse u otros IDEs libres o comerciales, eso es a gusto del consumidor.
No sé porqué dices que Java tiene mala prensa, a mi me parece un lenguaje estupendo, con un amplísimo y bien organizado grupo de desarrolladores apoyandolo desarrollando un montón de librerías extra, hablo de la gente de Jakarta - Apache.
Mono esta bastante maduro, en el sentido de tener muchas librerías portadas, por lo poco que lo tengo investigado, el asunto de tiene alguna especie de abstraccion para ser polivalente .Net / Qt# / Gtk# me hace pensar que es un proyecto hiper completo, pero mi corta experiencia intentando instalarlo en Linux ha sido un infierno del que aún no he salido (por lo que decías de una VM instalable con un doble click).
Voy a mirar eso de wxWidgets, que no lo había oido en la vida, y en la última semana dos veces ...
Lo que parece claro es que existen quizás hasta demasiadas opciones.
ah! Yo he hecho multiplataforma con Java para MacOS X y no ha ido nada mal, a partir del 10.2 el propio SO trae J2SE 1.4.x y un programita Package Manager que te hace un instalable rápido y sencillo.
---
Epaminondas, python es cierto que es un lenguaje relativamente marginal, pero hay gente como Bruce Eckel que después de pasar por C++ y Java, ha terminado recomendando python. El otro día me instalé el interprete (doble click) y la librería que comento (wxWidgets) y la aplicaición demo estaba más que bien, de hecho usa los widgets nativos. Y el código parecía bastante sencillo.
Y en cuanto a lo de Java, es cierto que es en lo que tengo más experiencia, pero estaba más bien pensado en buscar la "buena" solución, no la que yo conociese mejor :-)
---
Borja, eso de RealBasic habría que probarlo, pero como estoy pensando simplemente en alguna aplicación open source, no parece una buena solución una herramienta por la que haya que pagar.
Aparte, programar en Basic, no se, no se. Dejé de programar en Basic cuando tenía 15 años, cuando me pase al Turbo Pascal, y no es un lenguaje que me gustase especialmente.
---
Cek, yo creo que .Net (y Mono, etc) no son lenguajes orientados a servicios web. Tienen APIs para servicios web, pero también tienen APIs para desarrollo tradicional (WinForms, etc). De hecho, yo he probado algún lector RSS (aplicación de escritorio) en .Net y tenía muy buena pinta.
---
Albin, lo de que Java tiene mala prensa, solo hay que darse una vuelta por ahí. No lo digo por mi, ojo, que lo utilizo a diario (trabajo con él) y lo veo como un gran lenguaje. Pero es cierto que mucha gente lo aborrece por que lo consideran lento o por que son unos talibanes del software libre y no lo consideran suficientemente "libre".
Por cierto, ¿puede ser que el interprete de Mono para windows se ejecute sobre el interprete de .Net?
Un saludo.
Sigue así con los posts que son muy interesantes.
Salu2.
Por otro lado, si a Eckel -y a Eric S. Raymond- les gusta Python por algo será, por supuestísimo. Pero yo me planteo los proyectos domésticos como "experimentos con gaseosa" cara a mi reciclaje profesional. Ergo, a no ser que mi futuro jefe se apellide Eckel o Van Rossum Python no va a ser mi lenguaje de cabecera ;-) Si te vas a pasar a Python échale un vistazo a Boa Constructor.
Otro ejemplo es el pequeño motor de base de datos GADFLY, tambien escrito en Python que se puede "embeber" dentro de la "aplicacion de escritorio".
Del otro lado de la balanza tengo a Java... creo que es Framework mas que maduro y a esta altura es una opcion totalmente valida.
Sin embargo Python es mas simple, claro y libre.
El aprendizaje es mas rapido en Python que en Java ( por lo menos a mi me resulto asi).
Saludos DaltonM
Comentarios cerrados para este artículo