¿Qué debo saber para un trabajo 💼 en PHP 🧑‍💻?
Tags: php, latam, codenewbie, spanish
Published: 2021-07-24 06:14:28

PHP es usado por el 80% de los sitios web del mundo, eso hace que sea un lenguaje demasiado flexible y usado por distintas plataformas como Wordpress, Drupal, Magento y más.

En este post nos enfocaremos más a los trabajos de generalista en PHP, o el clásico programador junior, senior, fullstack, de los cuales hay alta demanda, por ende se puede aspirar a altos sueldos. 

Si te da flojera leer este post, [hice un video LIVE 🔴 con Héctor de León](https://www.youtube.com/watch?v=fGE9kOp0XGE) en donde tocamos los temas de este blog post, yo diría que se complementan

[![#MonitosGeek en YouTube](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jgrxt15epy1mmbgnwe2b.png)](https://www.youtube.com/watch?v=fGE9kOp0XGE)

Pero bueno ¡vamos a darle! 👊.

---- 

#### Contenido: 
* [Frameworks de PHP](#frameworks-de-php)
* [¿PHP 7 ó PHP 8?](#php-7-o-php-8)
* [Pruebas automatizadas](#pruebas-automatizadas)
* [Git](#git)
* [Docker](#docker)
* [Composer](#composer)
* [Estándares de Código](#estandares-de-codigo)

----

## Frameworks de PHP <a name="frameworks-de-php"></a>

Las vacantes de PHP requieren conocimiento en frameworks de desarrollo, las empresas que desarrollan productos con PHP utilizan alguno de los frameworks más populares (popular no siempre significa excelencia o soporte), tener conocimiento en estos frameworks es muy importante para poder trabajar en la industria.

En 2021 los frameworks que más se están usando son:
* [Laravel](https://laravel.com/)
* [Symfony](https://symfony.com/)
* [CodeIgniter](https://codeigniter.com/)
* [Laminas Project (Zend Framework)](https://getlaminas.org/)
* [Yii (Framework)](https://www.yiiframework.com/)

Laravel es por mucho el framework más usado para el desarrollo web con PHP, Laravel usa bastantes componentes de Symfony,  la experiencia en ambos es igualmente válida en los trabajos. CodeIgniter, Laminas y Yii son los 3 frameworks que cierran la pinza de los frameworks más populares de PHP en 2021.

![Frameworks de PHP más famosos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5c85c5elat5zd4blxcp.png)

En la mayoría de los trabajos te van a pedir experiencia usando frameworks, así que busca ganar experiencia lo antes posible. 

Muchas empresas que desarrollan productos piden experiencia superior a 2 años en alguno de los frameworks, no vamos a discutir aquí si eso es bueno o malo, para posiciones _senior_ se solicita más de 4 años de experiencia. 

Es común que muchas empresas o personas hayan desarrollado sus propios frameworks, puedes estar tentado en hacer uno, pero mi recomendación para trabajar es que tengas experiencia en los más populares. 

## ¿PHP 7 ó PHP 8?<a name="php-7-o-php-8"></a>

Ya habíamos dicho que PHP es usado por casi el 80% de los sitios web, pero hay bastantes versiones de PHP. 

De acuerdo a un estudio de W3Techs.com el 66.8% de los sitios utilizan la versión 7, en segundo lugar con 32.4% se encuentra la versión 5, en tercer lugar la versión 8. 

![Versiones de PHP más usadas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hrbral394uymy6dbthn.png)

Los frameworks más famosos que veíamos aun no soportan por completo la versión 8, el framework si lo soporta pero es probable que muchas de las librerías que utilices aun no lo soporten, es comprensible porque PHP 8 es nuevo, mi recomendación será sin duda alguna enfocarse por el momento a la versión 7 de PHP.

Por cierto, nota como no mencionamos al segundo lugar, la verdad es que con PHP 7 te va a ser más fácil adaptarte a PHP 5 o PHP 8.

## Pruebas automatizadas<a name="#pruebas-automatizadas"></a>

Las empresas de desarrollo de producto que utilizan herramientas de CI/CD (Continuous Integration and Continuos Deployment), si también se puede usar CI/CD con PHP, con el objetivo de poder hacer releases constantes del producto de forma automática, el objetivo de hacerlo automático no es tanto reducir tiempos sino reducir los posibles errores humanos en el proceso de _deploy_.

Aunado a eso, muchas empresas buscan que los desarrolladores sean los responsables de la calidad del código que generan por ende ellos mismos deben de desarrollar las pruebas que validen que su código será estable y que considerará los escenarios para los que fue concebido. 

En PHP existen varias librerías para realizar pruebas automatizadas, pero las más usadas al 2021 son:
* [PHPUnit](https://phpunit.de/)
* [Selenium](http://www.seleniumhq.org/)
* [Codeception](http://codeception.com/)
* [Behat](https://docs.behat.org/en/latest/)
* [Kahlan](https://github.com/crysalead/kahlan)
* [Atoum](https://github.com/atoum/atoum)
* [Peridot](http://peridot-php.github.io/)
* [Storyplayer](http://datasift.github.io/storyplayer/)
* [PHPSpec](http://www.phpspec.net/en/latest/)
* [Mockery](https://github.com/padraic/mockery)

La más famosa es PHPUnit, la cual se combina con Mockery. Te recomiendo que aprendas a utilizarlas, en la comunidad de PHPMx han dado [varias charlas alrededor de las pruebas que es posible que te sirvan](https://www.youtube.com/watch?v=N2zlDCWd_Mw&list=PLerxy716pIGVxQgLDzyySP6NcrxJC-VQQ).

No se si notaron que es interesante que haya dicho que las empresas usan pruebas automatizadas por el proceso de CI/CD y no por desarrollar software con el proceso de Test Driven Development (TDD), el objetivo al final del día de las empresas es generar software con calidad, el cual sea estable. 

Hay empresas en donde las pruebas automatizadas las realiza un equipo de QA (Quality Assurance), yo personalmente no veo eso como una buena práctica y de hecho la mayoría de las empresas que desarrollan productos hacen que sus DEVs sean los mismos que elaboran las pruebas automatizadas.

## Git<a name="git"></a>

Una vez invité a unos profesores de universidad a nuestras oficinas para que vieran cómo trabajábamos, nos preguntábamos que habilidades considerábamos que los alumnos no tenían al salir, una de las cosas que les mencionamos es que parecía que no tenían mucho conocimiento de Git, que recomendábamos que los proyectos en equipo que hacían de la universidad los hicieran en Github. Los profesores preguntaron **¿Qué es Github?**.

Si tu no sabes Git, o lo usas poco es importante que cambies eso.
* En Git guardarás todo tu código.
* Con Git colaborarás con tus compañeros de trabajo.

### Git nivel básico

Aprenderse los comandos básicos, por ejemplo los que se mencionan en [esta guía de Bitbucket](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html). 

Puedes practicar esos comandos en un repositorio local o en un repositorio público.

### Git nivel medio

Crear diferentes branches y crear pull requests (o merge requests) lo considero algo de nivel medio, porque en muchas empresas no lo hacen, lo trabajan todo en la rama principal, o en un branch de release en donde nada se revisa realmente, pero bueno eso es salirnos del tema. 

En muchos trabajos es probable que sigan alguna estrategia de Git, con el objetivo de alinear las metodologías ágiles o DevOps, realmente no existe un estándar de Git, pero hay algunas prácticas que son aceptadas y utilizadas por muchos por ejemplo [Gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) en donde elaboras ramas para features, releases, hotfixes, etc. incluso el ahora emergente y polémico [Trunk Base Development](https://trunkbaseddevelopment.com/) en donde varios desarrolladores colaboran en una sola rama llamada trunk, o en pequeñas ramas que se deben de integrar de forma constante a la rama principal.

![Proceso de Gitflow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn2kvgyy3uctgkwoqexm.png)

![Trunk Based Development](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vsfi3t83y2zpq37cpqxm.png)

Repito, no hay estándar, pero es importante que sepas cómo funcionan estos procesos aunque sea en teoría y hayas practicado al menos uno para que puedas saber porque sí o porque no funcionan correctamente. 

### Git nivel avanzado

[¿Hacer merge o rebase?](https://www.atlassian.com/git/tutorials/merging-vs-rebasing), una pregunta que surge cuando trabajas con Git a nivel avanzado, estos dos comandos ofrecen alternativas para integrar commits a ramas diferentes, cada uno tiene sus ventajas, nosotros en el trabajo usamos ambos comandos de forma constante pero en situaciones diferentes. 

[Reset, check out, revert](https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting)… son comandos similares que deshacen cambios en tu repositorio, pero todos tienen diferentes consecuencias. 

Además de lo que te menciono arriba puede que quieras aprender a [buscar/usar los logs](https://www.atlassian.com/git/tutorials/git-log) de Git de forma avanzada, o por ejemplo en caso de que necesites seleccionar algún commit y colocarlo en otra posición usando [git cherry-pick](https://www.atlassian.com/git/tutorials/cherry-pick).


## Docker <a name="docker"></a>

¿Qué no Docker es para DevOps? ¿Por qué debo de conocer Docker siendo DEV? ¿PHP es puro XAMP no? ¿PHP con LAMP?

A todo lo anterior si, pero también Docker es una herramienta muy útil y muy utilizada por los equipos de desarrollo de software, especialmente para configurar sus ambientes de local. 

### 1. No generarás un desorden en tu computadora

Cuando corres código de forma local en tu computadora, debes de instalar todas las librerías y dependencias necesarias, lo más probable es que tu aplicación tenga una base de datos, servicios de cache y otras cosas necesarias. 

Imagina que no solo tienes que instalar MySQL para la base de datos sino todas las dependencias, y cuando tienes otro proyecto en donde requieres utilizar MariaDB deberás desinstalar la instancia de MySQL que tenias en el otro proyecto.

Recuerda que la mayoría de estos servicios que instalaste se inician por default cada que inicias las computadora, te quitan recursos… insisto, un desorden.

Todo eso lo evitarás usando Docker. 

### 2. No tienes dependencia de S.O. 

Así como suena, Docker se puede ejecutar en todas las plataformas (ej. Linux, Windows, MacOS incluso sistemas basados en ARM). Una vez dentro del contenedor de Docker no notarás diferencia en la mayoría de los casos. 

### 3. Resultados compartidos

Cuantas veces has tenido problemas con que tu aplicación no se comporta igual porque la versión de una librería era distinta en producción, pre-producción o local, a mi me ha pasado varias veces.

Utilizando Docker tu configuras toda esta información y compartir esa información entre ambientes y otras herramientas es más sencillo, por ende la cantidad de problemas relacionados con estos escenarios es casi nula.

### 4. Resultados reproducibles

Cuando todo el equipo esta utilizando la misma imagen de Docker, los resultados que habrá en la ejecución de la aplicación, problemas de configuración, etc. serán mucho menores, porque cuando haya problemas bastará con que se identifiquen, se corrija la imagen y el resto del equipo pueda recibir los ajustes. 

### 5. Tiempo para configurar un proyecto nuevo

Los proyectos en los trabajos tienen ya su archivo `docker-compose.yml`  que tiene todo lo necesario para hacer una configuración muy sencilla para cualquier miembro del equipo que tenga este conocimiento.


Insisto, aprender Docker es hoy más necesario que antes, no se volvió en una moda pasajera sino algo muy utilizado en muchos proyectos.

## [Composer](https://getcomposer.org/)<a name="composer"></a>

Es la herramienta de control de dependencias de PHP, permite declarar librerías de las que tu proyecto va a depender y las va a instalar y actualizar por ti.

Composer es multiplataforma y el equipo que lo mantiene busca que funcione correctamente en Windows, Linux y macOS. Se utiliza con comandos, los cuales son bastante simples, pero es importante que no tengas miedo de ejecutarlos. 

En el trabajo va a ser común que las versiones y dependencias de los proyectos cambien cada cierto tiempo y que tu sepas como ejecutar esas actualizaciones para poder tener tu proyecto funcionando correctamente. 

## Estándares de Código<a name="estandares-de-codigo"></a>

Definir estándares de código es algo muy importante cuando se desarrolla software en equipo, acordar en equipo sobre estándares de código ayuda a mantener tu código pulcro y fácil de leer, además hace más fácil ver las diferencias de código cuando estas haciendo revisiones de código (code reviews).  

Desafortunadamente, en PHP existen varios estándares de código los cuales pueden variar entre frameworks y versiones de PHP, los más famosos son los siguientes: 

1. [PSR-12 Coding Style Guide](https://www.php-fig.org/psr/psr-12/)
2. [CakePHP Coding Standards](https://book.cakephp.org/3/en/contributing/cakephp-coding-conventions.html)
3. [Symfony Coding Standards](https://symfony.com/doc/current/contributing/code/standards.html)
4. [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/)
5. [PEAR Coding Standards](https://pear.php.net/manual/en/standards.php)

Yo personalmente te recomiendo le echas una revisada a PSR-12, porque es de los más usados por los frameworks que mencionaba en este blog post. 

Los estándares de código son algo que puedes configurar en tu editor de texto o IDE de preferencia, esto seguramente te ayudará a que no tengas que repasarlos tanto porque mientras programas recibirás feedback de tu herramienta de trabajo. 

Es también común que encuentres que en tu trabajo utilicen una herramienta llamada [PHP_CodeSniffer](https://pear.php.net/package/PHP_CodeSniffer/) la cual puede tener las reglas de los estándares de código de tu equipo y automáticamente valide que el código generado cumple con los estándares definidos en el equipo. 



---- 

Espero que toda esta información te sirva para prepararte para trabajar en PHP, si crees que se me fue algo no dudes en dejar comentarios.  

Escribí un libro que busca ayudar a los líderes técnicos o personas que se encuentran en ese proceso a ser mejores en su trabajo **📕 ["Guía de bolsillo para el Líder Técnico”](https://gumroad.com/l/guia-lider-tecnico)**. 

Te invito a que **[me sigas en Twitter](*%20S%C3%ADganme%20en%20Twitter:%20https://twitter.com/marianorenteria)** para que te enteres de todo el contenido que hago normalmente 🙃.

También soy creador del [podcast Chile, Mole & Tech](https://dev.to/chilemoleytech), el cual esta [en todas las plataformas](https://linktr.ee/chilemoleytech).

**Si te gusto este post, no dudes en compartirlo, me ayuda mucho.**** 

---- 

### Referencias
* [https://medium.com/swlh/8-reasons-why-every-developer-should-use-docker-and-you-wont-believe-5-c71f8a58cd83](https://medium.com/swlh/8-reasons-why-every-developer-should-use-docker-and-you-wont-believe-5-c71f8a58cd83)
* [https://code.tutsplus.com/tutorials/what-is-composer-for-php-and-how-to-install-it--cms-35160](https://code.tutsplus.com/tutorials/what-is-composer-for-php-and-how-to-install-it--cms-35160)
* [https://siderlabs.com/blog/5-php-coding-standards-you-will-love-and-how-to-use-them-adf6a4855696/](https://siderlabs.com/blog/5-php-coding-standards-you-will-love-and-how-to-use-them-adf6a4855696/)
* [https://codecondo.com/10-best-php-automated-test-frameworks/](https://codecondo.com/10-best-php-automated-test-frameworks/)
* [https://dev.to/swastika0015/what-is-git-why-it-is-so-important-38i2](https://dev.to/swastika0015/what-is-git-why-it-is-so-important-38i2)
* [https://w3techs.com/technologies/details/pl-php](https://w3techs.com/technologies/details/pl-php)