Mostrando las entradas con la etiqueta especializar. Mostrar todas las entradas
Mostrando las entradas con la etiqueta especializar. Mostrar todas las entradas

Presentación: "Buenas Prácticas de Desarrollo en PHP"

Hace un tiempo que vengo recomendando esta presentación como punto de partida para definir un estándar de desarrollo en una empresa. En ambientes Java no se discute quién define los estándares, es la empresa Sun y a nadie se le ocurriría inventar el suyo propio. Además, en el mundo Java existen estándares para todo, desde la codificación, forma de programar, etc.

Read this document on Scribd: php development best practices



En el lado opuesto del mundo estamos nosotros, los del "Mundo PHP", donde cada cual tiene su propio estándar y programa "como quiere" (con todos los problemas que esto acarrea). Para evitarlo, lo mejor que podemos hacer es seguir los lineamientos generales que se desprenden de los documentos de Zend.

Y esta es una buena presentación por donde empezar.

En lo personal, al principio, me costó usar la "llave inicial" de clases y métodos al mismo nivel que la "llave de cierre" (al estilo programación "C"), pero como bien dice este material:

"No eres tan especial como para crear tu propio estándar"


Así que me acostumbré. Mi consejo es: úsalo! y no pierdas el tiempo en definir cómo se hace tal o cual cosa, pierde el tiempo con "problemas nuevos".

Más material:

"¡Que fácil que caemos en las guerras entre lenguajes/plataformas!"

Cuando escribí el post sobre que los desarrolladores de PHP debíamos profesionalizarnos (inspirado en una respuesta que di en forosdelweb.com), un colega subió el mismo a Menéame (famoso sistema de promoción de noticias) y este generó un pico abrupto de nuevas visitas a este blog. Entre medio del proceso de votación que posibilita a que este artículo pasara de "la zona de revisión" a "la portada" de Menéame, se dieron algunas discusiones entre usuarios lo cual fácilmente derivo en la clásica lucha entre "lenguajes / tecnologías" (lo cual no aporta nada útil).

Esta es mi opinión sobre el tema, que aprovecho a rescatarla y dejarla "vigente" en el blog del autor (o sea, yo ;-) y terminar de reforzar la idea que intento transmitir en cada artículo que escribo, curso que dicto o charla en la que participo:

La idea de mi artículo (si, soy el atrevido que escribió esto ;)) es hacer reflexionar a los "programadores php" que con solo scripting no se hacen sistemas medios en adelante... y eso no es solo por un tema de "falta de plataforma" (porque al día de hoy PHP sigue siendo "solo un lenguaje" pero que se puede complementar con un conjunto de herramientas) es también un tema de "falta de mentalidad de desarrolladores", donde la gran mayoría de los programadores desconoce los conceptos básicos de la POO.

En mi muy humilde opinión, si tomamos en cuenta el avance en las plataformas más populares, como Java o .Net, los conocimientos de los programadores han quedado en el pasado bordeando en la actualidad el "analfabetismo" en todo lo que concierne OO, Diseño, Patrones, etc. **

PHP5 incorpora el manejo de "interfaces", pero al día de hoy es habitual hablar con desarrolladores que no entienden siquiera el concepto que hay detrás, ni la diferencia entre "programar orientado a la implementación" versus "programar orientado a la interfaz", donde la mayoría de los principios de diseño te sugieren que tus diseños dependan de "implementaciones abstractas" y no de "implementaciones concretas" (para obtener los beneficios tan publicitados del paradigma: flexibilidad, mantenibilidad y reusabilidad).

Y todo esto se hace con la ayuda de las "interfaces" (que no es, como he escuchado decir, para poder implementar "herencia múltiple"... estrategia desaconsejada que difícilmente verás implementada en un patrón de diseño).

Estas grandes carencias las percibo habiendo estado muy poco tiempo estudiando estos temas desde la óptica del mundo Java (muchos de los conceptos que quiero transmitirles a los programadores php, para que abran su cabeza, aquí son elementales). Cuando se liberó la versión 5 de PHP y al ver que implementaban la mayoría de las características que tiene cualquier lenguaje OO (interfaces, visibilidad de atributos y métodos, abstract, etc) me di cuenta que era perfectamente directo pasar los conocimientos y experiencias de un lado a otro.

Pero todo esto te das cuenta cuando vienes de una plataforma, de una arquitectura; si siempre estuviste "dentro" del ambiente PHP, ni te percatas de los grandes cambios que puedes hacer y del salto que pueden hacer tus sistemas.

No fue solo un agregado menor en la sintaxis.

Eso es lo que intento transmitir. ;)

Los "Desarrolladores PHP" debemos profesionalizarnos o quedaremos descartados por obsoletos

Esta reflexión se la escribo a todos los "Programadores PHP":

Al día de hoy la mayoría de los institutos o universidades de muchos países siguen enseñando PHP4, o mejor dicho, programación "scripting" básica. Se mueven en el viejo concepto de la "programación estructurada", trabajando constantemente sobre código que mezcla html y sintaxis PHP, todo como si de una ensalada estuviéramos hablando.

Casi paralelamente, los jóvenes autodidactas siguen por el mismo camino, tal vez ayudados por la gran cantidad de material repetido y obsoleto que se encuentra tanto en la web como en las editoriales de turno, donde a pesar que un libro haya sido impreso recientemente, los autores siguen siendo los mismos y escribiendo -una y otra vez- sobre los mismos temas elementales.

Enfrentar la realidad con madurez

Solo nos damos cuenta que estamos en un grave problema cuando nos enfrentamos a la realidad: salimos al mercado laboral y con inocente sorpresa vemos que se habla mayoritariamente de Java o .Net, de UML, desarrollos en 3 capas, lógica de negocios, persistencia, polimorfismo, frameworks, patrones de diseño, refactoring... y tú solo tienes una vaga idea de algunos conceptos, pero nulo conocimiento de si es realmente posible hacerlo con PHP...


¿No crees que algo está pasando y que tú estás quedando fuera de la "conversación"?

Este es el gran problema de la mayoría de los "Programadores PHP": se quedan en el "lenguaje", en la programación lisa y llana, rechazando todo lo que sea objetos hasta que no les queda otra salida que aprender a usarlos mínimamente... pues todas las nuevas herramientas solo hablan "ese" idioma.

¿Hasta donde piensas que podemos llegar con tan poca preparación?

Mi experiencia personal

De lo que trato de hablar en este blog es de "profesionalizarnos", de copiar y mejorar, de aprender y evolucionar. La mayoría de los temas que expongo no son nuevos, trato de basarme en autores reconocidos y darle más prioridad a los conceptos que al lenguaje, y por sobre todas las cosas: ser simple y directo (pragmático antes que dogmático, pero sin olvidarme de lo último). Hay muchas cosas que desconozco de PHP y otras que directamente no uso, y nunca me baso en la memoria, siempre voy a buscar hasta lo más elemental al manual (doy prioridad al razonamiento por sobre la retención mecánica de conocimientos). Siguiendo esta metodología, mañana deberías poder cambiar de lenguaje y seguir trabajando sin problemas, pues los conceptos base los tendrías claros y estos se aplican sin importar la plataforma que estés usando.

Muchas veces comento que los temas sobre los que escribo son elementales para muchos desarrolladores Java de nivel medio y alto, pero en el ambiente PHP esto cambia (todavía no hemos madurado hacia el concepto de "arquitectura") donde "en el mundo de los ciegos puedo ser rey". Debemos cambiar la mentalidad ahora que existe PHP5 y que su nueva sintaxis nos permite hacer muchas cosas que son habituales en el mundo Java.


Por lo tanto, tenemos todas las herramientas para "evolucionar" y no quedarnos en las excusas.

Programador versus Desarrollador

Desarrollar Orientado a Objetos va más allá que crear objetos aislados que solo contienen datos, programar usando algunos objetos es distinto a desarrollar 100% Orientado a Objetos, ser programador es distinto a ser un desarrollador, un sitio web no es lo mismo que un sistema web. Existen, además de los objetos, "Principios de Diseño (OO)", "Patrones de Diseño (OO)", el lenguaje de diseño UML, frameworks, etc, y todo es perfectamente aplicable usando PHP.


Es más, muchos de estos conceptos e ideas son independientes al lenguaje si este cumple mínimamente con las características de la OO, cosa que sucede a partir de PHP5 en adelante y que PHP4 casi carece por completo.

Finalmente, es mi visión que un programador resuelve problemas aislados usando un lenguaje, pero un desarrollador diseña e implementa una solución global, une los componentes en un único sistema integrado y es lo suficientemente inteligente y estratega para poder reutilizar la experiencia y conocimientos adquiridos en favor de los próximos desarrollos.

Los sistemas que van quedando atrás nunca serán un lastre porque podrán ser mantenidos con el mínimo costo posible, permitiendo que el desarrollador pueda afrontar nuevos y enriquecedores desafíos.

Todos estos detalles los percibimos claramente cuando nuestros desarrollos dejan de ser un "programa menor" y necesitamos crecer, pero vemos que con los conocimientos que contamos hasta el momento todo se nos hace cuesta arriba.

La culpa es enteramente nuestra

No podemos quejarnos que a los programadores Java se les paga el doble que a nosotros y que a la mayoría de los proyectos PHP se los desvalorice, se los trate como "algo menor", "poco serio", todo porque es un "simple lenguaje web" limitado en sus posibilidades.

El "Simple Lenguaje" lo hacemos todos, al ser "Simples Programadores PHP" y nuestras son las limitaciones fundamentales. Perfectamente podemos tratar de trabajar "más seriamente" como lo hacen los "desarrolladores Java", y tratando con creatividad de suplir las carencias momentáneas (como el muy sonado caso de la falta de "namespaces").

PHP se está orientando a convertir en una "arquitectura", a parecerse a un J2EE pero mucho más simple y directo.

El proceso hace tiempo que inició.

Debemos pasar de los dichos a los hechos

De la misma forma, creo que nos hace falta tener más "sentimiento de comunidad", como sucede habitualmente -hasta de forma exagerada- en el mundo GNU/Linux. No es posible que nos sigamos quejando que los proveedores de hosting siguen usando PHP4. Deberíamos hacer campañas para promover la migración a las nuevas versiones de PHP, pero fundamentalmente, incorporar en nuestros desarrollos las características avanzadas del lenguaje, e invitar a usarlo como si fuera una arquitectura, actualizar a nuestro equipo de desarrolladores, visitar empresas, universidades, etc.


¿Tú, qué vas a hacer? ¿Te vas a quedar donde estás o te vas a subir al tren?

¿Eres parte del problema o parte de la solución?

Tenemos que especializarnos y profesionalizarnos, el mundo pide POO, arquitecturas, capas, etc, y habla en "UML"... tú, en que idioma hablas?

Artículo basado en una respuesta dada en Foros del Web

Entradas populares