15 de julio de 2013

Las minimas herramientas para desarrollo web

En una labor de desarrollo web tradicional, es decir un desarrollo web usando PHP y MySQL, es fundamental disponer de sólidas herramientas para hacer nuestro trabajo más productivo.

El problema es que hay un motón muy buenas herramientas allá afuera. Así, se convierte en un desafío casi irresoluble el seleccionar las más apropiadas.

Como sabemos: lo más apropiado para alguién no significa que será lo más apropiado para otro persona.


Y entonces... ¿Cuál es el Criterio?

Los criterios de selección de las herramientas de desarrollo web son:

  • Herramientas de libre disposición, idealmente herramientas Open Source.
  • Fáciles de utilizar, en el sentido que no requieran un montón de preparación para iniciar el ambiente de desarrollo, y también eviten el aprender todo un nuevo lenguaje para poder utilizarlas con eficacia.
  • Y además, recomendar en base a una buena práctica con las mismas. Es decir, hacer una recomendación de primera mano. Este criterio dejará afuera a todas aquellas herramientas que desconozco, y que pueden ser excelentes, entonces está declarado el problema de sesgo.

Bueno antes de comenzar, debo declarar una máxima en el desarrollo de aplicaciones web que aprendí a la manera dura:

"Usar un entorno de desarrollo, lo más similar al de producción".

¿Que quiere decir esto?... Muy simple, y se reduce a una frase:

"Usa Linux!".

Es un hecho, Linux es el entorno de producción predominante en el desarrollo web actual, sobre todo para un proyecto basado en PHP y MySQL.

He usado por mucho tiempo Windows y lo sigo usando, Window es bueno para muchas cosas. Sin embargo, si está involucrado en un proyecto web donde se levanten requerimientos muy específicos de PHP, entonces hacer el desarrollo usando Windows será una muy, pero muy mala idea.

Desarrollo Web... ¿Cual son las Tareas?

Naturalmente, disponer de las herramientas correctas nos ayudará con las específicas tareas de nuestro flujo de trabajo.

Pero para identificarlas, incluso si quieres hacer tu propia selección de herramientas, entonces se debe saber cual son estas tareas concretas del flujo de trabajo:

  • Crear y mantener el código.
  • Desplegar el código, es decir llevar todas las modificaciones de nuestro proyecto al servidor de producción, o a múltiples ambientes.
  • Agilizar el proceso de migración de los cambios con las base de datos MySQL.
  • Ejecutar un proceso de Backup confiable.
  • Automatizar las prueba de usuario, es decir iteractuar con el navegador web.

Las Mejores Herramientas... en PHP

El conocimiento base mínimo para iniciar cualquier proyecto web moderno es dominar:
HTML, CSS, Javascript, PHP y MySQL. Aunque la mayor parte de nuestro código javascript, será una interacción reiterada con los objetos de la librería jQuery.

Disponer de nuestras herramientas de trabajo, como un sólido web toolkit personal para resolver con eficiencia los problemas que enfrenta un desarrollo web tradicional, puede disminuir significativamente los costos asociados a proyectos de este tipo.

Además, para crear un web toolkit efectivo, el número de herramientas deben ser pocas, las mínimas posibles en el sentido que la administración de ellas no se convierta su eventual beneficio en un problema más... para la ejecución de proyecto de software. Por lo tanto, podemos expresar una segunda máxima práctica:

"Si tenemos sólo unas pocas herramientas que hagan el trabajo, tanto mejor!"

La máximo se puede reducir a: "Donde menos, es más!".

Usando Repositorios... versionar nuestro Proyecto

En desarrollo de un proyecto web es de naturaleza iterativa, no se crea todo el código de una sola vez. Entonces tarde o temprano será necesario manejar la historial de las distintas versiones del código. Para atender este tema, existe los sistemas de control de versiones.

Nuestra selección es Git por sobre otros sistemas de control de versiones, sobre todo considerando los servicios online de control de versiones populares hoy en día. Además, nos aportan con la ventaja de crear backup confiables en otros sitios practicamente gratis.

Git nos servirá para traer a nuestro sistema los repositorios completos con las herramientas que nos interesa trabajar. Muchos Frameworks y CMS's de PHP y otros lenguajes, se localizan en repositorios públicos basados en Git.

¿Código PHP gratis?... pero de Calidad

Una excelente alternativa para obtener código de calidad es usar PEAR]. PEAR es la más grande librería de código online de PHP. Basicamente, es una colección de paquetes de software programados en PHP.

Para sacar ventaja de PEAR es importante conocer la funcionalidad de los paquetes de PEAR, y así poder incluirlos con rapidez en nuestra aplicación. Con el beneficio de disminuir significativamente los tiempos de desarrollo que si construyeramos toda la funcionalidad desde cero.

Tambien Zend Framework tiene una librería de código de calidad premium, con una licencia amigable al programador, por lo que pueden ser incluidas en nuestro proyecto con facilidad. Además, el código de las librerías de Zend (clases PHP) es desacoplado (sin dependencias externas adicionales), en consecuencia incluirlas en nuestro código es directo... -->

Colocar nuestro proyecto en la web... ¿automáticamente?.

Así es, capturar desde el repositorio cual es la versión de nuestro proyecto que va a producción, chequear cuales de los archivos van o se quedan, en la transferencia FTP. Cambiar los valores en los archivos de configuración, compactar el código javascript, eleminar los comentarios en el código, entre muchas otras cosas... ¿Todo este trabajo hecho automáticamente?... Efectivamente, esto se puede hacer usando PHING para automatizar este proceso y mucho, pero mucho más.

Capitrano es una buena herramienta, que también puede usar para el despligue de código. Pero para sacar todo el potencial de Capistrano se requiere algún conocimiento de Ruby, por lo tanto, no se ajusta a nuestro criterio de selección.

Uf!... y ahora trabajando con MySQL.. ¿Laravel?

Tareas en la DB se debe ser especialmente cuidadoso en este proceso, considerando que los datos serán el corazón de nuestra aplicación. A este respecto, podría recomendar MySQL Workbench, pero no lo haré pues estoy convencido en un enfoque más radical al problema.

Que les parece un framework de desarrollo, que incluya una herramienta para ayudarnos en las migraciones de base de datos y además una poderosa capa de abstración datos (ORM), es decir, trabajar con la base de datos sin conocer su implementación específica sólo usando PHP.

Bueno todo esto existe, empaquetando estas características en una sólo herramienta , y además muy fácil de aprender y usar, utilizando solamente PHP. ¿Y cómo se llama esta herramienta?... simplemente Laravel, un poderoso Framework PHP y notablemente simple de usar.

Hay otras opciones, como Zend Framwork y Doctrine, o Symfony (donde incluso Laravel usa algunos de sus componentes). Pero estas herramientas, sin duda son de un increible poder. Pero la curva de aprendizaje es elevada.

Y... ¿Cuál es el flujo de trabajo?

Crear el código:

Crear un directorio de proyecto, donde vive todo el código y su documentación, es decir archivos:

  • Archivos de la presentación de la aplicación, en las gráficas archivos PNG, JPEG, GIF y SWF, y código HTML, CSS y Javascript.
  • Archivos de código base: PHP y SQL's.

Iniciar Git en ese directorio del proyecto, e ir creando código ayudado con el poder de Laravel, un moderno framework PHP fácil de aprender y utilizar.

Laravel: http://laravel.com/
Git: http://git-scm.com/

Herramientas online, para usar como repositorio central y/o backup: GitHub: https://github.com/
BitBucket : https://bitbucket.org/

Desplegar el proyecto en el servidor:

Hoy en día desplegar un proyecto es mucho más que tomar el código PHP y subir los archivos al servidor por medio del protocolo FTP. Ahora todo esto puede hacerlo PHING.

PHING: http://www.phing.info/

Probar la aplicación:

Un navegador de internet poderoso en el ámbito del desarrollo web, mozila firefox es la elección acertada. Armado con los plugin básicos

Selenium: http://docs.seleniumhq.org/
Firebug: https://getfirebug.com/

Otras herramientas

Bueno hay muchas útiles herramientas, aunque yo diría que no son absolutamente necesarias si se tiene experiencia en el desarrollo web. Podríamos mencionar al proyecto de Twitter Bootstrap, que permite trabajar con el HTML CSS y Javacript con facilidad.

A veces se requiere maquetar interfaces, o sencillamente crear alguna gráfica. A este respecto, les puede recomendar el programa Inkscape, es increiblemente poderoso, que puede rivalizar con productos comerciales. Me encantaría que sucediera lo mismo en la edición de gráficos raster en el mundo open source, que fuera una real alternativa a Photoshop... sin embargo, ello aún no existe.

Conclusión

Y entonces en qué queda todo esto?...

Sencillamente en armar un pequeño computador con nuestro web toolkit y así acometer con eficiencia casi cualquier desarrollo web serio:

  • Instalar el sistema operativo Linux con: Apache, MySQL y PHP.
  • Mozilla Firefox con: Firebug y Selenium.
  • Instalación de: Git y PHING.
  • descargar el repositorio del proyecto Laravel, esto es posible gracias a que tenemos instalado Git.
  • Instalar VIM o algún editor de código sencillo y poderoso, que admita la instalación del plungin Zen Coding. Incluso sólo se puede usar Gedit que ya viene instalado en Linux Ubuntu.

Además, suscribirse a los servicios online basados en Git, que pueden servirnos de backup o incluso abrir una puerta para la colaboración de nuestro proyecto con otros desarrolladores que se vayan integrando al equipo:

Pero... ¿Cuanto tiempo llevar hacer todo esto??

En sólo un par de semanas puedes aprender: Git, PHING. La situación con Linux es diferente, eso te llevará más tiempo en aprender, aunque el proceso es gradual y se puede ir avanzando poco a poco. La idea con Linux se podría resumir en la siguiente idea:

"Convertir a la línea comando de linux, en el mejor amigo del desarrollador".

Pero ¿Donde aprender Linux?, bueno hay muchos buenos libros, pero yo te recomendaría comenzar con pequeños tutorial, de modo de aprender en pequeñas mascadas para no atosigarse. Les puedo recomendar iniciarse leyendo estos enlaces:

Esto... ¿se puede hacer desde Windows?

Claro que se puede hacer, existen los instaladores de las herramientas recomendadas para Windows. Pero, si desean disponer de todo el potencial, entonces lo apropiado es Linux.