¿Qué es un Programador Full Stack?

A comienzos del año 2010 comenzó a ser escuchado en el ambiente de la programación un nuevo término, vacantes usaban este término para ser llamativas, al igual que cursos presenciales, el término fullstack era un perfil muy solicitado, donde se buscaba a un programador capaz de construir aplicaciones completas.

A comienzos del año 2010 comenzó a ser escuchado en el ambiente de la programación un nuevo término, vacantes usaban este término para ser llamativas, al igual que cursos presenciales, el término fullstack era un perfil muy solicitado, donde se buscaba a un programador capaz de construir aplicaciones completas.

Aunque estas cualidades no eran nuevas, ya en el 2005 abundaban los programadores llamados web masters, qué en sí, hacían aplicaciones completas, tal cual.

Existen ciertos factores que hicieron que se popularizara un nuevo término para los programadores, a pesar de que ya existían programadores que hacían toda la aplicación por si solos. Entre ellos está la llegada de JavaScript al backend y la revolución de los smartphones.

En el año 2010 los smartphones ya estaban en la mano de toda persona (o casi), esto involucro una separación de rol, la necesidad de aprovechar funcionalidades en distintos modos de presentación, y aquí comenzamos a ver una separación de backend y frontend, donde los devs se podían especializar en uno y el otro.

Esto dio paradójicamente una solución y problema, por un lado existían devs que hacían el backend en lenguajes como C#, PHP, Java, dejando como un servicio desacoplado de la presentación, y por otro lado teníamos a otros devs usando JS para el frontend, la solución siendo que podíamos tener desacoplada la app en 2 aplicaciones que no estaban fuertemente acopladas, pero por otro lado, si el programador del lenguaje de backend se iba de la empresa, se debía buscar un dev especializado en ese lenguaje, y las combinaciones entre JS en frontend y Otro lenguaje en backend podían ser muchísimas, un grave problema para el reclutamiento a como lo conocemos, el cual busca devs por etiqueta de lenguaje.

En 2009 nace Node.js, esto dio la posibilidad de poder trabajar JavaScript del lado del backend, algo que llamo la atención en las empresas, ya que esto resolvía el problema ocurrido por la separación de backend y frontend, ahora ya se podía buscar programadores de JavaScript que cubrieran las dos partes de una aplicación. Y aquí es cuando el término fullstack comienza a ser visto en las vacantes.

Recuerdo esa época donde las vacantes estaban llenas de MEAN, MERN, MEVN, stacks que prometían ser el futuro, todo hecho con JavaScript, hasta teníamos base de datos NoSQL que muchos las vieron como el nuevo camino contra las bases de datos relacionales (y no fue así).

Lamentablemente, estos stack no fueron el futuro absoluto, mucha empresa siguió optando por lenguajes fuertemente tipados como Java o C#, o también existían millones de aplicaciones funcionando hechas con PHP, lo cual, trajo con si otro problema: El término fullstack fue abusado.

En un inicio el término full stack contemplaba un stack en sí, una combinación de tecnologías, pero el hecho de que los stack podían tener muchísimas combinaciones posibles, hizo que el reclutamiento de programador full stack, no fuera el de buscar un dev en un stack en específico, sino fue, buscar un dev todólogo.

Ahora se necesitaban programadores que pudieran hacer de todo, hasta diseño muchas veces, y esto pasa ya que el término full stack nació vagamente, y tiene distintos significados, dependiendo el contexto, lo cual hace que se abuse de él.

En mi perspectiva, el término full stack debe aplicarse para 3 cosas en concreto que llevan a hacer una aplicación completa:

  • Reglas de negocio
  • Persistencia
  • Presentación

Una aplicación full stack, cualquiera que sea, presenta estas 3 cosas mínimo, un conjunto de reglas de negocio, que son las que le dan sentido a tu aplicación, le dan forma a lo que hace, una aplicación de ventas, sin que la veas, sabes que tendrá productos y clientes, o una aplicación para ver películas, sabes que tendrá un buscador y recomendaciones. En sí, las reglas de negocio le dan un sentido a la app.

Por otro lado, una aplicación fullstack debe tener persistencia, la información de alguna forma debe guardarse, a pesar de ser una aplicación que no guarde información del usuario, información tendrá en algún lado, hasta un array con un listado del menú es información persistente.

Y, por último, una aplicación debe tener presentación, un modo de entrada de información, ya sea un sitio web, ya sea una app móvil, o hasta una aplicación de escritorio que se conecte por HTTP a un backend, el frontend no es solo web, un error común que muchos tienen al clasificarlo como todo web.

Estas 3 cosas capturan la escencia de la programación fullstack, donde se habla de un backend y un frontend. Claro que una aplicación full stack podría tener muchas más cosas como monitoreo, resiliencia, o incluso pruebas unitarias.

Existen aplicaciones que no necesariamente deben cumplir con estas 3 cosas, por ejemplo, sensores en hardware que solo capturan información más no tienen presentación, una app 100% backend que sea un servicio intermedio, procesos en segundo plano, webhooks para capturar callbacks de servicios etc.

Pero cuando hablamos de fullstack, yo considero que deberían tener las 3 cosas indicadas: reglas de negocio, persistencia y presentación.

Un programador fullstack es un programador que puede resolver la parte de reglas de negocio, la parte de persistencia y presentación, y no necesariamente, debe ser un experto en todas las partes.

Por lo cual, un programador fullstack es un programador versátil, puede hacer una aplicación completa, pero sobre todo, sabe que muchas veces, toca buscar como hacer alguna de las partes.

Aunque esto antes dicho puede ser peligroso, ya que muchas veces se cree que puede ser un todólogo de lenguajes, que de una semana a otra puede pasar de Java a Python, lo cual no evita que pueda hacerlo, pero, todo a su tiempo. No se confunda la capacidad, con el forzar las cosas con inmediatez.

Si deseas aprender a ser full stack en C# .NET puedes adquirir mi curso que tiene un precio siempre bajo, igual, la primer parte es gratis: https://metalcode.io/curso/full-stack-dotnet

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Curso de Programación Orientada a Objetos en PHP GRATIS

Aprender Programación Orientada a Objetos, te apoyará a tener el conocimiento necesario a la hora de comenzar a adentrarte en Arquitectura y Diseño de Software, y aprenderlo con PHP te brindará las habilidades para crear sistemas escalables y mantenibles.

PHP es uno de los lenguajes de programación más utilizados en la web, y aprenderlo a usar bien te dará un extra a la hora de buscar trabajo.

Aprender Programación Orientada a Objetos, te apoyará a tener el conocimiento necesario a la hora de comenzar a adentrarte en Arquitectura y Diseño de Software, y aprenderlo con PHP te brindará las habilidades para crear sistemas escalables y mantenibles.

Este curso está orientado a enseñarte las bases fundamentales de Programación Orientada a Objetos en PHP, es un curso GRATIS, puedes apoyar compartiéndolo en tus redes sociales:

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Los Conceptos que debes saber antes de Aprender Arquitectura de Software

Aprender Arquitectura de Software es un paso que debe dar todo programador tarde o temprano, pero muchos al querer abordar estas temáticas, les parece complicado, y he detectado los factores de por qué pasa esto.

Aprender Arquitectura de Software es un paso que debe dar todo programador tarde o temprano, pero muchos al querer abordar estas temáticas, les parece complicado, y he detectado los factores de por qué pasa esto.

Mucho programador a la hora de elegir aprender Arquitectura de Software no tiene el conocimiento de programación fundamental, sobre todo, desconoce el tema de las interfaces y abstracciones.

También pocas veces se tiene la seguridad que es una capa, un componente, o que significa acoplamiento.

Es por ello que he creado un video que explica todos estos conceptos, con un enfoque práctico, y explicación con código.

El contenido es GRATIS, así que puedes compartirlo en tus redes sociales, si crees que es contenido valioso.

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

¿Qué es Arquitectura Hexagonal?

La Arquitectura Hexagonal, es un estilo de Arquitectura de Software que fue propuesto por Alistair Cockburn en 2005, con su propósito principal el de aislar la lógica de negocio de la infraestructura.

La Arquitectura Hexagonal, es un estilo de Arquitectura de Software que fue propuesto por Alistair Cockburn en 2005, con su propósito principal el de aislar la lógica de negocio de la infraestructura.

El diseño propuesto inicial solo contemplaba 2 capas, siendo el núcleo el dominio (reglas de negocio), y la capa externa la infraestructura.

Aunque hoy en día es más común ver Arquitecturas Hexagonales con 3 capas, añadiendo una capa extra entre infraestructura y dominio llamada: Aplicación.

La propuesta de esta Arquitectura es simple, tener el dominio separado de la infraestructura, y la manera como se comunica la infraestructura y el dominio es por medio de Adaptadores y Puertos.

Un puerto no es más que una interface de programación, un contrato que define que métodos existirán en la implementación, los puertos son de 2 tipos:

  • Puertos de entrada (Puerto primario): son interfaces que definen las acciones de un caso de uso, por ejemplo: registrar usuario, login, crear venta.
  • Puertos de salida (Puerto secundario): son interfaces que definen que es lo que el sistema necesita, es decir, que es lo que tus reglas de negocio van a necesitar del mundo exterior, de la infraestructura, por ejemplo: guardar en base de datos, enviar correo, enviar notificación push.

Los puertos serán los que hagan la comunicación entre la infraestructura y el dominio, de esta manera, nuestro dominio puede ser codificado sin necesidad de conocer cosas como frameworks, bases de datos, servicios externos. El dominio solo se centra en las acciones que necesita.

Los Adaptadores son la otra entidad existente en esta Arquitectura, los Adaptadores son de 2 tipos:

  • Adaptador Primario: son clases que usan los Puertos de Entrada (Puertos Primarios), el Adaptador Primario sería, lo que ejecuta un usuario o actor de entrada, por ejemplo, un API, una aplicación de consola, un formulario. La implementación del Puerto primario se encuentra en la capa Dominio cuando se usan 2 capas, o en la capa Aplicación cuando se usan 3 capas.
  • Adaptador Secundario: son clases que se encuentran en la infraestructura, clases que se encargan de implementar los Puertos de Salida (Puertos Secundarios), por ejemplo, son clases que se encarguen de: mensajes por smtp a correo, queries u ORM a base de datos, solicitudes HTTP a servicios externos.

En resumen, los adaptadores primarios usan los puertos de entrada, y los adaptadores secundarios implementan los puertos de salida.

De esta manera, la Arquitectura Hexagonal propone separar el dominio, permitiendo aislarlo para poder utilizar las reglas de negocio en distintas aplicaciones, haciendo cambios en infraestructura sin que afecten el dominio, la esencia del sistema.

También te permite hacer pruebas de las reglas de negocio, sin necesidad de involucrarte con la infraestructura.

Y, por último, te permite escalar el sistema de una manera limpia, ya que la mayoría de los cambios ocurren en la infraestructura, estos se pueden hacer sin necesidad de afectar el dominio.

La Arquitectura Hexagonal, es un estilo de Arquitectura muy utilizado hoy en día, y si quieres aprender más sobre esto, puedes tomar mi curso de Arquitectura Hexagonal, el cual tiene ejemplos con código que incluyen ejemplos realistas: Ir al Curso de Arquitectura Hexagonal.

También te dejo un video donde explico la Arquitectura Hexagonal paso a paso:

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Curso de Introducción a PHP GRATIS

Si deseas aprender PHP, este curso que es introductorio, puede ser un buen comienzo para que te adentres a este lenguaje de programación.

PHP es uno de los lenguajes más utilizados para desarrollar web, existiendo en más del 70% de la web publica.

Si deseas aprender PHP, este curso que es introductorio, puede ser un buen comienzo para que te adentres a este lenguaje de programación.

El curso es gratis, y abarca los fundamentos y sintaxis básica del lenguaje.

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Aplicaciones Monolíticas preparadas para Escalar a Microservicios

Es común escuchar a programadores con no mucha experiencia, querer comenzar toda aplicación pensando en microservicios. El microservicio es una complejidad que debe ser justificada, no solo usarlo porque suena bien.

Es común escuchar a programadores con no mucha experiencia, querer comenzar toda aplicación pensando en microservicios.

El microservicio es una complejidad que debe ser justificada, no solo usarlo porque suena bien.

Al usar microservicios nos llenamos de preocupaciones extras, que van desde como vamos a comunicarlos con otros microservicios, que pasa cuando un microservicio no responde, o que va a pasar cuando publiquemos cientos de microservicios. Pero estas desventajas vienen en conjunto con ventajas.

Pero al iniciar a crear una aplicación, ir directamente a complicarla con microservicios, es de las peores decisiones que puedes tomar como Arquitecto de Software.

La Arquitectura Monolítica no está peleada con los microservicios, muchas veces veo que el principal problema a la hora de pasar algún módulo de un monolito a microservicio: es la falta de conocimiento de Arquitectura de Software. Pero el monolito puede ser estructurado de una manera que permita escalar a microservicios, si es que se requiere.

A continuación, te muestro con ejemplos paso a paso como estructurar una Aplicación Monolítica que esté preparada por si se necesita escalar a Microservicios:

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Curso de Programación Backend en PHP Laravel – Héctor de León

En este curso verás desde las bases necesarias que debes conocer del lenguaje de programación PHP, hasta los fundamentos de backend, antes de comenzar a ver el framework Laravel. El curso se centra en ir aprendiendo los conceptos, y realizar ejercicios reales conforme vamos adentrándonos a los conceptos y herramientas del framework Laravel.

Ya ha salido mi curso de programación backend en PHP Laravel.

En este curso verás desde las bases necesarias que debes conocer del lenguaje de programación PHP, hasta los fundamentos de backend, antes de comenzar a ver el framework Laravel.

Laravel es el framework más utilizado de PHP hoy en día, gracias a ser un framework moderno y escalable, que tiene todo lo necesario para hacer aplicaciones completas y complejas.

El curso se centra en ir aprendiendo los conceptos, y realizar ejercicios reales conforme vamos adentrándonos a los conceptos y herramientas del framework Laravel.

El objetivo es que aprendas a utilizar Laravel, pero también sepas conceptos que se replican en otros Frameworks de Backend.

El curso cuenta con más de 100 clases y puedes adquirirlo con descuento permanente de 15% usando el cupón «metalcode».

Puedes ver los temas y adquirir el curso en el siguiente enlace: https://courses.metalcode.io/courses/laravel-backend

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Curso de Programación en Python GRATIS (Intensivo)

Aprender Python te dará una habilidad extra a la hora de buscar trabajo, y que mejor, aprenderlo de forma intensiva, yendo a los conceptos fundamentales rápidamente.

Python es el lenguaje de programación número uno hoy en día, quedando en los primeros lugares en todas las encuestas a programadores.

Aprender Python te dará una habilidad extra a la hora de buscar trabajo, y que mejor, aprenderlo de forma intensiva, yendo a los conceptos fundamentales rápidamente.

A continuación, puedes ver al curso de Programación en Python GRATIS.

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Programar Aplicación que reconozca imágenes usando IA

A continuación, te enseñaré como puedes utilizar modelos de manera local, para hacer múltiples tareas, entre ellas, reconocer imágenes.

Con la llegada de los modelos LLM Open Source, tenemos la posibilidad de utilizarlos de manera local, dando a los programadores múltiples ventajas a la hora de crear innovación en sus aplicaciones.

A continuación, te enseñaré como puedes utilizar modelos de manera local, para hacer múltiples tareas, entre ellas, reconocer imágenes.

Existen modelos que reconocen imágenes, entre ellos toda la gama de los modelos nacientes del modelo «LLaVA«.

En el siguiente video construiremos una aplicación web la cual ejecuta modelos de IA para reconocer las imágenes que el usuario le brinde, la aplicación le dirá que es lo que ve en la imagen. Utilizaremos Ollama para ejecutar los modelos.

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

La Importancia de Aprender Patrones de Diseño

Los patrones de diseño sirven para ahorrarnos el pensar en nuevos diseños bajo problemas habituales, el conocerlos nos da herramientas para abreviar soluciones a problemas.

Los patrones de diseño son técnicas las cuales nos sirven para no reinventar la rueda en problemas comunes.

Al momento que comenzamos a programar, hacemos las cosas como se nos viene a la mente, aun sabiendo sobre diseño de software, podemos llegar a diseños distintos para la misma solución.

Los patrones de diseño sirven para ahorrarnos el pensar en nuevos diseños bajo problemas habituales, el conocerlos nos da herramientas para abreviar soluciones a problemas.

Los patrones de diseño inicialmente se dividen en 3 tipos que son los creacionales, los estructurales y de comportamiento, pero con el tiempo han salido patrones de diseño nuevos para cubrir nuevas necesidad que van desde patrones de diseño reactivos a patrones de diseño concurrentes.

El objetivo de los patrones de diseño es hacer que tengas una colección de soluciones para cuando tengas problemas habituales, ya no tengas que volver a pensar en como vas a organizar tus clases (hablando de programación orientada a objetos).

Por ejemplo, un problema habitual es trabajar con un objeto general en todo el sistema, para eso tenemos un patrón de diseño llamado Singleton, el cual te indicara como organizar el código de una clase para que solo permita la creación de un objeto.

En el frontend es habitual que necesitemos tener objetos que observen a otros objetos, por ejemplo, saber si un listado ha cambiado, y a partir de este cambio, hacer una actualización a un campo que indica el total de filas, para este tipo de situaciones podemos utilizar el patrón de diseño Observer.

Otra situación viene, cuando para crear un objeto necesitamos muchos parámetros en su constructor, para solventar esto tenemos un patrón de diseño llamado Builder, el cual permitirá construir el objeto por pasos.

Una cosa extra que se tiene al aprender patrones de diseño, es que son ajenos al lenguaje de programación, si tu los aprendes con C#, no deberías tener problema en replicarlos en Python por ejemplo.

Aprender patrones de diseño es obligatorio para todo programador, ya que le brindara un potencial extra a la hora de programar.

Puedes aprender patrones de diseño en mi curso de Patrones de Diseño en Python, dando clic aquí.

A continuación te muestro un ejemplo del patrón de diseño Proxy, y como este te puede ayudar a resolver problemas de optimización: