Esta es una pregunta bastante habitual en la gente que empieza a hacer aplicaciones web o, incluso en la gente que ya lleva tiempo en uno de esos dos lenguajes y se plantea si merece la pena pasarse al otro. No pretendo aquí dar una relación exhaustiva de los pros y contras de cada uno de ellos, pero sí algunos de los puntos que considero importantes a la hora de decidirse.
Librerías disponibles
Tanto un lenguaje como otro tienen muchísimas librerías disponibles para hacer un montón de cosas. JSP/Java tienes bastantes más, pero también es un lenguaje multi-propósito, por lo que muchas de ellas no nos servirán para nada en una aplicación web. PHP está más pensado para web y todas sus librerías son útiles para web. Por ello, lo único que debemos tener en cuenta en este punto concreto es qué librerías vamos a necesitar para nuestras aplicaciones y si las tenemos disponibles en el lenguaje que vayamos a elegir. En su defecto, qué nos costaría desarrollar esa misma librería.
Hospedaje en el servidor
La aplicación web debe ir en un servidor. Normalmente es más fácil encontrar servidor PHP con base de datos gratuitos que servidores que ofrezcan JSP/Servlets gratuitos. Si vamos a los de pago, también es más fácil y barato encontrar servidores PHP. Por ello, si el coste es un problema, posiblemente PHP sea mejor opción.
Si nuestra aplicación web está pensada para que la gente en general la use y la instale en sus servidores (por ejemplo, un blog estilo wordpress, una wiki estilo Mediawiki, etc), también tendrá más aceptación posiblemente si la hacemos en PHP, ya que de todos esos posibles webmaster que queremos que usen nuestra aplicación, la mayoría tendrán PHP pero no JSP.
Si nuestra aplicación es para uso particular en una empresa o en casa y el servidor nos lo vamos a montar nosotros mismos, en principio no hay ningún problema con un lenguaje u otro. Es prácticamente igual de fácil instalar, por ejemplo, un servidor Apache con PHP que un servidor Tomcat para JSP/Servlets.
La aplicación y el lenguaje en sí mismos
Entre los lenguajes Java y PHP hay una diferencia que considero fundamental. El primero es tipado, es decir, hay que declarar los tipos de las variables, los parámetros de los métodos, etc, etc. En PHP no hay tipado, se pueden usar las variables sobre la marcha y pueden contener cualquier cosa en momentos distintos de la ejecución. Java es 100% orientado a objetos, mientras que PHP permite mezclar clases con funciones de programación estructurada. Esta diferencia hace que según el tipo de aplicación, sea mejor un lenguaje u otro.
Si nuestra aplicación es una aplicación puramente web, en la que principalmente hay presentación en navegador y transacciones con una base de datos, en la que van a participar un número de desarrolladores no muy grande y el tiempo de desarrollo no muy largo, PHP puede ser una buena opción.
Sin embargo, en aplicaciones muy grandes, en la que pueda haber más código/algorítmica aparte de lo estrictamente presentación en navegador y transacciones en base de datos, va a haber muchos desarrolladores y tiene un tiempo de desarrollo largo, es mejor usar JSP/Servlets.
Y explico el motivo. Una función PHP puede parecerse a esto
function la_funcion ($el_parametro) {
$el_resultado = ….
return $el_resultado
}
mientras que un método similar en Java puede ser como este
public TipoResultado laFuncion (TipoParametro elParametro) {
TipoResultado resultado = …;
return resultado;
}
Mientras estamos codificando y con el código en la cabeza, casi da igual una cosa que otra. Pero si ese código no lo he hecho yo y tengo que mantenerlo o usarlo, o lo he hecho yo pero hace unas semanas, el código PHP no ayuda en absoluto a saber qué tipo de parémetro hay que pasar o qué devuelve (ni siquiera si devuelve algo), habría que leer el código interno de la función con detalle. El código Java, sin embargo, deja claro qué tipo espera como parámetro y qué devuelve, así que quizás no tengamos que mirar el código interno del método para usarlo.
El no saber los tipos de entrada/salida puede resolverse con una disciplina estricta y comentarios adecuados, pero recuerda, estamos hablando de un grupo de desarrolladores grande. En un grupo grande, siempre hay un porcentaje importante de ellos que será poco disciplinado/novatos y pondrán comentarios graciosos.
Hay además otras dos ventajas fundamentales en los lenguajes tipados:
- Los IDE tienen un autocompletar mucho mejor. Cualquier IDE de java moderno, pones la variable, un punto y te saca los posibles métodos/atributos a los que puedes llamar. Un buen IDE de PHP lo intentará, pero no siempre lo conseguirá. En el ejemplo anterior, si en java escribimos elParametro., el IDE nos pondrá los posibles métodos porque sabe que elParametro es de tipo TipoParametro. En PHP, poniendo el_parametro->, el IDE no nos puede poner absolutamente nada, porque no sabe de qué tipo es eso.
- Precisamente por eso y por la necesidad de declarar los tipos, un IDE no nos dejará, por ejemplo, llamar a un método que no existe o asignar a una variable no declarada. PHP sí nos dejará hacerlo o nos dejará, por ejemplo, poner $nuemro (me he equivocado a posta, en vez de $numero he puesto $nuemro) y declarar sin querer una nueva variable. Todo esto fallará, si tenemos suerte, cuando hagamos nuestra ejecución. Pero si no tenemos suerte, errores de este tipo no saltarán al ejecutar, el programa símplemente no dará el resultado esperado y perderemos horas de depuración. En java directamente no compilará y el IDE nos cantará el error en cuanto lo escribamos.
Así que si la aplicación es grande y con muchos desarrolladores, es posiblemente mejor usar un lenguaje tipado.
Gustos personales
Finalmente, cómo no, los gustos personales de cada uno, las prisas, ganas de aprender, etc. Alquien puede tener preferencia por uno de los lenguajes, o bien ser el que domina y no querer meterse en el otro, o bien todo lo contrario, querer meterse para aprender. Si vas a hacer una aplicación web sencilla, pero dominas java, tienes prisa en hacerla y te importa tres pepinos PHP, posiblemente la hagas en JSP, aunque alguien que domine PHP quizás tardaría menos en hacerla en PHP.
En resumen
Supongo que al menos parte de estas razones son las causas principales por el que en el ambiente de internet al público, la mayoría de las aplicaciones son PHP (wordpress, mediawiki, etc), mientras que las aplicaciones JSP/Servlets se quedan más para ambientes empresariales o intranets. Ojo, hay cosas de ambos tipos en ambos ambientes, símplemente estoy indicando lo que parece ser mayoría.
¿A alguien se le ocurren más motivos a tener en cuenta?
April 23rd, 2009 at 9:14 pm
Bueno lo del tipado en realidad es lo de menos. si tienes una nomenclatura definida y está documentado no tiene por que haber problema. Yo me preocuparia más en que si tu aplicacion web trabaja sobre clusters mejor usar j2ee
April 23rd, 2009 at 9:15 pm
ah! se me olvidaba..deberias probar el PDT para Eclipse
April 23rd, 2009 at 10:05 pm
Mi respuesta es un rotundo: ninguno de ellos. Si me hiciesen esta pregunta hace 10 años y tuviese que elegir uno de ellos, pues jsp por descarte de php por ser el peor lenguaje de la historia, no por méritos propios.
Por cierto, en php puedes poner el tipo del parámetro en la función perfectamente, por ejemplo:
Respecto a los IDEs bueno, mi opinión es que si no puedes realizar una tarea sin ellos, es que algo malo está ocurriendo (e.g., WS-*).
April 24th, 2009 at 12:04 am
Pienso que el dilema está en el propósito de la aplicación que se desee, ya que por ejemplo con Java podemos reutilizar la capa de negocios para realizar una versión desktop de la aplicación por el hecho de que Java es multipropósito, con PHP no podemos hacer esto, pero en contraparte realizar una aplicación MVC con PHP es mucho más fácil y rápido que con JSP.
April 24th, 2009 at 11:11 am
El problema de las aplicaciones pequeñas es que si funcionan bien tienden a crecer, y si se ha desarrollado con un lenguaje que no está pensado para aplicaciones grandes entonces se producirá una de esas catástrofes que todos hemos vivido.
April 24th, 2009 at 12:49 pm
Otra ventaja de JSP (nada despreciable)es que es Java, y si ya conoces tal lenguaje no tienes que “perder” tiempo aprendiendo otro.
April 24th, 2009 at 1:16 pm
Blaxter, los programadores de verdad sólo necesitan una línea de comandos
Quieras que no, el IDE debería ser una ventaja, no un inconveniente. Aunque sólo sea por el coloreado.
April 25th, 2009 at 1:59 am
[...] Leer artículo completo aquí [...]
April 25th, 2009 at 5:50 am
Lek, este si que es un programador de verdad
April 25th, 2009 at 4:49 pm
He hecho aplicaciones en ambos lenguajes y creo que JSP tiene una curva de aprendizaje mayor, ya que seguro que te toca utilizar algún framework. Pasarse de Java a PHP no creo que suponga mucha dificultad. Recomiendo Netbeans para PHP, que recibe actualizaciones constantemente.
April 27th, 2009 at 6:22 pm
jé, pocas gafas le han puesto
April 28th, 2009 at 10:40 pm
mmm y python o ruby? o scala (twitter se paso hace poco del segundo al tercero). Creo que son las alternativas mas interesantes a estas dos.
April 28th, 2009 at 11:08 pm
Hola atreyu:
He puesto PHP y JSP porque son los lenguajes que más conozco, pero si te fijas, realmente la comparación se puede extrapolar a lenguajes tipados y no tipados o la disponibilidad de hospedaje web. Imagino que en este último parámetro, python gana a ruby (no he mirado si hay hospedajes en ruby, pero sin mirar tampoco, sé que los hay en python).
Otro tema son las particularidades propias de cada lenguaje, que imagino lo harán especialmente buenos para determinadas aplicaciones, pero casi siempre el que defiende un lenguaje es más por gustos personales o cosas como “este es maravilloso porque tiene closures”. Todavía no he visto ningún listado que diga: “aplicaciones de tales características, el lenguaje x es mejor por esto, esto y esto”. ¿Alguien puede hacer o dar un enlace a una lista así?
Se bueno.
April 29th, 2009 at 7:35 am
Mmm, bueno la verdad es que en sobre el tema de la eleccion de un lenguaje (o paradigma) suele haber mucho “evangelismo” y discusiones esteriles basadas en argumentos totalmente subjetivos pero no tiene que ser asi sobre todo si se mantiene el espiritu pragmatico, que es un poco el que apuntas en el ultimo parrafo.
En cuanto al tema del tipado estatico o dinamico (o duck typing) me resultaron interesantes estos post recientes y sus comentarios:
http://mindview.net/WebLog/log-0025
http://www.xoltar.org/old_site/misc/static_typing_eckel.html?repost
Personalmente creo que el tipado dinamico es interesante en aplicaciones dinamicas y las aplicaciones web lo suele ser. Esta claro que para evitar sus efectos perjudiciales hace falta una estricta observacion del Test Driven Development y no siempre es facil adoptarlo y seguirlo con disciplina.
El lenguaje de referencia para google (el primero en el que implementaron el Google Appengine) y otras muchas aplicaciones web exitosas es python y eso lo ha hecho ser bastante popular, si ese es un argumento pragmatico para adoptar un lenguaje.
Aunque creo que java se esta quedando obsoleto (por ejemplo por no tener closures, que yo ya las echaba en falta antes de saber siquiera que existian) tiene la ventaja de tener por debajo la JVM y en esta puedes escribir en casi cualquier lenguaje (jruby, clojure, jython, scala, jhaskell, javascript) aprovechandote de todo el trabajo de librerias que hay detras.
April 29th, 2009 at 11:28 am
Buenas:
El que google haya elegido python dice mucho en favor de ese lenguaje, pero tampoco es un criterio práctico para elegirlo en nuestra aplicación. Google lo habrá elegido por algún motivo y habría que saber ese motivo para ver si aplica o no a nuestra aplicación. El segundo lenguaje que han elegido es precisamente java, pero como digo, si no se sabe el motivo, no puede servir tampoco de referencia. Quizás han elegido java simplemente porque quieren atraer a los miles de programadores java existentes a su appengine.
Gracias por los links, los he mirado por encima y parecen interesantes, a ver si encuentro un rato…
Se bueno.
April 30th, 2009 at 10:17 pm
Realmente para usuarios comunes, hosting tienes muchísimo más preparado para desarrollar en ruby que en python (excepto app engine), gracias mayormente a mod_rails que hace que deployar aplicaciones rails sea ahora tan simple como las de php (copy&paste).
Pero vamos, cualquier aplicación mínimamente seria, vas a tener un servidor dedicado, virtual o en definitiva donde tú tengas acceso root, por lo que esos problemas desaparecen.
May 14th, 2009 at 10:06 pm
Vaya dilema, en lo personal utilizo php, pero creo que JSP tiene un potencial muy amplio, considero como dijo alguien que depende tambien del tipo de trabajo que tienes que hacer. Saludos
June 24th, 2009 at 8:09 pm
Exacto, todo se resume en el tipo de aplicación que se plantee a realizar. FIN DEL TEMA
July 30th, 2009 at 3:59 am
[...] Articulo Original Published 07-29-2009 8:56 PM por David Herrera Archivado en: JSP PHP [...]
August 2nd, 2009 at 9:36 pm
JSP es complicado pero recuerden que en java existen excelentes opciones como facelets, jsf, entre otros. Esta es otra ventaja de java, frameworks que te dan opciones a la vez que facilitan y te permiten hacer más rápido tu trabajo.
saludos
August 15th, 2009 at 9:10 pm
la verdad es que el codigo tipado es muy util para entender y depurar. He realizado aplicaciones en PHP con muchos ficheros, funciones, clases y demas y reconozco que de vez en cuando (cuando estaba con ello) la falta de ellos me obligaba a releer el codigo para recordar lo que hacia (y que retornaba).
PHP requiere de una disiplina añadida para hacer aplicaciones grandes.
aunque puedas tipearlo (como alguien lo comento) eso ningun programador nativo en PHP lo respeta (porque lo desconoce o lo considera inutil y no propio del lenguaje)
PHP esta pensado para hacer desarrollos rapidos y casi que desechables y sin mantenimiento de codigo.
Un profecional IT rara vez escoje PHP para un proyecto grande. Por lo general se escoje este lenguaje para cosas pequeñas y de desarrollo corto (en java debes de esquematizar y analisas mejor lo que pretendes hacer)
la verdad es que java y php en vez de verlos como enemigos hay que verlos como amigos, java y php pueden interactuar perfectamente uno con el otro. eso permite hacer la parte grafica con un lenguaje (php) y la parte logica con el otro (java) el arte esta en la interconeccion de uno y otro.
un saludo a todos
December 8th, 2009 at 9:27 pm
Yo programo en ASP.Net y JSP, y en ambas tecnologías busco la manera adecuada de establecer una arquitectura unica para el dearrollo de aplicaciones, sobre todo en JSP en el cual encontramos diferentes frameworks (Spring, Hibernate, JSF, IceFaces, etc) y no me gusta complicarme con tanta variedad (de ahi que muchas veces prefiera programar en ASP.net). En cuanto a PHP, he oido muchas cosas favorables pero la verdad ya no quiero aprender otro lenguaje que haga lo mismo o menos que JSP o ASP.Net, ni siquiera en la parte grafica en donde uso HTML y puedo incurstar codigo servidor (ASP.Net o JSP) cuando lo requiera.
No desmerezco a PHP, puede ser muy bueno en aplicaciones pequeñas (segun los comentarios), incluso la combinacion Linux+Apache+PHP+MySQL lo hace una alternativa atractiva en costos; sin embargo para los desarrolladores de una aplicación que tenga expectativas complejas a futuro, la decision de usar JSP seria ser mas ponderante.
A proposito, sé que java es gratuito pero hay que pagar alguna licencia por desarrollar en J2EE o JSP ?
Saludos.
December 18th, 2009 at 1:27 pm
Yo he programado en Java, php4, php5 y ASP.net. Tengo que decir que en cuanto a la potencia Java se lleva el premio. Si miráis la API de J2EE que contiene JSP/Servlets, JPA(Hibernate), junto a los EJB hace que tenga una potencia ilimitada. Alguien a trabajado con EJBs? Si además juntas todo esto con JSF(Struts) No tienes límite, puedes hacer lo que quieras. Puedes utilizar frameworks externos a Sun, pero no hace falta. Para terminar solo comentar que en Java puedes trabajar con anotaciones “@”. Sabéis lo cómodo que es trabajar con anotaciones, y lo poco que tienes que programar si lo haces bien?
December 18th, 2009 at 1:39 pm
JoseLuis, no tienes que pagar ninguna licencia en Java. Y por ciert, lo mejor que ha hecho Microsoft en su vida es el debugger el Visual Studio para ASP.net. El debugger de Eclipse para Java va bien, pero el de Visual Studio es increible. No se a quién se lo habrán robado pero va realmente muy bien.
May 23rd, 2010 at 4:40 pm
Este blog esta hecho en java o en php?
Ademas nunca he visto paginas hechas en java, por mas que he buscado…
May 23rd, 2010 at 8:50 pm
Efectivamente, un blog es una aplicación típica de php. Y un foro. Y un gestor de contenido (drupal, wiki, joomla,…). ¿Has encontrado alguna aplicación web para llevar nóminas de la empresa?
Se bueno.
June 10th, 2010 at 9:32 am
Anda que el que dice “Blaxter, los programadores de verdad sólo necesitan una línea de comandos”. Un buen programador quizás (bajo mi punto de vista debería) aprender el lenguaje con un simple editor de textos, y luego ya usar un IDE a su elección. El programador que no use un IDE no es que sea buen programador, es que es idiota, por que las funciones de autocompletado y otras miles opciones de opciones que te dan, te hacen codificar una aplicación de una manera más rapida y más depurada. Y si hablamos del IDE por excelencia de Java, Eclipse, no te quiero contar la cantidad de cosas que se puedne hacer con los miles de plugins que hay para el.
A mi personalmente me gusta mas el lenguaje Java, ya que me apaño bastante mejor con el. Quisiera añadir que con Java tambien se pueden hacer aplicaciones pequeñas con muy poco código, por ejemplo GWT es un framework para mi gusto adecuado para ello (y para otras cosas). Además te ahorarrias el saber Ajax XHTML Y CSS, ya que la parte cliente se programa en Java y al compilar la aplicación lo traduce a los lenguajes mencionados anteriormente. Para terminar quisiera decir que a la hora de pensar con que lenguaje hacer una aplicación no depende de que lenguaje sea el más o el menos, habrá que elegir un lenguaje que a la vez de brindarnos la posiblidad de cumplir nuestros objetivos, sea conocido por nuestro grupo de trabajo. ¿O es que a un equipo Java le vas a hacer aprender C solo por que te parece mas eficiente para lo que sea? El tiempo que tarden en aprenderlo es un coste, y el curso que les tendrás que dar otro.
June 15th, 2010 at 9:29 am
GyoX, la frase era irónica (obviamente), además de una referencia a la película “Tormenta Blanca”.