martes, 16 de junio de 2026

馃殌 ¿Buscando talento o pidiendo un viaje a Mordor? La realidad del reclutamiento IT 馃拲

A los programadores, cada vez que queremos entrar en una nueva empresa, parece que se nos exige haber ido a Mordor a recuperar el Anillo 脷nico, volver ilesos y, adem谩s, dominar tres lenguajes alien铆genas. 馃‍♂️馃寢

Normalmente, quienes redactan las ofertas o los empresarios que buscan cubrir un puesto, no eval煤an lo que el proyecto necesita de forma realista. Nos encontramos a diario con situaciones que debemos dejar de normalizar:

馃敼 La paradoja del tiempo: Exigen 5 o m谩s a帽os de experiencia en tecnolog铆as o frameworks que apenas llevan un par de a帽os en el mercado. 馃敼 El "Junior" Senior: Piden a帽os demostrables y un stack tecnol贸gico interminable para puestos que catalogan como Junior. 馃敼 El desarrollador orquesta: Buscan que sepas de todo para contratar a menos personas, oblig谩ndote a cubrir el trabajo de un departamento entero sin la remuneraci贸n que corresponder铆a.

馃挕 La clave est谩 en la l贸gica, no en la sintaxis En los puestos tecnol贸gicos, de programaci贸n o desarrollo, lo que realmente se debe valorar en un candidato es su l贸gica de programaci贸n, su capacidad de an谩lisis y su habilidad para resolver problemas.

Da igual el lenguaje exacto en el que programes hoy. Si tienes una base s贸lida, entiendes c贸mo estructurar un flujo de datos y c贸mo dise帽ar una base de datos eficiente, puedes desenvolverte en la sintaxis de otros lenguajes. Solo se necesita revisar la documentaci贸n, un poco de tiempo y la pr谩ctica del trabajo diario.

En el mundo real, los desarrolladores no programamos de memoria. Nos apoyamos en la documentaci贸n oficial, buscadores, Inteligencia Artificial y la comunidad. El c贸digo se entiende, la l贸gica se aplica, y poco a poco el trabajo fluye con mayor soltura.

⚠️ El talento descartado Si las empresas no cambian su enfoque, seguir谩n quej谩ndose de que "no encuentran talento". Hoy en d铆a se descartan perfiles brillantes por no conocer un algoritmo de pizarra que jam谩s usar谩n en producci贸n, por no tener experiencia en un framework residual, por la edad, o simplemente por sistemas autom谩ticos (ATS) mal configurados. Si dieran la oportunidad, ver铆an el inmenso valor que estas personas pueden aportar.

馃憞 ¡Es hora de dejar de normalizar ofertas imposibles y empezar a valorar a los verdaderos solucionadores de problemas!

¿Qu茅 consideras m谩s efectivo para evaluar a un candidato en una prueba t茅cnica: un desaf铆o algor铆tmico puro (tipo LeetCode) o un proyecto peque帽o que eval煤e la arquitectura, la l贸gica del c贸digo y el dise帽o de la base de datos? ¡Te leo en los comentarios! 馃挰



domingo, 31 de mayo de 2026

馃殌 ¿Listo para dotar de un "Cerebro" a tus proyectos de c贸digo? 馃馃捇


Ya sabemos construir la estructura y ponerle escudos a nuestras APIs. Ahora es el momento de darle inteligencia real.

¡Ya est谩 disponible y en abierto el Curso Pr谩ctico de Scikit-Learn! 馃悕✨

Si alguna vez has sentido que el Machine Learning es una monta帽a de matem谩ticas imposible de escalar, aqu铆 cambiamos las reglas del juego. Como Traductores T茅cnicos, vamos a bajar la Inteligencia Artificial a la tierra: cero paja, cien por cien c贸digo 煤til y aplicado al mundo real.

馃洜️ ¿Qu茅 vas a construir conmigo? 馃敼 Procesamiento de datos: Aprende a refinar el "combustible" de tu IA. 馃敼 Entrenamiento de modelos: Desde regresiones hasta clasificaciones complejas. 馃敼 Puesta a punto: C贸mo evaluar y optimizar tus algoritmos para que no fallen en producci贸n.

No te quedes solo en crear scripts b谩sicos. Da el salto, convi茅rtete en un constructor profesional y empieza a predecir el futuro con tus datos.

馃憞 Entra a la lista de reproducci贸n completa, SUSCR脥BETE para no perderte nada y empieza a entrenar tu primer modelo hoy mismo: 

馃敆 https://www.youtube.com/playlist?list=PLhr9YdZStgI1Gy0ZCad0DJVwHN7SHrMrv

¡Nos vemos en el c贸digo! 馃懆‍馃捇



lunes, 27 de abril de 2026

¿Quieres dominar Scikit-Learn con un caso real? 馃殺馃


El dataset del Titanic es el "Hola Mundo" del Machine Learning, pero pocos lo abordan con un flujo de trabajo profesional. Acabo de publicar en mi canal de YouTube una clase donde resolvemos este ejercicio de principio a fin.

No nos limitamos a "entrenar un modelo"; profundizamos en lo que marca la diferencia: ✅ Exploraci贸n y limpieza de datos real. ✅ Ingenier铆a de variables (Feature Selection). ✅ Evaluaci贸n del modelo y m茅tricas de supervivencia.

Si est谩s prepar谩ndote para trabajar en Ciencia de Datos, este tipo de proyectos pr谩cticos son los que construyen un portfolio s贸lido.

馃摵 Mira el ejercicio completo aqu铆: https://youtu.be/C2iHKYwVNzU

¡Suscr铆bete para seguir aprendiendo Machine Learning paso a paso!




viernes, 10 de abril de 2026

¡Domina la eficiencia con Funciones Generadoras y yield! 馃馃捑

Seguimos optimizando c贸mo manejas grandes vol煤menes de datos. Ya vimos las List Comprehensions (creaci贸n r谩pida) y las Generator Expressions (ahorro de memoria). Es el momento de llevar ese ahorro a tus propias funciones.

¿Sab铆as que una funci贸n est谩ndar calcula todos los resultados, los guarda en una lista en la RAM y luego te los devuelve? Si la lista es enorme, tu programa puede colapsar por falta de memoria. Mira este contraste visual: import sys # ❌ FUNCI脫N EST脕NDAR (Guarda todo en RAM) def cuadrado_lista(n): resultado = [] for i in range(n): resultado.append(i * i) return resultado # Devuelve la lista completa n = 10_000_000 # 10 millones p1_lista = cuadrado_lista(n) #print(p1_lista) # ¡Cuidado si lo imprimes! print(f"RAM Lista (est谩ndar): {sys.getsizeof(p1_lista) / 1024 / 1024:.2f} MB") # Salida: ~80-90 MB (dependiendo de tu arquitectura) La alternativa Pythonic es usar una Funci贸n Generadora. En lugar de un return final, usas la palabra clave yield dentro de un bucle. yield pausa la ejecuci贸n, devuelve el valor actual y "recuerda" el estado para continuar justo donde se qued贸 la pr贸xima vez que se lo pidas con next(). # ✅ FUNCI脫N GENERADORA (Calcula bajo demanda ✨) def cuadrado_generador(n): for i in range(n): yield i * i # Devuelve el valor, pausa y recuerda estado p2_gen = cuadrado_generador(n) # No calcula nada a煤n #print(p2_gen) # Salida: <generator object...> print(f"RAM Objeto Generador: {sys.getsizeof(p2_gen)} bytes") # Salida: ~100-200 bytes (¡Pr谩cticamente nada!) ¿Por qu茅 usar yield y Funciones Generadoras? Consumo de RAM 铆nfimo: Procesas flujos de datos gigabytes o infinitos sin saturar la memoria, ya que solo guardas el estado actual de la funci贸n. C谩lculo perezoso (Lazy Evaluation): Ideal para procesar archivos l铆nea por l铆nea, data streams, o cuando solo necesitas los primeros resultados de una b煤squeda compleja. Encadenamiento elegante: Puedes crear pipelines de datos encadenando generadores para transformaciones eficientes. ¡Deja de acumular datos y empieza a fluir con ellos usando yield! 馃殌馃捑 M谩s trucos de rendimiento y buenas pr谩cticas aqu铆 馃憞 馃帴 https://www.youtube.com/@josecodetech/




martes, 7 de abril de 2026

Programacion orientada a objetos con Python

 Hasta ahora le dec铆amos a Python: "haz esto, imprime aquello". Hoy vamos a cambiar las reglas del juego. 馃殌


Acabo de publicar una de las clases m谩s importantes del curso de Python: Programaci贸n Orientada a Objetos (POO). Si quieres crear aplicaciones robustas o videojuegos, necesitas dominar este concepto.

En este v铆deo te explico de forma s煤per visual:
馃彮 Qu茅 es una Clase (El molde o plano de la f谩brica).
馃 Qu茅 es un Objeto (El robot que nace de ese molde).
馃 C贸mo funciona el m茅todo __init__ y la palabra self.

Pasa de escribir simples instrucciones a crear entidades con vida propia y caracter铆sticas 煤nicas.

馃帴 Tienes la clase completa y paso a paso aqu铆:

¿Te animas a crear tu primera clase "Mascota" o "Coche" despu茅s de ver el v铆deo? ¡Te leo en los comentarios! 馃憞



s谩bado, 4 de abril de 2026

¡De programador a Cient铆fico de Datos! 馃殌 Mi nuevo libro de Scikit-Learn ya est谩 disponible.

¿Sientes que el Machine Learning es un mundo de matem谩ticas imposibles? He publicado "SCIKIT LEARN: Machine Learning Pr谩ctico con Python" para demostrarte que no es as铆. Este libro es el compa帽ero definitivo para mi curso gratuito.

Mientras en los v铆deos vemos la implementaci贸n en vivo, en el libro tienes la estructura te贸rica, las f贸rmulas explicadas y los flujos profesionales (como los Pipelines) para consultar a tu propio ritmo.

¿C贸mo aprender谩s?

Consigue tu copia  digital en Amazon: 馃憠 https://www.amazon.es/dp/B0CW17NBGM

¡Gracias por el apoyo de siempre! @josecodetech 馃懆‍馃捇 








jueves, 2 de abril de 2026

¡Crea clases de datos limpias y r谩pidas con dataclasses! 馃彈️✨

¿Sigues escribiendo clases simples para almacenar datos y te pasas la mitad del tiempo definiendo m茅todos repetitivos como __init__, __repr__, y __eq__?


Ese c贸digo "boilerplate" (repetitivo) hace que tus clases sean largas, dif铆ciles de leer y propensas a errores si a帽ades un campo nuevo y olvidas actualizar los m茅todos.

Mira este ejemplo tradicional de una clase Producto:

# ❌ M脡TODO ANTIGUO (Verboso y repetitivo)
class ProductoTradicional:
def __init__(self, nombre: str, precio: float, stock: int):
self.nombre = nombre
self.precio = precio
self.stock = stock

def __repr__(self):
# Necesario para que print() muestre algo 煤til
return f"Producto(nombre='{self.nombre}', precio={self.precio}, stock={self.stock})"

def __eq__(self, other):
# Necesario para comparar si dos productos son iguales
if not isinstance(other, ProductoTradicional):
return NotImplemented
return (self.nombre, self.precio, self.stock) == (other.nombre, other.precio, other.stock)

p1 = ProductoTradicional("Teclado", 49.99, 10)
print(p1) # Producto(nombre='Teclado', precio=49.99, stock=10)
¡Es demasiado c贸digo para algo tan simple! Python 3.7 introdujo la soluci贸n perfecta: el decorador @dataclass.


# ✅ CON DATACLASSES (Limpio y Autom谩tico ✨)
from dataclasses import dataclass

@dataclass
class ProductoModerno:
nombre: str
precio: float
stock: int

# ¡Python genera autom谩ticamente __init__, __repr__, __eq__ y m谩s!
p2 = ProductoModerno("Teclado", 49.99, 10)
print(p2) # ProductoModerno(nombre='Teclado', precio=49.99, stock=10)
print(p1 == p2) # False (son clases distintas, pero la comparaci贸n funciona)
¿Por qu茅 debes usar dataclasses?

Cero Boilerplate: Escribes solo los campos y sus tipos. Python se encarga del resto.

Legibilidad extrema: Tu clase se centra en los datos, no en la implementaci贸n de m茅todos est谩ndar.

Funciones avanzadas gratis: Puedes hacerlas inmutables f谩cilmente (frozen=True) o a帽adir ordenaci贸n autom谩tica (order=True).

¡Deja que Python escriba el c贸digo aburrido por ti y c茅ntrate en la l贸gica de tu aplicaci贸n! 馃殌馃彈️

M谩s trucos avanzados de Python aqu铆 馃憞





viernes, 27 de febrero de 2026

馃殌 ¡Domina GIT de una vez por todas y certifica tus conocimientos! 馃捇馃敟


Si trabajas escribiendo c贸digo (ya sea en equipo o t煤 solo), no saber usar GIT es como escribir un libro sin ir guardando los cambios. ¡Es la herramienta obligatoria para cualquier desarrollador!

Para ayudarte a dar el paso, acabo de activar el cup贸n JOSECODETECHFEB26 en mi curso "GIT para Desarrolladores" en Udemy. Con este enlace tienes garantizado el MEJOR PRECIO disponible y, al terminar, obtendr谩s tu Certificado Oficial de Udemy para lucir en tu curr铆culum o LinkedIn. 馃帗

馃憞 Aprovecha el descuento m谩ximo aqu铆: 馃敆 https://www.udemy.com/course/git-para-desarrolladores/?couponCode=JOSECODETECHFEB26


馃巵 ¿QUIERES M脕S RECURSOS GRATUITOS? Mi objetivo es que nunca dejes de aprender, por eso te recuerdo que tienes a tu disposici贸n:

馃搨 Mi Repositorio de GitHub: Todo el c贸digo y los ejemplos que utilizo en mis cursos est谩n en abierto para que los descargues y practiques por tu cuenta. 馃憠 https://github.com/josecodetech

馃摵 Mi Canal de YouTube: Decenas de v铆deos, tutoriales y cursos completos (¡como el de Machine Learning!) totalmente gratis. 馃憠 https://www.youtube.com/@josecodetech


馃檹 ¡UN PEQUE脩O FAVOR! Crear todo este contenido, tanto el gratuito como el premium, lleva much铆simas horas de dedicaci贸n. La mejor forma de apoyarme para que pueda seguir creando material es compartiendo esta publicaci贸n, recomend谩ndola a tus compa帽eros de sector, o simplemente dejando un "Me gusta" y un comentario. ¡Me ayuda much铆simo a llegar a m谩s gente! 馃攧馃挋

¡Nos vemos en la terminal de comandos! 馃懆‍馃捇馃懇‍馃捇




domingo, 15 de febrero de 2026

One Hot Encoding

 Estoy avanzando a toda m谩quina con la creaci贸n de mi nuevo curso de Machine Learning con Python, basado en mi pr贸ximo libro. Hoy he subido el Cap铆tulo 5 y quiero compartir un adelanto exclusivo con mi comunidad m谩s cercana, solo para suscriptores del canal.


En este episodio abordamos uno de los problemas m谩s comunes al preparar datos: ¿C贸mo hacemos que un algoritmo entienda palabras como "Rojo", "Verde" o "Azul"? 馃帹➡️馃敘

Las m谩quinas solo entienden n煤meros, y aqu铆 es donde entra en juego el One Hot Encoding.

馃殌 Estado del Curso:
El curso completo se lanzar谩 al p煤blico general en Mayo, pero si quieres ir aprendiendo y viendo el progreso paso a paso, ya puedes acceder al contenido de forma anticipada.

馃摻️ Mira el video 5 aqu铆: https://www.youtube.com/watch?v=cPF20XACsgM

¿Utiliz谩is get_dummies de Pandas o prefer铆s OneHotEncoder de Scikit-learn? En el v铆deo os cuento por qu茅 prefiero el segundo para producci贸n. 馃槈



martes, 10 de febrero de 2026

¡Haz tus funciones legibles con NamedTuple! 馃彿️馃

¿Alguna vez has tenido una funci贸n que devuelve varios valores y luego no recuerdas qu茅 era cada cosa?


# ❌ El problema: ¿Qu茅 es el 200? ¿Qu茅 es el 50?
resultado = obtener_dimensiones()
ancho = resultado[0]
alto = resultado[1]
Usar 铆ndices ([0], [1]) es confuso y propenso a errores. Podr铆as usar un diccionario, pero los diccionarios son mutables y m谩s pesados. ¡La soluci贸n elegante es NamedTuple!

NamedTuple te permite crear peque帽as estructuras de datos donde cada posici贸n tiene un nombre. Es como una tupla, ¡pero con etiquetas!

Mira la diferencia:

from typing import NamedTuple

# ✅ Definimos la estructura
class Dimensiones(NamedTuple):
ancho: int
alto: int
unidad: str

def obtener_pantalla():
return Dimensiones(1920, 1080, "px")

# ¡Ahora el c贸digo se explica solo!
pantalla = obtener_pantalla()

print(f"Resoluci贸n: {pantalla.ancho}x{pantalla.alto} {pantalla.unidad}")
# Salida: Resoluci贸n: 1920x1080 px
¿Por qu茅 usar NamedTuple?

Legibilidad total: Accedes por nombre (pantalla.ancho) no por 铆ndice.

Inmutable: Los datos no se pueden cambiar por accidente, lo que evita bugs.

Ligero: Consume mucha menos memoria que una clase normal o un diccionario.

Auto-completado: Tu editor de c贸digo (VS Code, PyCharm) te sugerir谩 los nombres de los campos.

¡Deja de adivinar qu茅 hay en la posici贸n [0] y empieza a usar nombres! 馃殌

M谩s trucos de Pythonic Code aqu铆 馃憞



domingo, 8 de febrero de 2026

Control de excepciones

 馃挜 ¿Tu programa de Python "explota" y se cierra cuando el usuario mete un dato incorrecto? ¡Qu茅 rabia!


Te ense帽o a ponerle una RED DE SEGURIDAD a tu c贸digo.
馃暩️ Aprende a usar try, except y finally para que tus aplicaciones sean profesionales y a prueba de fallos.

Cap铆tulo 9 馃憞https://youtu.be/uE8C2xkbHRw




s谩bado, 7 de febrero de 2026

馃枼️ Mi pantalla ahora mismo: El combo definitivo.



A la izquierda ▶️: El curso en v铆deo subi茅ndose al canal. A la derecha 馃摉: El manuscrito final del libro "Python Para Todos".

Llevo tiempo queriendo crear algo que cierre el c铆rculo del aprendizaje. A veces necesitas leer para entender la l贸gica y otras necesitas ver c贸mo se escribe el c贸digo en tiempo real.

Con este proyecto, no tienes que elegir. He sincronizado ambos mundos para llevarte de Cero a Programador sin que te pierdas en el camino.

Fijaos en la portada del libro... 馃 ¿Os gusta el estilo?

Ya falta muy poco para el lanzamiento oficial. Suscr铆bete al canal (link en la imagen) para ser el primero en enterarte.