Efraín Hidalgo
¡Hola!

Soy Efraín Hidalgo

Programador Web

Descargar CV PDF resumido

Programador web desde 2013, aunque adaptable a cualquier entorno estoy especializado en PHP, lenguaje con el que llevo trabajando desde mis inicios, junto con todas las tecnologías que lo envuelven, como MySQL, JavaScript, Git, HTML o CSS, etc.

Más adelante, tal como he ido descubriendo nuevas formas de trabajar en el sector me he ido integrando de forma progresiva con los principios SOLID, Clean Code, Docker, Arquitecturas limpias y TypeScript entre otros.

Actualmente nos encontramos en la emocionante irrupción de la Inteligencia Artificial, la cual voy integrando en mis conocimientos y práctica en la medida de lo posible.

Mis expectativas a futuro son terminar de adquirir los conocimientos básicos sobre IA con respecto al desarrollo, y especializarme en algún ambito en específico, lo cual lleve a otro nivel mi desarrollo en aspectos como el tiempo y calidad de código, bien sea en PHP, Python o en cualquier tecnología.

Github

Habilidades Profesionales ⚡️

Porcentajes orientativos basados en mi subjetividad actual.

Tip: para buscar una tecnología en concreto en mi CV, pulsa Ctrl + F en el navegador para buscar.

Machine Learning, LLM, MCP (Iniciación) 5%
Apoyo en desarrollo con IA: Windsurf, GitHub Copilot 50%
Python 20%
DDD / Hexagonal Architecture / Clean Architectures 80%
PHP 85%
MySQL 80%
Symfony 70%
Laravel 75%
WordPress 90%
HTML & CSS 90%
Bootstrap 80%
JavaScript & JQuery 80%
Docker 85%
Git 85%
Java 40%
AWS 40%
Bash Linux 75%
SEO 60%
TypeScript 60%
React JS 5%

Experiencia Profesional 🧑🏻‍💻

Noviembre 2023 - Actualidad

Por cuenta propia

Programador API Rest PHP / Laravel / DDD / Arquitectura hexagonal

Desarrollo de la API/Backend de una tienda con Laravel 12 y PHP 8.

Donde he trabajado de forma metódica con aspectos como: dockerización, DDD y arquitectura hexagonal, microservicios, tests, SOLID / clean code y flujo Git Flow (Github).

Más abajo extenderé de forma más detallada todos los detalles de este proyecto y mis sensaciones.

Repositorio github

Desarrollo desde un equipo Mac.
PHP Laravel Docker Git PHPUnit MySQL
Noviembre 2022 - Noviembre 2023

Orgoa

Programador web PHP / Laravel / Java / Docker

Desarrollador fullstack / devops de proyectos propios de la empresa para gestionar tramites necesarios entre aseguradoras, hospitales y proveedores de material médico.

Gestión de proyectos con metodología agile Scrum y flujos de trabajo con Git Flow (Bitbucket).

Desarrollo de nuevas funcionalidades y mantenimiento de aplicaciones PHP/Laravel existentes y posteriormente migración y dockerización de las mismas a nuevos proyectos Java.

Desarrollo desde un equipo Linux.
PHP Java Git Laravel Bootstrap jQuery MySQL
Junio 2020 - Noviembre 2022

Gisela

Programador web PHP / Full Stack / Docker

Desarrollador de proyecto PHP 7 / PHP 8 y Javascript/JQuery, en proyecto estructurado y organizado que cubre todas las necesidades de la compañia, partiendo del proyecto core/backend el cual modula y encapsula toda la lógica de negocio para brindarla a través de API Rest a los diferentes frontales como Web, ERP, etc.

Proyecto montado sobre Docker y Git (GitLab auto-hospedado) para organizar el trabajo entre los diferentes desarrolladores, con despliegue en GoCD en entornos de producción y preproducción y trabajando con flujo Git Flow personalizado.

El proyecto en sí es un framework propio y a medida, utilizando incluso algunas dependencias de Symfony.

Desarrollos organizados partiendo de diseños y briefing, validados por el equipo de desarrolladores al ser finalizados, y responsabilidad para desplegar en el entorno de producción posterior a su validación.

Desarrollo desde un equipo Windows.
PHP Docker GoCD Git Bootstrap jQuery MySQL
Julio 2019 - Junio 2020

EVAD

Programador web PHP / Symfony / Laravel / Flutter

Trabajando como responsable del panel de administración PHP/Symfony de un importante cliente a nivel nacional con expansión mundial, dicho panel PHP establece comunicaciones por API con Apps Android e iOS. Git (GitLab SaaS).

Simultáneamente gestionando su servicio en los servidores de Amazon AWS, instalando y manteniendo su correcto funcionamiento a través de servicios como EC2 (Máquina Linux), RDS (Servidor de base de datos) y ELB (Balanceador de Carga Elástico).

Recientemente trabajando sobre nuevo proyecto con panel PHP/Laravel y App móvil desarrollada con Flutter y Dart con lectura de códigos QR.

Desarrollo desde un equipo Windows.
PHP Git Amazon Web Services Symfony Laravel Flutter Bootstrap jQuery MySQL
Septiembre 2017 - Julio 2019

BCS Consultores de Negocio

Programador web PHP / Laravel / Full Stack

Programador web PHP full stack en consolidada consultoría de marketing, desarrollando aplicaciones web para diversos clientes, entre ellos algunas de las inmobiliarias más importantes de Málaga.

Desarrollo de proyectos PHP vanilla y PHP Laravel.

Desarrollo y customización de WordPress para una buena parte de nuestros clientes en todos los niveles, desde la típica gestión de contenido e instalación de plugins, hasta labores como personalización de la maquetación y diseño a través de plantillas hijo, modificación PHP de los plugins, pasarelas de pago Redsys, o labores de SEO.

Desarrollo desde un equipo Windows.
PHP Laravel WordPress Bootstrap jQuery MySQL
Noviembre 2016 - Agosto 2017

Sistemas de Seguridad 8x8

Programador web PHP / Java Android / Full Stack

Siendo en los últimos meses el único programador, llevando a cabo tanto las nuevas funcionalidades como mantenimiento del ERP (PHP vanilla) de la empresa.

App Android y de escritorio (Java Swing) para sus delegaciones y comerciales nacionales junto con otras aplicaciones de escritorio de funcionalidades más específicas (Java Swing).

Atención telefónica de las incidencias de los comerciales.

Uso de Jenkins como herramienta de integración continua y pruebas unitarias PHPUnit.

Desarrollo desde un equipo Windows.
PHP Java Jenkins Bootstrap jQuery MySQL PHPUnit
Julio 2016 - Septiembre 2016

Metadata

Programador web PHP / Symfony / Java

Mantenimiento y desarrollo de nuevas funcionalidades en diferentes aplicaciones web tanto Java (J2EE, Framework JSF, Hibernate ORM) como PHP (Symfony, doctrine ORM).

Entre ellas su software ERP principal MetaContratas.

Desarrollo desde un equipo Windows.
PHP Symfony Java Bootstrap jQuery MySQL
Septiembre 2015 - Julio 2016

Grupo Nautilus

Programador web PHP / WordPress / Full Stack

Desarrollo y mantenimiento de webs en PHP vanilla y WordPress, trabajando como Full Stack, con funciones de técnico de sistemas realizando backups, restaurando webs, gestionando correos.

Desarrollo desde un equipo Windows.
PHP WordPress Bootstrap jQuery MySQL
Septiembre 2013 - Junio 2014

E-gim

Programador web Java

Empresa de desarrollo tecnológico y consultoría hacia administraciones públicas, donde desempeñaba el cargo de programador web Java/JSP manteniendo e incluyendo funcionalidades en las mismas, trabajando sobre las aplicaciones de forma que el usuario pudiera acceder a través de su certificado digital realizando firmas electrónicas en determinados trámites.

En parte, trabajando como Full Stack y actualizando las App directamente sobre los servidores de los clientes y comunicándome directamente con ellos vía telefónica.

Desarrollo desde un equipo Windows.
Java Bootstrap jQuery MySQL

Formación 📚

2011 - 2013

FP II Desarrollo de Aplicaciones Web

IES Pedro Espinosa

2008 - 2010

FP I Explotación de Sistemas Informáticos

IES Pedro Espinosa

Certificados y cursos 🎖️

2025

Docker - Guía práctica de uso para desarrolladores

Udemy

Certificado Ir al curso
2025

GIT+GitHub: Todo un sistema de control de versiones de cero

Dev/talles Fernando Herrera

Certificado Ir al curso
2025

Patrones de Diseño: Soluciones prácticas y eficientes

Udemy

Certificado Ir al curso
2024

✅ APRENDE TESTING EN 100 DÍAS 🧪 (Laravel)

Youtube

Ir al curso
2024

Arquitectura Hexagonal

Codely

Ir al curso
2024

DDD en PHP

Codely

Ir al curso
2024

Testing: Introducción y buenas prácticas

Codely

Ir al curso
2023

Domain-Driven Design: DDD Aplicado

Codely

Ir al curso
2023

Comunicación entre microservicios: Event-Driven Architecture

Codely

Ir al curso
2023

CQRS: Command Query Responsibility Segregation

Codely

Ir al curso
2023

Aprende Docker, Compose y Swarm (2022)

Udemy

Certificado Ir al curso
2023

Arquitectura Software Moderna: DDD, Eventos, Microservicios

Udemy

Certificado Ir al curso
2022

Principios SOLID y Clean Code

Udemy

Certificado Ir al curso
2022

TypeScript: Tu completa guía y manual de mano

Udemy

Certificado Ir al curso
2022

Hacking ético + retos hacking

Nallam Formación

Certificado

Referencias 💬

  • Como gerente y director del área de Efraín Hidalgo Aguilera durante el tiempo que ha estado en la empresa Sistemas de Seguridad 8x8, puedo asegurar que es una persona muy trabajadora, con buena capacidad de resolución de problemas y compañerismo.

    Durante el tiempo que estuvo ejerciendo sus funciones de apoyo en el departamento de administración y programación informática, siempre las desempeñó con acierto y diligencia, con buena relación con clientes y superando los objetivos profesionales que tenía asignados.

    Puedo asegurar que Efraín Hidalgo Aguilera podría integrarse con garantías de éxito en cualquier tipo de empresa y desempeñar satisfactoriamente la actividad relacionada con su profesión.

    Sistemas de Seguridad 8x8
    Salvador Serrano CEO de Sistemas de Seguridad 8x8

    Ver documento completo

API Shop Clean Code ⭐️

(Por cuenta propia)
Introducción 🎬

API Rest tienda de productos desarrollada con Laravel 12, PHP 8 y Docker.

En este proyecto he trabajado de forma meticulosa con los siguientes aspectos:

  • Docker para levantar el proyecto.
  • Aplicando de forma relativamente estricta metodologías y arquitecturas limpias como DDD y arquitectura hexagonal.
  • Microservicios, contenedores separados para el backend, BD para tablas de Laravel, BD de mi dominio desacoplado del framework.
  • Realización de tests de Aceptación, Integración y Unitarios que cubren la totalidad de mi código.
  • Especial atención en los principios SOLID y clean code.
  • Flujo de trabajo Git Flow (aunque sea el úníco desarrollador).

Aunque este proyecto lo haya desarrollado con DDD y arquitectura hexagonal por las expectativas de que creciera y fuera más mantenible, no es algo que sea apropiado para todos los proyectos, ya que si vamos a desarrollar un proyecto más pequeño lo más pragmático sería hacer un simple MVC o seguir la dinámica de desarrollo por defecto de Laravel.

En resumen, el proyecto gestiona los productos (con sus variantes) que pertenecen a una categoría donde se pueden añadir al carrito para confirmar la compra.

Mi proceso y sensaciones 💭

Antes y durante el desarrollo de este proyecto he realizado algunos cursos para afianzar, mejorar y pulir mis conocimientos sobre las últimas novedades de Laravel, DDD, Arquitectura hexagonal y testing, aunque ya tuviera ciertos conocimientos siempre hay algo nuevo que aprender, ya que quería desarrollar el proyecto lo más pulido posible (en base a mis capacidades y conocimentos) ya que en este caso era yo el que tomaba las decisiones.

La verdad es que cuando inicié el proyecto aún no me había involucrado demasiado con la IA, por lo que no la utilicé desde el principio, una vez había desarrollado toda la estructura src de DDD, todos los endpoints de la API y algunos tests empecé a integrar la IA en el proyecto de forma progresiva.

Empecé preguntándole mejoras y optimizaciones a chatgpt, después pasé a github copilot y finalmente me pasé a Windsurf que es donde me encuentro ahora, durante el proceso me di cuenta de varios detalles de por ejemplo DDD que estaba aplicando mal.

Uno de los detalles de DDD que estaba aplicando mal era que estaba gestionando las instancias del modelo OrderLine desde el propio caso de uso, en lugar de hacerlo desde el Aggregate Root Order, que es como debe de ser. Una vez identificado lo refactoricé.

Cuando se utiliza la IA de apollo en el desarrollo, hay que entender y analizar siempre sus propuestas de código, si nos parecen correctas y mejoran el código actual las podemos aplicar, y si no se entiende se le vuelve a preguntar a la IA hasta entenderlas.

Desde mi punto de vista se interioriza mucho mejor cualquier concepto de programación trabajando de forma empírica en un proyecto y apoyandose en la IA (teniendo en cuenta el párafo anterior), que realizando cursos al respecto, o todavía mejor, utilizando ambas formas.

Soy consciente de que al proyecto aún le falta un poco para considerarse MVP (proyecto mínimo viable), concretamente el proceso de confirmación de compra y el posterior flujo de estados del pedido, pero independientemente de eso he tratado de pulir y optimizar al máximo el código y lógica actual del proyecto.

Otros detalles a los que le he prestado especial atención es a todo el naming de clases y propiedades (aplicando PSR-12), enfocándome en asignar nombres lo suficientemente descriptivos sin pasar la línea roja de la redundancia, y por supuesto absolutamente todo en inglés.

Aunque no tenga la habilidad de hablar inglés de forma fluida, sí que tengo una comprensión de lectura/escritura lo suficientemente buena para escribir y leer código en inglés (obligatorio), y si hay algo que no termino de comprender lo consulto con la IA o el traductor.

Código 💾

Después de toda la chapa previa pasemos a comentar un poco el código, para levantar el proyecto y ejecutar los tests he dejado los ficheros README.md y la versión en español README-ES.md con las instrucciones de instalación. También incluyen instrucciones para usar PHP CS Fixer y Laravel ide helper durante el desarrollo.

Fichero CONTRIBUTING.md donde defino las reglas para los desarrolladores de como crear ramas y commits y de como hacer los merge mediante pull requests.

Aunque el proyecto únicamente contiene el backend/API de la tienda (shop), también está preparado para contener el backend del backoffice (panel de administración), podras observarlo en varias partes del proyecto.

Con respecto a los tests, he utilizado únicamente PHPUnit (aunque conozco un poco Pest), y mi forma de segmentar los tests es la siguiente:

  • Una "testsuite" para Backoffice (aunque actualmente no exista), otra para Shop (backend de la tienda) y otra para Shared (módulo compartido de DDD). Definidos en phpunit.xml.
  • Un "group" para tests de "feature" (tests de aceptación/aceptance), otro para "unit" y otro para "integration". Definidos con el atributo group en cada método de test.

He implementado un sistema de throttle con un Middleware de Laravel en bootstrap/app.php para limitar a un máximo de 5 intentos de login en un minuto para bloquear ataques de fuerza bruta.

También he implementado un manejador de excepciones (ExceptionHandler) en bootstrap/app.php para manejar las excepciones de forma global y no tener que estar capturándolas de una en una, donde se pasa la excepción al ApiResponse.php para formatearla de forma estándar hacia el exterior (frontend).

Y bueno, en resumidas cuentas, todo el código de dominio está en /src, los Controllers en /app/Http/Controllers/Shop, y luego están por ahí los Providers, Migrations, Factories, Seeders, etc.

¿Consideras que hay algo en el proyecto que pueda mejorar u optimizar? ¡Házmelo saber para valorarlo y aplicarlo si lo considero oportuno!.

Repositorio github

Mi forma de entender la Inteligencia Artificial 🤖

(En desarrollo de software)
Mi forma de verlo 👀

Estamos viviendo una época en la que la profesión del desarrollador está viviendo un cambio nunca antes visto con la aparición de la inteligencia artificial, donde incluso hay una parte del sector que piensa que la IA va a reemplazar a los desarrolladores.

Mi opinión al respecto es que la profesión va a evolucionar progresivamente a otra forma de trabajar, donde antes éramos más "picadores de código", y ahora vamos cada vez más hacia "solucionadores de problemas", donde en cualquier caso siempre hay que tener de base los fundamentos de la programación, y es por eso por lo que pienso que siempre se va a necesitar un desarrollador para manejar y refinar lo que la IA nos ofrece.

Lo que nos conlleva a ir subiendo escalones en cuanto a la complejidad de los desarrollos, donde las tareas y decisiones más sencillas las realiza la IA y al desarrollador le queda mas tiempo para analizar y solucionar problemas más complejos.


Analogía futbolística ⚽️

Me gusta verlo con la siguiente analogía en comparación con un partido de futbol:

Antes de la aparición de la IA un desarrollador ejercía tanto de entrenador como de los jugadores, y después de su aparición, los jugadores son potencialmente ejercidos por la IA.

Donde el desarrollador va delegando responsabilidades de los jugadores a la IA y analizando su desempeño, y en el caso de que la IA no consiga marcar gol, sea el desarrollador/entrenador el que decida mandar a la IA al banquillo y salir él a marcar el gol.

Lo que nos conlleva a ir subiendo escalones en cuanto a táctica y estrategia de juego, donde las jugadas de campo más sencillas las realiza la IA y al desarrollador/entrenador le queda más tiempo para analizar tácticas y estrategias más complejas.

Extra 🧩

Sobre mí 🙋🏻‍♂️

Algunas de mis naturalezas como persona son la objetividad, el pragmatismo y el perfeccionismo, y sí, entiendo que éstas dos últimas pueden parecer contrarias, y realmente lo son, pero hay un matíz que determina si aplico de forma instintiva una u otra.

Y ese matíz es cuanto me apasiona o entusiasma cierta tarea/acción/labor, cuando algo me gusta demasiado sale mi lado perfeccionista de forma automática, tratando de aprenderlo/refinarlo/optimizarlo todo lo posible, y como podrás imaginar, el desarrollo de software está incluido, de igual forma soy consciente de que no acarrea solo cosas buenas, y que también es negativo cuando esa perfección hace perder demasiado tiempo sin ser necesario a veces. Es por eso que en esas situaciones trato de forma consciente de ser más flexible para poder seguir progresando de forma fluida.

Y la otra parte, el pragmatismo, nace en todo lo demás, en pequeñas tareas cotidianas del día a día que simplemente necesiten ser completadas, en esos casos no me complico demasiado.

Mi opinion respecto al purismo en desarrollo de software 🤔

Ahora bien, con respecto al purismo sobre cualquier aspecto en desarrollo de software, es algo que en teoría está muy bien mientras todo fluye, trato de aplicarlo en la medida de lo posible, pero en el momento que nos cuesta encontrar la solución purista para determinado problema hay que pasar a ser más pragmático y objetivo. Esa es mi forma de entender que en el desarrollo de software hay que tratar de seguir las mejores prácticas pero en determinados casos hay que ser flexible.

Hardware para programar ⌨️

Todo mi entusiasmo al desarrollo no solo lo aplico a nivel de sofware, también trato de optimizarlo a nivel del hardware de los periféricos de entrada, y aunque lo siguiente se desvía un poco del motivo por el que estás leyendo mi CV, realmente me gustaría comentarlo.

Con el paso del tiempo como desarrollador he ido cuestionando los ratones y teclados tradicionales, llegando a la conclusión de que debían exisir periféricos más ergonómicos y prácticos. Lo primero que probé fueron los ratones ergonómicos zurdos, y aunque no son tan extraños en realidad, sí que me costó encontrar uno para la mano izquierda que fuera lo suficientemente grande, ya que otros que probé me arrastraban los dedos por la mesa.

Donde finalmente terminé con el siguiente ratón que simplemente cumple con las características que buscaba: zurdo, vertical y grande.

Y con respecto al teclado he tardado más tiempo en tomar una decisión ya que la diversidad de teclados diferentes que podemos encontrar es amplia. Llegué a la conclusión de que la distribución de las teclas de los teclados típicos estaban obsoletas, ¿por qué cada fila de teclas está ligeramente desplazada con respecto a otras filas? 🤯, resumiendo, esto es así desde que se inventaron las máquinas de escribir en las que existía ese desplazamiento para no atascar las palancas, y desde entonces, dada la aceptación de la sociedad se ha mantenido así.

mouse keyboard

Donde finalmente me decidí por el siguiente teclado dividido ortolineal (filas de teclas sin desplazamiento), en este caso lo que está desplazado es las columnas para ajustarse a la longitud de cada dedo, donde en las teclas negras tengo macros, y las teclas grises encajan en el abanico del movimiento del dedo pulgar ¡ahora sí que le veo el sentido! 😁.

mouse keyboard

Además de, ya que estábamos, sustituir también la distribución querty por colemak dh (voy all-in), que concentra la mayoría de pulsaciones (dado el idioma inglés) en la fila central, por lo que es más eficiente en la escritura.

mouse keyboard

v2.4.1
Loading ...