viernes, 28 de marzo de 2014

Redactar artículos con el SEO en mente

Iniciando por el principio, ¿Cómo escribir meta-títulos efectivos?

Una buena parte del significado de lo que escribimos se encuentra en función del contexto del lector, pensamos usualmente en personas; sin embargo existen cada vez más lectores no humanos de contenido. Los robots de búsqueda cobran mayor relevancia para el periodismo en una sociedad con mayor dependencia y acceso a las tecnologías de información y comunicación.

 A diferencia de los lectores humanos, estos robots no interpretan el contenido de la misma forma. Así que veamos algunos ejemplos de títulos no muy efectivo para motores de búsqueda, tomado de la edición del 2014/02/05 del diario La Prensa.  

  • Otra amenaza de Costa Rica
  • Máximo esfuerzo
  • Un sueño de todos

Algunos de estos títulos quizá no sean muy sugestivos, incluso para lectores humanos. Veamos ahora cómo podríamos mejorar. A continuación algunos tips para mejorarlos.

  • Ni muy largo ni muy corto, entre 60 y 70 caracteres.
  • Usar palabras claves sin excederse, 3% aproximadamente 2 o 3 palabras clave.
  • Proveer significado para buscadores.

¿Cómo podríamos mejorar los títulos que mostramos antes?

  • Otra amenaza de Costa Rica, nueva demanda contra Nicaragua
  • Máximo esfuerzo, inicio Survival Run 2014 en Ometepe
  • Un sueño de todos, la libertad de prensa en Cuba

Pero ¿qué hay del resto del contenido? ¿cómo podemos optimizarlo para estos motores de búsqueda?

H1, H2 y H3: ¿Cómo utilizar correctamente las etiquetas de encabezado de HTML?

Mapa Web
Mapa Web
  La etiqueta de encabezado H1 y sus hermanas pequeñas son una de las herramientas más potentes con las que contamos a nivel de SEO para decirle a los buscadores de qué va el contenido de nuestra página web. Sin embargo, y aunque su concepto es en origen sencillo, darles un uso adecuado no es algo conocido por todos.

 El H1 debe mantenerse corto, pues la importancia de las palabras clave que contiene el titular irá perdiendo fuerza cuanto más largo sea. Tanto en esta etiqueta como en otras (por ejemplo, la metaetiqueta title), Google confiere una mayor importancia a las primeras palabras de la frase que a las últimas: asegúrate de que tu H1 empieza siempre que sea posible por la palabra o palabras claves principales para ese documento. Puede que esto vaya en contra de un titular de un estilo más periodístico, pero es lo ideal para posicionar el documento. Piensa en el contenido de la etiqueta como una frase que contenga información completa por sí misma para definir el contenido del sitio, y que no necesite de información adicional.

 Los titulares H2 marcan las diferentes secciones de un texto, los títulos de los nodos accesibles desde un listado de elementos, etcétera. Su texto debe cumplir las mismas directrices que las dadas para el H1, pero sus palabras clave deben hacer referencia al texto que encontramos justo a continuación, o en la página a la que enlazan. No existe un número determinado de elementos H2 que pueden colocarse en una página, pero el contenido debe ser el que marque este requerimiento. Entre 2 y 8 titulares H2 son lo más adecuado, aunque pueden no aparecer o presentarse en un número mayor si la longitud del texto lo requiere.

 Las etiquetas H3 en adelante nos permiten definir títulos de subapartados de un bloque encabezado con un H2. Su incidencia en SEO es más limitada, y por ello no es habitual ni recomendable el trabajar los titulares a partir de H4.

 El orden lógico de los titulares debería ser el que apareciera en primer lugar el titular H1, después todos los H2 y después todos los H3. También es habitual el trabajar con H1, H2 y H3 como títulos de capítulo, apartados y epígrafes, de forma que aparezca primero el titular H1, después un H2 con sus subapartados marcados con H3, después otro H2 y sus subapartados, y así sucesivamente.

 Quitar todos los elementos restantes de tu sitio web y dejar sólo los titulares deberían en la mayoría de los casos dar una idea del contenido de tu página, tal cual lo hace un índice en un libro: las etiquetas de encabezado deben describir la estructura del artículo.

 La relación entre titulares y texto debe tener una proporción razonable: intentar utilizar más encabezados de la cuenta no es una ventaja, sino un error que hará que la importancia que tratamos de dar a nuestras palabras clave acabe completamente ignorada.  

Las migas de pan, uso adecuado de palabras y frases clave


laberinto_circular
Encontrando el camino en el laberinto
Antes de ponerte a escribir sin ton ni son, lo primero que debes hacer es identificar el tema sobre el que quieres escribir y seleccionar un par de palabras clave relevantes. A la hora de crear el texto te recomendamos que no te centres en una palabra clave sino que más bien escojas 2 o 3 palabras. Al crear textos para 2 o 3 palabras clave, estás diversificando el contenido del texto y ampliando tus posibilidades de llegar al gran público a través de más variables.

 Selecciona tus Keywords y utilízalas de forma natural a lo largo del texto. Si te excedes utilizando tus palabras clave obtendrás resultados negativos. Como norma general un buen ejemplo de artículo SEO bien escrito deberá contener las principales palabras clave al principio del texto, hacia la mitad y al final.

 La densidad recomendada de palabras claves es de entre 1% a 3%, estas deben aparecer sobre todo en las 20 primeras y últimas palabras del artículo, bien en la primera oración o al menos en el primer párrafo y ser coincidentes con las utilizadas en el título de la página. También podemos resaltar de forma estratégica las palabras y frases clave en nuestro texto. Es importante que no intentemos abusar de ninguno de estos recursos y pensar primero en los lectores humanos y luego vemos como podemos optimizar el contenido para buscadores al mismo tiempo.

Desarrollando la fuerza interna, incluyendo hipervínculos en el artículo.


escalera_sin_fin
Mantener el usuario dentro del tu web por más tiempo
La creación de enlaces de hipertexto que incrustados en el contenido de un artículo, es una buena manera de acrecentar el interés general, así como aumentar la posibilidad de ser alcanzado por los motores de búsqueda.

 Sin embargo incluir demasiados enlaces puede volverse molesto para el lector, y utilizarlos en cada palabra o frase clave puede tampoco ser útil para mejorar el posicionamiento de la página. Entonces ¿cúal es la clave? La clave del uso de hipervínculos o enlaces esta en usarlos moderadamente en el contexto, enlazando solamente otros artículos que puedan ser de verdadera utilidad e interés al lector, sin intentar abrumarlo con una avalancha de información relacionada o repetitiva.

 Este artículo titulado “Enlaces internos: Qué son y cómo usarlos en el SEO” puede ayudarnos a entender mejor el funcionamiento y utilidad de los enlaces internos.  


Más allá del texto, incluir contenido multimedia


multimedia
Multi-media como parte integral del contenido
Cuando se optimizan correctamente, las opciones de búsqueda de vídeo e imágenes de Google pueden atraer a una gran cantidad de tráfico, por lo que es una buena práctica el incluir material audiovisual en la medida de lo posible en tus publicaciones. No sólo eso, sino que también ayuda a hacer más digerible un artículo puramente de texto.

 Considera esto para optimizar tus imágenes y vídeos:  

  • Usa palabras clave relevantes en los nombres de archivo de tus imágenes y vídeos.
  • Escribe textos alt descriptivos en forma de frases simples.
  • Asegúrate de incluir pie de foto para tus imágenes para darle un contexto a tus lectores.
  • Busca que tus videos siempre tengan un título atractivo y descriptivo.
  • Verifica que las descripciones de tu vídeo sean ricas en palabras y frases clave.
  • Puedes beneficiar el posicionamiento de tu contenido en video si cuentas con una transcripción del video en la descripción.
 

Algunas herramientas para revisión del contenido



  • WooRank: Herramienta de análisis web basado en datos de motores de búsqueda. Disponible para Firefox y Chrome
  • SEO Site Tools: Herramienta de análisis de diversos aspectos de la página. Disponible como extensión para Chrome y Firefox.
  • META SEO Inspector: Inspector de meta etiquetas para Chrome
  • Facebook Meta Inspector: Inspector de meta data para FB

viernes, 4 de enero de 2013

VIM - Personalización y Adiciones

Después de cierto tiempo usando VIM como mi editor de texto me ha parecido conveniente crear un artículo para aquellos que estén dispuestos a experimentar un poco con este editor. Y para otros con recursos limitados en una máquina en que el usar nuestro IDE favorito puede resultar tedioso o bien solo les interesa aprender al usar VIM, este artículo puede resultarles de interés.

El gran potencial de vim reside en la posibilidad de extender su funcionalidad o bien el uso correcto de las funcionalidades que ya integra. Para cada tipo de necesidad existe una funcionalidad o un complemento que puede satisfacerla. Así pues, podemos pasar de nuestro aburrido y simple editor a un IDE bastante completo que trabaja en la linea de comandos.

Veremos como pasar de un uso simple del este potente editor, a uno que integra características de un IDE, como explorador de archivos, explorador de código, listado de archivos recientes, múltiples pestañas, resultados de búsqueda, linea de comandos integrada, temas de colores, reconocimiento de sintaxis, auto-completado, división de espacio de la ventana y más.


Funcionalidad Integrada


Aunque en las versiones que he conocido VIM cuenta con opciones para integración con el ratón, este es un editor en que suele usarse el teclado como principal o único medio de entrada. Así que la mayoría de la información que encuentren estará orientada al uso del teclado, esto lo hace que si pretendemos usarlo como IDE veremos que tendremos que deberemos acostumbrarnos un poco más al uso del teclado.

Vim es un editor modal, lo que significa que se puede trabajar en diferentes modos para realizar una tarea determinada. Para ver en qué modo se encuentra Vim se debe de tener activada la opción showmode. Pueden obtener más información acerca de los modos y algunas características leyendo la Wiki - Vim (http://es.wikipedia.org/wiki/Vim).

La verdad es que no hay mejor manera de iniciar que experimentar nosotros mismos con el editor así que les dejare algunos enlaces donde podrán encontrar información para su iniciación con vim.

Vim, el editor de texto (http://tuxfiles.wordpress.com/2012/01/17/vim-el-editor-de-texto/) es un post para que inicien con el manejo elemental del editor. Acá se muestran algunos de las operaciones elementales, como navegar (h,j,k,l), insertar (i), reemplazar (r), borrar (d,dd), copiar (y,yy), agregar nuevas linea antes (o, O) y después de la posición actual, búsqueda y reemplazo dentro de un archivo.

Notaran que algunos de los comandos tienen versiones cortas que pueden usarse con una linea mediante la repetició del comando (yy, dd, cc) por ejemplo copiar borrar y cortar.

Graphical vi-vim Cheat Sheet and Tutorial (http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html) acá encontraran una guía visual de iniciación con vim las imágenes suelen ayudar mucho.

Finalmente esta guía de referencia rápida que pueden imprimir les sera de mucha utilidad mientras memorizan los comandos básicos. Todo está bien explicado, es una guía de referencia muy clara. Una vez dominado lo elemental pueden tener la sensación de que ya están quedando algo limitados pero verán que este editor tiene aun mucho que ofrecerles.

Yo siento cada vez más que este editor tiene una o varias soluciones a las necesidades que se me presentan en el camino, algunas de las cosas que verán adelante las he descubierto por mi cuenta, otras por lo que me preguntan algunos compañeros que quieren iniciar con vim, cosas que luego termino usando. Lejos de pretender ser una extensa guía quiero que se animen a continuar descubriendo su potencial por cuenta propia.

Es molesto tener que abrir múltiples ventanas de la terminal para editar múltiples archivos a la vez, pueden hacer esto con vim usando tabs. Con el siguiente comando pueden abrir múltiples archivos en pestañas separadas.

vim -p file1 file2 file3

Una ves dentro del editor, descubrirán la forma de listar, navegar, mover y buscar una pestaña en particular.

tabs, tabedit, tabnew, tabm, tablist

moverse entre pestañas puede parecerles un misterio pero pueden usar tabfirst, tablast, tabnext, tabprevious en modo comandos para ir a la primer, ultima, siguiente y anteriores pestañas. También pueden usar las combinaciones gt, gT, gt + tab_number  para ir a la siguiente y anterior o bien una pestaña especifica.

Luego de las pestañas podemos aprender a dividir la ventana actual en múltiples partes de forma vertical u horizontal, esto puede resultar de utilidad si contamos con espacio suficiente y queremos inspeccionar múltiples archivos o el mismo archivo en diferentes puntos. Por acá les dejo un enlace a un artículo muy bueno que trata de ello. [Vim Splits: A Guide to Doing Exactly What You Want](http://technotales.wordpress.com/2010/04/29/vim-splits-a-guide-to-doing-exactly-what-you-want/)



La búsqueda a través de múltiples archivos es algo que es frecuente realizar en proyectos con un numero considerable de archivos fuente. Podemos hacer esto con los comandos vimgrep y cw combinados.

:vimgrep /busqueda/j ./directorio/**/*.tipoarchivo | cw

esto realiza una búsqueda en todos los archivos de un tipo dado dentro de un directorio específico y muestra los resultados en un split en la parte inferior pueden obtener mas información sobre estos comandos usado la ayuda del VIM seguramente encontraran muchas opciones útiles.

Extensiones útiles


Ademas de la funcionalidad integrada VIM dispone de una gran cantidad de extensiones útiles de las que podemos hacer uso para facilitar nuestro trabajo. Hablaremos de algunas cosas que todos debemos tener a mano un explorador de archivos, explorador de etiquetas, lista de tareas historial de archivos recientes, entre otros.

Most Recently Used (MRU) files: esta extensión permite llevar un historial de los archivos accedidos que se despliega en una ventana temporal y nos permite desplegar el archivo seleccionado en la ventana actual, una pestaña o división nueva. Es posible personalizar la longitud de la lista, el tipo de archivos a incluir o excluir, el cierre automático del la ventana auxiliar y otras.

Tag List: este complemento permite explorar de forma eficiente el código fuente de archivos de diferentes lenguajes de programación. En el manual de este complemento [Tag List Manual](http://vim-taglist.sourceforge.net/manual.html) seguramente encontraran muchas opciones para personalizarlo a su gusto.

NERDTree and tabs: [NERD tree](https://github.com/scrooloose/nerdtree/blob/master/doc/NERD_tree.txt) permite explorar el sistema de archivos, el cual se muestra en forma de un árbol, y abrir archivos o directorios por medio del teclado o ratón, además permitir realizar acciones básicas sobre el sistema de archivos. [NERD Tree Tabs](https://github.com/jistr/vim-nerdtree-tabs) permite convertir el explorador de archivos en un verdadero panel independiente de la pestaña y mantener sincronizado el árbol a través de las pestañas.



Existen muchos otros complementos para completado, GIT, terminal, libro de notas, gestión de sesiones, comentarios. Con algo de curiosidad y un archivo .vimrc pueden ir "enchulando" su VIM y convertirlo en un verdadero IDE con una ligereza sin igual.


Un toque personal



Ahora nos falta darle un toque personal a nuestro editor con algunos temas de colores, es posible crear sus propios esquemas de colores. Pero para aquellos que nos hemos aventurado en ello no tendremos que crear uno, podemos elegir entre los muchos esquemas disponibles.


 

 







Ya sea de la pagina oficial de VIM ORG

[vim.org](http://www.vim.org/scripts/script_search_results.php?&script_type=color%20scheme&order_by=rating&show_me=20&result_ptr=0)

O bien desde este repositorio en que pueden encontrar muchos esquemas de colores.

[Vim colorschemes](https://github.com/flazz/vim-colorschemes)

Espero que este post les sea de utilidad y los insto a utilizar VIM como su editor e IDE, y que "sean uno con su código".

miércoles, 14 de noviembre de 2012

20 acciones para estropear las relaciones con tus empleados

Use estos tips sobre relaciones con los empleados para evitar los 20 errores que las organizaciones cometen.

Traducción del articulo (http://humanresources.about.com/od/interpersonalcommunication/a/twentymistakes.htm)
Por Susan M. Heathfield, About.com Guide

Hasta en las mejores organizaciones se cometen regularmente errores en el trato con su personal. Estas pierden al oportunidad de crear relaciones efectivas, exitosas y positivas con los empleados.

Tratan a las personas como niños y y luego se preguntan porque la gente falla frecuentemente en alcanzar sus expectativas. Los gerentes aplican diferentes reglas a diferentes empleados y se sorprenden del porque la negatividad es tan alta en el lugar de trabajo. La gente trabaja duro y pocas veces recibe retro-alimentación positiva.

Al mismo tiempo, muchas organizaciones invierten inconmensurable energía en acciones para asegurar que sus empleados son infelices. Estas resultan poco efectivas en su relación con los empleados. Por ejemplo, actualmente una de las directivas más importantes en las organizaciones es aumentar la participación y contribuciones de los empleados. Las organizaciones tienen que encontrar maneras de utilizar todos los talentos de la gente que emplean. En otro caso, las personas se marcharan para encontrar trabajo en organizaciones que si lo hagan.

De acuerdo a ex Secretario del Trabajo Elaine Chao, el número de personas en la fuerza laboral entre las edades de 25 a 34 se proyecta que descienda en 2.7 millones en los siguientes siete años. Para enfrentar este reto, los puestos de trabajo necesitan recurrir a empleados no tradicionales. De forma adicional los lugares de trabajo necesitan urgentemente retener a sus empleados valiosos.

El libro, High Five, de Ken blanchard y Sheldon Bowles habla acerca de la construcción de equipos de trabajo altamente efectivos. El libro enfatiza que "la esencia de un equipo", de acuerdo al Dr. Blanchard, es "el entendimiento genuino de que ninguno de nosotros es tan listo como la suma de todos".

Los equipos permiten a las personas lograr cosas mas allá de la capacidad de cada miembro. Sin embargo un equipo requiere de una poderosa motivación para que las personas puedan poner el bienestar del grupo por encima de sus intereses individuales. Afortunadamente la generación del milenio creció en un ambiente de trabajo en equipo. Valorando y apreciando los equipos, sus trabajadores más jóvenes tendrán la ventaja en lo que a esto respecta .

Junten estas tendencias con lo lugares de trabajo y no se sorprendan de que la tira cómica de Dilbert sigue siendo tan popular. Tomemos en cuenta que a Scott Adams, el creador de la tira, nuca se le acabara el material porque sin importar lo que las organizaciones quieran o digan para crear relaciones efectivas con sus empleados - a menudo estas no:

  • retienen empleados valiosos,
  • desarrollan a personas empoderadas para trabajar juntas, servir mejor a los intereses de la organización, y
  • crean un ambiente en el cual cada empleado contribuye con todos sus talentos y capacidades al logro exitoso de las metas organizacionales.

La siguiente vez que se enfrente con cualquiera de las siguientes acciones propuestas, pregúntense esto. ¿Esta la acción orientada a lograr el resultado?,¿qué tan fuerte es la motivación del personal? ¿qué quieres lograr?

Veinte errores tontos que los empleadores cometen.


Acá los veinte errores que las organizaciones cometen para arruinar sus relaciones con las personas que emplean.

  1. Agregar otro nivel en la jerarquía porque la gente no esta haciendo lo que quieres que hagan. (¡Más observadores obtendrán resultados!)
  2. Apreciar el rendimiento individual y otorgar bonos por el rendimiento de individuos y no poder comprender porque tus empleados no trabajan como un equipo.
  3. Agregar inspectores y múltiples auditores porque no crees que tu gente trabaja de acuerdo a las normas.
  4. Equivocarte al crear normas y darle a la gente expectativas claras acerca de lo que se supone que ellos deben hacer, y sorprenderte porque fallaron.
  5. Crear jerarquías  pasos y otros bloqueos que le enseñaran a las personas rápidamente que sus ideas están sujetas a veto y sorprenderte porque ninguno tiene alguna sugerencia para mejorar. (hacer a la gente rogar por dinero).
  6. Preguntarle a la gente por sus opiniones, ideas y sugerencias de mejora continua, y fallas al implementar sus sugerencias o autorizarlos para que o hagan. ¿Menor? nunca proveer retro-alimentación acerca de cualquier de las ideas que fueron consideradas o del porque fueron rechazadas.
  7. Tomar decisiones y después preguntar a la gente por su opinión como si su opinión hubiese importado.
  8. Encontrar a algunas personas rompiendo las reglas y políticas de la compañía y llamarle la atención a todos en las reuniones de la compañía en lugar de tratar directamente con los que rompieron las reglas. Mejor, preguntarle a todos quienes son los chicos malos. Aun mejor, crear una política para castigar a todos los empleados.
  9. Crear nuevas reglas para que todo el mundo las siga como forma de hacer frente a los fallos de unos pocos.
  10. Estipular reconocimiento por patrones que inicialmente eran los esperados, parecen buenas ideas pero que se convierten rápidamente en derechos. (Por ejemplo, invitar el almuerzo del viernes cuando se logre la meta. Espera un poco y la gente empezara a preguntarte por el dinero si no reciben el almuerzo. Y te encontraras con empleados que trabajan solo para logar lo que el precio amerita - y no un poco más).
  11. Tratar a la gente como poco confiable - vigilarlos, perseguirlos, amonestarlos por cada pequeño fallo. por causa de unos pocos que son poco confiables.
  12. Fallar al orienta las acciones y comportamiento de las personas inconsecuentes con las políticas y expectativas organizacionales establecidas. (Mejor aún. Permitir que esta inconformidad crezca hasta que te quite la paciencia, luego castigar al próximo infractor con una acción disciplinaria)
  13. Cuando los administradores se quejan de que no pueden hacer todas las revisiones porque tienen demasiados reportes de miembros del personal y la Planificación de Desarrollo del Rendimiento toma mucho tiempo, eliminan las PDR. Mejor, le piden a los supervisores hacerlo con una frecuencia menor a la trimestral o contratan más supervisores para hacer las revisiones. (Fallan al reconocer que invertir una hora por trimestre por persona en desarrollo del personal es el trabajo mas importante del administrador)
  14. Crear políticas para cada contingencia, lo que deja poco margen para proveer las orientaciones individuales que los empleados necesitan.
  15. Por el contrario, tener tan pocas políticas  que los empleados sientan que están en un ambiente en que todo favoritismo y trato injusto es permitido.
  16. Hacer de cada tarea una prioridad. La gente pronto creerá que no hay prioridades. Más importante, nunca se sentirán comprometidos a lograr una tarea o meta.
  17. Programar emergencias diarias que resultan ser falsas. Esto asegura que los empelados no sepan que hacer, y no responderán cuando tengas una emergencia real.
  18. Ordenar a los empleados que cambien la forma en que están haciendo algo sin darles una explicación de lo que intentas conseguir con el cambio. Etiquetarlos como "resistentes" y mandarlos a entrenamiento cuando cuando ellos no pueden subirse a tren de inmediato.
  19. Esperar que lo empleados aprendan haciendo las cosas a la perfección a la primera en lugar de reconocer que se aprende mayormente de los fallos.
  20. Permitir que alguien falle cuando tenias información que el no, y que el podría haber usado para tomar un decisión distinta.

Puedes evitar estas pesadillas en las relaciones con los empleados. Estos ingredientes juntos son la receta para el desastre si quieres ser el empleador de la década siguiente. Relaciones efectivas con los empleados resultaran siempre en ganancia - para ambos los empleados y para ti.

jueves, 10 de mayo de 2012

El trabajo del analista - Estandares y referencias de documentación


Me decidí a escribir sobre este tema ampliando una entrada que ya tenia sobre manejo de requisitos (Manejo de Requisitos de Software) y tratando de arrojar alguna luz a aquellos que se inician en las labores de análisis y diseño. Algunos de mis colegas me preguntan se sienten aturdidos porque no saben como iniciar, documentar y presentar sus a trabajos. Espero que algunas de la referencias acá señaladas les sean de utilidad para que no tenga que reinventar la rueda y tengan una idea de clara de como conducir sus trabajos y como presentarlos.

Estimaciones del proyecto


El método de Punto de Caso de Uso (UCP – Use Case Point), está basado en los tradicionales Puntos Función. Es un método originado de la tesis de master de Gustav Karner (Karner, 1993), desarrollada mientras trabajaba en Objectory AB, bajo supervisión de Ivar Jacobson (creador de los casos de uso). La técnica ha sido usada por la empresa Rational (posteriormente adquirida por IBM) durante varios años y con buenos resultados.

El método estima el tiempo de desarrollo de un proyecto mediante la asignación de pesos a un cierto número de factores que lo afectan. Finalmente se contabiliza el tiempo total estimado a partir de esos factores.

La especificación de requisitos de software (ERS)


En la fase de análisis se deben identificar claramente las necesidades del producto a desarrollar y documentarlas. Como resultado de esta fase se debe producir un documento de especificación de requisitos en el que describa lo que el futuro sistema debe hacer. Se trata por tanto de una actividad no solo de síntesis sino también de síntesis. En esta fase se establecen las bases contractuales del desarrollo del producto en cuestión.

IEEE 830 es una norma para Especificación de Requisitos de Software. Un buen documento de requisitos debería incluir de una forma o de otra toda la información contenida en esta norma, indica como deba organizarse un documento de requisitos. Esta no es una metodología para el análisis de requisitos sino una recomendación de como debe ser presentado la especificación de estos y no exige que sea presentada en el formato propuesto por la especificación.

Esta definición se extiende y aplica a las condiciones que debe cumplir un sistema y cada uno de sus componentes para cumplir para satisfacer un contrato, norma o especificación.

Una buena especificación de requisitos de software provee un conjunto de ventajas entre las que destacan:
  • Reducción del esfuerzo en desarrollo.
  • Constituye una buena base para estimación de costes y planificación.
  • Constituye un punto de referencia para procesos de verificación y validación.
  • Constituye una base para la mejora de los procesos analizados.

 

Características de una buena ERS


  • Correcta: cada requisito que figura en ella refleja alguna necesidad real.
  • No ambigua: cada requisito tiene una única interpretación.
  • Completa: incluye todos los requisitos significativos.
  • Verificable: es posible verificar el una ves entregado el producto que cumple con los requisitos.
  • Consistente: ninguno de los requisitos es contradictorio o entra en conflicto con otros.
  • Clasificada: los requisitos pueden clasificarse por diversos criterios, los más comunes son importancia y escalabilidad.
  • Modificable: cualquier cambio puede realizarse de forma fácil completa y consistente, también es deseable evitar la redundancia.
  • Explorable: se puede conocer tanto el origen como los componentes del sistema que realizan cada requerimiento.
  • Utilizable durante las tareas de mantenimiento y uso: el personal que no ha intervenido directamente en desarrollo debe ser capaz de mantenerlo y modificarlo, la especificación actuá como un plano.

Metodología para el Análisis de Requisitos de Sistemas Software


Existe entre muchas otras esta metodología creada por Amador Durán Toro y Beatriz Bernárdez Jiménez del Departamento de Lenguajes y Sistemas Informáticos de la Escuela Técnica Superior de Ingeniería Informática en Sevilla, es una excelente tesis. La metodología que recopila prácticas y conceptos ya aceptados y explica varios formatos para recopilación y descripción de requisitos.

No solo es muy clara sino que también se han dado a la tarea de complementarla con un software. REM (REquirements Management) es una herramienta experimental gratuita de Gestión de Requisitos diseñada para soportar la fase de Ingeniería de Requisitos de un proyecto de desarrollo software de acuerdo con la metodología definida en la Tesis Doctoral "Un Entorno Metodológico de Ingeniería de Requisitos para Sistemas de Información", presentada por Amador Durán en septiembre de 2000. en este enlace podrán encontrar la herramienta que es de uso libre solo para fines académicos y enlaces a otros documentos y tesis relacionadas.

El formato de salida se puede personalizar mediante XSL, algo que yo mismo he hecho y podemos tener el formato de salida que deseemos.

Tambien esta aNimble Platform que es una herramienta para la gestión de requerimientos descendiente directo de OSRMT. Quizá alguno de Uds. se anime a probar alguna de ellas.

Especificación de diseño de software


Luego de la especificación de requerimientos se siguiente la fase de diseño del sistema en si mismo. En este punto muchos se empiezan a preguntar también como presentar los resultados en un documento que sea claro, bien organizado y compresible para la mayoría de las personas. Por ello abordaremos con brevedad una de las especificación que puede sernos de utilidad.

IEEE 1016 es  un estándar para  "descripción de un diseño de software", entendiendo por tal la representación que sirve para comunicar cómo está diseñado el sistema. Especifica la información que una descripción de este tipo ha de contener y la organización o esquema de presentación recomendada. Puede aplicarse a software de cualquier tipo destinado a funcionar en un ordenador. Su aplicación no está restringida por ninguna consideración relativa al tamaño, complejidad o carácter crítico del software.

Tampoco está condicionada por la aplicación de una determinada metodología de diseño, gestión de configuraciones o control de la calidad, pues se supone que la información relativa a la calidad o los cambios en el diseño de la descripción será gestionada por otras actividades del proyecto. Asimismo, la norma no apoya ni se ve limitada por una técnica descriptiva particular, pudiéndose aplicar a documentos en papel, bases de datos automatizadas, lenguajes de descripción de diseños, etc.

El estándar especifica que un SDD (software design descriptions) se organiza en una serie de vistas de diseño. Cada vista abarca a un conjunto específico de problemas de diseño de las partes interesadas. Cada vista de diseño es orientada por una perspectiva de diseño. Una perspectiva identifica los problemas de diseño que se centraban en el marco de su vista y selecciona el  lenguaje de diseño que se utilizan para describir esta perspectiva de diseño. La norma establece un conjunto común de perspectivas para el diseño de vistas, como punto de partida para la preparación de un SDD, y una capacidad genérica para definir nuevas perspectivas  y con ello ampliar la expresividad de un SDD.

Los contenidos necesarios de un SDD son los siguientes:
  1. Identificación de la SDD
  2. Los actores de diseño identificados
  3. Los problemas de diseño identificados
  4. Los puntos de vista de diseño seleccionados, cada uno con definiciones del tipo de elementos de diseño y lenguaje permitido.
  5. Los puntos de vista de diseño
  6. Los superficie de diseño
  7.  Justificación del diseño

Podrán encontrar uds  mismos mas información respecto de esta y otras normas y métodos en internet. Las especificaciones presentadas incluyen plantillas para su uso, las que son una recomendación y no obligadamente debe usarse pero si seguirse. Les invito a que la lean y la pongan en práctica en la organización de sus proyectos de software.

viernes, 27 de abril de 2012

Código PHP usando ArgoUML

ArgoUML es una aplicación de diagramado de UML escrita en Java y publicada bajo la Licencia BSD. Dado que es una aplicación Java, está disponible en cualquier plataforma soportada por Java. ArgoUML no es solo una herramienta de modelado de uso libre; sino también un proyecto de desarrollo de código abierto en que estamos invitados a participar.

PHP es uno de los lenguajes más usado y extendidos para la programación web. En las versiones más recientes del lenguajes y desde la versión 4 se vienen agregando y mejorado en el lenguaje, un conjunto de características que lo convierten ya en en un lenguaje orientado a objetos. De modo que ya es posible modelar nuestras aplicaciones y programas en PHP usando UML como lenguaje de modelado.


Tenemos varias razones para modelar nuestro software entre ellas:
  • Proveer una representación consistente en todo el ciclo de vida.
  • Mejor interacción entre el usuario/analista/diseñador.
  • Poder evaluar el impacto de cambios conceptuales y estructurales en nuestro software.
  • Agilizar el las labores de programación en etapas iniciales dado que permite abordar problemas complejos y simples mediante una representación universal.

Interfaz de usuario

Interfaz de ArgoUML


La interfaz se encuentra distribuida de la forma en que varios modeladores e IDE's  se encuentran organizados.
  1. Barra de menús y herramientas en la parte superior.
  2. Un explorador del proyecto y los modelos a la izquierda, que permite organizar los elementos en distintas perspectivas.
  3. En el centro el área de diseño e inmediatamente sobre esta un barra de herramientas con los objetos permitidos en el diagrama.
  4. La sección inferior corresponde  a las propiedades del objeto seleccionado.
Dado que uds. mismos pueden explorar la interfaz de esta herramienta podemos centrarnos en su uso y en su aplicación al desarrollo con PHP mediante un ejemplo practico.

El caso de estudio

La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar pedidos p de productos, de los cuales se anota la cantidad en stock. Un cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos.

Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente. Además, sólo es posible realizar peticiones de productos en stock.

Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable del cobro, orden de distribución y confirmación de los pedidos. El cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado.

Solución


(Los colores usados se basan en la definición de arquetipos)


Explorando algunas características

ArgoUML tiene varios conjuntos de criticas de diseño que pueden ayudarnos a mejorar nuestros modelos y software. en el menú contextual de los elementos podemos ver las criticas que son aplicables así como la gravedad de las mismas.
También es posible ver la cantidad total de criticas por grado de prioridad.



Podemos documentar cualquier elemento, además de ser muy útil nos permitirá mantener un código bien documentado y que pueda ser entendido por otros, y utilizar estos comentarios para generar documentación de referencia con programas como phpDocumentor.


Es posible explorar el código de un elemento en diferentes lenguajes soportados





Generando el código y actualizando nuestro modelo


La generación de código es unas de las características que más me agrada de este modelador. Me permite crear rápidamente
crear las definiciones básicas de las clases y otros elementos, que luego puedo especificar con mayor detalle de acuerdo a las necesidades. Todo sin perdida de código al actualizar mi modelo.

Simplemente debemos seleccionar las clases y los lenguajes para los que generaremos el código así como la ruta de destino y estamos listos para continuar programado en cuanto generamos el código. Entre los lenguajes soportados están PHP 4 y 5, Java y C++.




En el código generado tendremos un archivo por cada elemento, también se generaran los paquetes o directorios en caso que hayamos agrupado en paquetes los elementos de nuestro modelo.

Se siguen las buenas prácticas de nombrado para los archivos. Esto resulta conveniente sobre todo cuando tenemos una gran cantidad de elementos (clases, paquetes, interfaces y otros) que nos resultaría difícil recordar lo que contienen labor que resultaría aun más engorrosa para otros que necesiten revisar nuestro código.

El código generado integra los comentarios y demás elementos informativos que hayamos incluido algunos de estos pueden configurarse a nivel global, de proyecto o del elemento de diseño.



sábado, 31 de diciembre de 2011

Proceso estructurado para desarrollo de aplicaciones web

Hace un tiempo ya encontré un artículo muy bueno que trata de un proceso estructurado para el desarrollo de aplicaciones web, como ya lo dice el título de este artículo. De modo que acá reproduzco ese contenido en español, espero que no le moleste a Antonio Lupetti, pero debo confesar que es un artículo excelente. A continuación el artículo.

Desarrollar aplicaciones web es un trabajo duro que requiere mucho tiempo que tienes que gastar haciendo miles de cosas. Si no utilizas un enfoque metódico, en especial un proyecto complejo, corres el riesgo de perder la perspectiva del proyecto y perder tu tiempo por nada.

Este artículo ilustra un proceso estructurado que puede ayudarte a simplificar el enfoque para desarrollar tus aplicaciones web, ahorrando tiempo y haciéndolo de forma eficiente.

Descarguen el documento N1 | Structured process you must know to develop a web application


Fases principales del proceso

En un proceso genérico para el desarrollo de aplicaciones web pudes identificar cinco fases principales:

Definición de Requisitos
Diseño
Ejecución
Prueba
Liberación



Planificación y revisión es una "fase permanente" que siguen los procesos de desarrollo definiendo un plan de proyecto compuesto por una lista de actividades las cuales tienes que revisar durante la ejecución del proyecto. Para cada actividad se debe definir un conjunto de información que servirá para su revisión, por ejemplo:

- responsable
- duración
- costos
....

Denle un vistazo a estos artículos que escribí hace algún tiempo acerca de como implementar un plan de proyecto con un diagrama de Gantt usando Excel o Google Spreadsheets.

Como organizar tu plan de proyecto
Plantilla de diagrama de Gantt en Excel
Implementando un plan de proyecto y gestionando actividades con Google Spreadsheets.


1. Definición de Requisitos

In esta primera fase debes definir el alcance y necesidades de tu aplicación web en términos de lo tu aplicación debe hacer, las principales funcionalidades y requisitos técnicos:

Alcance

Para definir el alcance de tu aplicación web es suficiente con recopilar una lista detallada de las funcionalidades con una descripción clara. En este punto no es importante "cómo" se realizara esto pero si el "qué" es lo que se debe realizar.

Necesidades

Analizar las necesidades es una parte crucial del proceso de desarrollo. En este paso debes estimar tu tráfico potencial, escoger un lenguaje de lado del servidor (PHP, ASP, Coldfusion...), bases de datos, seleccionar un proveedor de servicio de hospedaje... No debes sobrestimar/subestimar tus estimaciones. Evalúa cada cosa con un balance adecuado entre tiempos, costos y objetivos.


2. Diseño

Después de la fase de definición de requisitos, debes "diseñar" tu aplicación con un proyecto bien claro. En esta fase puedes identificar los siguientes pasos:

Diseño: Mapa de la Aplicación
Un mapa de la aplicación contiene solamente información significativa y esencial acerca de la estructura de tu aplicación: paginas (representadas como bloques) y principales relaciones entre ellas. Tu mapa de aplicación debería ser algo así:


De esta forma tienes un mapa con algunas "ubicaciones" (páginas) y una "ruta" (relaciones entre páginas) las que sencillamente debes seguir en orden para proceder, página por página, para implementar tu aplicación en la siguiente fase. De esta forma ahorraras mucho tiempo, teniendo claro e la mente que es lo que debes implementar.

Diseño: Base de Datos
Ahora es el momento de diseñar la base de datos para tu aplicación. Una forma simple de hacerlo es usando modelos Entidad-Relación. En general puedes seguir este orden: define primero tablas, luego atributos y relaciones entre tablas. Tu modelo ER debería parecerse a este:


1:1 expresa la cardinalidad de una relación (en este caso por ejemplo 1 usuario es asignado solamente a 1 tarea, 1 usuario vive solamente en una ciudad). Para más información acerca de este tema revisar en mis artículos más viejos:

Definiendo el modelo de entidades y relaciones
Un enfoque correcto para definir relaciones entre tablas de base de datos
10 artículos útiles acerca de diseño de bases de datos

Diseño: Estructura de la Página

El siguiente paso es hacer una maqueta de tu página, identificando todas las secciones principales usando un nombre (por ejemplo #header, #navbar, #mainContent, #sidebar).

Diseño: Lenguaje del lado del servidor
Teniendo en mente la orientación a objetos para el desarrollo de tu aplicación, puedes definir clases, funciones y toda la funcionalidad el lado del servidor que necesites. Recuerda ... esto no es la "ejecución" pero si una forma de tener una "guía" para o que deberás implementar en la siguiente fase.

Diseño: JS Framework
En este paso seleccionamos un JavaScript Framework (jQuery, Scriptaculous, MooTools...), que proveería las funcionalidades que quieres implementar (arrastrar y soltar, animación, efectos ...) recopilando una lista de que fucnionalidades específicas están relacionadas con una o más páginas en tu aplicación.

En este punto la fase de diseño esta completa. Puedes iniciar con tu ejecución.


3. Ejecución

Ahora el verdadero reto porque "ejecución" es la realización de tu aplicación. Puedes dividir esta fase en los siguientes pasos:


Ejecución: Base de Datos
Crea una nueva base de datos y escribe el código SQL para definir tus tablas, atributos y relaciones. En el pasado dedique algunos artículos a este tema. Revisen los siguientes enlaces para mayor información:

Como usar PHP y SQL para crear tablas de base de datos y relaciones.
Creación de tablas y relaciones con SQL.

Ejecución: HTML
Usa la maqueta de la página para implementarla en código HTML.





Este es el momento para adicionar al HTML todos los elementos que necesites en las secciones identificadas durante la fase de Diseño. Por ejemplo si las secciones de contenido principal tiene un artículo con un título, un texto en el cuerpo y algunas etiquetas, agrega estos elementos:






Ejecución: CSSUna vez lista la estructura principal, inicias a escribir código CSS para adicionar estilos a tu aplicación. Si necesitas algunas sugerencias de como escribir mejor el código CSS revisa alguno de estos artículos:

CSS: enfoque semántico en convención de nombrado.
Guías útiles para mejorar tu CSS y su mantenibilidad.

Ejecución: Lenguaje del lado del servidor
Implementa las clases de la aplicación, funciones, interacciones con la Base de Datos, consultas, y cualquier cosa que requiera interacción del lado del servidor.

Ejecución: JavaScript
Implementa las fucnionalidades AJAX usando el framework que escojiste en la fase de diseño.


4. Prueba

Durante esta fase debes someter el código de tu aplicación a varias condiciones de ejecución (por ejemplo diferentes navegadores). Tu objetivo es detectar todos los errores en tu aplicación antes del lanzamiento final.


Recuerda, este proceso debe ser meticuloso y requiere mucha paciencia. Probar cada página y cada funcionalidad (también en este caso puede ayudarte tu mapa de aplicación para proceder con cierto orden). Si encuentras un error durante la pruebas de ejecución, corrigelo modificando el código y entonces realizas la validación final (una prueba posterior) del código.

5. Liberación o lanzamiento


¡Finalmente estas listo para lanzar tu aplicación! Publícala en un directorio de prueba y realiza una prueba final. Si todo funciona correctamente entonces procede al lanzamiento final.


* El contenido de este artículo, incluyendo imágenes y referencias, es una traducción de original que puede encontrarse en la siguiente dirección:

http://woork.blogspot.com/2009/01/structured-process-you-must-know-to.html

viernes, 11 de noviembre de 2011

PHP 5.+ el C++ de la web

Me parece una analogía interesante este título, porque C++ es uno de los lenguajes de programación mas extendidos de geográficamente hablando y en lo que a usos y aplicaciones compete. Casi cualquier software que podamos imaginarnos que utilizamos hoy guarda alguna relación con este lenguaje. Esto es porque compiladores, interpretes, maquinas virtuales, frameworks o sistemas operativos esta desarrollado usando C, C++ o algún descendiente o derivado de estos.

Pero el objetivo no es hablar de C++, hablaremos de PHP. Entonces ¿porque la analogía? se preguntaran algunos. Pues básicamente porque PHP es el lenguaje más extendido en la web. Cuando el internet era como el viejo oeste, antes de que se descubriera el oro en el, PHP hacia su debut en este terreno. La evolución de PHP me parece un tanto curioso ya que nace para la web y luego se va convirtiendo en un lenguaje de propósito general. Casi la mayoría de los lenguajes de programación ha seguido un curso inverso al de PHP, desde lenguaje de propósito general hasta desarrollar extensiones o versiones para web. Mucho de lo que se usa en la web esta escrito en parte en PHP, entre esto encontramos paneles de administración, clientes de bases de datos, clientes de correos, servicios de datos, gran parte de nuestras páginas favoritas, CMS, etc.. para darnos una idea.

Un dato curioso

Casi siempre que me encuentro con un viejo desarrollador que programa con PHP noto en el una cierta resistencia al uso de las nuevas características del lenguaje. Las encuentra poco relevantes o simplemente no esta interesado en ello. Es como si para ellos el tiempo se hubiese congelado en la evolución de este lenguaje, y avocan siempre por sus ancestros menos evolucionados. Pues les tengo una noticia, la extinción es algo inminente, porque es el curso que toma todo en el mundo, desde los seres vivos hasta la tecnologías se ven relegados por sus versiones mejor adaptadas, y el rechazar esta realidad nos convierte en parte del conjunto destinado a extinguirse. No digo que no haya que saber de lo que precede a lo actual, "nunca hay que olvidar de donde se viene", pero al igual que la vida en nuestro entorno de trabajo no podemos vivir en el pasado mientras el mundo exterior continua su marcha.


Continúan las semejanzas

Dirán algunos ¿en que se parece PHP a C++? Pues les diré que tienen algunas características comunes. Ambos soportan programación procedimental, funcional y orientado a objetos, aunque hay diferencias en la forma en que implementan la orientación a objetos dado que este desarrollo de PHP se ha visto más influenciado por lenguajes como Java. Al igual que C y C++, PHP cuenta con un gran conjunto de librerías y extensiones para todo tipo de interacciones, servicios web, interacción con el shell del sistema operativo, manipulación de archivos, edición de imágenes, tratamiento y manipulación de cadenas y más.

Creo que una de las grandes ventajas de en lo que a funcionalidad se refiere es el número de librerías para interacción con bases de datos. En este sentido el desarrollo de PDO puede darle una ventaja más en esto al pasar de muchos controladores para cada SGBD a una capa de abstracción de acceso a datos más ligera y fácil de implementar para cada manejador, es lo que JDBC en Java, provee por ahora menos funciones pero permite una interacción mas limpia y resulta fácil de migrar. Algunos aducirán que MDB solucionaba esto, pero esto es algo que no es un script es parte del lenguaje en si mismo, así que dejemos de intentar reinventar la rueda.

Otras de las similitudes es que PHP esta disponible en casi todas las plataformas, puede bien ser usado como interprete o como modulo con un servidor web entre estos IIS y Apache. es decir que pueden correr sus programas en donde sea. Gracias a algunas extensiones es posible programar aplicaciones de escritorio utilizando PHP GTK.

El soporte para programación orientada a objetos es relativamente reciente, en las últimas versiones estables disponibles, estas características están bastante maduras. Aunque para aquellos que conocieron como se trabajaba con clases y objetos ne la versión 4 se darán cuenta de que es algo muy distinto en versión 5 o superior. Pero no es mi objetivo mostrar acá las nuevas características del lenguaje, es mejor si eso lo investigan uds. mismos consultando el manual siempre disponible en php.net. Hablaremos sin embargo de algunas de las características y tecnologías prometedoras y algunos buenos y malos hábitos.



Dejando los malos hábitos


Otras de las semejanzas PHP - C++ es que si no se tienen buenos hábitos de programación y codificación, y no suele documentar mucho su código, el mantener y depurar un programa o modulo puede resultar una tarea infernal. Para los que han trabajado con C o C++ se darán cuenta de que muchos de los errores provienen de aspectos mal gestionados o no gestionados por el programador como la memoria, los tipos de datos, lo valores contenidos en  las variables en un momento dado y otros. En PHP se tienen casi una cantidad de problemas semejante, el hecho de que PHP sea un lenguaje débilmente tipado conlleva una cantidad de problemas con ello, es una arma de doble filo.

Por ejemplo, si bien puedo utilizar una variable para contener distintos tipos de dato al realizar operaciones con la misma necesito validar el tipo de dato contenido, su previa declaración y existencia, para saber si es posible o no aplicarle o utilizarla con una función en particular. Igualmente el retorno de funciones y métodos no tiene un tipo especifico, si lo tiene. con lo que no se puede tener certeza del resultado o del valor retornado, si se desea utilizar posteriormente. Existe ademas una cierta cantidad y tipos de errores que pueden producirse en tiempo de ejecución que no causan un termino o la no ejecución de un bloque de código, lo que puede resultar en que se llegue a un resultado no deseado o se desencadene un error que se pueda frenar la ejecución.

Análogo a los punteros de C++ en PHP el uso extensivo de matrices es uno de sus grandes potenciales y también una de los grandes problemas, por falta de una correcta gestión. Debemos tener presente siempre que en entornos de producción hay limites a la cantidad de memoria disponible, aunando a esto el uso incorrecto de las claves se pueden llegar a tener muchos problemas al usar matrices. PHP no es Fortran en lo que a gestión de matrices y potencia de cálculos vectoriales se refiere, pero cuenta con una gama de funciones bien surtida para la manipulación, búsqueda y ordenación ser refiere.

Otra mala práctica, remanente en unos pocos programadores, es el embeber html  u otro código dentro del script php. He dicho embeber html en el php y no embeber php en el html que resultan dos cosas diferentes, algo que algunos terminan confundiendo. El embeber es una práctica que debe limitarse al mínimo posible. No solo porque no es "elegante", sino porque ya hay motores de plantillas más o menos maduros que facilitan esto, porque facilita el dar mantenimiento al código y separar nuestras capas de datos o modelo de negocios de nuestra capa de presentación, hace mas simple los desarrollos futuros.

Debemos aprender a escuchar y poner en práctica las recomendaciones de Zend y la comunidad de desarrolladores. Si una función esta obsoleta, créalo es obsoleta y use el reemplazo. Si se dicen que una determinada variable es el remplazo de otra úsela en sus programas. Si esta usando una versión de PHP no intente hacerlo funcionar como una versión inferior a menos que sea absolutamente necesario. Al menos lea las referencias de funciones, novedades y diferencias de la versión que utiliza. Usemos las cosas para lo que son y como debe ser, las expresiones booleanas deben recibir valores o expresiones booleanos, los que lo hacen saben de lo que les hablo, usar variables no definidas, con valores nulos, numéricos o de cadena cuyo valor pueda ser evaluado como booleano. Se deben usar los tipos de dato correctamente, validar o forzar su tipo si es necesario y evitar las asignación de datos de otro tipos en esas variables. Debe tenerse presente la versión para la que se esta escribiendo el código. A partir de PHP 5 existe un nuevo nivel de error E_STRICT que incluye tipos de errores de tipo estricto de la versión esto puede ayudarnos a detectar y corregir aquellos segmentos en que estamos usando código no acorde a las últimas versiones estables, también esta disponible la función version_compare que algunos herramientas CASE incluyen en el código generado para validar la ejecución del en dependencia de la versión del interprete.

Aprendamos a trabajar con objetos, como debe ser. No mezcle sintaxis de versiones diferentes.  Establezca el tipo de objetos en los argumentos de los métodos. Saquemos provecho real de características como la visibilidad, la unificación de constructores y los métodos especiales, asignemos los valores por defecto a los parámetros que puedan ser opcionales. Dejemos de usar los objetos como arreglos, prácticas como la asignación y uso de atributos no declarados no son recomendables. Procuremos mantener separadas nuestras capas de presentación, modelo de negocios y acceso a datos. Saquemos máximo provecho de los paradigmas de programación soportados por el lenguaje utilizando el tipo adecuado al contexto o problema solucionar.

Buenas prácticas

Finalmente creo que estos dos lenguajes (PHP y C++) si tienen varias similitudes, no solo en los problemas que se presentan al programar con ambos, sino también en las bondades que cada uno provee. PHP es un lenguaje con gran potencial, pero al igual que las demás cosas creadas por el ser humano todo depende del uso que se le de. Con el Objetivo de que mejoren en los aspectos que necesiten les dejo un par de enlaces donde pueden explorar las mejoras prácticas que cada quien puede usar en sus proyectos o en su estilo de programación. Mejores prácticas de desarrollo en PHP, Guía de buenas practicas en PHP, Manual de phpDocumentor, Zona PHP - ¿Qué esperar de PHP 5 ?.