El eslabón perdido entre programador intermedio y experto en PHP.

He notado que la comunidad de “PHPeros” se encuentra muy polarizada: por un lado tenemos un millón de tutoriales muy básicos sobre bases de datos y por el otro artículos discutiendo el uso de APC, las  diferencias sobre caches distribuídos como memcached, como incorporar Redis en sus aplicaciones o trabajar con shards en MySQL, etc.

En mi opinión, esa polarización representa un gran problema en la comunidad de PHP: Nos estamos olvidando de los programadores que están "en medio".

La gran mayoría de esos “PHPeros” están destinados a quedarse estancados en un nivel intermedio y van a pasar los siguientes 10 o 15 años de su vida escribiendo mal código.

Recientemente, en unos foros de discusión un usuario no estaba de acuerdo conmigo sobre el uso de patrones de diseño porque "encajonan" y "limitan" la creatividad del programador. Básicamente su argumento era:

"Tengo 15 años de experiencia haciendo esto, por lo tanto yo estoy bien y tu estás mal"

a lo que simplemente respondí:

"Solo porque tienes 15 años de experiencia, no significa que tengas 15 años haciéndolo bien...".

Ése es el tipo de programadores que se quedó estancado en un nivel intermedio. Muchísimos programadores me preguntan todas las semanas:

Alan, ¿Cómo paso al siguiente nivel?

Mi respuesta ha ido cambiando a través de los años, precisamente porque yo mismo he ido creciendo profesionalmente. Hace 4 o 5 años tenía una respuesta genérica:

"... lee sobre progración orientada a objetos, aprende patrones de diseño, aprende un framework, bla, bla, bla"

No cambio la respuesta porque haya estado completamente equivocado, pero enviar otros programadores a su suerte y perderse en un millón de implementaciones e interpretaciones de un patrón de diseño u orillarlos a aprender un framework, solo por usarlo, es un consejo irresponsable. Quisiera reivindicar mi camino al recomendarte una ruta diferente:

Si quieres pasar al “siguiente nivel” en PHP, éstas son los 3 pasos que te recomiendo:

Paso #1: Olvídate de Windows para programar en PHP.

No pretendo empezar una guerra aquí de Linux es mejor que Windows, ni nada por el estilo. Ambos sistemas operativos tienen sus pros y sus contras. Sin embargo hay que ser realistas: las posibilidades de que tu aplicación corra en un servidor Linux, son mucho mas altas de que corra en un servidor Windows. Entonces, es mejor que programes o por lo menos corras tu código en una máquina con linux.

Oye Alan, pero mi computadora tiene Windows y no quiero formatearla solo para instalar Linux...

Instala una máquina virtual!

Las máquinas virtuales no solamente sirven para correr multiples sistemas operativos en una computadora, también te ayudan a experimentar diferentes configuraciones sin temor a echar la máquina a perder! ¿Te equivocaste, echaste todo a perder y no sabes como repararlo? Simplemente borra la maquina virtual y crea una nueva!

Ya que estás aprendiendo Linux, hazte un favor y aprende a compilar PHP. No sabes los beneficios que existen al saber como personalizar tu instalación de PHP o trabajar con proyectos personales utilizando la versión más reciente del lenguaje. Tampoco te encajones en Apache como servidor web, existen soluciones diferentes como Nginx

Quieres un reto adicional? Aprende a provisionar máquinas virtuales con vagrant utilizando herramientas de administración de configuración como puppet, ansible o chef. O toma un paso aún mas agigantado, y empieza a investigar sobre contenedores con Docker

Paso #2: Familiarízate con el estándar PSR.

PSR (PHP Specification Request) es el presente y futuro de PHP. PSR busca estandarizar la manera en la que los "PHPeros" escribimos aplicaciones, de tal manera que esas aplicaciones sean portables, reusables y compatibles entre diversos proyectos.

Al adoptar ésta practica, todos tus proyectos van a ser compatibles entre si e independientes uno del otro.

Es decir que si escribes una capa de abstracción de bases de datos (como Doctrine) y un sistema de plantillas (como Twig) vas a poder integrarlos en futuros proyectos (compatibles con PSR) sin ningún problema (como lo hace symfony, laravel o silex), y sin ninguna modificación al código original. Lo que es aún mejor es que puedes incorporar otras soluciones compatibles con PSR, escritas por otros programadores en cuestión de segundos!

Por algo es un estándar ¿no? Confía en mi en este punto: cuando escribes código que sigue el estándar PSR la colaboración entre programadores es mucho más sencilla. No seas como el usuario de la historia de arriba, que está condenado a escribir código mediocre por el resto de su vida solo porque no quiere, ni abrirá los ojos a la realidad.

Paso #3: Aprende sobre Composer.

Una vez que te hayas familiarizado con el estándar PSR el siguiente paso lógico es aprender sobre Composer.

Quise introducir primero el concepto de PSR porque he visto que muchos programadores, subiendo de nivel de intermedio a avanzado, piensan que PSR es parte de Composer o viceversa. Normalmente esos programadores piensan eso porque aprendieron de PSR y de Composer al mismo tiempo y por alguna razón mezclaron los conceptos.

Composer es solamente un administrador de paquetes, y te ofrece la opción de crear una estructura compatible con PSR que te permite registrar todas tus clases automáticamente. Sin embargo, PSR y Composer no son lo mismo, ni dependen uno del otro. Se puede escribir código PSR sin utilizar Composer en lo absoluto.

Paso #4: Pon en práctica lo aprendido!

Ok, ok... acepto que inicialmente dije que eran 3 pasos, pero éste último debería ser obvio. Tienes que practicar y aprender a utilizar tus nuevas herramientas. Si aun programas en windows y nunca has utilizado un sistema linux en tu vida, el primer paso te va a tomar cerca de 1 o 2 semanas hasta que sientas cómodo/a usando Linux. Es muy grande la tentación de instalar una interfaz gráfica como GNOME o KDE en tu máquina, pero te recomiendo que te resistas. Si realmente quieres convertirte en un experto, tienes que aprender a utilizar la consola!

"... pero Alan, no tengo idea de como utilizar la consola de Linux!"

Google es tu amigo!

Literalmente busca “comando para descomprimir un archivo .tar.gz en linux” y te van a salir un millón de soluciones! Asi aprendí yo hace años. Si de plano no encuentras una solución, mándame un correo y yo te ayudo, siempre y cuando me demuestres que te esforzaste en solucionar el problema por tu cuenta!

Si ya utilizas linux, pero sigues escribiendo código no compatible con PSR entonces familiarízate con PSR, y posteriormente aprende a utilizar Composer. Esos dos pasos a lo mucho te van a tomar 2 días. Lo importante es que empieces a escribir código usando el estándar, no es que PSR sea la gallina de los huevos de oro, pero si usas PSR cuando tengas una duda es mas fácil que un “gurú” de PHP te tome en serio y mire te código o clone tu repositorio y te diga que estás haciendo mal.

Esas son mis recomendaciones para pasar de “PHPero” principiante o intermedio a  "PHPero" avanzado!

Mientras tanto, yo haré mi parte como blogger y escribiré mas artículos sobre PSR y Composer!

Si tienes una duda, sugerencia, comentario o simplemente no estás de acuerdo con mi posición déjame un comentario!

  • Rams

    Hace 3 o 4 años comencé con PHP, aprendí lo básico (trabajar con base de datos), lo abandone y aprendí Django, lo cual me obligó a trabajar con linux, consola, virtualizar, nginx etc.. ahora por necesidades del trabajo debo retormar un poco de PHP, pero queria conservar la experiencia con Django, y al regresar con PHP me topo con herramientas como puphpet, composer, y un framework que esta muy bueno es Laravel, sin duda son herramientas complementarias que nos hacen mejorar nuestras habilidades como programador. Muy buen artículo por cierto =D

  • nagitarami

    Considero que no existe un camino concreto para escalar de nivel, simplemente depende de los intereses que posee cada uno, y en la especialidad que se desarrolle a medida que se adquiera experiencia, los consejos que hayas dado en un pasado, presenta un panorama que todos pasamos en un momento dado, cuando iniciamos a programar y desesperadamente no sabemos que hacer para continuar creciendo de forma profesional, sin embargo los 4 pasos son buenas pero no suficientes para corroborar un escalamiento como programador, deriva más del propósito y las necesidades que utilizaras en este caso php

  • nagitarami De acuerdo contigo :) En ningun momento quise decir "asi es como es como te conviertes en un experto", si asi se entendió una disculpa! 
    Por ejemplo, siento que al familiarizarse con PSR (en cualquiera de sus versiones), los programadores novatos/intermedios tienen una mejor percepción de como funciona POO en general, y se olvidan de los ridículos require y includes en todos sus scripts PHP y los substituyen por "namespaces".
    Gracias por tu comentario :)

  • @Rams gracias! y estoy de acuerdo contigo, hace algunos años pasé por exactamente lo mismo que tú! Solamente que yo tuve que moverme al mundo de Ruby :) 
    No he tenido la oportunidad de usar Laravel, sé que se parece a Symfony en muchos sentidos pero tengo varios días queriendo hacer algún proyecto con Laravel.

  • misterioso

    hola

A %d blogueros les gusta esto: