Presidente de JavaHispano
Lunes 5 de mayo de 2008
Abraham es profesor de programación en la Escuela Politécnica Superior de la Universidad San Pablo CEU de Madrid. Desde su puesto como presidente de la comunidad JavaHispano, este joven profesor universitario nos ofrece una visión amplia, a la vez que independiente, al no pertenecer a una empresa sobre el desarrollo en el mundo Java. JavaHispano es una asociación sin ánimo de lucro legalmente constituida en España, que sirve a la comunidad de desarrolladores en castellano como foro de intercambio y promoción del lenguaje Java.
A la hora de elegir la creación de programas, ¿qué se elige primero el lenguaje o el entorno de desarrollo? ¿Qué factores incluyen?
Pues depende. Si puedes, eliges primero el lenguaje. Desde un punto de vista de la eficacia es mejor el empleo de lenguaje ensamblador, el de la CPU directamente, o C, dado que aportan el mejor rendimiento. Pero también son los más complejos y laboriosos para desarrollar aplicaciones. Cuando se trata de enseñar en la universidad son tan bien los más adecuados ya que enseñan cómo funcionan las cosas a bajo nivel. Así, por ejemplo yo doy clases de programación de primer curso sobre C en el primer cuatrimestre y de C++ en el segundo.
Si se busca una iniciación que no tenga tantos requisitos o no necesite tanto rigor porque no va a ser un profesional, pues entonces es preferible un lenguaje interpretado, Python, por ejemplo. La ventaja de un intérprete es que escribes “3 + 2” y rápidamente observas la respuesta, de forma que rápidamente se obtenga un feedback de lo que está haciendo.
Por el contrario, con Java tienes que comenzar a definir toda una serie de estructuras, variables públicas, en definitiva, toda una carcasa inicial para que luego puedas escribir las instrucciones. Esto significa que tienes que poner varias líneas de código simplemente antes de comenzar a escribir realmente el programa que quieres. Cada vez que explicas esto a un nuevo programador, hay que hacerle creer que realmente se necesita todo eso para comenzar a insertar la línea de programa propio.
Desde luego, siempre que sea posible es preferible elegir lenguaje. Si tuviera que aconsejar a nuevos programadores, sobre todo en un entorno académico, diría que inicialmente es preferible usar un lenguaje interpretado. Pero pensando en un nivel profesional, dentro de una empresa, sin duda hay que ver que entorno de desarrollo se necesita y con ello eliges luego el lenguaje asociado. Desde luego yo soy de los que creen que hay que emplear un completo entorno de desarrollo, ya que realmente ayuda a crear y progresar. Es difícil imaginar a un programador profesional creando una aplicación simplemente desde la línea de comandos. Aunque esto no quita que un buen programador debe aprender a usar la línea de comandos y saber qué es lo que ocurre por debajo. Pero no creo que esa sea la mejor forma de empezar.
¿Cómo fue este proceso inicial de elección en tu caso personal?
En mi caso empecé con Java, que me fue impuesto para realizar doctorado, ya que indicaron que tenía que hacer un desarrollo en Java. Así que lejos de otras consideraciones, mi primera elección de lenguaje me fue ajena y me tuve que acomodar a ella. Algo que no es inhabitual en el mundo de la programación.
Luego, una vez iniciado con ese lenguaje pues me gustó y fui perfeccionando sin abandonarlo. He programador cosas que tenía que hacer por el doctorado o por la universidad, y otras que no estaban relacionadas en absoluto, simplemente porque me gustaban. Aunque también he aprendido y manejado algunos otros. Pero siempre haya un lenguaje o un entorno de desarrollo con el adquieres mayor experiencia o te sientes más cómodo.
Desde tu conocimiento ¿Cuáles son los principales entornos de trabajo y herramientas de desarrollo para Java?
Si estamos hablando de aprender a programar, además se trata de alguien que no sabe lo que es la programación orientada a objetos, yo el entorno de desarrollo con el que me quedaría, es uno que se llama BlueJ (http://www.bluej.org/).
Es un entorno de desarrollo inicialmente creado desde un entorno académico, si mal no recuerdo por una universidad australiana y otra inglesa. Tal vez por ello es un entorno muy orientado a la docencia, hace una representación del programa muy básica, donde se ven las cajas on sus métodos, y permite, por ejemplo, ver la herencia, la asociación, y tiene lo que me gusta de Python, que es un se puede hacer clic derecho en las cajitas e invocar a un constructor, y luego m aparece una pelotita que es su objeto y luego en ese objeto puede hacer clic derecho y llamar a cualquiera de los métodos.
Es decir, recupera un tanto la idea del intérprete, de jugar directamente con el código. Todo esto es estupendo inicialmente, pero se trata de una herramienta un tanto limitada y básica, con lo que tras lograr una cierta soltura y conocimiento pronto hay que pasar a otro entorno, sobre todo para hacer programas “de verdad”.
Y pasando a un entorno más profesional, orientado a desarrollo de aplicaciones incluso comerciales, ¿Cuáles son tus sugerencias?
Bueno, lo primero que debo indicar es que no pertenezco a ninguna empresa ni estoy ligado comercialmente a ninguna, así que se trata de mi opinión personal e independiente. Dicho esto, en cuanto se piensa en desarrollar programas de tipo profesional mi recomendación es el entorno NetBeans (http://www.netbeans.org/). Dentro de los IDEs de tipo gratuito, hay dos grandes elecciones: Eclipse y NetBeans. En cuento a Eclipse, su punto fuerte, que es a la vez su punto débil, son los plugins.
Otra alternativa, si ya conoces bastante del tema, es que, en lugar de bajarte Eclipse (http://www.eclipse.org/), acudes a una distribución de las que tienen ya incluido los complementos deseados, pero en caso contrario te encuentras con que Eclipse es un entorno básico y generalmente se necesitan ciertas ampliaciones o plugins. Por su parte, Eclipse no es tan completo como NetBeans, ya que, por ejemplo no puedes desarrollar aplicaciones Web.
Una de las políticas que ha tenido NetBeans, y que tiene sus ventajas y sus inconvenientes, aunque más de las primeras, es que se trata de un paquete único. Y desde luego esto es una ventaja tanto para aprender como para iniciarse rápidamente en la programación. Así que cuando bajas e instalas el paquete tienes todo, desde Java Bases de datos, hasta un servidor Web, un servidor de aplicaciones, herramientas para trabajar con UML, con lo que en media docena de clics y sin tocar el teclado puedes tener una página JSP en tu equipo y verla desde el navegador. Esto con Eclipse no es ni tan rápido ni tan sencillo.
¿Hay otras alternativas interesantes? ¿Cómo se elige uno u otro?
Pues creo que los más importantes, los más empleados y los que más interesantes, son tres: NetBeans, Eclipse e IntelliJ. Los dos primeros son gratuitos y el tercero es bastante barato. IntelliJ (http://www.jetbrains.com/idea/), que es una excelente herramienta, cuesta uno 150 $ para uso personal y unos 400 o 500 $ para empresa. Aunque, en fin, es un tanto discutible si compensa pagar por tener un entorno de desarrollo para Java, teniendo alternativas gratuitas.
Al ser IntelliJ un producto desarrollado por una compañía desde cero ofrece un entorno robusto y tiene un modo consistente de trabajo
Cada uno tiene sus características con sus ventajas e inconvenientes. IntelliJ es un producto comercial, creado por una empresa, y con un diseño monolítico, mientras que Eclipse es un núcleo que se acompaña de multitud de complementos. Por su parte, NetBeans es un producto único que ya lleva todas las opciones, con lo que se instala desde un único paquete.
¿Cómo describirías cada una de estas alternativas con más detalle? Comenzando, por ejemplo por IntelliJ
Pues IntelliJ es el entorno de desarrollo que tiene mejor editor de textos, aunque el resto de los competidores han ido imitando cualidades y se han reducido las diferencias. Y esto desde luego es clave para un programador, ya que es la parte de programa donde más tiempo se pasa. Desde luego es que lidera el tema de tratamiento de textos, y además ha sido el primero en apostar por temas como refactoring, así como un potente quickfix.
Esto muestra pequeñas bombillas que aparecen al lado del código y te sugieren correcciones si el código está mal, como un error sintáctico. Por ejemplo si en Java escribes una sentencia de tipo “Si A = B”, esto produce un error de compilación en Java, ya que se necesita doble igualdad (A==B), pues ahí salta un quickfix que te lo indica. Algunos no son correcciones sino más bien sugerencias, para mejora del código. Por ejemplo, esto que has hecho así, quizás sea mejor de este otro modo. Y habitualmente tiene razón.
Básicamente es incorporar análisis estático de código, para sugerir cosas que pueden ser errores, bugs, o simplemente código que se puede mejorar. Si tienes una variable declarada en un método y nunca la usas, aparece un aviso indicando ¿para qué quieres esto? Y cosas similares, como inicializar una variable y no usarla.
Aparte, IntelliJ es un producto desarrollado por una compañía. Como ventajas de este producto es que lo han creado desde cero por una empresa, a diferencia de otros basados o derivados de Eclipse, que es lo más común actualmente en este campo. Esto aporta que sea un entorno robusto y tiene un modo consistente de trabajo. Si hay que configurar una conexión a una base de datos, que vas a usar para tener algún tipo de herramienta gráfica para lanzar consultas, o para tener un esquema, o para usarla además desde JSP o decirle a tu mapeador objeto relacional que use esa conexión, basta ponerla en un sitio y queda accesible para todo el mundo.
Eso parece un enfoque más sólido ¿cómo se valoran en este terreno Eclipse y NetBeans?
En NetBeans, y sobre todo en Eclipse, el entorno se construye aplicando plugins de procedencia diversa, lo que hace que cada uno de los elementos no conozca, ni pueda suponer siquiera, que ya está disponible la información de un método o un acceso a datos. Lo que implica que, para cada uno de ellos hay que volver a reconfigurar la conexión a la base de datos. Eso es algo que cualquier programador valor y que a mi me encanta. La herramienta con las que más he trabajado en JavaBeans y echo en falta algo similar. Además en IntelliJ todo esta creado del mismo modo porque está hecho por el mismo equipo.
En los últimos años Sun ve claramente a NetBeans como una de sus herramientas para fomentar el empleo de sus estándares sobre Java
Yo he empleado tanto NetBeans como Eclipse, para aprovechar lo mejor de cada uno, como comentaré más adelante. Y en cada caso, como estás usando un plugin diferente hay un modo distinto de trabajo, y lo mismo cuando cambias o usas otro plugin. Por ejemplo el soporte de UML es un “pegote” en netbeans. Se nota que era un proyecto desarrollado por una empresa y que tras ser comprado por Sun se insertó, con “calzador y vaselina” dentro del entorno.
De hecho, para trabajar con UML tienes que crearte otro proyecto que es el de UML y trabajas con dos proyectos uno para el código fuente y otro para UML, que son dos cosas independientes. Y este tipo de inconvenientes lo tienen tanto Eclipse como NetBeans.
Para mi estos entornos son como Frankenstein, hechos a cachitos, un montón de proyectos libres apoyados sobre un núcleo común, desarrollado por Sun o IBM. Pero no acaba siendo un entorno tan redondo como es IntelliJ o era JBuilder. Y digo era, porque JBuilder, a partir de la versión 2007 se ha creado como un Eclipse más plugins, mientras que las anteriores estaban construidas desde abajo por Borland, con lo que tenían una forma consistente de trabajo.
Por ello yo sigo usando JBuilder 2006, porque la versión 2007 no me convenció en absoluto. Las herramientas de Borland eran muy completas en cuanto al entorno, aunque no se si podía justificar el precio de las mismas, en torno a 3.000 o 4.000 $.
Y por otra parte, ¿cuándo usar NetBeans y cuándo Eclipse ya que los dos son gratuitos?
Bueno antes de entrar en ese tema había que explicar un punto que creo es clave para entender la diferencia que hay entre ellos. Y es detallar cómo funciona la plataforma Java. En la plataforma Java hay un organismo de organización, que se denomina Java Community Process que está dirigido por Sun, y en el que participan del orden de otras 800 empresas. En algunos casos también individuos, y todo el mundo tiene voto ahí. Este organismo es que se encarga de definir las especificaciones o estándares que forman parte de la plataforma.
Pueden ser tanto las especificaciones que se denominan paraguas porque engloban a otras especificaciones, como Java SE, Java ME, etc, y dentro de ellas hay más especificaciones. Por ejemplo, dentro de Java EE está la especificación JPA persistencia y también JP 3.0 que además de persistencia añade otros temas. Esos estándares aunque estén definidos por todas las empresas, quién más los respalda y más los apoya y fomenta es Sun Microsystems. Que es quien controla Java a nivel de marca. Y desde Sun se fomenta el estándar frente a cualquier otra posibilidad.
Por otro lado, en la comunidad Java hay entre 4 y 6 millones de programadores, los números varían según la fuente, y una buena parte de ellos se dedica a crear software libre, con lo que tienen sus ideas y su forma de programar y cómo hacer las cosas. Con lo cual miles de librerías, frameworks y soluciones que son de software libre. Y que muchas veces compiten de modo directo con esos estándares y especificaciones. Así, por ejemplo, tienes algo como Hibernate, que es un mapeador de objetos relacionales, que es competencia directa de la especificación JPA. O algo como Spring, no se si llamarlo un framework, que es una alternativa a todo lo que es stack Java EE.
Así que la elección entre NetBeans y Eclipse depende de cómo se oriente el programador respecto al estándar ¿Es así?
Si uno se dedica a trabajar directamente con las especificaciones, habitualmente Netbeans está mejor adaptado que Eclipse. Entre otras cosas, porque, para mi, en los últimos años Sun ve claramente a NetBeans como una de sus herramientas para fomentar el empleo de sus estándares. NetBeans es siempre el primero y el que mejor cumple y da soporte a las nuevas especificaciones. Si uno opta por trabajar con páginas JSE, JB 3P, con JPA, probablemente NetBeans sea el que mejor soporte le proporcione.
Por otra parte NetBeans, hasta la versión 6 tenía un punto débil, que era su editor, aspecto que se ha mejorado de forma notable y está ahora a par con Eclipse. Aunque en Java siempre se ha contado con todo un amplio conjunto de soluciones de software libre.
Eclipse tiene una comunidad más amplia, con mayor número de empresas detrás, y so se nota. Así, para cualquier framework, librería o lo que quieras, en software Java, es fácil que primero se escriba un plugin para Eclipse y es el que más recursos y opciones tiene. Luego, si se lo pueden permitir, sacan algo para Netbeans.
Si uno se va a las cosas alternativas, casi seguro que le conviene optar por Eclipse. Si uno quiere trabajar con Spring, NetBeans no es la mejor opción, sino que hay que decantarse por Eclipse. Así, por ejemplo, hay un conjunto de plugins, que llaman SpringIDE (http://springide.org/project), que realmente es Eclipse con un conjunto de plugins para trabajar con Spring.
Si se quiere trabajar con Hibernate, pues hay una serie de compañías que toman Eclipse le colocan una serie de plugins encima y lo venden o lo regalan como entorno de desarrollo. Por ejemplo, JBoss (http://www.jboss.org/) que es un servidor de aplicaciones y tiene un IDE para trabajar con su servidor de aplicaciones.
Desde luego esa es la primera gran distinción que haría. Netbeans ha mejorado mucho en los últimos años, hasta entonces estaba notablemente por debajo, pero con los últimos cambios que ha incorporado últimamente, el editor de código, soporte de refactoring y un soporte para control de versiones muy bueno, creo que se ha puesto al mismo nivel.
Así que la principal distinción que haría para decantarse por uno u otro es la de mayor o menor conformidad con el estándar. Pero si deseas optar a cosas más avanzadas, y que no cuentan con la aprobación de Sun, Eclipse resulta recomendable. En algunos casos se trata de que no se han puesto de acuerdo en cómo hacer las cosas y por una parte Sun trabaja sobre el estándar y otros se separan del mismo para lograr ciertos resultados.
No hay comentarios:
Publicar un comentario