Recientemente me hice una prueba para medir que tan nerd soy. Aquí está el resultado:
De cualquier manera, siempre he pensado que no tiene nada que ver que tan nerd es uno con la capacidad para desarrollar buen software.
One question that keeps being asked about IndicThreads.com is that how come you are running on PHP when you are supposed to be a Java J2EE portal?
Honestly, we would have loved to be on Java and be able to experiment on the site using Java software and also keep generating in house articles about how we manage IndicThreads using X component and how we upgraded to Y server and so on.
However going with a Java Content Management System (CMS) wasn't the best option for us at the time we launched and I am not sure if it still is. While creating IndicThreads, we tried out and compared several CMSs from the Java as well as the PHP stable. Based on those learnings, below is an attempt to list some of the points that I think make PHP CMSs a better choice than the Java ones:As of today, the PHP CMSs seem to have convincingly beaten the Java ones.
- Evolved: The PHP CMSs seemed far more evolved. Mambo, PostNuke, Drupal all have huge communities and have been around for quite some time. They are also running on thousands of sites and so are very well tested.
- Ease of Use: PHP CMSs are remarkably easy to use. In 15 minutes time, even a PHP illiterate person can get a site going . I doubt if that can be done with a Java CMS.
- Hosting: Java hosting is not only costly but it is also a specialized segment. Not many hosting providers understand how Java J2EE web applications are deployed. Apache + PHP is so common that even the small hosting companies are good at it and can fix issues in no time.
- Sleek: Some Java CMSs are 10 times bigger and more complex than the popular PHP ones. If you know HTML, you can more or less figure out how a PHP CMS is working. That also makes tweaking the CMS a fairly simple task.
- Community: The community around Java is one of its strong points but PHP CMS also have huge community bases and so getting help from fellow users is simple.
- Non Issues: Even if we presume that PHP cannot match Java in terms of scalability, object orientation.... it wouldn't matter much to most website creators. Having a good, simple, feature rich, easy to host and maintain site, are the things that matter most.
Maybe while the Java world was engaged in talking of high end, super techie stuff, with the words 'enterprise', 'transactions' and 'SOA 'embedded in every sentence, the PHP guys actually went out and created a lot of simple yet very useful software.
En mi opinión la comparación es bastante objetiva y actual.
He visto que hay mucho software desarrollado en PHP y muchos de ellos de bastante calidad, incluso existen productos open source desarrollados con PHP que no tienen una contraparte en Java. ¿Cuales son las causas de esto?
Por ejemplo el portal de Hibernate usa coWiki y phpBB para su foro. Los productos alternos en java son confluence y jive (ambos con costo) respectivamente. Aunque ninguno de estos productos se puede considerar un CMS pero sirven para ilustrar el tema.
Me gustaría conocer más sobre PHP para contestar la pregunta anterior.
Esta es una respuesta parcial a mi pregunta:
The difference between the Java and PHP communities seems to be their focus. The Java community seems to have a great deal of focus on reusable APIs and backend software (Tomcat, Geronimo, Struts etc.) while the PHP community seems to be focused on more complete products (Mambo, Drupal, Gallery, Kplaylist). That?s why, when I need a complete product to avoid coding it myself I usually end up with PHP based solutions. This is probably already changing a bit inside the Java community and we are seeing more unpolished products like Magnolia, eXo and Liferay. As it matures I think they will be able to compete easily with PHP based solutions.
¿Existiran frameworks de alto nivel como Tapestry, Spring Framework e Hibernate para PHP?
¿Es el lenguaje (PHP) lo bastante expresivo para no necesitar frameworks como los de Java?
Aquí encontrarán el material para una presentación técnica de Tapestry utilizado para dar una introducción a los nuevos integrantes del equipo.
Al principio este fue un trabajo de recopilación. Esta última versión contiene casi el doble de láminas que la primera.
Contiene información detallada de las "tuercas y tornillos" del framework así como ejemplos y algunos "tips". Espero que alguien más le sea de utilidad.
C# como lenguaje de programación es más evolucionado que Java. No entiendo cual fue la razón para que Sun no evolucionara el lenguaje en todos estos años. Con la versión 1.5 la evolución por tanto tiempo esperada es una realidad. A continuación, un breve resumen de las nuevas características:
Generics. No estoy muy a favor, mi punto de vista puede ser controversial. En este momento no puedo visualizar todas las ventajas y el cambio de paradigma que puede implicar. Quizás en algunos meses cambie de parecer.
Enhanced for loops. Una muy buena idea copiada de C#. En lugar de escribir:
void cancelAll(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) {
TimerTask tt = (TimerTask) i.next();
tt.cancel();
}
}
en 1.5 solo basta con:
void cancelAll(Collection c) {
for (Object o : c)
((TimerTask)o).cancel();
}
Esto representa sola una nueva sintaxis y el bytecode generado debe ser equivalente.
Autoboxing/Unboxing. También copiada de C#. Permite la conversión de tipos escalares (int, double, float, etc.) en su contraparte en objeto (Integer, Double, Float, etc.) y viceversa. Todavía no está definido como será la conversión cuando el objeto es null. Una de las alternativas es que se convierta a 0, lo que puede ser fuente de errores.
Typesafe enums. Otra buena idea copiada de C, C++ y C#. Hasta este momento usamos org.apache.commons.lang.enum.Enum con la desventaja de que no hay un chequeo a tiempo de compilación.
Static imports. Es similar al import de paquetes con la diferencia de que importa los varaiables de clase (estáticas) en lugar de las clases de un paquete.
Metadata. A ser comentado en otra ocasión.
Liguero: