Esta mañana, mi gran amigo @Manu__GA, desarrollador de C++, me escribió en referencia a un proyecto colaborativo con el que llevamos ya tiempo en mente y que no es más que crear una aventura gráfica al más puro estilo Indie.


Precisamente ayer tuvimos una reunión por skype (de paso lo he actualizado a la nueva versión, que sale hoy para el gran público) sobre el tema, y le mostré mis inquietudes sobre el desarrollo para diferentes plataformas, y que por tanto necesitábamos partir de una herramienta multiplataforma.

Hoy por la mañana me ha respondido por twitter:

Básicamente el enlace informa que, gracias a la empresa Zend (sí, la misma del framework Zend Studio), planea sacar para su próxima actualización una extensión que permitiría en esencia programar Apps para Android con código PHP.

La idea no es nueva, y de hecho hay muchas aplicaciones ya que se nutren de este potente “lenguaje” (de hecho casi todas aquellas programadas con lenguaje web), pero en principio PHP, al tratarse de un lenguaje intérprete, precisa de otro lenguaje o una capa intermedia para compilar código. Esta nueva herramienta permitiría hacer uso de partes del software controlador del dispositivo, como el acelerómetro, la cámara o los sensores de posicionamiento mediante Cordova, la plataforma nativa para desarrollo web de Apache.

No quiero pecar de alarmista, ya que la propuesta es realmente interesante, pero soy de los que opinan que un lenguaje de compilación (como lo es Delphi, o C++), ofrece por lo general mucho mejor rendimiento (actualmente, cuidado, no hace falta ser un gurú informático para ver que HTML5 será el lenguaje del futuro) sin sacrificar más que la curva de aprendizaje.


Para que nos entendamos, existen a mi modo de ver tres tipos de lenguajes usados para el desarrollo en general:

  • Lenguajes de compilación: Son lenguajes que para que funcionen, han de pasar primero por un compilador que genera un ejecutable. Esta parte se hace solo una vez, y lo que tú lo que te descargas es un instalable (que crea el ejecutable) o un ejecutable. Por tanto, no hay frameworks o máquinas virtuales de por medio. El mayor ejemplo es C, robusto, fiable, jodidamente pesado de programar y rápido de cojones.
  • Lenguajes híbridos: También se pre-compilan, aunque esta vez no se crea un archivo en lenguaje máquina, sino un archivo de bytecode, y éste, una vez instalado en el dispositivo, se lee mediante una máquina virtual (que obligatoriamente también tienes que tener instalada). El mejor ejemplo es Java, pero lo mismo se puede decir de Ruby o Phyton (tan de moda últimamente). Un archivo bityecode se interpreta muy rápido, pero obliga a tener una máquina virtual o un framework que lo entienda, por lo que en la práctica es la principal razón de que programas en java ocupen tantos recursos y sean menos estables.
  • Lenguaje de intérprete: El caso opuesto, en el que podemos meter a PHP o lenguajes web. Son lenguajes que no tienen compilación inicial, por lo que el paso se hace directamente en el dispositivo. Suelen ser lenguajes muy cómodos (sobre todo para los que nos dedicamos al desarrollo web), pero requieren de un gran optimizado para acercarse a las prestaciones de los lenguajes de compilación.

Y aquí era donde quería llegar. Facebook ya demostró estar en concordancia con esta idea cuando no hace mucho Mark Zuckerberg mostró su preocupación por, en su momento haberse decidido por HTML5 para su aplicación en Android, y no la nativa.

PHP es otra vuelta más de tuerca, que veo muy interesante, pero que creo que le falta esa inmediatez del lenguaje nativo del SO del dispositivo que en este caso (Android) ostenta Java.

P.D.: Después de contaros todo este royo (y mostrarme aparentemente en contra), os aseguro que igualmente me pondré manos en el asunto con PHP (con el que me encuentro bastante cómodo programando), ya que con optimización y siguiendo buenos hábitos de desarrollo, cualquier aplicación puede ser tan veloz y estable como se precie.