Recursos para programadores en php

septiembre 17, 2008 at 9:14 pm 2 comentarios

Os quiero presentar lo que a mi modesto entender son los conocimientos, recursos y herramientas con las que poder comenzar a programar utilizando el lenguaje php. Son conclusiones que he ido sacando de mi experiencia como programador y son aplicables hasta el mes de mayo de 2008; ya sabéis como son estas cosas, lo que hoy vale mañana quién sabe …
Va dirigido a gente que pretenda ir un poco más allá de la creación de una página web sencilla, aunque ya sabéis que todos sois bienvenidos.
He tratado de poner la mayor parte de enlaces posibles en español.

EL LENGUAJE PHP

Lo primero que necesito para programar es tener un conocimiento básico del lenguaje.
A mediados de 2008 la versión de php que está funcionando es la 5. La 4 está ampliamente difundida pero posee una orientación a objetos más limitada. Se espera que ese mismo año se publique  definitivamente la versión 6, la cuál continuará con una mejora de la orientación a objetos, xml etc.
Os recomiendo que trabajéis con orientación a objetos por varios motivos aparte de los típicos de reutilización, encapsulamiento, etc:

  • Es un modo muy profesional de trabajar, lo usa la mayoría de empresas (y con ello no quiero decir que el lenguaje estructurado no lo sea).
  • Mucho código está basado en clases por lo que es bueno conocer su funcionamiento para poder usarlo y modificarlo.
  • La tendencia de php ha ido en esa dirección desde la versión 4, no vayamos en contra , ¿no?.

Considero muy interesantes los siguientes recursos:

– La web de IBM http://www-128.ibm.com/developerworks/library/os-php-read/ . El único incoveniente es que está en inglés, pero tiene cantidad de artículos, tutoriales, enlaces, etc. Recomiendo para principiantes la sección de «Learning PHP part 1,2,3» . Pide que nos registremos en la web para verlos, pero el registro es gratuito.

– La web de php http://www.php.net.  Me parece de lo más sencillo, con multitud de ejemplos. Si necesitas conocer alguna función, seguro que tienes algún ejemplo fácil de entender.

– Memorias de un aprendiz de php, una web muy querida que me ayudó en tiempos a introducirme en el mundo del php. Muy completa orientada a programación estructurada y trata la mayoría de temas  http://rinconastur.net/php/.

IDES

Un IDE es la herramienta de software que nos permite fundamentalmente escribir el código. Un simple bloc de notas podría realizar dicha tarea.
Pero necesitamos algo más: un editor avanzado que nos permita gestionar los ficheros y módulos de un proyecto, las clases involucradas, proporcionar ayuda a las funciones del lenguaje, integrar frameworks, depurar el código, etc. Esa sería realmente la función de un IDE, facilitarnos un entorno que haga más sencilla la tarea de programar.

FRAMEWORKS

Se denomina con el nombre de framework a «una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, un framework puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto. Un framework representa una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodología de trabajo la cual extiende o utiliza las aplicaciones del dominio.»

Facilita la tarea de creación de software mediante clases y funciones que evitan tener que crear de cero todo el software necesario.

La elección vendrá determinada por variados factores:las necesidades, si está siendo usado por tu empresa, la facilidad de uso etc.
Yo aconsejo el uso de frameworks «con futuro», es decir, aquellos soportados por empresas solventes (en este caso Zend, de los creadores de php) o por la comunidad (Symphony), que sean de uso extendido, con una documentación clara y completa, y a ser posible cuyo código fuente sea accesible para poder aprender de él y comprobar su calidad y seguridad.

Una de las ventajas del uso de frameworks, además de la mejora de la productividad ,es el hecho de que utilizarás clases muy probadas probablemente más seguras, y, si el framework está bien hecho, te obligará a usar mejores técnicas de programación.
Exigen invertir cierto tiempo aprendiendo su funcionamiento, pero una vez lo domines, las ventajas superan con creces el tiempo invertido. Eso siempre que no dejen de desarrollarlo …
En internet puedes encontrar debates acalorados sobre las ventajas y desventajas frente a la codificación a mano.
Tener que lavar a mano la ropa puede dejarla muy limpia, dependerá de mi pericia como lavandero. Yo prefiero el uso de una «buena» lavadora, y remarco lo de buena, porque usar una mala lavadora me crearía más problemas de los que me solucionaría.
También es posible que tu empresa, si es de cierto tamaño, ya posea uno propio mejor o peor documentado. Salvo si es un código de excelente calidad o para aplicaciones específicas, yo recomiendo no crearlo de cero, sino usar uno ya existente por varias razones: lo que aprenda me puede servir para otros proyectos, se tiende a la estandarización (no a software cerrado), un trabajador podrá incorporarse a un proyecto más fácilmente si ya conoce el entorno, pueden existir funcionalidades que uno ni se imagine, y si además es software libre, se puede contribuir con aportaciones propias (no todo va a ser recibir … )
También puedes encontrarte con software libre tipo Joomla/Mambo que poseen apis que permitan adaptarlo a tus necesidades, crear módulos etc. Los que yo conozco, son demasiado engorrosos y poco o mal documentados.
Recomiendo suscribirse a listas de correo, boletines, etc para tener nuestro framework lo más actualizado posible y no os agobiéis por la elección; si os sirve para lo que necesitáis y teniendo en cuenta lo dicho anteriormente, adelante con ello.

Los más populares son:

Zend: http://framework.zend.com/

IBM tiene un magnífico tutorial sobre este framework tratando temas bastante avanzados

Symphony: http://www.symfony-project.org/

Cake: http://www.cakephp.org/

ENTORNOS DE TRABAJO PARA PHP

Para poder programar con php se necesita al menos un servidor web y un intérprete de PHP.
Existe software que instala plataformas completas para php.
Instalan un servidor web (suele ser apache), php, mysql, perl, etc,  donde podemos colgar  nuestras aplicaciones php.
Una de las más interesantes es XAMPP http://www.apachefriends.org/en/xampp.html

PLANTILLAS

Funcionan a modo de modelo estático de página cuyo contenido puede ser cambiado sencillamente sin necesidad de tener conocimientos de php.
Pretenden servir para separar el código de la aplicación de la  presentación de la información.
Hay muchos debates sobre el uso de plantillas y el rendimiento de php, la utilización de sistemas de caché etc http://mnm.uib.es/gallir/posts/2006/09/26/820/. Algunos frameworks poseen sistemas propios de plantillas por lo que utilizar un software externo no se justificaría salvo en casos muy concretos.
Uno de los sistemas de plantillas más usados es Smarty
DOCUMENTACION

Uno de los momentos más frustantes para un programador es encontrarse con un software que no se encuentre documentado de ninguna manera (incluso aunque uno sea el autor después de unos meses se hace difícil entender tu propio código). Tener que ir descubriendo para qué sirve cada función, clase, variable, etc nos hace perder demasiado tiempo.

Consejos :

– Usar una nomenclatura clara, sencilla para los nombres de variables, clases etc.
En http://www.cristalab.com/tutoriales/190/reglas–de-codificacion-y-lineamientos-de-codigo-php nos ofrecen unos consejos muy interesantes.
– Comentar el código. http://www.variablenotfound.com/2007/12/13-consejos-para-comentar-tu-cdigo.html
– Ser organizado a la hora de programar . Leer todo lo que podamos sobre metodologías de programación, errores frecuentes, optimización de código
– Usar phpdoc (http://www.phpdoc.org/) para documentar las variables, clases, métodos, funciones. Es un sistema automático que genera documentación a partir del código fuente y de comentarios especialmente creados incluidos dentro del mismo.

CONEXIONES A BASE DE DATOS

Nuestras aplicaciones probablemente necesitarán conectarse a base de datos para obtener la información que necesitemos.
Para facilitarnos el trabajo podemos utilizar librerías como adodb (http://adodb.sourceforge.net/) , que nos proporcionan un api que entre otras cosas sirve de capa de abstracción de base de datos. Esto permite que con un mismo código podamos accceder a distintas bases de datos, sin necesidad de usar funciones específicas para cada una de ellas. Esto nos obliga a usar código sql estándar, lo que es bueno.
Por contra, perdemos un poco de rendimiento de la aplicación y el poder acceder a determinadas funciones específicas de las bases de datos . Si estamos muy atados a una determinada de base de datos, quizás no nos interese utilizar este tipo de librerías.

APIS

Por definición, Internet es global. Y cada día más.
Los contenidos son cada vez más dinámicos y pueden provenir  de distintos orígenes:
Una página puede contener parte de contenido estático en xhtml, parte generado con php, datos obtenidos de una base de datos local o remota, titulares obtenidos de un feed rss externo, un mapa o unas gráficas  obtenidas en tiempo real de google, información de twitter, previsión del tiempo de un servicio de , noticias de un servicio especializado de noticias, inserción de publicidad adaptada al contenido, widgets, chats integrados en nuestra web,  etc.
Diversas webs , muchas de ellas de manera gratuita,  nos ofrecen apis de programación (conjunto de funciones, clases, métodos) que nos permiten acceder a sus contenidos y publicarlos directamente en nuestros propios desarrollos .
Un ejemplo de cómo han cambiado las cosas:
Antiguamente, una cosa muy típica,  era  poner un pequeño mapa en la web, que se le solía encargar al diseñador, donde mostrar la situación de la empresa del cliente. Hoy día todo el mundo utiliza el api de google para mostrar dicho mapa. Las ventajas: Un interfaz bien definido y  conocido por los usuarios (todos sabemos movernos por un mapa de google maps), funcionalidades en continuo crecimiento, etc. Desventajas: Código cerrado, y para utilizarlo en  sitios de mucho tráfico es de pago.
A continuación presento algunos de los que conozco y que pueden aportar soluciones a problemas cotidianos

Aparte podemos descargar diversas apis para usar directamente en el código dentro de nuestros proyectos

Otros APIS: Facebook, Twitter, Yahoo,PAYPAL, PEAR,GD library, charts(gráficos) etc, etc

MIS CONSEJOS

  • Simplificar, simplificar, simplificar.
  • Dividir los problemas complejos en partes más sencillas. Divide y vencerás.
  • Evitar las chapuzas.  Te solucionan la vida en un momento determinado pero a la larga minan tu autoestima como programador y hacen el código ilegible.
  • Hacer código legible y lo más estandarizado posible.
  • Pensar antes de programar. Tener diseñado un plan de trabajo
  • No reinventar la rueda. Es casi seguro que antes de nosotros alguien haya encontrado solución al problema que pretendemos resolver. Investigar las funciones, clases, métodos y constantes de PHP, comprobar dentro de la documentación del framework que usamos, consultar en la web, a amigos, foros, etc. nos puede ahorrar mucho tiempo.
  • Usar frameworks que nos vayan a facilitar el trabajo. Crear un framework propio desde cero es una tarea compleja, piensa si te va a merecer la pena.
  • Comentar el código lo necesario.
  • Estar al día de las tecnologías relacionadas con la web, pero tampoco obsesionarse con ello. Estar a la última en tecnología implica arriegarse. Elige productos más o menos asentados y probados. Quizás no seas lo más «in» pero te asegura una producción más estable.
  • PHP es una tecnología que soluciona unos determinados problemas. Otras tecnologías solucionan otros.
  • El tamaño sí importa. Cuanto más pequeño mejor.
  • Utilizar tecnologías estándar, es decir, codificar las página en XHTML, CSS etc  y comprobar las páginas con los validadores del W3C.
    Debemos pensar en las páginas como en estructuras de contenido, no como en  diseños artísticos.
    En esta página http://www.maestrosdelweb.com/editorial/estandaresweb/ tenemos unos muy buenos consejos y enlaces sobre estos temas.
  • En definitiva y como dice un amigo  «lo que se hace bien, estará siempre bien hecho»

RENDIMIENTO, ESCALABILIDAD Y NUESTRA RELACIÓN CON LOS SISTEMAS

Enlaces sobre cómo mejorar el rendimiento de nuestras aplicaciones web.
Mi recomendación es que no sobrecarguemos las páginas, que no abusemos de los frameworks y acumulemos código sobre código, que reduzcamos las consultas sql a la mínima expresión y que las optimicemos (http://www.webtaller.com/construccion/lenguajes/sql/lecciones/optimizar-consultas-sql.php), que usemos sistemas de cacheo de páginas, que comprimamos todo lo posible tanto los ficheros como los flujos http usado ZLIB (http://es.php.net/zlib)
Si somos afortunados y nuestra web aumenta a volúmenes de tráfico importantes,  la pelota estará en el tejado de los de sistemas, y conceptos como balanceo de cargas, frontend-backend, separación de contenidos estáticos y dinámicos en distintos servidores, clustering, serán a partir de ese momento el pan de cada día. Eso sí, nuestra obligación como programadores será la de realizar un código óptimo, seguro y libre de errores.  Sobre este tema hay unos artículos interesantísimos de Raúl Rivero http://www.elmundo.es/imasd/docs/charlas/2006-caceres/elmundo-es-y-su-planteamiento-tecnico.html http://www.soitu.es/participacion/2008/03/11/u/soitu_1205230727.html

Enlaces sobre optimización de php
http://phplens.com/lens/php-book/optimizing-debugging-php.php
http://developer.yahoo.com/performance/
http://www.sitepoint.com/article/caching-php-performance

Mejoras de rendimiento
http://www.ibm.com/developerworks/opensource/library/os-php-varnish/

Herramientas de benchmarking (análisis de rendimiento)
Pear::Benchmark. http://pear.php.net/package/benchmark/redirected
Pear::apd http://pecl.php.net/package/apd
Apache ab. Rendimiento del servidor bajo carga simulada. http://httpd.apache.org/docs/2.0/programs/ab.html

SEGURIDAD

Suele ser una gran descuidada pero considero fundamental conocer los mínimos requisitos de seguridad de una aplicación que nosotros podemos controlar.
Una vez más recurrimos a las fuentes: http://es.php.net/manual/es/security.php
En las siguientes webs podréis encontrar información, libros, herramientas relacionadas con la seguridad web: http://www.owasp.com y http://phpsec.org/library/

ESTANDARIZACIÓN. INGENIERÍA DEL SOFTWARE

De lo que se conoce como ingeniería del software (http://es.wikipedia.org/wiki/Desarrollo_de_software) creo que lo más interesante es  conocer  los conceptos de patrones de diseño, UML, gestión de proyectos  y los distintos modelos o paradigmas de programación.
En mi opinión, la ingeniería del software es básicamente un elemento normalizador que permite encauzar la complejidad de la creación de software mediante una serie de técnicas y herramientas más o menos unificadas.

– Patrones de diseño. Son soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a objetos basadas en la experiencia y que se ha demostrado que funcionan.
El artículo de http://www.programacion.net/java/tutorial/patrones/ aunque se refiera a java es aplicable a cualquier lenguaje de programación.
Yahoo pone a disposición de todos los desarrolladores multitud de patrones que usan para sus propios desarrollos http://developer.yahoo.com/ypatterns/
Los patrones identifican un problema y cómo solucionarlo, pero no cómo implementarlo. No explican como hacerlo. Además permiten estandarizar las soluciones, evitando la «reinvención de la rueda»
A los patrones se les asigna un nombre, lo que permite que sea más fácil identificarlos. Así si yo tengo que resolver un problema de programación, es probable que alguien haya encontrado una solución genérica a dicho problema, le haya puesto un nombre y sea considerada como un patrón de diseño. Si lo conozco de antemano, sólo deberé aplicar dicho concepto y conseguiré dos ventajas: podré en centrarme en cómo desarrollar la solución en el lenguaje que use, y estandarizaré la resolución de problemas.

Un ejemplo ficticio muy sencillo:
Patrón de diseño llamémoslo energía motor vehículo.
Problema: Cómo hacer que el motor de un coche funcione.
Solución: Necesito energía, un depósito donde almacenarla y unas sistema de transporte para llevarla hasta el motor.

Este patrón nos serviría como base para crear sistemas energéticos de alimentación de motores por gasolina, gasoil, biodiesel, eléctrico, etc. Los diseñadores se centrarían en cómo realizarlo partiendo de este concepto.

Un ejemplo real de diseño es el patrón MVC, muy útil y usado, que divide la estuctura de programación en tres capas: modelo, vista y controlador. Cada una de ellas se encarga de gestionar una parte del sistema. Se comunican entre ellas y permiten hacer una separación de la lógica de la programación, del acceso a datos y de la forma de presentar la información.

Importante: Un patrón sólo sirve como directriz básica, no es la solución concreta. Vamos, que no son cortar y pegar, pero que sí que permite, por ejemplo, que programadores creen  clases, funciones basadas en estos patrones y que sí sean reutilizables facilmente.

Lenguaje de modelado de datos UML. http://www.clikear.com/manuales/uml/index.aspx
Permite representar y documentar un sistema de software utilizando diversos diagramas.
Nos permite poner en papel lo que vamos a realizar, organizando y documentando todas esas maravillosa ideas que vamos teniendo. Además lo hace de un modo estándar.

Gestión de proyectos. Todo proyecto software exige de una planificación de tiempo realista que permita llevarlo a buen puerto. Este tema es de los más complejos puesto que los factores que intervienen son muchos y variados, aunque básicamente son dos los principales: tiempo y dinero.
Realmente un desarrollador no se encarga de estos temas, para ello están los jefes de proyecto. Lo que sí considero que se debe tener en cuenta es lo siguiente:
Que en un proyecto pueden intervenir muchas personas, directa o indirectamente.
En el lado del cliente podemos tratar con un gerente, con directivos, con informáticos, con usuarios más o menos avanzados, con técnicos, con intermediarios (es decir, tú le haces un trabajo a una empresa que luego lo vende a una tercera utilizando su propio nombre).
En el lado de la empresa desarrolladora están los programadores puros y duros, analistas, la gente de sistemas , los programadores multifunción (que hacen de todo, desde el análisis al desarrollo hasta la gestión de sistemas), los jefes de proyecto, los gerentes, los jefes, los diseñadores, etc. Cuanto mayor es la empresa, en teoría, más gente se ve implicada en el proyecto. Como muchas empresas son pequeñas, los papeles comienzan a entremezclarse, y si eres freelance (autónomo en castellano puro) te encargas de todos ellos.

Paradigmas de programación. La ingeniería de software tiene varios modelos  de desarrollo en los cuales se puede apoyar para la realización de software.
El modelo tradicional denominado en cascada o clásico es aquel basado en una estructura más o menos rígida de análisis-diseño- implementación – implantación – mantenimiento.
Existen muchos otros modelos, pero actualmente se habla mucho de los RAD (desarrollo rápido de aplicaciones), metodologías ágiles y XP (extreme programming) que fundamentalmente pretenden acelerar el desarrollo de proyectos  solapando las distintas fases de los mismos sin menoscabo de la calidad, mediante el uso de herramientas de análisis, la creación de prototipos y sobre todo de fomentar la implicación del cliente en el proyecto y la comunicación cliente-desarrollador, usando para todo ello una serie de procesos identificados y claros.

Metodología y fundamentos de programación. Soy de los que cree que saber programar es saber pensar en cómo resolver problemas y no sólo en conocer tal o cuál lenguaje.
Un buen programador debería ser capaz de adaptarse a un nuevo lenguaje fácilmente (… con esfuerzo eso sí).
Esto significa que conocer algunos algoritmos básicos y estructuras de datos tiene su importancia. http://www.algoritmia.net/ . Sinceramente, se puede programar sin conocerlos, puesto que muchos de ellos ya están implementados dentro de las funciones de los propios lenguajes, pero conocerlos te prepara para enfrentarte a nuevos problemas y crea un vocabulario común.

Principios de diseño html propugandos por la W3C (World Wide Web Consortium), el organismo internacional formado por las principales empresas relacionadas con las tecnologías de la información y que permite estandarizar la web mediante propuestas que más tarde se adoptan en el desarrollo, entre otras cosas, de navegadores web. http://www.w3.org/TR/html-design-principles/

OTRAS TECNOLOGÍAS – CONCEPTOS  A CONOCER

– HTML 4. Tutorial de html: http://html.conclase.net/tutorial/html/4/5
Recurriendo a las fuentes(W3C): Especificación de HTML  http://www.w3.org/TR/html4/
En estado de borrador se encuentra la versión X/HTML5, lo que parece será el futuro de html-xhtml http://www.w3c.es/Prensa/2008/nota080122_html5 –   http://www.w3.org/html/wg/html5/

– XHTML 2.0 Especificación más moderna de html basada en xml, que se diferencia de ésta básicamente en que pretende dotar a los documentos de una estructura más estandar y libre de errores puesto que exige de una validación previa .
http://www.w3.org/TR/xhtml2/

– CSS

– JAVASCRIPT

-AJAX.

– Base de datos mysql http://www.mysql-hispano.org/page.php?id=45&pag=1

ORM (Object Relational Mapper) . Permite trabajar sobre  bases de datos  relacionales utilizando capas de abstracción y de un modo orientado a objetos. Existe un proyecto en php llamadad Doctrine

-DHTML

-XML

-RSS, sindicación de contenidos

– SOAP

-SQL

-SQLITE

– ADOBE FLEX

– Usabilidad. Fundamentalmente significa que el interfaz de usuario, la parte del software que el usuario realmente ve, debe seguir una serie de pautas dirigidas a que las sensaciones que experimente a la hora de manejar el programa sean lo más satisfactorias posible. Es decir, que se sienta cómodo con el diseño, que sea claro y sencillo, que sea fácil de manejar y lo más intuitivo posible, que sea similar en funcionamiento a otras aplicaciones que ya haya usado, que sea rápido, que siempre sepa en qué parte de la aplicación se encuentra. En definitiva, orientar el software al usuario final.

El tema es fácil de exponer pero no lo es tanto llevarlo a la práctica http://es.wikipedia.org/wiki/Usabilidad

– Web semántica.

– Web 2.0

– URLS amigables

– Plugins de Firefox: Web developer, firebug etc

DISEÑO WEB

Páginas que cuentan qué debemos hacer y qué no a la hora de diseñar una página
http://www.webtaller.com/maletin/articulos/15-consejos-diseno-web.php
http://www.dailyblogtips.com/43-web-design-mistakes-you-should-avoid/

DONDE ENCONTRAR MÁS INFORMACION

– Tutoriales sacados de internet
– Artículos de internet
– Libros gratutitos http://www.computer-books.us/php.php
– Revistas
– Foros
– Chats
– Suscríbete a listas de correo
– Colabora en los debates que se plantean en los distintos blogs
– Usa un lector de rss o utiliza igoogle (página personalizada de inicio de google) para ir añadiendo los feeds que más te interesen sobre el tema.
– Libros. Editoriales como Oreilly,Packt Publishing, Prentice Hall, Sitepoint tienen catálogos extensisimos de libros sobre php
– Acude a bibliotecas. En muchas de ellas, sobre todo si son universitarias, tiene libros que podrían interesarte.
-Aprende de lo que hacen los demás. Revisa el código hecho por otros. No pierdas el tiempo viendo cualquier código, comprueba antes que el código merece la pena ser analizado.
– Amigos

Zend proporciona un sistema de certificación en php http://www.zend.com/en/services/certification/

WEBS DE REFERENCIA

http://www.hotscripts.com
http://www.phpclasses.com
http://www.maestrosdelweb.com/
http://www.versioncero.com/
http://www.tufuncion.com
http://www.barrapunto.org
http://www.devshed.com
http://www.programacion.net
http://www.sitepoint.com
http://www.phparch.com

FIN

Son bienvenidas todas vuestras aportaciones, correcciones, opiniones,discrepancias, dudas etc que permitan hacer crecer este pequeño documento .

Entry filed under: php.

Trucos para acelerar Windows XP Windows 7 y el XP Mode

2 comentarios Add your own

  • 1. buy viagra  |  febrero 9, 2009 a las 8:50 am

    you have a great site!

    Responder
  • 2. waroniss.blogspace.fr  |  febrero 4, 2013 a las 6:08 pm

    It’s going to be finish of mine day, but before finish I am reading this fantastic article to increase my experience.

    Responder

Deja un comentario

Trackback this post  |  Subscribe to the comments via RSS Feed


Calendario

septiembre 2008
L M X J V S D
1234567
891011121314
15161718192021
22232425262728
2930  

Most Recent Posts