domingo, 26 de octubre de 2025

Los Pilares Fundamentales para Empezar a Programar (y Dominar Cualquier Lenguaje)


¿Alguna vez te has sentido abrumado al ver la inmensa cantidad de lenguajes de programación que existen? Python, Java, JavaScript, C++, Go... la lista es interminable. La buena noticia es que, para empezar y avanzar con paso firme, no necesitas aprenderlos todos a la vez. Lo que realmente necesitas es dominar los fundamentos.

Piensa en la programación como construir una casa. Antes de preocuparte por el color de la pintura o el tipo de tejas (el lenguaje específico), necesitas asegurarte de que los cimientos sean sólidos. Esos cimientos son conceptos universales que encontrarás en casi cualquier lenguaje de programación.

Estos son los pilares esenciales que todo aspirante a programador debe dominar:

Variables y Constantes: Son como las cajas donde guardas información en tu programa. Las variables pueden cambiar su contenido, mientras que las constantes mantienen su valor fijo. Entender cómo declararlas, asignarles valores y utilizarlas es el primer paso para manipular datos.

Operadores: Las herramientas que te permiten realizar operaciones con tus variables y constantes. Hablamos de operadores aritméticos (sumar, restar), de comparación (mayor que, igual a) y lógicos (AND, OR, NOT), fundamentales para la toma de decisiones en tu código.

Estructuras Condicionales (if/else, switch): Aquí es donde tu programa empieza a "tomar decisiones". Te permiten ejecutar diferentes bloques de código basándose en si una condición es verdadera o falsa. Son el cerebro lógico de cualquier aplicación.

Bucles (for, while): ¿Necesitas repetir una tarea varias veces sin escribir el mismo código una y otra vez? Los bucles son tu solución. Son la clave para automatizar procesos y hacer que tu código sea eficiente y escalable.

Matrices / Listas / Arrays: Son colecciones de datos. Imagina una lista de la compra o una tabla de datos. Aprender a almacenar, acceder y manipular estos grupos de información es vital para trabajar con conjuntos de datos.

Métodos o Funciones: Las "recetas" o "mini-programas" que puedes crear para encapsular una tarea específica. Te permiten reutilizar código, organizar tu proyecto y hacer que sea mucho más fácil de leer y mantener.

El Camino Hacia la Programación Orientada a Objetos (POO):

Una vez que tengas una comprensión sólida de estos conceptos básicos, estarás en una posición inmejorable para dar el salto a paradigmas más avanzados como la Programación Orientada a Objetos (POO). La POO (con conceptos como Clases, Objetos, Herencia, Polimorfismo) te permitirá construir programas más modulares, escalables y fáciles de mantener, replicando el mundo real en tu código. Y lo mejor de todo, las bases que has aprendido se aplican directamente en este nuevo paradigma.

¡Empieza tu Viaje en la Programación Hoy Mismo!

Si estás listo para sentar estas bases de forma práctica y efectiva, te invito a explorar mi canal de YouTube, @josecodetech. Allí encontrarás tutoriales detallados y proyectos reales que te guiarán paso a paso a través de cada uno de estos fundamentos, preparándote para dominar cualquier lenguaje y afrontar los desafíos más avanzados de la programación.

No esperes más para construir los cimientos de tu futuro como programador.

Visita el canal: 🎥 https://www.youtube.com/@josecodetech








lunes, 13 de octubre de 2025

Tu portafolio digital: el arma secreta para destacar como programador

En el mundo de la programación, no basta con decir lo que sabes: hay que demostrarlo.

Tener un repositorio activo en GitHub y un canal de YouTube donde compartes tus proyectos y conocimientos te convierte en un perfil visible, valioso y con potencial real para las empresas.

📂 En mi caso, en GitHub.com/josecodetech encontrarás todos los códigos de los tutoriales y proyectos que publico en mi canal YouTube.com/@JoseCodeTech.

🎥 En el canal encontrarás contenido gratuito para aprender a programar desde cero, con ejemplos prácticos, retos y explicaciones claras, pensadas para todos los que aman la tecnología y quieren mejorar cada día.

💡 Si estás construyendo tu camino en el mundo tech, empieza hoy mismo:

  1. Crea tu repositorio.

  2. Comparte tus proyectos.

  3. Forma tu marca personal.
    Y si además te formas conmigo… ¡mejor aún! 😎





domingo, 12 de octubre de 2025

🧠 La irrupción de la IA en la programación


Cada vez escuchamos más que la inteligencia artificial “va a sustituir a los programadores”.

Desde mi punto de vista, eso no va a ocurrir. La IA no viene a quitarnos el trabajo, sino a potenciarlo. Es una herramienta más, tan poderosa como dependiente de quien la use.

Para aprovecharla de verdad necesitamos conocer bien las bases de la programación.

Muchas veces el código que genera la IA hay que revisarlo, adaptarlo y mejorarlo, y eso solo se consigue si entendemos lo que estamos haciendo y tenemos claro el objetivo que queremos alcanzar.

👉 Aprender IA sin dominar las bases de la programación es como intentar usar el último framework de moda sin conocer el lenguaje con el que debes programar.

Primero las bases, después las herramientas.

🔹 La IA acelera el desarrollo.

🔹 El programador aporta la lógica, la estructura y el sentido.

Y ahí está la clave: la IA no sustituye al programador, sino que amplía su capacidad.

El futuro no es “IA o programadores”, sino IA con programadores bien formados.

Si quieres aprender desde cero y paso a paso, en mi canal de YouTube https://www.youtube.com/@josecodetech encontrarás contenido gratuito para iniciarte en la programación con ejemplos reales, explicaciones sencillas y proyectos prácticos.




domingo, 5 de octubre de 2025

🚀 ¡Domina Visual Studio Code como un profesional!



¿Sabías que Visual Studio Code es uno de los IDE más potentes y versátiles para programar?
En este curso gratuito en YouTube aprenderás desde lo más básico hasta configuraciones avanzadas para trabajar con cualquier lenguaje.

💻 En este curso aprenderás a:
✅ Configurar correctamente el entorno de desarrollo
✅ Instalar y usar extensiones esenciales
✅ Personalizar la interfaz y los atajos
✅ Integrar Git y GitHub directamente en VS Code
✅ Mejorar tu productividad al programar

🎓 Ideal para estudiantes de DAM, DAW, programadores autodidactas o cualquier persona que quiera dominar este entorno profesional.

📺 Accede gratis al curso completo aquí:

🔥 ¡Aprende a dominar tu entorno de programación y lleva tu código al siguiente nivel!




domingo, 28 de septiembre de 2025

🎉 ¡Aprende a programar desde cero con Scratch! 🎉

¿Quieres dar tus primeros pasos en programación de forma fácil y divertida?

Con mi curso gratuito en YouTube descubrirás cómo crear proyectos, juegos y animaciones usando programación por bloques con Scratch.

🐱 Scratch es ideal para:
✅ Niños, jóvenes y adultos que quieran iniciarse en programación
✅ Estudiantes de DAM, ESO o Bachillerato
✅ Profesores que buscan material educativo
✅ Autodidactas que quieren aprender a programar jugando

📺 Disfruta el curso completo aquí 👉

💡 ¡Es gratuito, paso a paso y con proyectos prácticos que te harán amar la programación!



sábado, 9 de agosto de 2025

📌 Reto Python – Lógica y estructuras de control

Escribe una función en Python que reciba una lista de números enteros y devuelva:

  • Una nueva lista con los números únicos y ordenados de menor a mayor

  • El número que más se repite y cuántas veces aparece

Ejemplo de entrada:


[4, 2, 7, 4, 2, 9, 4, 1]

Salida esperada:


Lista ordenada única: [1, 2, 4, 7, 9] Número más frecuente: 4 (3 veces)

    📢 ¿Te animas a resolverlo?
    Publicaré la solución completa en mi canal de YouTube 👇
        🎥 youtube.com/@josecodetech

Ya tienes la solucion aqui:





domingo, 3 de agosto de 2025

🔐 Python Nivel 3 – Parte 5: Consumo de APIs con Autenticación (Tokens, Headers)

 

🎯 ¿Qué aprenderás?

✅ Cómo consumir APIs que requieren autenticación
✅ Diferencias entre APIs con tokens, headers o claves API
✅ Uso de tokens tipo JWT
✅ Ejemplo real con la API de CoinCap
✅ Cómo automatizar consultas autenticadas


🌍 API real: CoinCap (criptomonedas)

🔗 Documentación: https://docs.coincap.io/

Esta API ofrece cotizaciones de criptomonedas. Algunas rutas requieren autenticación con API Key vía encabezado.


📦 Paso 1: Instala requests


pip install requests

🔐 Paso 2: Crea una cuenta y consigue tu API KEY

  1. Ve a https://coincap.io/

  2. Crea cuenta gratuita

  3. Copia tu clave API


📄 Paso 3: Realiza consulta autenticada


import requests # Tu API Key Pro API_KEY = "TU_API_KEY" # URL de CoinCap Pro v3 url = f"https://rest.coincap.io/v3/assets/bitcoin?apiKey={API_KEY}" try: respuesta = requests.get(url) if respuesta.status_code == 200: datos = respuesta.json() # La estructura cambia en v3: datos dentro de "data" precio = float(datos['data']['priceUsd']) print(f"El precio actual de Bitcoin es: ${precio:.2f}") else: print("Error al obtener los datos de Bitcoin") print(f"Código de estado: {respuesta.status_code}") print(f"Mensaje de error: {respuesta.text}") except Exception as e: print("❌ Error de conexión:", e)

🔁 Automatizar la consulta

Puedes ejecutar el script cada hora o guardar el valor en un .txt para seguimiento:

import time
while True: r = requests.get(url, headers=headers) if r.ok: precio = r.json()["data"]["priceUsd"] print(f"[Auto] BTC: ${float(precio):,.2f}") time.sleep(3600) # cada hora

✅ ¿Y si la API usa JWT?

  • Algunas APIs envían un token JWT al hacer POST con usuario/clave.

  • Lo guardas y lo reutilizas en headers como:
    "Authorization": "Bearer TOKEN_JWT"

🔐 Recomendación: Usa variables de entorno o ficheros .env para guardar tus claves, no las pongas directo en el código.


🧠 Aplicaciones reales

✔️ Dashboards de precios en tiempo real
✔️ Integración con bots (Telegram, Discord, etc.)
✔️ Automatización de alertas económicas
✔️ Automatización de reportes o backups usando datos externos


📂 Código completo en GitHub:
github.com/josecodetech

🎥 Guía paso a paso en YouTube:
[Tu canal aquí]



martes, 29 de julio de 2025

🏢 Ejercicio Práctico en Python: Clase Ascensor y Uso desde un Script Principal

 

En este ejercicio práctico aprenderás a:

  • Crear una clase en un archivo independiente.

  • Implementar métodos para subir, bajar y consultar la planta.

  • Usar modularización para separar el código en dos scripts.


1. Estructura del Proyecto


/ascensor_proyecto ├── ascensor.py └── main.py

2. Código del archivo ascensor.py


class Ascensor: def __init__(self, planta_inicial=0, planta_maxima=10, planta_minima=0): self.planta = planta_inicial self.planta_maxima = planta_maxima self.planta_minima = planta_minima def subir(self): if self.planta < self.planta_maxima: self.planta += 1 print(f"Subiendo... ahora estás en la planta {self.planta}") else: print("Ya estás en la planta más alta.") def bajar(self): if self.planta > self.planta_minima: self.planta -= 1 print(f"Bajando... ahora estás en la planta {self.planta}") else: print("Ya estás en la planta más baja.") def ver_planta(self): print(f"Actualmente estás en la planta {self.planta}")

3. Código del archivo main.py


from ascensor import Ascensor ascensor1 = Ascensor(planta_inicial=0, planta_maxima=5, planta_minima=-1) ascensor1.ver_planta() ascensor1.subir() ascensor1.subir() ascensor1.ver_planta() ascensor1.bajar() ascensor1.bajar() ascensor1.bajar() ascensor1.ver_planta()

Salida esperada


Actualmente estás en la planta 0 Subiendo... ahora estás en la planta 1 Subiendo... ahora estás en la planta 2 Actualmente estás en la planta 2 Bajando... ahora estás en la planta 1 Bajando... ahora estás en la planta 0 Bajando... ahora estás en la planta -1 Actualmente estás en la planta -1

¿Qué has aprendido?

  • Modularización: separar la clase del programa principal.

  • POO en Python: uso de atributos y métodos.

  • Control de estados: mediante métodos como subir, bajar, ver_planta.


Próximos pasos

Prueba a añadir mejoras:

  • Limitar el número máximo de plantas dinámicamente.

  • Crear un menú interactivo que pida al usuario las acciones.

  • Añadir una cola de solicitudes para varias personas.


Código completo en GitHub:

github.com/josecodetech





domingo, 27 de julio de 2025

🌐 Python Nivel 3 – Parte 4: Manejo de APIs y Automatización de Consultas HTTP

 

🎯 ¿Qué aprenderás?

✅ Qué es una API y cómo funciona
✅ Cómo enviar peticiones HTTP desde Python (GET, POST, etc.)
✅ Cómo consumir datos en formato JSON
✅ Cómo automatizar consultas a servicios externos
✅ Cómo manejar errores y respuestas


🔍 ¿Qué es una API?

Una API (Interfaz de Programación de Aplicaciones) permite que dos sistemas se comuniquen. En la web, usamos API REST para acceder a datos, enviar formularios, consultar servicios, etc.


📦 Usando requests para consumir APIs

Primero, instala el módulo si no lo tienes:


pip install requests

✅ Ejemplo 1: Consultar una API pública (GET)


import requests url = "https://jsonplaceholder.typicode.com/posts/1" respuesta = requests.get(url) if respuesta.status_code == 200: datos = respuesta.json() print(f"Título: {datos['title']}") else: print("Error al consultar la API")

✅ Ejemplo 2: Enviar datos (POST)


import requests url = "https://jsonplaceholder.typicode.com/posts" nuevo_post = { "title": "Nuevo post", "body": "Contenido del post", "userId": 1 } respuesta = requests.post(url, json=nuevo_post) print(respuesta.json())

🔁 Automatizar llamadas a una API

Puedes combinar esto con el programador de tareas de Windows o un bucle para automatizar la consulta de datos:


import time while True: r = requests.get("https://api.exchangerate-api.com/v4/latest/USD") if r.ok: euro = r.json()["rates"]["EUR"] print(f"1 USD = {euro} EUR") time.sleep(3600) # espera 1 hora

🛑 Manejo de errores y excepciones


try: respuesta = requests.get("https://api.fallida.com/data") respuesta.raise_for_status() print(respuesta.json()) except requests.exceptions.HTTPError as e: print("Error HTTP:", e) except requests.exceptions.RequestException as e: print("Error general:", e)

🧠 Aplicaciones comunes

  • Consultar precios de criptomonedas o monedas

  • Obtener el clima actual

  • Enviar formularios automáticamente

  • Automatizar tareas de scraping de datos

  • Consultar servicios internos de una empresa


📂 Código en GitHub:
github.com/josecodetech

🎥 Tutorial en YouTube:
https://youtu.be/LgJQW_fbZeY



sábado, 26 de julio de 2025

⚙️ Python Nivel 3 – Parte 3: Automatización de tareas con Scripts en Windows

🎯 ¿Qué aprenderás en esta parte?

✅ Qué es un script en Python
✅ Cómo automatizar tareas usando el Programador de tareas de Windows
✅ Aplicaciones útiles:

  • Limpieza de archivos

  • Generación de backup

  • ✅ Cómo registrar logs y controlar errores


🧾 ¿Qué es un script en Python?

Un script es un archivo .py que ejecuta automáticamente una serie de acciones. Por ejemplo:

🧹 Script 1: Limpiar archivos .log automáticamente


# limpiar_logs.py import os carpeta = "C:/Users/TU_USUARIO/Documentos/logs/" for archivo in os.listdir(carpeta): if archivo.endswith(".log"): os.remove(os.path.join(carpeta, archivo)) print("Limpieza de archivos .log completada.")

🛠️ ¿Cómo ejecutar este script automáticamente en Windows?

🪟 Paso 1: Guarda el script .py

Guarda el archivo con el nombre limpiar_logs.py en una carpeta segura. Ejemplo:
C:\scripts\limpiar_logs.py


🧭 Paso 2: Localiza tu ejecutable de Python

Por ejemplo:
C:\Users\TU_USUARIO\AppData\Local\Programs\Python\Python311\python.exe
(Cambia según tu versión)


📅 Paso 3: Abre el Programador de tareas

  1. Pulsa Windows + S y escribe Programador de tareas

  2. Haz clic en "Crear tarea básica"


🔧 Paso 4: Crea la tarea

  1. Nombre: Limpieza de archivos log

  2. Desencadenador: Diario, y elige una hora (por ejemplo, 3:00 AM)

  3. Acción: “Iniciar un programa”

    • Programa: ruta a python.exe

    • Argumentos: ruta al script → C:\scripts\limpiar_logs.py

    • Iniciar en: carpeta donde está el script (ej. C:\scripts\)


✅ Paso 5: Guarda y prueba la tarea

  • Puedes ejecutarla manualmente desde el programador: clic derecho → Ejecutar

  • Revisa que borre los archivos .log correctamente


📦 Ejemplo 2: Script para crear backups de carpetas


# backup_diario.py import shutil import datetime import os origen = "C:/Users/TU_USUARIO/Documentos/Importante/" destino_base = "C:/Users/TU_USUARIO/Respaldo/" fecha = datetime.datetime.now().strftime("%Y-%m-%d") destino = os.path.join(destino_base, f"respaldo_{fecha}") shutil.copytree(origen, destino) print(f"Backup realizado: {destino}")

Este script copiará todo el contenido de una carpeta en otra, añadiendo la fecha.


📔 ¿Cómo registrar errores y guardar logs?

Agrega esto a tus scripts:


import logging logging.basicConfig(filename='C:/scripts/logs/backup.log', level=logging.INFO) try: # tu código aquí logging.info("Backup completado correctamente") except Exception as e: logging.error(f"Error durante el respaldo: {e}")

🧠 Aplicaciones prácticas

  • 🧹 Limpieza de archivos temporales o logs antiguos

  • 📦 Backups automáticos de bases de datos, carpetas, etc.

  • 📊 Generación diaria de reportes

  • 📬 Envío automático de correos (con smtplib)

  • 🧪 Ejecución de scripts de análisis de datos o scraping


🔒 Recomendaciones

✅ Crea una carpeta tipo C:\scripts\ para tus scripts
✅ Usa rutas absolutas en Windows (C:/...)
✅ Agrega logs para saber si falló
✅ Protege tus scripts con permisos si son sensibles
✅ Puedes combinar con .bat si prefieres ejecutables


https://www.youtube.com/watch?v=aDJXoQnddG0

lunes, 21 de julio de 2025

✅ Python Nivel 3 – Parte 2: Programación Orientada a Objetos Avanzada

 🔒 1. Encapsulamiento

Es un principio de la programación orientada a objetos que protege los datos internos de una clase, restringiendo el acceso directo a ellos.

🧪 Ejemplo:


class Usuario: def __init__(self, nombre): self.__nombre = nombre # atributo privado (doble guión bajo) def obtener_nombre(self): return self.__nombre

¿Qué significa __nombre?
El doble guión bajo convierte el atributo en privado, es decir, no se puede acceder directamente desde fuera de la clase (usuario.__nombre dará error).

👉 Se accede mediante métodos públicos, como obtener_nombre().


🏷️ 2. Uso de @property y @setter

Permite controlar cómo se accede y modifica un atributo, manteniendo la sintaxis simple como si fuera público.

🧪 Ejemplo:


class Producto: def __init__(self, precio): self._precio = precio # protegido @property def precio(self): return self._precio @precio.setter def precio(self, nuevo_precio): if nuevo_precio >= 0: self._precio = nuevo_precio

Ventaja:
Permite hacer validaciones al asignar o leer atributos, manteniendo una interfaz clara:


p = Producto(100) p.precio = 150 # Usa el setter print(p.precio) # Usa el getter

🔁 3. Métodos Especiales (Magic Methods)

Son métodos que comienzan y terminan con __. Python los usa para sobrecargar operadores y personalizar comportamientos.

✅ Ejemplos útiles:

Método¿Qué hace?
__str__Representación en print()
__len__Permite usar len(obj)
__eq__Permite usar obj1 == obj2
__add__Permite usar obj1 + obj2

🧪 Ejemplo de __str__:


class Punto: def __init__(self, x, y): self.x = x self.y = y def __str__(self): return f"Punto({self.x}, {self.y})" p = Punto(1, 2) print(p) # Imprime: Punto(1, 2)

🧱 4. Principios SOLID aplicados a Python

Estos principios ayudan a diseñar código mantenible, limpio y escalable.

🧩 Explicación de cada uno:

  • S – Single Responsibility
    Cada clase debe tener una única responsabilidad. No mezcles lógica de base de datos con lógica de interfaz, por ejemplo.

  • O – Open/Closed
    Las clases deben estar abiertas a extensión pero cerradas a modificación. Usa herencia o composición en lugar de cambiar código existente.

  • L – Liskov Substitution
    Una subclase debe poder reemplazar a su clase padre sin alterar el comportamiento del programa.

  • I – Interface Segregation
    No fuerces a una clase a implementar métodos que no necesita. Divide interfaces en bloques más pequeños si hace falta.

  • D – Dependency Inversion
    No dependas de clases concretas, sino de abstracciones. Usa interfaces o clases base cuando sea posible.


🏦 5. Ejemplo completo con todo lo aprendido


class CuentaBancaria: def __init__(self, titular, saldo=0): self.titular = titular self._saldo = saldo def depositar(self, cantidad): self._saldo += cantidad def retirar(self, cantidad): if cantidad <= self._saldo: self._saldo -= cantidad def __str__(self): return f"{self.titular} - Saldo: €{self._saldo}"
  • Usa encapsulamiento (_saldo)

  • Tiene métodos claros y separados

  • Usa __str__ para mostrar el objeto de forma legible

  • Cumple con el principio SRP (una clase → una tarea)