Pensamientos de un novato aprendiendo Java

Es probable que haya mucha gente como yo que conozca otros lenguajes como C# y que desea conocer Java para en un determinado momento poder decidir que lenguaje utilizar ante una determinada situación o problemática a resolver. O incluso poder utilizar lo mejor de ambos lenguajes para interoperabilidad de sistemas.

Siempre he tenido ganas de aprender Java para poder tener un mejor panorama acerca de que lenguaje poder utilizar ante una determinada situación. Creo que este es el momento de iniciar. Si alguien está en la misma situación lo invito a compartir sus comentarios o a corregir estos pensamientos de un novato en Java con muchas ganas de aprender.

Mucha gente comenta que Java es mejor que C# o que C# es una copia de Java así que quiero formarme mi propia opinión conociendo al máximo el alcance de Java. Es cierto que Java lo mencionan como multiplataforma pero que pasa si yo soy desarrollador de una sola plataforma? Recordé una frase que dice que “el que mucho abarca poco aprieta”

En fin, hay varias preguntas que tengo y que espero poder ir resolviendo con el tiempo mientras aprendo Java. Sí alguien tiene los mismos intereses que yo, lo acompaño a seguirme.

Manos a la obra y creo que el primer paso para aprender un lenguaje es realizar nuestro primer programa “Hola, Mundo”

En lo particular creo que un IDE es una herramienta poderosa que nos puede ayudar a crear aplicaciones ya que podemos tener en una sola herramienta el editor, el compilador y el depurador necesarios en todo desarrollo. Lo malo que veo de los IDEs durante el proceso de aprendizaje, es que nos ayudan demasiado que nos ocultan del detalle y como a mí me gusta aprender el detalle empezaré por investigar cómo crear un “Hola, Mundo” con bloc de notas y línea de comandos. Por cierto, las aplicaciones que la gente me solicita son siempre para plataformas Windows así que aprenderé Java sobre plataforma Windows.

Tomando en cuenta lo que conozco de C# iré haciendo las comparaciones.

Para crear un Hola Mundo con C# necesito únicamente el .NET Framework para desarrolladores, con este software vienen los compiladores entre ellos el de C# necesario para desarrollar aplicaciones .NET. Aquí se puede descargar (48.1 MB):

¿Que necesito para desarrollar un Hola Mundo en Java?

Investigando por la red entendí que lo que necesito es el Kit de desarrollo de Java (JDK) que contiene un conjunto de herramientas para utilizarlas en una ventana de línea de comandos. Con estas herramientas podré compilar, ejecutar y depurar programas Java. Ya después investigaré acerca de los IDEs disponibles. (Alguien me puede recomendar uno?)

Entendí que hay varias versiones del Kit dependiendo del tipo de aplicaciones a desarrollar, por lo que entendí, para novatos en Java, es recomendable Java SE. Este kit se puede descargar gratuitamente desde la siguiente dirección:

Aquí pude descargar el siguiente archivo:

Java SE Development Kit 6u21
jdk-6u21-windows-i586.exe - 75.91 MB

Una vez descargado el archivo, procedí a ejecutarlo y realizar la instalación al estilo Next, Next… De manera predeterminada se instaló en C:\Program Files\Java\jdk1.6.0_21\.

Mientras se instalaba el JDK me quedé pensando en cómo es el entorno de ejecución de las aplicaciones Java… algo más por investigar.

Ya instalado el JDK ahora a codificar

Hay que crear un archivo que debe tener la extensión .java (¿porque obligatoriamente?) por ejemplo HolaMundo.java.
Es importante mencionar que el nombre de la clase debe ser igual al nombre del archivo y es sensible a mayúsculas y minúsculas.

Aquí está el código HolaMundo en Java dentro del archivo HolaMundo.java:

 

El mismo código en C# dentro de holamundo.cs:

 

Algunas diferencias:

1.- En C# la clase no necesariamente debe tener el mismo nombre que el archivo fuente.
2.- En C# se recomienda que el nombre del archivo fuente tenga la extensión “cs” pero no es obligatorio.
3.- En Java se utiliza “main” y en C# “Main”
4.- En C# no se obliga a ponerle argumentos al Main aunque también es posible. Si no declaro argumentos al main de Java me marca un error en tiempo de ejecución pero no en tiempo de compilación.

El siguiente paso es compilar el archivo. Los pasos son los siguientes:

1.- Abrir una ventana de línea de comandos
2.- Ir al directorio donde está el archivo java, en mi caso c:\demos\java
3.- Escribir:

"C:\Program Files\Java\jdk1.6.0_21\bin\javac" HolaMundo.java

Se puede también agregar la ruta del compilador a la variable de ambiente Path para no escribir la ruta completa del compilador.

El compilador genera un archivo con extensión .class. Tenemos ahora entonces el archivo HolaMundo.class.
El código generado no es código nativo, es un código conocido como ByteCode, este código es convertido en código de máquina por el compilador JIT de la máquina virtual de Java justo antes de ser ejecutado.

Para ejecutar la aplicación

En Java invocamos al intérprete de ByteCode. Este intérprete se encuentra en la ruta C:\Program Files\Java\jdk1.6.0_21\bin\java.exe. Para ejecutar nuestra aplicación escribiremos:

"C:\Program Files\Java\jdk1.6.0_21\bin\java" HolaMundo

Para compilar la aplicación en C# realizamos los siguientes pasos:

1.- Abrir una ventana de línea de comandos
2.- Ir al directorio donde está el archivo C#, en mi caso c:\demos\cs
3.- Escribir:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc holamundo.cs

El compilador genera un archivo con extensión EXE. Tenemos ahora el archivo holamundo.exe

El compilador genera un archivo EXE o DLL conocido como Assembly, este Assembly contiene entre otros elementos, código conocido como código intermedio o MSIL y que el CLR carga para que con la ayuda del compilador JIT genere código máquina para poder ser ejecutado.

Para ejecutar la aplicación no se requiere un interprete

Simplemente escribimos el nombre de nuestra aplicación:

Holamundo

Hemos creado entonces dos versiones de Hola mundo, una versión con Java y una con C#.


Algo que es importante notar es el tamaño de los archivos generados:

Java: HolaMundo.class = 425 bytes
C#: Holamundo.exe = 3584 bytes

¿Por qué la diferencia en tamaños? ¿Tendrá algo que ver el intérprete de Java (java.exe)? ¿Será que este intérprete tiene lo que el Assembly por sí mismo ya contiene?

Es algo que necesito investigar. Aunque sería bueno que un experto en Java pudiera ayudarme

Podemos ir sacando conclusiones.

Nuevamente reitero, no soy un experto en Java así que cualquier comentario constructivo es bienvenido.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Verdaderas diferencias

En C# y creo que en los lenguajes de .NET en general, es una convención que los métodos empiecen con mayúscula. Realmente el "main" es el método que tenga el atributo [STAThread], creo que ni siquiera es obligatorio que se llame Main. Los programas y clases en .NET tampoco son código nativo, como bien mencionaste, se llama IL (Intermediate Language) que es una especie de ensamblador el cual es interpretado por el CLR (Common Language Runtime, el equivalente en .NET de la JVM). Pero sí se necesita un intérprete, el CLR es el intérprete del IL lo que pasa es que realmente con la compilación JIT ya se tiene performance de un binario nativo; lo que pasa es que en .NET en Windows hicieron las cosas de forma que la invocación al intérprete sea tácita, mientras que en Java debes invocar la JVM y pasarle el nombre de la clase ejecutable como parámetro (y el classpath etc). Pero en Java también se hace compilación JIT.

La diferencia en tamaños de tus holamundos es porque en Java solamente se tiene el bytecode mientras que en .NET trae todo un encabezado de ejecutable nativo donde se invoca el CLR. Por eso no necesitas invocar el CLR a mano; el EXE tiene una especie de machote de ejecutable nativo de Windows que lo único que hace es invocar el CLR y decirle que ejecute el método Main de tu clase.
En Java se podría hacer algo similar y de hecho hay herramientas de terceros que hacen algo así; meten el .class en un .exe para que lo puedas correr como si fuera nativo, pero el .exe solamente invoca a java.exe.

Interesante post. Acá van

Interesante post.

Acá van algunas observaciones/comentarios/respuestas.

Que un lenguaje sea mejor que otro es un tema totalmente subjetivo, por lo que es difícil dar un veredicto que sirva para todos. El ejemplo que pones es muy bueno. Con Java no se puede ( o es muy difícil ) hacer programación para un OS especifico, por ejemplo, integrar con las bibliotecas de mmhhh Internet Explorer, en Windows o con las bibliotecas del Finder en OSX. Para una programación especializada sobre una plataforma específica, siempre serán mejores las herramientas que esa plataforma provea.

Hay sin embargo una gran cantidad de aplicaciones que no son específicos para una plataforma y donde se puede hacer código que corra sin cambios. Pero de nuevo, si esto hace mejor o peor al lenguaje es subjetivo.

Sobre los IDE's yo encuentro particularmente fácil de usar Intellij IDEA de Jetbrains. Hay un link a la izq, hasta abajo. Otros muy populares son Eclipse ( que a mí no me gusta mucho pero por ejemplo me parece que es el preferido de ezamudio ) y Netbeans, que durante mucho tiempo ha sido el IDE provisto por Sun ( ahora Oracle ) para desarrollar en Java.

Sobre el nombre de archivo, este debe de coincidir con la clase, solo cuando la clase es pública. Cuando no es pública, puede tener otro nombre, ejemplo, lo siguiente es posible:

 

La razón histórica es por que facilitaba al compilador el procesado de los archivos. A la larga generó una buena práctica y se quedo así. Por ejemplo si quieres encontrar la clase SolicitudDeCompra, puedes suponer que estará en el archivo SolicitudDeCompra.java ( aunque no es forzoso,como ya dije )

La firma del método   es la que es especial, para el interprete de Java como punto de entrada a una aplicación. Existe un truco ( sucio, como muchos otros trucos ) para llamar a Java sin un main. :) :) Solo como curiosidad lo pondré aquí.

NOTA: No hagan esto en casa:

 

Usar los métodos con minúscula y mayúscula en Java/C# es también cuestión de estilos, ambos son permitidos, pero se recomienda seguir los estándares de la plataforma en la que se programa ( es como el acento en los idiomas, puede que hables muy bien, uno, pero con un acento ajeno, se notará que no es tu idioma ) En Java la convención es que todas las clases empiecen con mayúscula y los métodos y los atributos con minúscula y usando CamelCase. Otra convención es poner la llave que abre en la misma linea en la que se define, aunque este punto es un poco menos "estricto" Por ejemplo, este es un estilo que yo he visto abundar en C#

 

Y en Java yo escribiría:
 

Lo más importante, sobre todo cuando se trabaja en equipo, es que todo el equipo siga el mismo estilo.

Definitivamente es mejor que pongas la ruta del compilador/interprete en el PATH, para que no tengas que escribirla completa.

Que bueno que estes aprendiendo una nueva plataforma. Eso es siempre bueno, por que amplia tus opciones.

Saludos.

Muchas gracias por tus

Muchas gracias por tus comentarios :-)

Microsoft sugiere utilizar notación Pascal Casing para el nombre de los métodos. El punto de inicio de los ejecutables .NET debe llamarse Main y debe ser estático. El atributo [STAThread] es común verlo en aplicaciones Windows únicamente y es para comunicación con componentes COM.

Respecto al asunto de los tamaños y por lo que comentas, esa debe ser la razón, las aplicaciones .NET ya incluyen el header que las aplicaciones Java no. Tendrás a la mano información de esas herramientas de terceros para generar EXEs de Java? Asumo que esos EXEs siguen siendo bytecode y no código máquina. Me gustaría comparar tamaños.

Eso me lleva a otra pregunta, en .NET puedo compilar un Assembly y generar código máquina para evitar compilar en tiempo de ejecución. Es posible hacer esto en Java?

Nuevamente, gracias por tus comentarios :-)

Muchas gracias por tus

Muchas gracias por tus comentarios, siempre es bueno escuchar de la gente que tiene más experiencia :-)

Voy a investigar para ver si existe una tabla comparativa de los distintos IDEs para Java, aunque mi forma de pensar me dice que el del creador de Java (SUN?) debe ser el bueno :-)

Yo estoy en casa así que me gustaría poder hacer ese ejercicio del Java sin Main, puedes darme pistas de cómo hacerlo? de cualquier forma lo empiezo a investigar :-)

Muchas gracias

Netbeans, debería de ser el

Netbeans, debería de ser el bueno, pero digamos que lo bueno que hizo sun, fue el lenguaje y el IDE quedo un poco ensombrecido.

Eclipse por muchos años ha sido el más usado, sobre todo por que IntelliJ IDEA no era gratis ( hasta hace poco sacaron una versión Community Edition )

Ahi pague el codigo para hacer llamar un programa sin main, justo debajo de donde dice: "No hagan esto en casa"

Imagen de JaimeItlzc

Si no es molestia

Si no es molestia alguno de ustedes me podria decir algo breve sobre esto:
Estructuras lineales estática y dinámicas.
3.1 Pilas.
3.2 Colas.
3.3 Listas enlazadas.
3.3.1 Simples.
3.3.2 Dobles.
Se tiene que programar en un lenguaje en especial? Por ejemplo C?
Por que un miembro del foro comento: ejemplo la materia de estructura de datos (obviamente dada en C puro y con inclusión de punteros desde la primer clase).

Yo estoy tomando esa materia y me gustaria ver la opinion de los demas?
Saludos.

Imagen de ezamudio

Estructuras de datos

Esas estructuras son comunes en programación independientemente del lenguaje que uses. En Java y .NET ya hay clases que las implementan de modo que no lo tienes que hacer a mano, por eso se recomienda enseñar esas cosas en C donde tienes que hacer tu propia implementación. Aunque en Java también podrías, pero en C no tienes que estar lidiando con objetos Y además con esas estructuras. Busca algo de FIFO y LIFO, que son colas y pilas respectivamente.

Como que esto merece su

Como que esto merece su propio post, no?

Acá va:

Pilas: Lo primero que entra es lo ultimo que sale ( como en las tortillas, la primera que agarras es la de hasta arriba, para llargar a la ultima, tienes que sacar todas las demás )
Colas: Como la del cine, el primero que llega que el primero que sale ( de la cola y entra al cine )
Listas: Como la lista de alumnos en una clase
- Simplemente enlazadas: un elemento te lleva al otro, pero en una sola dirección
- Doblemente enlazadas, através de un elemento puedes llegar a otro, pero también puedes regresar ( en los dos sentidos )

Las listas son similares a las colas, pero también puedes obtener elementos intermedios ( por ejemplo, acceder al 3er elemento )

No se tienen que programar en un lenguaje en particular, hay algunos que tienen soporte "de caja" y otros ( como C ) donde las tienes que hacer tu mismo.

A mi no me parece tan buena idea aprender dos conceptos al mismo tiempo, como en C, aprender apuntadores y estructuras de datos al mismo tiempo.

Quizá lo mejor sería aprender un concepto primero y luego el otro.

Imagen de Nopalin

Cosas nativas del sistema

En java tambien se pueden hacer cosas dependientes de las plataformas, solo que no es fácil ni tan directo, hay que aprender sobre JNI, el cual es una interfaz para comunicacion con librerias nativas del sistema.

Por ejemplo programo una dll utilizando los headers JNI y sus estructuras de datos, y esta dll la puedo invocar desde una aplicacion java. De esta forma puedo crear una libreria dependiente del sistema y utilizarla en mis programas java.

Ahora, para el autor, estoy seguro que el 90% de los clientes nos piden cosas para windows, pero la ventaja de java es que no tengo que programarlo en windows, yo uso linux como sistema base y para desarrollo, e instalo en windows como si nada. Ya en casos muy extremos si me tengo que meter a windows, como por ejemplo utilizar alguna libreria de un hardware que solo tiene una dll para windows, es donde tengo que utilizar jni y desarrollar esa funcionalidad en windows.

saludos

Investigando sobre JNI y por

Investigando sobre JNI y por lo que entendí de ello, el equivalente en .NET de JNI es lo que se conoce como "Platform Invoke". No conozco JNI pero por el comentario de Nopalin y de lo que dice Wikipedia () es mucho más complejo JNI que "Platform Invoke".

Amigo, no podía yo quedarme

Amigo, no podía yo quedarme con la duda asi que a investigar. Dime si mis conclusiones son correctas por favor: :-)

 

Correctamente bien

Correctamente bien contestado :)

Sobre JNI, también existe un proyecto/biblioteca que se llama JNA, que es lo similar, pero es más fácil de hacer. No se si sigue el proyecto, pero vale la pena echarle un ojo.

Imagen de Nopalin

mas complejo?

No conozco mucho sobre p/invoke, acabo de leer algo rapido por que ni si quiera sabia que existia, pero segun lo que lei es lo mismo, programas en c++, debes tener cuidado de las estructuras que regresas, sobre el desperdicio de memoria (por que sales del area controlada por la plataforma) y otros detalles mas.

Entonces no se a que viene lo de complejo. Si te refieres a que es mas complejo programar en c/c++ que en java, entonces si, es mas complejo.

sobres

Imagen de fcodiaz

Buen Post

un muy buen pos y me agrada la analogías que haces, sera fácil que llegues a dominar Java, los lenguajes son muy parecido hay ciertas diferencia, en cuanto a especializarte en uno solo, lo veo tan malo como solo sabar un poco de todos, en mi experiencia lo que me ha ayudado mucho a aprender infinidad de lenguajes es tener presente la teoría y hacer analicis como los que tu haces en tu post, con ello no te cuesta mucho cambiar de un lenguaje a otro y realmente un buen programador debe de ser capas de tomar y uno y otro lenguaje sin mayor complicaciones y mas a un si los lenguajes son bajo el mismo paradigma en nuestro caso lenguajes OOP, no es necesario que aprendas toda la API de clases provista si no mas bien aprender a leer la documentación y a discernir lo que necesitas y sobre todo saber investigar de alli en mas si tienes la teoria es un paso semi trasparente ;).

en cuanto IDE's coicido contigo que en una fase de aprendizaje estorban mas de lo que ayuda.. un buen IDE para comenzar a programar es el notepad y la consola del SO xP... ok si no queremos ser tan extremos puede usar notpad2 que trae colorsitos para la sintaxis, ahora si quieres evitarte unos cuantos pasos para copilar y todo que esta bien conocer el funcionamiento de javac pero creo que todos terminamos enfadados de compilar directo asì que puedes dar paso a un JCreator lo malo de este es que es de paga :( aunque para aprender puedes buscarlo en unos de esos sitios con link a siertos proveedores de storage y seguramente encuentras la versión pro sin problemas.

y ya creas que es momento de dar un paso mas en el campo de IDE's te recomiendo NetBeans aparte de ser el "oficial" tiene muy buena ayuda de auto completado y mil maravillas q he encontrado en el, este brico sera como ir de notepad al Visual Studio.

Bueno suerte en esto de aprender un lenguaje mas ;)

Imagen de Nopalin

netbeans?

y ya creas que es momento de dar un paso mas en el campo de IDE's te recomiendo NetBeans aparte de ser el "oficial" tiene muy buena ayuda de auto completado y mil maravillas q he encontrado en el, este brico sera como ir de notepad al Visual Studio.

Yo tambien lo recomiendo, siempre y cuando tengas una maquina con 3 gigas en ram, un procesador dual core y solo ejecutes una instancia de netbeans.
jajajaja, bueno en realidad es bueno pero es demasiado pesado para mi gusto.
Si eres de los que les gusta un poco de ayuda pero a la vez quieres seguir teniendo el control sobre lo que haces, yo te recomiendo eclipse, yo al menos, no he encontrado algo que netbeans haga y que eclipse no (a excepcion del soporte para javafx, pero eso es otra cosa), y por el contrario en eclipse tu puedes crear launchers, y ejecutar un mismo proyecto varias veces, y en netbeans no, eso lo odio.

sobres

Imagen de JaimeItlzc

Robusto Netbeans IDE

Robusto si se podria decir Netbeans pues que decir de el antes que nada pues hay que saber usar un IDE por que no vaya a pasar como un amigo para hacer una factura que se hacia en 400 lineas se avento 1000 por decir asi por solamente, tomar componentes(Swing) y colocarlos en el Panel del frame wow cuando yo vi eso dije chale para que uso ya Jcreator si en ese solo arrastro las cosas y listo aaa pues si que facil pero mucho codigo que se podia optimizar.

Pero por ejemplo Nopalin donde seria mejor Usar iReport con el frontend de Netbeans (como plugin).
Netbeans o Eclipse?

Igual para mi el mejor es el Eclipse.
Con el solo hecho de ver el proyecto javaMexico me parecio muy bueno e interesante.

En mi Tecnologico tiene Netbeans jajaja tarde como 10 min en abrir y cuando de abre aveces tienes la tristesa de errores o al estar haciendo algo te traba.
Saludos.

Muchas gracias por el

Muchas gracias por el comentario y a seguir aprendiendo :-)

He escuhado de Eclipse y

He escuhado de Eclipse y NetBeans. Saben de alguna lugar donde haya tablas comparativas?

Imagen de ezamudio

Tiempo

Cuánto tiempo piensas invertir en estar leyendo tablas comparativas y opiniones de uno y otro IDE? Si apenas es para aprender, no es más rápido y productivo que bajes ambos y hagas un proyecto sencillo (el mismo) en cada uno?

El tiempo que sea necesario,

El tiempo que sea necesario, me gusta escuchar a los expertos. Aunque creo que debí primero ver los resultados de la encuesta de esta comunidad, todo apunta a NetBeans como el más utilizado. Debe ser por algo. Aqui veo una ventaja de .NET. Solo hay un entorno recomendable: Visual Studio.

Entre Netbeans y Eclipse, yo

Entre Netbeans y Eclipse, yo escogería Idea :) :)

Imagen de Nopalin

Formas!

En mi poca experiencia con netbeans, creo que es más utilizado que eclipse por que trae incorporado el soporte para crear formas, en eclipse existe creo que por medio de un plugin, pero nunca lo he probado. En realidad, habiendo aprendido a programar con jEdit y habiendolo utilizado para dos proyectos grandes, creo que el editor swing ni me va ni me viene, como dije, a mi el IDE eclipse me compro por su capacidad de hacer refactoring, poder crear targets para ejecutar aplicaciones sin necesidad de meterme a fondo con ant, y de que de sincroniza los imports con los que ocupe tu clase (antes de que digan que netbeans lo hace, si lo hace pero solo te agrega los que faltan, si uno ya no es requerido no lo quita y eso me causa problemas) entre otros pequeños detalles mas.

Pero como dice ezamudio, no hay mejor consejero que la experiencia, deberias probarlos y decide tu.

sobres

Imagen de Shadonwk

que solo se promueba uno, no

que solo se promueba uno, no quiere decir que sea el unico, ni mucho menos que no se pueda hacer en notepad

Imagen de WinDoctor

Creo que tanto .NET como

Creo que tanto .NET como Java tienen capacidades similares excluyendo aplicaciones especificas para un SO. Muchas empresas tienen servidores y entornos Web bajo Linux/UNIX/BSD, por lo cual el 90% de sus aplicaciones las tienen bajo Java.

Tomando en cuenta que muchas aplicaciones empresariales (o pseudo empresariales) son bajo Web, las desktop application ya no son tan comunes por lo que no estamos tan atados a un OS. En este punto creo que Java y .NET tienen el mismo potencial excluyendo aplicaciones que requieran utilizar capacidades específicas de un S.O, por lo que una discución sobre que lenguaje es mejor, es imposible llegar a una conclusión contundente. Más bien la discución es en la comodidad que brina la sintaxis del Lenguaje y los IDE´s y desde luego que por lo general que uno se inclina por el primer lenguaje que aprendio.

Lo que sin duda he notado, es que a la mayoria de desarrolladores .NET que tienen un primer encuentro con Java, les cuesta mayor trabajo comprender varios conceptos y buenas prácticas (sin embargo de Java a .NET no pasa lo mismo), ya que en el mundo .NET no es tan difundido como en Java la utilización de patrones y/o frameworks. Por decirlo de algún modo, Java generá más habilidades que .NET.

Sobre los IDE´s, en lo personal me gusta Eclipse. Inicie con NetBeans, sin embargo es algo más lento que los demás entornos. Eclipse es open source y existen infinidad de plugins para este IDE, de igual forma es cuestión de gustos, creo que tampoco existe una diferencia tan marcada en los IDE´s como para poder decir que en "X" IDE puedo desarrollar con 1 semana menos de tiempo que si lo desarrollo en "Y" IDE.

Saludos!

Imagen de ezamudio

plataformas, no lenguajes.

Para lo que mencionas de sistemas operativos y demás, a las empresas les importa más la plataforma (.NET o Java) que el lenguaje en que se haya programado la aplicación (C#, VB.NET, Managed C++, Java, Groovy, Scala). Y ahí por supuesto que puede haber discusiones muy válidas sobre qué plataforma es mejor. Si resulta que Java o C# pueden hacer una cosa que el otro no puede, no por limitaciones del lenguaje sino de la plataforma a la cual compilan, entonces realmente la ventaja la tiene la plataforma, no el lenguaje.

Y el programador debe atenerse a lo que el cliente pida, pero debe tener estos conocimientos para poder ofrecerlos si la oportunidad se presenta. Es importante poder dar una recomendación técnica (con argumentos válidos, no solamente "es que no sé Java" o "es que me gusta más C#").

Hay quienes son más felices cuando no tienen la libertad de elegir y sienten que tener muchas opciones de IDE es un dolor de cabeza. También había quienes eran perfectamente felices viviendo bajo un régimen comunista. Cuando salió .NET y lo aprendí y me metí a ese bonito lugar del mundo corporativo en donde reina Microsoft, me di cuenta que .NET y Java son como la catedral y el bazar (la analogía de Eric Raymond para explicar el software libre vs. el software propietario). A fin de cuentas .NET fue hecho por una empresa, olvidémonos de que el standard de la CLR está en ECMA y todo eso. La gente que ya está acostumbrada a trabajar con lo que da Microsoft, está acostumbrada a que la empresa provee la plataforma, el IDE y todas las herramientas de desarrollo, las guías de mejores prácticas, los patrones de diseño (que me parece que MS le presentó a los programadores apenas cuando sacó .NET, por eso en VB vimos tanta porquería). Y los programadores que usan eso no buscan nada más fuera. Están acostumbrados a que todo sea de la misma marca: el sistema operativo, el lenguaje, el IDE, el compilador, la plataforma, las librerías adicionales, la documentación, la base de datos, el servidor web, el contenedor de aplicaciones, etc etc. En java estamos más acostumbrados a poder usar un web server de una marca con un contenedor de otro proveedor con cualquiera de las 8000000 librerías o frameworks para la vista web (JSP, JSF, *Faces, Tapestry, Struts, Click, Wicket, alguno de los de Spring, etc), con algún inyector de dependencias (generalmente, pero no siempre, Spring) con algún ORM (generalmente, pero no siempre, Hibernate), con alguna base de datos (MySQL, Oracle, PostgreSQL, SQLServer, etc), es decir, estamos más acostumbrados a manejar ambientes heterogéneos. Estas discusiones de que si es mejor Eclipse o NetBeans me parecen muy sanas por el simple hecho de que las podemos tener, a diferencia de otras plataformas donde hay una sola, que salió del templo de los altos sacerdotes de la plataforma en cuestión y es el que tienes que usar y te callas.

Pero a mi me gusta Eclipse.

Entiendo tu punto de vista

Entiendo tu punto de vista muy aceptable.

Para gente que está aprendiendo Java como yo, mi conclusión seria:

  • Si desarrollas aplicaciones Java tienes una gran variedad de productos y tecnologías que puedes utilizar: Eclipse, NetBeans, MySQL, Apache, Linux, etc... La tarea de cada persona es elegir lo que más le guste. Y si eres novato como yo, pregúntales a los expertos, cada uno te recomendará lo que utiliza. El hecho de haber tanto de donde escoger no me ha permitido hasta ahora conocer Java o Linux que se me hacen muy buenos pero no sé por dónde empezar. Gracias a los comentarios de ustedes, ya voy aclarando las cosas y voy encontrando el camino. :-)
  • Si desarrollas para .NET, lo recomendable es utilizar solo tecnologías Microsoft (C# o VB, MS SQL, IIS, Visual Studio) ya que estas tecnologías están totalmente integradas y facilitan mucho el proceso de desarrollo. Esto no quiere decir que no se pueda utilizar por ejemplo C# con tecnologías o productos no Microsoft como MySQL. Microsoft no te obliga ni puede obligarte a utilizar sus productos.

Saludos!!!

Imagen de ezamudio

fuerza

"Microsoft no te obliga ni puede obligarte a utilizar sus productos"

No, claro que no. Por eso tengo completa libertad de comprar una PC con el sistema operativo que yo quiera, sin tener que pagar una licencia de un sistema operativo preinstalado y que si decido borrar sin haber utilizado, nadie me va a reembolsar el dinero que pagué por esa licencia, el cual es parte del precio que pagué por la computadora.

Y si desarrollo en .NET para nada estoy obligado a usar Visual Studio, puedo usar el IDE que yo quiera, por ejemplo... Visual Studio Express, o... Visual Studio.

Eso digo Visual Studio

Eso digo Visual Studio :-)

Por cierto, aprovechando de tu tiempo, en .NET existe la herramienta ILDASM que me permite ver el contenido de un Assembly.

Conoces alguna herramienta que me permita examinar la estructura de un archivo .class generado por el compilador de Java?

Imagen de Nopalin

aqui uno

Con estructura te refieres a poder convertir del .class a codigo java?
en este thread recomiendan uno:

Muchas gracias, creo que es

Muchas gracias, creo que es lo que buscaba yo. La herramienta que mencionan es similar a .NET Reflector que permite examinar el contenido de un Assembly .NET.

Me imagino que tambien en Java es posible proteger el código con algún ofuscador de la misma forma que en .NET.

Imagen de ezamudio

Ofuscador

Sí, es posible. Hay ofuscadores y descompiladores para Java que existen desde antes que existiera .NET

RE: Formas!

Netbeans hace lo mismo que tú dices, creo que te quedaste allá por la versión 5...actualmente he batallado mucho menos con Netbeans que con Eclipse.

Digamos que Eclipse es para gente que le gusta personalizar sus cosas, además de ser más personalizable (mucho más) que cualquier otro; eso no queda en duda. Sin embargo Netbeans viene con muchas cosas que Eclipse no trae 'out-of-box', por ejemplo integración con Bugzilla, SVN (+ssh ó +plink), entre otras que no recuerdo bien; y a eso añádele la creación de websites y forms en modo gráfico (a la mismísima 'VisualStudio-School'), y por ejemplo que no tienes que andar configurando las maneras de ejecutar para cada proyecto (que esto si que es desesperante); en Netbeans basta con poner un proyecto cómo principal y que este proyecto tenga un archivo de proyecto (uno de maven o de ant).

No sé, pero a mi que no me agrada tener que configurar a pulso el IDE, creo que la mejor opción en el: Eclipse vs Netbeans el claro ganador es Netbeans; aunque cómo para decir: "IDE definitivo" necesitaría usar IDEA (la versión comunitaria, ya que no pagaré por un IDE XD).

RE: que solo se promueba uno, no

Incluso se puede en vi o en emacs XD

Imagen de Nopalin

me referi a eso mismo!

No me entendiste bien verdad? Cuando dije que netbeans no puede soportar varios lanzadores por proyecto e referia presisamente al hecho de que yo configure cada lanzador como me plazca. Acostumbro a hacer las aplicaciones que funcionen con diferentes profiles, dependiendo parametros de archivos properties, estos properties los agrego al classpath cuando corro la aplicacion, y si nomas tengo la opcion de una sola configuracion por proyecto... te la dejo de tarea.

Con los forms, déjame decirte que el editor de netbeans es bueno, pero odio que no te permita modificar el source code, hasta los IDE's de microsoft lo permiten así que no digas que es a la "a la mismísima 'VisualStudio-School'".

Baje e instale netbeans 6.9 por que requeria soporte para javafx... y que crees? exacto no traia el svn incluido!!! lo bajas e instalas desde dentro del mismo ide pero incluido no viene.

Hay varios sabores de eclipse, y cada uno de ellos trae soporte para diferentes cosas, incluida tu opcion para desarrollo de webs.

sobres

Imagen de WinDoctor

Lo que viene incluido es el

Lo que viene incluido es el Soporte para SVN, pero una cosa es tener que instalar a parte un Cliente como TortoiseSVN.

En eclipse hay que instalar un plugin y a parte del cliente.

Corrjanme si me equivoco.

Y hablando de Java y .NET,

Y hablando de Java y .NET, les dejo un link que a la mejor ya lo han visitado pero para quien no, un poco de humor no hace daño :-)

Imagen de Jvan

???

Nopalin a que te refieres con que Netbeans no te permite modificar el source code?

Imagen de Nopalin

cambiar el codigo manualmente

Me refiero al hecho de que cuando creas una forma con el editor visual de netbeans, este te crea un apartado en el archivo fuente donde inicializa todo lo referente a la forma, bueno ese pedazo de código no te lo permite modificar.

Y tu te estaras preguntando... y este cabron para que quiere modificar ese codigo si lo hizo netbeans y bien? bueno pues estando yo acostumbrado a no depender de ningun editor grafico, muchas veces agrego listeners a los controles de forma manual en la inicializacion, y por el simple hecho de que netbeans no me permita modificar el codigo pues no puedo, tengo que agüebito usar su editor grafico, y eso mi estimado, es lo molesto para mi.

sobres!

Imagen de Jvan

Claro que te permite

Claro que te permite modificarlo, quizá no tan a la brava, pero si te vas a la pestaña "Code" que está aun lado de "properties" te permite insertar codigo ya sea al inicializar el componente, antes, despues, etc. Yo creo que con eso no deberias necesitar más. pero de que se puede se puede.

Imagen de 2ark0

Demasiados golpes de ego

Creo que Miguel debe pensar que el ego de los "gurus" en Java es demasiado, la verdad creo que este ejercicio nos permitió ejemplificar la cantidad de recursos y lo heterogeneo que es el mundo Java, y más que hablar de los beneficios de tal o cual herramienta se han mencionado más las falencias de la otra. En mi MUY PERSONAL experiencia, en el sector privado, todas las empresas en que he estado utilizan NO Eclipse, NO netbeans, NO IntelliJ. Usan Rational Application Developer, IDE con licencia de IBM basado en Eclipse. No por esto digo que se debe comprar una licencia de miles de dólares. Comento lo anterior para indicar que si se piensa en sector privado, RAD y por ende Eclipse llevan delantera en uso. Reitero es MI experiencia, de hecho los servidores empresariales que corren aplicaciones Java para Web usan Websphere Application Server, igual de IBM. Entonces tendría que verse no sólo la plataforma, el sistema operativo ni el lenguaje, sino muchas cosas que solo el "feeling" y la experiencia te dan ineludiblemente.

Creo que nos hemos apartado un poco del motivo original del post. Esperemos Miguel vaya por buen camino y me ofrezco amablemente a apoyarlo en lo que necesite. Mi usuario de twitter es @simpleYLoco, no soy un geek, soy una persona que disfruta lo que hace, lo ama y respeta profundamente.

Saludos a todos.