<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos Arturo Castaño G.</title>
    <description>The latest articles on DEV Community by Carlos Arturo Castaño G. (@carlos_arturocastaog_).</description>
    <link>https://dev.to/carlos_arturocastaog_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4015461%2F7354aa68-baa2-4bf9-8706-7180b83e9845.jpg</url>
      <title>DEV Community: Carlos Arturo Castaño G.</title>
      <link>https://dev.to/carlos_arturocastaog_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carlos_arturocastaog_"/>
    <language>en</language>
    <item>
      <title>¿Por qué llamarle "Inteligencia" a un LLM es un extremo estadístico? Una perspectiva tras décadas en redes neuronales.</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sun, 04 Oct 2026 15:14:58 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/por-que-llamarle-inteligencia-a-un-llm-es-un-extremo-estadistico-una-perspectiva-tras-decadas-32o4</link>
      <guid>https://dev.to/carlos_arturocastaog_/por-que-llamarle-inteligencia-a-un-llm-es-un-extremo-estadistico-una-perspectiva-tras-decadas-32o4</guid>
      <description>&lt;p&gt;Como profesional que ha trabajado con &lt;strong&gt;redes neuronales determinísticas y sistemas de e-learning desde hace ya varias décadas&lt;/strong&gt;, observo el panorama actual de la Inteligencia Artificial con una mezcla de profunda admiración y escepticismo terminológico. &lt;/p&gt;

&lt;p&gt;En los inicios de estas arquitecturas, a ninguno de nosotros se nos habría ocurrido pensar, ni por asomo, que allí dentro residía una "inteligencia en sí misma". Sabíamos exactamente lo que eran: aproximadores de funciones, álgebra lineal y optimización estadística.&lt;/p&gt;

&lt;p&gt;Hoy en día reconozco plenamente las bondades de los Modelos de Lenguaje Grandes (LLMs). De hecho, los utilizo casi a diario para múltiples objetivos: desde la generación y estructuración de texto, pasando por la creación de videos y conversiones, hasta el soporte en tareas de programación. No cabe duda de que estamos ante &lt;strong&gt;una de las propuestas y avances más disruptivos de los últimos tiempos&lt;/strong&gt;. Pero usar la IA como una herramienta extraordinaria es una cosa; atribuirle "inteligencia" real es algo muy diferente.&lt;/p&gt;

&lt;p&gt;A menos que estemos dispuestos a relajar el término por completo (y caigamos en derivaciones laxas como inteligencia colectiva, inteligencia emocional o incluso inteligencia muscular), considero que catalogar a un LLM como inteligente es irse por las ramas. &lt;/p&gt;

&lt;p&gt;Nadie diría jamás que &lt;strong&gt;Microsoft Excel&lt;/strong&gt; es inteligente, a pesar de su abrumadora capacidad de cálculo matemático en milisegundos. ¿Por qué con los LLMs cambiamos el estándar?&lt;/p&gt;

&lt;p&gt;A continuación, comparto mis apreciaciones técnicas sobre por qué considero que estamos ante un malentendido conceptual derivado de la escala y el lenguaje:&lt;/p&gt;




&lt;h2&gt;
  
  
  1. El truco de la compresión de patrones vs. La comprensión semántica.
&lt;/h2&gt;

&lt;p&gt;Lo que hoy nos sorprende de los modelos modernos no es la aparición de un "ánima" o consciencia, sino el resultado de llevar el cómputo y el volumen de datos a escalas antes impensables. Al entrenar un modelo con billones de parámetros, la red neuronal no solo memoriza; genera una &lt;strong&gt;compresión estadística masiva&lt;/strong&gt; de las relaciones entre las palabras escritas por la humanidad.&lt;/p&gt;

&lt;p&gt;El sistema calcula probabilísticamente cuál es el siguiente &lt;em&gt;token&lt;/em&gt; óptimo basándose en un contexto matemático. Resuelve problemas complejos conectando puntos distantes dentro de sus pesos ponderados, lo cual emula un proceso de razonamiento. Sin embargo, no hay introspección ni comprensión real del fondo; hay una perfecta asimilación de la &lt;strong&gt;forma del lenguaje&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. El sesgo del antropomorfismo:
&lt;/h2&gt;

&lt;p&gt;El "Efecto Excel" con esteroides¿Por qué nos cuesta tanto ver a la IA como vemos a una hoja de cálculo? La respuesta está en la interfaz. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Con Excel:&lt;/strong&gt; Interactuamos mediante fórmulas y celdas rígidas. La abstracción matemática es evidente a la vista, por lo que entendemos la herramienta como un sistema puramente determinista.* &lt;strong&gt;Con los LLMs:&lt;/strong&gt; La interfaz es el lenguaje humano. Estamos evolutivamente cableados para asumir que si algo nos responde usando la primera persona ("yo"), estructurando argumentos impecables y simulando empatía, obligatoriamente debe existir un sujeto consciente detrás de la pantalla. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El modelo domina el vehículo del pensamiento humano (el lenguaje), y eso nos genera la ilusión cognitiva de que también posee la esencia del pensamiento.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Inteligencia Colectiva Cristalizada:
&lt;/h2&gt;

&lt;p&gt;El verdadero valorSi definimos la inteligencia bajo los estándares de la psicología cognitiva y la filosofía clásica —requiriendo &lt;strong&gt;intencionalidad, agencia propia, autoconsciencia y comprensión semántica real&lt;/strong&gt;—, la IA generativa actual está completamente fuera de la definición. &lt;/p&gt;

&lt;p&gt;Sin embargo, tu planteamiento sobre la &lt;strong&gt;inteligencia colectiva&lt;/strong&gt; da en el clavo. Un LLM no es un ente inteligente autónomo; es un &lt;strong&gt;espejo estadístico&lt;/strong&gt; del conocimiento digitalizado de millones de seres humanos. Cuando un desarrollador usa un modelo para optimizar código, no está colaborando con una entidad; está accediendo a un destilado algorítmico del pensamiento acumulado de la comunidad global. La inteligencia sigue estando del lado de quien formula la pregunta y sabe qué hacer con la respuesta; el modelo es solo una palanca cognitiva sumamente potente.&lt;/p&gt;




&lt;h2&gt;
  
  
  La magia sigue siendo nuestra.
&lt;/h2&gt;

&lt;p&gt;Estamos ante una herramienta disruptiva y fascinante que está transformando el desarrollo de software y la educación (e-learning). Sin embargo, la verdadera hazaña tecnológica no es que las máquinas hayan aprendido a "pensar", sino que los seres humanos hayamos sido capaces de empaquetar, estructurar y comprimir nuestro propio pensamiento colectivo dentro de una arquitectura de software.&lt;/p&gt;

&lt;p&gt;Al final del día, las redes neuronales siguen respondiendo a los mismos principios matemáticos que analizábamos hace décadas, solo que ahora cuentan con el combustible de una infraestructura de hardware monumental.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;¿Cuál es tu apreciación respecto al tema?&lt;/strong&gt; Como desarrolladores, ingenieros o investigadores, ¿creen que hemos relajado demasiado el término "inteligencia" por puro marketing, o consideran que la capacidad de resolución de problemas de los LLMs ya justifica una nueva definición? ¡Abramos el debate en los comentarios! 👇&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>discuss</category>
      <category>architecture</category>
    </item>
    <item>
      <title>De pájaros a pantallas: El sorprendente origen de la palabra "Chat"</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sun, 04 Oct 2026 14:41:47 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/de-pajaros-a-pantallas-el-sorprendente-origen-de-la-palabra-chat-f7b</link>
      <guid>https://dev.to/carlos_arturocastaog_/de-pajaros-a-pantallas-el-sorprendente-origen-de-la-palabra-chat-f7b</guid>
      <description>&lt;p&gt;Como desarrolladores, pasamos una parte enorme de nuestras vidas interactuando con un &lt;strong&gt;"chat"&lt;/strong&gt;. Construimos aplicaciones de mensajería usando WebSockets, integramos interfaces conversacionales impulsadas por LLMs, usamos Slack o Microsoft Teams para las &lt;em&gt;stand-ups&lt;/em&gt; diarias y miramos el chat de Twitch o YouTube cuando queremos relajarnos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl6dvdx8w5dmqu5shngb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl6dvdx8w5dmqu5shngb7.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La palabra se ha vuelto tan omnipresente que ahora se utiliza incluso como un sustantivo colectivo. Los &lt;em&gt;streamers&lt;/em&gt; se dirigen a miles de espectadores con un simple &lt;em&gt;"¡Hola, chat!"&lt;/em&gt;, y las generaciones más jóvenes ya lo usan en la vida real para hablarle a un grupo de amigos (&lt;em&gt;"¿Esto es en serio, chat?"&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;El término se ha desgastado tanto que ha perdido su sentido original. Pero, ¿alguna vez te has preguntado de dónde salió realmente?&lt;/p&gt;

&lt;p&gt;La respuesta no tiene absolutamente nada que ver con computadoras, código o redes: viene directamente de la naturaleza.&lt;br&gt;
---## 1. El sonido de las aves (Siglo XV)Mucho antes de que existieran los protocolos de internet o los teclados, la palabra se originó como una abreviatura del verbo en inglés antiguo &lt;strong&gt;"chatter"&lt;/strong&gt; (que significaba parlotear o hacer sonidos rápidos y repetitivos).&lt;/p&gt;

&lt;p&gt;Esta palabra nació como una &lt;strong&gt;onomatopeya&lt;/strong&gt;: una imitación literal del sonido agudo y constante (&lt;em&gt;chat-chat-chat&lt;/em&gt;) que hacen los pájaros al comunicarse entre sí en los árboles.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. De la "cháchara" a la pantalla digital (Siglos XVI al XX)
&lt;/h2&gt;

&lt;p&gt;Con el paso de los siglos, los angloparlantes acortaron &lt;em&gt;chatter&lt;/em&gt; y lo convirtieron simplemente en &lt;strong&gt;"chat"&lt;/strong&gt;. Dejó de aplicarse a los animales y evolucionó para describir una &lt;strong&gt;conversación humana informal, ligera y espontánea&lt;/strong&gt;. Era el equivalente a lo que en español conocemos como "echar el chisme", tener una "plática casual" o hablar por hablar café de por medio.&lt;/p&gt;

&lt;p&gt;El gran salto al ecosistema digital ocurrió en &lt;strong&gt;1988&lt;/strong&gt;. Un científico finlandés llamado &lt;strong&gt;Jarkko Oikarinen&lt;/strong&gt; inventó &lt;strong&gt;IRC (Internet Relay Chat)&lt;/strong&gt;, el primer protocolo que permitió a personas de todo el mundo comunicarse por texto en tiempo real.&lt;/p&gt;

&lt;p&gt;Oikarinen eligió la palabra &lt;em&gt;chat&lt;/em&gt; deliberadamente de forma metafórica. Quería que las interacciones basadas en texto se sintieran relajadas, informales e inmediatas, marcando un fuerte contraste con la estructura lenta y formal del correo electrónico de la época.&lt;/p&gt;

&lt;p&gt;[ Aves cantando (Chatter) ] ──&amp;gt; [ Plática casual (Chat) ] ──&amp;gt; [ Protocolo IRC (1988) ] ──&amp;gt; [ Interfaces Modernas / IA ]&lt;/p&gt;

&lt;h2&gt;
  
  
  3. El "chat" hoy: Hablándole a una mente colmena
&lt;/h2&gt;

&lt;p&gt;Hoy en día, el significado ha mutado por completo. Con el auge de las plataformas de &lt;em&gt;streaming&lt;/em&gt;, &lt;strong&gt;"chat" pasó de ser un verbo (una acción) a un sustantivo singular (un sujeto)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cuando un creador de contenido mira a la cámara y dice: &lt;em&gt;"¿Qué opinan, chat?"&lt;/em&gt;, está tratando a un muro de texto que se mueve a toda velocidad, generado por miles de seres humanos individuales, como una sola entidad colectiva. Es la personificación definitiva de una interfaz digital.&lt;/p&gt;

&lt;h2&gt;
  
  
  En el fondo, seguimos parloteando
&lt;/h2&gt;

&lt;p&gt;Irónicamente, una palabra que comenzó imitando el ruido de las aves en el bosque ahora define la forma en que la humanidad colabora, escribe código e interactúa con la Inteligencia Artificial en el siglo XXI.&lt;/p&gt;

&lt;p&gt;La próxima vez que abras una terminal, construyas una interfaz de usuario conversacional o lances un &lt;em&gt;prompt&lt;/em&gt; a un LLM, recuerda que en el fondo seguimos "parloteando" exactamente igual que lo hacían los pájaros hace seis siglos.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;¿Y tú qué opinas?&lt;/strong&gt; ¿Crees que la palabra "chat" ha perdido su significado real por completo o es solo la evolución natural del lenguaje dentro de la cultura tecnológica? ¡Nos leemos en los comentarios! 👇&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>discuss</category>
      <category>history</category>
      <category>spanish</category>
    </item>
    <item>
      <title>El cifrado whatsapp funciona. Entonces, ¿por qué se filtran los chats?</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Wed, 30 Sep 2026 00:18:09 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/por-que-se-filtran-los-chats-si-whatsapp-es-seguro-26nh</link>
      <guid>https://dev.to/carlos_arturocastaog_/por-que-se-filtran-los-chats-si-whatsapp-es-seguro-26nh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrw9zszptyzzerr3148i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrw9zszptyzzerr3148i.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En Colombia se ha vuelto casi diaria la aparición de pantallazos y audios de chats de exfuncionarios, congresistas, militares y magistrados. La pregunta que más se repite es: &lt;em&gt;"¿no que WhatsApp tenía cifrado de extremo a extremo?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lo tiene, y funciona. El problema es otro, y es un buen caso para repasar &lt;strong&gt;qué protege realmente el E2E&lt;/strong&gt; y dónde está el perímetro de confianza.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modelo de amenazas en una línea
&lt;/h2&gt;

&lt;p&gt;E2E protege el canal, no los endpoints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Teléfono A] ══ mensaje cifrado ══&amp;gt; [Servidor] ══ mensaje cifrado ══&amp;gt; [Teléfono B]
   texto plano                    (no puede leerlo)                     texto plano
   ▲                                                                       ▲
   └── aquí ocurre casi toda la fuga ──────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nadie en el camino (la empresa, el ISP, alguien interceptando la señal) puede leer el contenido. Pero en cada extremo el mensaje está en claro, y ahí el cifrado ya no aplica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vectores de fuga reales
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vector&lt;/th&gt;
&lt;th&gt;¿Rompe el cifrado?&lt;/th&gt;
&lt;th&gt;Comentario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Contraparte legítima (captura, reenvío, exportar chat)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Es un destinatario autorizado. Es el vector más común&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dispositivo incautado y análisis forense&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Se lee el contenido ya descifrado en el equipo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backups en la nube (Google Drive / iCloud)&lt;/td&gt;
&lt;td&gt;Depende&lt;/td&gt;
&lt;td&gt;No están cifrados E2E por defecto en WhatsApp; hay que activarlo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sesiones vinculadas (WhatsApp Web, escritorio)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Una sesión olvidada expone el historial completo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spyware tipo Pegasus&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Lee lo que el usuario ve, directamente en el equipo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metadatos&lt;/td&gt;
&lt;td&gt;No aplican&lt;/td&gt;
&lt;td&gt;Quién habla con quién, cuándo y con qué frecuencia no está cifrado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ninguna fila requiere romper criptografía. Es ingeniería social, acceso físico o mala configuración.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué salen "en cascada"
&lt;/h2&gt;

&lt;p&gt;Un solo teléfono contiene decenas de conversaciones. Al obtener el dispositivo de un nodo central (un asesor, un jefe de gabinete, un militar), aparecen todos sus interlocutores. Es el equivalente a comprometer un nodo con muchas aristas en un grafo: el radio de impacto es enorme.&lt;/p&gt;

&lt;p&gt;A eso se suma el incentivo: tras un cambio de gobierno, los antiguos aliados pasan a ser contrapartes, y entregar chats sirve como moneda de negociación.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Cambiar de app lo arregla?
&lt;/h2&gt;

&lt;p&gt;Ayuda, pero no elimina el problema.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;E2E&lt;/th&gt;
&lt;th&gt;Nota&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp&lt;/td&gt;
&lt;td&gt;Por defecto&lt;/td&gt;
&lt;td&gt;Backups en nube sin cifrar salvo que se active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal&lt;/td&gt;
&lt;td&gt;Por defecto&lt;/td&gt;
&lt;td&gt;Menos metadatos; suele considerarse la referencia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telegram&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Solo en "chats secretos" 1 a 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chats normales y grupos &lt;strong&gt;no&lt;/strong&gt; son E2E; quedan en servidores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line&lt;/td&gt;
&lt;td&gt;En texto (Letter Sealing)&lt;/td&gt;
&lt;td&gt;Menos auditada&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El error más común: creer que Telegram es "más seguro" y usar chats normales para cosas sensibles. Ahí ni siquiera hay E2E.&lt;/p&gt;

&lt;p&gt;Y el ejemplo perfecto de que la mejor app no salva del error humano: en 2025, altos funcionarios de EE. UU. coordinaron temas militares por Signal y agregaron a un periodista por error. El cifrado funcionó bien; el fallo fue de proceso.&lt;/p&gt;

&lt;h2&gt;
  
  
  La autenticidad es otro problema
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Una captura de pantalla se falsifica en minutos.&lt;/li&gt;
&lt;li&gt;Un audio se puede editar o clonar con IA.&lt;/li&gt;
&lt;li&gt;Lo que tiene valor probatorio es la extracción forense del dispositivo original con cadena de custodia, no la imagen que circula en redes.&lt;/li&gt;
&lt;li&gt;Las filtraciones son selectivas: quien filtra decide qué y cuándo publicar, y un fragmento sin contexto puede cambiar su sentido.&lt;/li&gt;
&lt;li&gt;Material obtenido por interceptación ilegal puede ser inadmisible como prueba, aunque sea cierto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist práctico
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Activar &lt;strong&gt;mensajes temporales&lt;/strong&gt; en chats sensibles.&lt;/li&gt;
&lt;li&gt;Activar el &lt;strong&gt;respaldo cifrado&lt;/strong&gt; de WhatsApp o desactivar los backups.&lt;/li&gt;
&lt;li&gt;Revisar &lt;strong&gt;Dispositivos vinculados&lt;/strong&gt; y cerrar sesiones desconocidas.&lt;/li&gt;
&lt;li&gt;Bloqueo de pantalla fuerte y sistema operativo actualizado.&lt;/li&gt;
&lt;li&gt;Separar dispositivos personales y de trabajo.&lt;/li&gt;
&lt;li&gt;Regla base: &lt;strong&gt;no escribas por chat nada que no estés dispuesto a ver publicado&lt;/strong&gt;, porque el otro extremo siempre puede exportarlo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Como desarrolladores sabemos que un sistema es tan seguro como su eslabón más débil. Aquí el cifrado está bien implementado; lo que falla es el factor humano, la gestión de dispositivos y la configuración por defecto.&lt;/p&gt;

&lt;p&gt;La próxima vez que alguien diga "WhatsApp no es seguro", vale la pena preguntarle &lt;strong&gt;qué parte del modelo de amenazas&lt;/strong&gt; está mirando.&lt;/p&gt;

&lt;p&gt;¿Qué otros vectores agregarían? Los leo en los comentarios.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>security</category>
      <category>privacy</category>
      <category>cybersecurity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>JEV: el "modelo" que no genera texto, sino decisiones (y por qué me interesa para facturación)</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Wed, 23 Sep 2026 15:51:07 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/jev-el-modelo-que-no-genera-texto-sino-decisiones-y-por-que-me-interesa-para-facturacion-29lb</link>
      <guid>https://dev.to/carlos_arturocastaog_/jev-el-modelo-que-no-genera-texto-sino-decisiones-y-por-que-me-interesa-para-facturacion-29lb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8ckac8n2zg92uwr2uol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8ckac8n2zg92uwr2uol.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando hablamos de IA en 2026 lo primero que se nos viene a la cabeza son los LLM conversacionales: ChatGPT, Gemini, Grok, Claude. Herramientas pensadas para generar texto, imágenes, vídeo, mantener una charla. Pero hay una categoría distinta que vale la pena conocer si programas: &lt;strong&gt;JEV&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es JEV?
&lt;/h2&gt;

&lt;p&gt;JEV no es un LLM convencional. No conversa, no redacta, no alucina creativamente. Es, en esencia, &lt;strong&gt;un asistente de toma de decisiones&lt;/strong&gt;: dado un contexto en lenguaje natural, devuelve una respuesta dentro de un rango determinista de opciones (sí/no, una elección entre varias, un score).&lt;/p&gt;

&lt;p&gt;La idea nace de un problema real: usar un LLM grande para tomar decisiones simples (¿esta factura es urgente?, ¿este pago es sospechoso?) funciona, pero es lento, caro y requiere bastante gestión por parte del programador — normalmente forzando al modelo a responder en JSON.&lt;/p&gt;

&lt;p&gt;JEV ataca justo ese caso de uso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo encaja en el código
&lt;/h2&gt;

&lt;p&gt;No es un chatbot ni un endpoint que "converses". Se integra en el diseño del programa como una estructura condicional más , algo parecido a un &lt;code&gt;if/else&lt;/code&gt; o un &lt;code&gt;switch/case&lt;/code&gt;,  con la diferencia de que el criterio de decisión se le pasa en lenguaje natural en lugar de código.&lt;/p&gt;

&lt;p&gt;Al ser determinista dentro de un rango de salidas predeterminado, no inventa respuestas nuevas ni se desvía del formato esperado. Eso lo hace mucho más fácil de integrar en un flujo de producción que un LLM generativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ventajas técnicas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Velocidad&lt;/strong&gt;: decisiones en 70–500 ms, muy por debajo de lo que tarda un LLM convencional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costo&lt;/strong&gt;: del orden de $0.042 por millón de tokens de entrada, con salida gratuita — entre 4x y 7x más barato que otros modelos para este tipo de tarea.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Determinismo&lt;/strong&gt;: no alucina ni improvisa; las respuestas están acotadas al rango de opciones definido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confianza&lt;/strong&gt;: cada respuesta viene con un score de confianza, lo que permite definir umbrales para decidir qué se automatiza y qué pasa a revisión humana.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ejemplo de integración
&lt;/h2&gt;

&lt;p&gt;La llamada se hace por POST al endpoint &lt;code&gt;https://api.typesafe.ai/v1/systemone&lt;/code&gt;, con el modelo &lt;code&gt;jev-latest&lt;/code&gt;. Hay SDKs oficiales para Python y JavaScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.typesafe.ai/v1/systemone&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer TU_CLAVE_API&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;invoice_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jev-latest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;context&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Factura con ID #12345 por $2,500, cliente recurrente, vencimiento en 15 días&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;questions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;¿Esta factura requiere revisión manual?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;options&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sí&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;¿Qué tan urgente es esta factura (0-10)?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;invoice_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sí&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;send_to_manual_review&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;invoice_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;12345&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;process_automatically&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;invoice_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;12345&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Casos de uso en un sistema de facturación
&lt;/h2&gt;

&lt;p&gt;Pensando en un backend de facturación típico, JEV podría encargarse de:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clasificación de facturas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detectar facturas urgentes&lt;/li&gt;
&lt;li&gt;Clasificar por tipo de cliente (nuevo, recurrente, corporativo)&lt;/li&gt;
&lt;li&gt;Identificar facturas con posibles inconsistencias&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Procesamiento de pagos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aprobar o rechazar pagos según criterios predefinidos&lt;/li&gt;
&lt;li&gt;Detectar transacciones sospechosas&lt;/li&gt;
&lt;li&gt;Decidir si un pago requiere revisión manual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enrutamiento&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dirigir facturas a contabilidad vs. ventas&lt;/li&gt;
&lt;li&gt;Asignar según monto o tipo de producto&lt;/li&gt;
&lt;li&gt;Escalar a especialistas según la complejidad del caso&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lo que hay que tener presente
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacidad&lt;/strong&gt;: la información viaja a los servidores de TypeSafe. Con datos financieros sensibles, esto merece una evaluación cuidadosa antes de integrarlo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No reemplaza a los LLM&lt;/strong&gt;: JEV no compite con Claude o GPT para tareas de razonamiento complejo; los complementa. La idea es usar JEV para las decisiones rápidas y repetitivas, y dejar el LLM grande para lo que realmente requiere razonamiento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sin versión local o gratuita&lt;/strong&gt; (por ahora): funciona por suscripción vía plataformas de pago. Dado lo bajo del costo, vale la pena evaluar si de todas formas compensa una alternativa local.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentación limitada&lt;/strong&gt;: al ser una herramienta nueva, la información disponible todavía es escasa — vale la pena seguirle la pista.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Si tu sistema toma decisiones binarias o de rango acotado de forma constante , clasificar, aprobar/rechazar, enrutar , meter un LLM completo para eso es matar moscas a cañonazos. JEV apunta a llenar ese hueco: rápido, barato y determinista, pensado para vivir embebido en la lógica de la aplicación en lugar de detrás de un chat.&lt;/p&gt;

&lt;p&gt;Más info en el blog de TypeSafe: &lt;a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" rel="noopener noreferrer"&gt;https://typesafe.ai/blog/introducing-system-one-models-and-jev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ia</category>
      <category>javascript</category>
      <category>backend</category>
      <category>facturacion</category>
    </item>
    <item>
      <title>IA para todos: Cuando la herramienta deja de ser el diferenciador</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Mon, 21 Sep 2026 02:13:07 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/ia-para-todos-cuando-la-herramienta-deja-de-ser-el-diferenciador-3265</link>
      <guid>https://dev.to/carlos_arturocastaog_/ia-para-todos-cuando-la-herramienta-deja-de-ser-el-diferenciador-3265</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwp974kvl5q8jjogkxij5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwp974kvl5q8jjogkxij5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Cuando todos tienen las mismas herramientas, gana, como siempre  el que hace o tiene algo distinto que lo diferencie del resto."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El privilegio de los primeros
&lt;/h2&gt;

&lt;p&gt;Durante los primeros momentos de lo que ahora llamamos Inteligencia Artificial, el indicador de éxito era claro: quien tenía conocimiento, aunque fuera mínimo, dominaba el campo. Se dice que en países de ciegos el tuerto es rey, &lt;strong&gt;quien manejaba la herramienta tenía una ventaja significativa&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Era la época dorada donde saber usar ChatGPT o Midjourney te convertía en alguien "especial". Los cursos abundaban, los salarios se inflaban, y los early adopters disfrutaban de un mercado ávido de cualquiera que supiera pronunciar "prompt engineering".&lt;/p&gt;

&lt;h2&gt;
  
  
  La democratización llegó (y se quedó)
&lt;/h2&gt;

&lt;p&gt;Parece que con el mundo hiperconectado y la avalancha de cursos, tutoriales y manuales sobre IA, la mayoría de las personas ya la manejan cómodamente. Como siempre, unos mejor que otros, pero en el fondo la idea más importante es que &lt;strong&gt;todos la manejan&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ya no es un diferenciador.&lt;/strong&gt; Y, por el contrario, &lt;em&gt;no&lt;/em&gt; manejarla es ahora una gran desventaja.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Algo similar a lo que sucedió con Excel y Word: en un principio, quienes los dominaban tenían un plus; ahora, quien no los maneja está en grave desventaja laboral.&lt;/p&gt;

&lt;p&gt;Con esta nivelación de la información, y específicamente de la IA, &lt;strong&gt;las aguas vuelven nuevamente a su cauce&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los elefantes en la habitación
&lt;/h2&gt;

&lt;p&gt;Aún hay temas muy serios que resolver sobre su uso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La ética&lt;/strong&gt; en los modelos de entrenamiento&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La soberanía digital&lt;/strong&gt; (mi tema favorito)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La gobernanza de los datos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero seamos honestos: esos son asuntos que, a la verdad, al común de la gente le importan poco o nada. Ya sabemos cómo funciona el mercado laboral: cuando se trata de responder a la estabilidad económica, es &lt;em&gt;"vamos a lo que vinimos"&lt;/em&gt;. Esos temas "esotéricos" para la mayoría los tienen sin cuidado.&lt;/p&gt;

&lt;h2&gt;
  
  
  La nueva realidad
&lt;/h2&gt;

&lt;p&gt;Una vez pasado el pánico sobre la IA ,bueno, algunos aún se sienten en pánico, la realidad del día a día es que manejar IA &lt;strong&gt;ya no es algo novedoso que te dé algún tipo de plus&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Porque, como hemos dicho, &lt;strong&gt;la IA no piensa por uno&lt;/strong&gt;. Lo que sí hace es potenciar y hacer las cosas más rápido. &lt;/p&gt;

&lt;p&gt;⚠️ &lt;em&gt;Y aquí viene el punto crucial:&lt;/em&gt; cuando decimos esto, estamos implicando que lo mismo vale para &lt;strong&gt;lo correcto&lt;/strong&gt; y maximiza de forma exponencial &lt;strong&gt;los errores&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  La conclusión incómoda
&lt;/h2&gt;

&lt;p&gt;La herramienta ayuda, pero cuando ayuda a todos por igual, &lt;strong&gt;la diferencia vuelve a ser favorable a quien la use de mejor manera&lt;/strong&gt;, como con cualquier herramienta desde el martillo hasta el compilador.&lt;/p&gt;

&lt;p&gt;No se trata de &lt;em&gt;tener&lt;/em&gt; acceso a la IA. Se trata de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qué preguntas haces&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cómo iteras sobre las respuestas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué criterio aplicas&lt;/strong&gt; para validar o descartar lo que te devuelve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cuánto conocimiento del dominio&lt;/strong&gt; tienes para juzgar la calidad&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La ventaja competitiva no está en la herramienta. Está en &lt;strong&gt;ti&lt;/strong&gt;.&lt;/p&gt;




</description>
      <category>productivity</category>
      <category>career</category>
      <category>technology</category>
      <category>future</category>
    </item>
    <item>
      <title>Volviendo (otra vez) al tema de la soberanía digital</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Thu, 10 Sep 2026 01:36:05 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/volviendo-otra-vez-al-tema-de-la-soberania-digital-1lei</link>
      <guid>https://dev.to/carlos_arturocastaog_/volviendo-otra-vez-al-tema-de-la-soberania-digital-1lei</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhz98dwk7plponv3wg2g6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhz98dwk7plponv3wg2g6.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A veces uno se vuelve monotemático con ciertos asuntos. Le da vueltas y vueltas al mismo tema, no porque quiera insistir por insistir, sino porque el tema mismo vuelve a aparecer una y otra vez. En mi caso, ese tema recurrente es la &lt;strong&gt;soberanía digital&lt;/strong&gt;: la idea de que las empresas y los países deberían poder usar su propia inteligencia artificial, entrenada por ellos mismos, en lugar de depender siempre de los grandes laboratorios que hoy dominan el mercado.&lt;/p&gt;

&lt;p&gt;Existen ya muchos modelos de este tipo, listos para usarse. El problema es el costo: los servidores necesarios nunca están al nivel de los mega centros de cómputo donde se entrenan esas inteligencias artificiales para producción, y aun así siguen siendo caros. Por eso, hoy en día, solo las grandes empresas o los países con recursos pueden asumir ese reto.&lt;/p&gt;

&lt;p&gt;Sin embargo, hay un punto intermedio que vale la pena resaltar: una empresa con un presupuesto modesto —unos 4.000 dólares, por ejemplo— puede poner a funcionar una máquina con su propia inteligencia artificial. Por supuesto, con ciertas limitaciones, pero en la práctica ese tipo de configuración puede ofrecer un desempeño más que aceptable. Y ahí está, de nuevo, mi tema recurrente.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué vuelvo a esto ahora?
&lt;/h2&gt;

&lt;p&gt;Porque el CEO de Anthropic anunció que, en sus sistemas de desarrollo, solo se pueden usar archivos markdown (&lt;code&gt;*.md&lt;/code&gt;) propios de la compañía: específicamente, uno llamado &lt;code&gt;claude.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A primera vista, esto suena trivial. Uno podría pensar: &lt;em&gt;"pues le ponemos ese nombre al archivo y ya, problema resuelto"&lt;/em&gt;. Pero no es tan simple. Para quien no lo sepa, un &lt;strong&gt;skill&lt;/strong&gt; (en este contexto) es, resumiendo mucho, un archivo de texto con instrucciones para que la inteligencia artificial sepa cómo trabajar. Los puristas del tema podrán discrepar con esta simplificación, pero en esencia es así.&lt;/p&gt;

&lt;p&gt;El problema es que otras inteligencias artificiales usan un archivo con otro nombre, &lt;code&gt;AGENTS.md&lt;/code&gt;, mientras que Claude exige el suyo propio. Esto significa que, dependiendo del agente de IA que se quiera usar, habrá que mantener archivos distintos que hacen básicamente lo mismo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Un déjà vu tecnológico
&lt;/h2&gt;

&lt;p&gt;Esto me recuerda una historia ya conocida: cuando "el diablo estaba chiquito", una empresa muy asociada a un sistema operativo con ventanitas decidió hacer algo parecido con su navegador, ignorando los estándares del W3C y creando su propio camino. El resultado fue código lleno de parches, instrucciones duplicadas y páginas web que se veían bien en un navegador pero mal —o simplemente no funcionaban— en otros.&lt;/p&gt;

&lt;p&gt;Eso es, más o menos, lo que Anthropic está proponiendo ahora con sus archivos markdown propios: vamos a necesitar distintos archivos que hacen lo mismo, dependiendo del agente de IA que usemos. De hecho, ya hay grandes empresas que han manifestado su inconformidad, porque tienen cientos o miles de estos archivos, y ahora tendrían que duplicarlos solo para que funcionen con los agentes de Anthropic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Por eso insisto, una vez más, en la importancia de evitar este tipo de arbitrariedades comerciales. La &lt;strong&gt;soberanía tecnológica&lt;/strong&gt; vuelve a ser, para mí, la mejor forma de evitar quedar atrapados en este tipo de "caprichos" tecnológicos impuestos por unos pocos actores del mercado.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opinion</category>
      <category>tecnologia</category>
      <category>espanol</category>
    </item>
    <item>
      <title>ISO 42001 vs ISO 27001: ¿moda comercial o gobernanza real de IA?</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Mon, 07 Sep 2026 23:34:34 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/iso-42001-vs-iso-27001-moda-comercial-o-gobernanza-real-de-ia-3m7c</link>
      <guid>https://dev.to/carlos_arturocastaog_/iso-42001-vs-iso-27001-moda-comercial-o-gobernanza-real-de-ia-3m7c</guid>
      <description>&lt;p&gt;Actualmente hay mucho sobre la ISO 42001, la pregunta es si se aprovecha comercialmente y, para muchas organizaciones, parece "más de lo mismo con otro nombre". La pregunta es solo moda? o en realidad introduce controles específicos de gobernanza de IA que ISO 27001 no cubre de forma explícita. La clave está en cómo se implementa y en si ya se  tiene 27001.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué es ISO 42001 y por qué existe
&lt;/h2&gt;

&lt;p&gt;ISO/IEC 42001:2023 es el primer estándar internacional de &lt;em&gt;sistema de gestión&lt;/em&gt; dedicado específicamente a inteligencia artificial (AIMS: AI Management System). Su propósito no es regular cada modelo de IA ni certificar que un algoritmo sea "seguro", sino exigir que la organización tenga un marco documentado para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definir políticas y objetivos de uso responsable de IA.&lt;/li&gt;
&lt;li&gt;Identificar y evaluar riesgos propios de IA (sesgo, opacidad, falta de supervisión humana, impactos sociales).&lt;/li&gt;
&lt;li&gt;Gestionar el ciclo de vida de los sistemas de IA (desde el diseño hasta el retiro).&lt;/li&gt;
&lt;li&gt;Establecer roles, métricas de monitoreo y mecanismos de mejora continua.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En otras palabras: 27001 protege la información (confidencialidad, integridad, disponibilidad); 42001 gobierna cómo se usan sistemas de IA que toman decisiones o automatizan procesos, y cómo esos sistemas afectan a las personas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diferencias reales frente a ISO 27001
&lt;/h2&gt;

&lt;p&gt;Aunque comparten la misma estructura de alto nivel (Anexo SL) y muchos procesos de gestión, los controles técnicos son distintos y con poca superposición directa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ISO 27001&lt;/strong&gt;: riesgos de seguridad de la información (brechas, accesos no autorizados, pérdida de datos). Controles típicos: gestión de accesos, cifrado, logs, seguridad de proveedores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ISO 42001&lt;/strong&gt;: riesgos de comportamiento de la IA (sesgo, discriminación, decisiones inexplicables, falta de supervisión humana, impactos éticos/sociales). Controles típicos: evaluación de impacto de IA, transparencia/explicabilidad, equidad, supervisión humana significativa, gestión del ciclo de vida de modelos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un sistema puede estar perfectamente asegurado (27001) y aun así generar decisiones discriminatorias o incomprensibles; ahí entra 42001.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Es una norma "comercial" o realmente necesaria?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hay un claro &lt;strong&gt;aprovechamiento comercial&lt;/strong&gt;: consultoras y firmas de auditoría están vendiendo "implementación de ISO 42001" como nuevo servicio, y algunas empresas la usan como argumento de marketing ("certificados en IA responsable").&lt;/li&gt;
&lt;li&gt;Para organizaciones pequeñas o con uso muy limitado de IA, el costo/beneficio puede ser dudoso si ya tienen 27001 bien implementada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero también hay motivos no puramente comerciales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regulaciones emergentes (UE AI Act, leyes locales de IA) empiezan a exigir gobernanza documentada de IA; 42001 ofrece un marco reconocido internacionalmente para demostrarlo.&lt;/li&gt;
&lt;li&gt;Para empresas que desarrollan o integran IA en productos/servicios críticos (finanzas, salud, RR. HH., justicia), tener un AIMS certificado puede ser un diferenciador de confianza para clientes y socios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Si ya tienes ISO 27001, ¿hay que empezar de cero?
&lt;/h2&gt;

&lt;p&gt;No. De hecho, los expertos coinciden en que &lt;strong&gt;con 27001 ya tienes la mayor parte de la "estructura de gestión"&lt;/strong&gt; y puedes integrar 42001 sin rehacer todo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reutilizas&lt;/strong&gt;: política de gestión de riesgos, auditorías internas, revisión por la dirección, control documental, gestión de proveedores, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Añades/ajustas&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Política específica de IA y roles de gobernanza de IA.&lt;/li&gt;
&lt;li&gt;Evaluaciones de impacto de IA (no solo de seguridad).&lt;/li&gt;
&lt;li&gt;Controles de sesgo, equidad, transparencia y supervisión humana.&lt;/li&gt;
&lt;li&gt;Gestión del ciclo de vida de modelos (versionado, monitoreo de desempeño, retirada).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En términos de costo, tener 27001 reduce la implementación de 42001 entre &lt;strong&gt;30–60%&lt;/strong&gt;, porque la base del sistema de gestión ya está hecha.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Debería tu empresa actualizar a 42001 o basta con ajustar 27001?
&lt;/h2&gt;

&lt;p&gt;Depende de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nivel de exposición a riesgos de IA&lt;/strong&gt;: si usas IA para decisiones que afectan personas (contrataciones, crédito, diagnóstico, moderación de contenido, etc.), 42001 aporta valor real más allá de 27001.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exigencias de clientes o regulación&lt;/strong&gt;: si tus clientes o el marco legal empiezan a pedir gobernanza de IA certificada, 42001 te pone en regla de forma estandarizada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costo/beneficio interno&lt;/strong&gt;: si tu uso de IA es limitado y ya tienes controles internos sólidos, quizás baste con extender tu ISMS con anexos/procedimientos de IA sin buscar certificación formal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En la práctica, lo más sensato para quien ya tiene 27001 es:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hacer un &lt;strong&gt;mapeo de brechas&lt;/strong&gt; entre tu ISMS actual y los requisitos de 42001.&lt;/li&gt;
&lt;li&gt;Implementar solo los controles adicionales de IA que realmente necesites.&lt;/li&gt;
&lt;li&gt;Decidir si buscas certificación completa o mantienes un "AIMS interno" alineado con 42001 sin auditoría externa.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  En síntesis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No es solo moda: 42001 cubre riesgos de IA que 27001 no aborda de forma específica.&lt;/li&gt;
&lt;li&gt;Sí hay componente comercial y, para algunos, puede ser excesivo si el uso de IA es bajo.&lt;/li&gt;
&lt;li&gt;Si ya tienes 27001, &lt;strong&gt;no empiezas de cero&lt;/strong&gt;; puedes integrar 42001 con un esfuerzo adicional focalizado y significativo ahorro de costo.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Fuentes: &lt;a href="https://www.bdo.com/insights/assurance/iso-42001-and-its-impact-on-customer-trust" rel="noopener noreferrer"&gt;BDO&lt;/a&gt;, &lt;a href="https://www.iso.org/home/insights-news/resources/iso-42001-explained-what-it-is.html" rel="noopener noreferrer"&gt;ISO.org&lt;/a&gt;, &lt;a href="https://ucsiso.com/iso-42001-vs-iso-27001/" rel="noopener noreferrer"&gt;UCS ISO&lt;/a&gt;, &lt;a href="https://www.schellman.com/blog/iso-certifications/iso-42001-and-responsible-ai-governance" rel="noopener noreferrer"&gt;Schellman&lt;/a&gt;, &lt;a href="https://truvocyber.com/blog/iso-42001-cost-4-factors" rel="noopener noreferrer"&gt;TruvoCyber&lt;/a&gt;, &lt;a href="https://www.deepinspect.ai/blog/iso-42001-vs-iso-27001" rel="noopener noreferrer"&gt;DeepInspect&lt;/a&gt;, &lt;a href="https://financefeeds.com/kucoin-gets-iso-42001-for-ai-governance-not-individual-models/" rel="noopener noreferrer"&gt;FinanceFeeds&lt;/a&gt;, &lt;a href="https://certpro.com/hub/iso-42001/overview/iso-42001-ai-management-system/" rel="noopener noreferrer"&gt;CertPro&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iso42001</category>
      <category>iso27001</category>
      <category>aigovernance</category>
      <category>seguridad</category>
    </item>
    <item>
      <title>Gobernanza del Dato: El Verdadero Tesoro detrás de la IA</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sat, 05 Sep 2026 20:51:41 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/gobernanza-del-dato-el-verdadero-tesoro-detras-de-la-ia-44o5</link>
      <guid>https://dev.to/carlos_arturocastaog_/gobernanza-del-dato-el-verdadero-tesoro-detras-de-la-ia-44o5</guid>
      <description>&lt;h1&gt;
  
  
  Gobernanza del Dato: El Pilar Olvidado en la Era de la IA
&lt;/h1&gt;

&lt;p&gt;Hoy en día, tanto personas naturales como jurídicas hacen un uso de la inteligencia artificial mucho más intensivo que antes, aunque no necesariamente mejor o peor. Existen innumerables tratados, cursos, foros y todo tipo de iniciativas orientadas a capacitar en el uso y manejo de la información asociada a la IA: &lt;em&gt;prompts&lt;/em&gt;, &lt;em&gt;skills&lt;/em&gt;, &lt;em&gt;loops&lt;/em&gt; y un sinfín de herramientas que invitan a adentrarse en el mundo de la experiencia personal y corporativa.&lt;/p&gt;

&lt;p&gt;Esto me parece bien, muy bien, de hecho. Algunos lo hacen con más éxito que otros, pero sin duda, después del pánico inicial y de que algunos sectores mostraran resistencia —o al menos una aceptación reticente—, poco a poco nos vamos asentando en su adopción.&lt;/p&gt;




&lt;h2&gt;
  
  
  La polvareda que levantó la IA
&lt;/h2&gt;

&lt;p&gt;En mi caso particular, sin dejar de programar —y muchas veces a código puro, por diferentes razones: porque me gusta, porque puedo hacerlo y simplemente porque me parece más práctico en soluciones puntuales—, lentamente me he ido dando cuenta de algo que siempre existió, pero que ahora se manifiesta de manera especialmente clara.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Los datos: es, en esencia, lo que finalmente queda después de que la polvareda que ha levantado la IA se haya asentado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pero no se trata simplemente del dato frío y escueto; eso no aporta nada. Lo que se necesita es, si se me permite la expresión, la &lt;strong&gt;Gobernanza del dato&lt;/strong&gt;. No sé si el término existe formalmente, pero suena bien; al menos la palabra "gobernanza" está muy de moda.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué implica realmente la Gobernanza del Dato?
&lt;/h2&gt;

&lt;p&gt;Lo que quiero decir es que los datos no son fantasmas que aparecen y desaparecen dentro de una empresa. No son, a mi parecer —y con derecho a equivocarme—, entidades sin sustancia propia. &lt;/p&gt;

&lt;p&gt;En esa forma de ver la sustancia de la empresa a través de sus datos, relaciones y correlaciones, se traduce la gobernanza como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saber de dónde viene&lt;/strong&gt; el dato.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué aporta&lt;/strong&gt; y si está actualizado o no.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cómo se relaciona&lt;/strong&gt; con el entorno.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cuál es su vida útil&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quién lo generó&lt;/strong&gt; y para qué.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qué realidad trata de mostrar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Si se puede sintetizar o si es "puro" (si tiene origen en otro contexto).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En medicina existe el término &lt;em&gt;vademécum&lt;/em&gt;, que recopila datos y nociones de diferentes áreas. Las empresas deberían tener una política similar —y si no la tienen, deberían implementarla— para saber qué implicación tiene un dato, su cálculo y su uso en las decisiones de la compañía.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mi experiencia en el desarrollo: el 60% que lo cambia todo
&lt;/h2&gt;

&lt;p&gt;En el desarrollo de mis aplicaciones, de forma inercial —no como algo buscado, sino de manera orgánica— me he dado cuenta de que el desarrollo de una aplicación se me facilita enormemente si logro indicar, ya sea a la IA, a un asistente o a mí mismo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cómo se relaciona un dato con el proyecto.&lt;/li&gt;
&lt;li&gt;Qué tipo de dato es (número, etiqueta, texto, imagen).&lt;/li&gt;
&lt;li&gt;De qué forma se enlaza con lo demás.&lt;/li&gt;
&lt;li&gt;Si es un dato seleccionable o "puro" (en el sentido de que no se puede inferir de una selección o cálculo).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Al terminar de desplegar todos y cada uno de los datos, su morfología, su sintaxis, su estructura y su repercusión en un &lt;strong&gt;esquema&lt;/strong&gt; —cosa que normalmente me toma &lt;strong&gt;más del 60% del tiempo de desarrollo&lt;/strong&gt;—, la implementación de los procesos de una entidad es bastante más sencilla. Describir la topología de la estructura de los datos mediante, por ejemplo, un &lt;strong&gt;CRUD&lt;/strong&gt;, es mucho más simple si se procede de esta forma.&lt;/p&gt;




&lt;h2&gt;
  
  
  El problema de las fórmulas "empotradas"
&lt;/h2&gt;

&lt;p&gt;Mi llamado es que las empresas empiecen a pensar en la gobernanza de sus datos y en la forma en que fueron creados y gestionados. Eso, he notado —como digo, por puro desarrollo orgánico— da orden, pero también permite usarlos como una estructura para mejorar los desarrollos.&lt;/p&gt;

&lt;p&gt;Esto es de &lt;strong&gt;vital importancia&lt;/strong&gt; cuando la IA se usa —y de forma más exigente si se hace a través de &lt;strong&gt;agentes&lt;/strong&gt;—.&lt;/p&gt;

&lt;p&gt;En los procesos de sistematización, me encuentro no pocas veces creando tablas de configuración para ser llenadas con números o fórmulas "empotradas" (es decir, clavadas en un proceso) porque ya nadie en la empresa recuerda de dónde salieron o cómo se hicieron. Solo se dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Siempre se ha hecho así".&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Conclusión: Un llamado a la acción
&lt;/h2&gt;

&lt;p&gt;La IA nos da superpoderes, pero sin una base sólida de datos, esos poderes se diluyen en caos y ruido. Invertir tiempo en documentar, estructurar y gobernar nuestros datos no es un lujo, es una necesidad estratégica.&lt;/p&gt;

&lt;p&gt;Si logramos que las empresas comprendan que el dato es el verdadero activo, y que su gobernanza es el mapa que guía todo el desarrollo tecnológico, estaremos construyendo cimientos mucho más sólidos para el futuro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Y tú? ¿Has enfrentado el problema de los datos "huérfanos" o las fórmulas heredadas en tus proyectos? Te leo en los comentarios.&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>gobernanza</category>
      <category>datos</category>
      <category>ia</category>
      <category>arquitectura</category>
    </item>
    <item>
      <title>Microalucinaciones: un ejemplo de un error de un día al formatear fechas en JavaScript</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Tue, 25 Aug 2026 23:31:18 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/micro-alucinaciones-un-ejemplo-de-un-error-de-un-dia-al-formatear-fechas-en-javascript-y-como-58ob</link>
      <guid>https://dev.to/carlos_arturocastaog_/micro-alucinaciones-un-ejemplo-de-un-error-de-un-dia-al-formatear-fechas-en-javascript-y-como-58ob</guid>
      <description>

&lt;p&gt;El uso de la inteligencia artificial como herramienta de programación ofrece una ventaja evidente: &lt;strong&gt;rapidez&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sin embargo, esa rapidez también exige algo que nunca deberíamos delegar completamente en una IA: &lt;strong&gt;la revisión y comprensión del código que vamos a llevar a producción&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esto es especialmente importante cuando trabajamos con aplicaciones transaccionales, donde un pequeño error aparentemente insignificante puede producir consecuencias importantes.&lt;/p&gt;

&lt;p&gt;Un error de un día en una fecha puede afectar una factura, una reserva, una vigencia, una fecha de vencimiento, un sorteo o cualquier otro proceso donde la fecha tenga significado comercial o legal.&lt;/p&gt;

&lt;p&gt;En este artículo presento un ejemplo muy sencillo de lo que podríamos llamar una &lt;strong&gt;microalucinación de código&lt;/strong&gt;: una solución que parece completamente correcta, funciona en muchas situaciones y, sin embargo, contiene un comportamiento que puede producir un error muy difícil de detectar.&lt;/p&gt;




&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Supongamos que necesitamos convertir una fecha recibida como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;en:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25/08/2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A primera vista parece una operación trivial.&lt;/p&gt;

&lt;p&gt;Podríamos pensar que basta con crear un objeto &lt;code&gt;Date&lt;/code&gt; y obtener el día, el mes y el año.&lt;/p&gt;

&lt;p&gt;Pero aquí aparece una particularidad importante de JavaScript:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Una fecha calendario y una fecha-hora son conceptos diferentes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cuando utilizamos &lt;code&gt;Date&lt;/code&gt;, estamos trabajando con un instante en el tiempo, y ese instante está relacionado con una zona horaria.&lt;/p&gt;

&lt;p&gt;Cuando solamente tenemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YYYY-MM-DD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;quizá lo que realmente tenemos no es un instante, sino simplemente &lt;strong&gt;una fecha de calendario&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Tres formas de resolver el problema
&lt;/h1&gt;

&lt;p&gt;Veamos tres implementaciones aparentemente similares.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opción 1: trabajar directamente con el texto
&lt;/h2&gt;

&lt;p&gt;Esta implementación evita crear un objeto &lt;code&gt;Date&lt;/code&gt; cuando recibe una fecha en formato &lt;code&gt;YYYY-MM-DD&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;iso&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-08-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;obtenemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25/08/2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ¿Por qué funciona?
&lt;/h3&gt;

&lt;p&gt;Porque en este caso no estamos interpretando la fecha.&lt;/p&gt;

&lt;p&gt;Simplemente estamos diciendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;los primeros cuatro caracteres son el año;&lt;/li&gt;
&lt;li&gt;los siguientes dos son el mes;&lt;/li&gt;
&lt;li&gt;los últimos dos son el día.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No existe ninguna conversión de zona horaria.&lt;/p&gt;




&lt;h2&gt;
  
  
  Opción 2: utilizar &lt;code&gt;Date&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Ahora veamos una solución que parece igualmente correcta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A primera vista parece perfectamente razonable.&lt;/p&gt;

&lt;p&gt;Pero aquí está el problema.&lt;/p&gt;




&lt;h1&gt;
  
  
  ¿Qué ocurre con &lt;code&gt;new Date("2026-08-25")&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Cuando JavaScript recibe una fecha ISO de la forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-08-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;esa representación se interpreta como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25T00:00:00.000Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Es decir, medianoche en &lt;strong&gt;UTC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ahora supongamos que ejecutamos el código en una zona horaria UTC-5.&lt;/p&gt;

&lt;p&gt;La conversión sería aproximadamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UTC:
2026-08-25 00:00

UTC-5:
2026-08-24 19:00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El instante sigue siendo exactamente el mismo.&lt;/p&gt;

&lt;p&gt;Lo que cambió fue la representación local.&lt;/p&gt;

&lt;p&gt;Y entonces ocurre algo aparentemente absurdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;puede devolver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;cuando el texto original decía:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por eso podemos terminar mostrando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;24/08/2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;en lugar de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25/08/2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  El detalle que hace peligroso este error
&lt;/h1&gt;

&lt;p&gt;Lo interesante de este problema es que &lt;strong&gt;el código no falla de manera evidente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No tenemos necesariamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;una excepción;&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;null&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;undefined&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;un error en consola;&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;NaN&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;un fallo de ejecución.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El programa continúa funcionando.&lt;/p&gt;

&lt;p&gt;Simplemente muestra una fecha incorrecta.&lt;/p&gt;

&lt;p&gt;Y eso es mucho más peligroso en determinados sistemas.&lt;/p&gt;




&lt;h1&gt;
  
  
  Opción 3: utilizar una expresión regular
&lt;/h1&gt;

&lt;p&gt;Otra solución sencilla es tratar la fecha como lo que realmente representa en este contexto: &lt;strong&gt;un dato textual&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formatDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(\d{4})&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;(\d{2})&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;(\d{2})&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El resultado será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25/08/2026
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;porque nunca se crea un objeto &lt;code&gt;Date&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;No hay conversión de UTC.&lt;/p&gt;

&lt;p&gt;No hay conversión de zona horaria.&lt;/p&gt;

&lt;p&gt;No hay posibilidad de que la fecha retroceda cinco horas.&lt;/p&gt;




&lt;h1&gt;
  
  
  La diferencia fundamental
&lt;/h1&gt;

&lt;p&gt;Podemos resumir el problema de esta manera:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situación&lt;/th&gt;
&lt;th&gt;Tipo de dato&lt;/th&gt;
&lt;th&gt;¿Conviene usar &lt;code&gt;Date&lt;/code&gt;?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2026-08-25&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fecha de calendario&lt;/td&gt;
&lt;td&gt;No necesariamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2026-08-25T14:30:00Z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Instante en el tiempo&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timestamp Unix&lt;/td&gt;
&lt;td&gt;Instante en el tiempo&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha de nacimiento&lt;/td&gt;
&lt;td&gt;Fecha de calendario&lt;/td&gt;
&lt;td&gt;Normalmente no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fecha de vencimiento&lt;/td&gt;
&lt;td&gt;Fecha de calendario&lt;/td&gt;
&lt;td&gt;Depende del sistema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hora de una transacción&lt;/td&gt;
&lt;td&gt;Fecha-hora&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La pregunta importante antes de utilizar &lt;code&gt;Date&lt;/code&gt; debería ser:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;¿Estoy trabajando con una fecha de calendario o con un instante en el tiempo?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ¿Cómo evitar el problema?
&lt;/h1&gt;

&lt;p&gt;Si solamente necesitamos transformar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YYYY-MM-DD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DD/MM/YYYY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;no necesitamos convertir el valor en un objeto &lt;code&gt;Date&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Podemos utilizar &lt;code&gt;split()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O una expresión regular:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(\d{4})&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;(\d{2})&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;(\d{2})&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto mantiene el dato como texto y evita introducir innecesariamente una zona horaria.&lt;/p&gt;




&lt;h1&gt;
  
  
  ¿Y si realmente necesitamos utilizar &lt;code&gt;Date&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Si el dato representa un instante y necesitamos trabajar con él, entonces &lt;code&gt;Date&lt;/code&gt; es apropiado.&lt;/p&gt;

&lt;p&gt;En esos casos debemos ser conscientes de la diferencia entre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;getMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getUTCDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;getUTCMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;getUTCFullYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-08-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUTCDate&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;puede devolver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;porque estamos consultando explícitamente la representación UTC.&lt;/p&gt;

&lt;p&gt;Mientras que:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;consulta la representación en la zona horaria local.&lt;/p&gt;




&lt;h1&gt;
  
  
  El verdadero problema cuando usamos IA
&lt;/h1&gt;

&lt;p&gt;Este ejemplo no pretende decir que la inteligencia artificial sea una mala herramienta para programar.&lt;/p&gt;

&lt;p&gt;Todo lo contrario.&lt;/p&gt;

&lt;p&gt;La IA puede ahorrar una enorme cantidad de tiempo.&lt;/p&gt;

&lt;p&gt;El problema aparece cuando aceptamos una solución simplemente porque:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;compila;&lt;/li&gt;
&lt;li&gt;parece lógica;&lt;/li&gt;
&lt;li&gt;funciona en nuestras primeras pruebas;&lt;/li&gt;
&lt;li&gt;tiene una sintaxis correcta;&lt;/li&gt;
&lt;li&gt;fue generada por una herramienta aparentemente confiable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una IA puede generar código técnicamente válido que, sin embargo, no sea correcto para el contexto específico de nuestra aplicación.&lt;/p&gt;

&lt;p&gt;En este ejemplo, la función puede funcionar perfectamente durante semanas o meses.&lt;/p&gt;

&lt;p&gt;Y solamente fallar cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cambia la zona horaria;&lt;/li&gt;
&lt;li&gt;el servidor está configurado en otra zona;&lt;/li&gt;
&lt;li&gt;el usuario está en otro país;&lt;/li&gt;
&lt;li&gt;se procesa una fecha cercana a medianoche;&lt;/li&gt;
&lt;li&gt;se utiliza una fecha sin componente horario.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ese tipo de errores son especialmente difíciles de encontrar.&lt;/p&gt;




&lt;h1&gt;
  
  
  Una microalucinación peligrosa
&lt;/h1&gt;

&lt;p&gt;Podemos llamar a esto una &lt;strong&gt;microalucinación de programación&lt;/strong&gt; porque la solución generada puede parecer perfectamente razonable.&lt;/p&gt;

&lt;p&gt;El código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dateString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;es correcto desde el punto de vista sintáctico.&lt;/p&gt;

&lt;p&gt;También es válido utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El problema no está necesariamente en cada instrucción individual.&lt;/p&gt;

&lt;p&gt;El problema está en &lt;strong&gt;la combinación de ambas y en el significado del dato que estamos procesando&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La IA puede no conocer, o no considerar, que en nuestra aplicación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;significa simplemente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"25 de agosto de 2026"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;y no:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"el instante correspondiente a las 00:00 UTC del 25 de agosto de 2026".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esa diferencia conceptual es la que puede producir el error.&lt;/p&gt;




&lt;h1&gt;
  
  
  Regla de oro
&lt;/h1&gt;

&lt;p&gt;Una regla sencilla que podemos aplicar es:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Si el dato es una fecha de calendario y solamente necesitamos reorganizar sus componentes, tratémoslo como texto.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YYYY-MM-DD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;puede transformarse directamente en:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DD/MM/YYYY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sin utilizar &lt;code&gt;Date&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En cambio, si tenemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2026-08-25T15:30:00Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;estamos trabajando con un instante concreto.&lt;/p&gt;

&lt;p&gt;En ese caso sí debemos considerar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UTC;&lt;/li&gt;
&lt;li&gt;zona horaria;&lt;/li&gt;
&lt;li&gt;hora local;&lt;/li&gt;
&lt;li&gt;conversión de fechas;&lt;/li&gt;
&lt;li&gt;formato de salida.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;Este pequeño ejemplo muestra por qué &lt;strong&gt;revisar el código generado por inteligencia artificial no es opcional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Un error de un día puede parecer insignificante.&lt;/p&gt;

&lt;p&gt;Pero en una aplicación transaccional podría significar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;una factura vencida antes de tiempo;&lt;/li&gt;
&lt;li&gt;una reserva asignada al día incorrecto;&lt;/li&gt;
&lt;li&gt;una promoción finalizada antes de tiempo;&lt;/li&gt;
&lt;li&gt;un pago asociado a otra fecha;&lt;/li&gt;
&lt;li&gt;un sorteo programado para un día diferente;&lt;/li&gt;
&lt;li&gt;una vigencia contractual incorrecta;&lt;/li&gt;
&lt;li&gt;o cualquier otro proceso donde la fecha tenga importancia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo más peligroso es que probablemente &lt;strong&gt;no veremos ningún error en consola&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El sistema continuará funcionando.&lt;/p&gt;

&lt;p&gt;Simplemente estará produciendo información incorrecta.&lt;/p&gt;

&lt;p&gt;Y precisamente por eso estos errores son difíciles de detectar.&lt;/p&gt;

&lt;p&gt;La inteligencia artificial puede escribir código mucho más rápido que nosotros.&lt;/p&gt;

&lt;p&gt;Pero &lt;strong&gt;entender qué significa ese código y verificar que corresponde al problema real sigue siendo responsabilidad del programador&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  La pregunta que deberíamos hacernos
&lt;/h2&gt;

&lt;p&gt;Antes de aceptar cualquier código relacionado con fechas, conviene preguntarnos:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;¿Estoy manipulando una fecha de calendario o estoy manipulando un instante en el tiempo?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esa pequeña pregunta puede evitar un bug de un día que, dependiendo del sistema, podría terminar siendo un problema mucho más grande.&lt;/p&gt;

</description>
      <category>fechas</category>
      <category>timezone</category>
      <category>programacion</category>
    </item>
    <item>
      <title>Neurodivergencia en el aprendizaje de sistemas: una mirada desde la práctica</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sun, 23 Aug 2026 20:13:41 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/neurodivergencia-en-el-aprendizaje-de-sistemas-4bal</link>
      <guid>https://dev.to/carlos_arturocastaog_/neurodivergencia-en-el-aprendizaje-de-sistemas-4bal</guid>
      <description>&lt;h1&gt;
  
  
  Neurodivergencia en el aprendizaje de sistemas: una mirada desde la práctica
&lt;/h1&gt;

&lt;p&gt;He tenido la oportunidad de conocer y trabajar con &lt;strong&gt;personas neurodivergentes altamente funcionales&lt;/strong&gt;. En concreto, interactué con dos de ellas mientras aprendían funciones básicas —y luego no tan básicas— de &lt;strong&gt;análisis y operación de sistemas&lt;/strong&gt;. La experiencia fue muy enriquecedora y cambió mi forma de ver el aprendizaje técnico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que más me llamó la atención
&lt;/h2&gt;

&lt;p&gt;Cuando estas personas se enfocan o algo les despierta interés, son &lt;strong&gt;sumamente analíticas y concentradas&lt;/strong&gt;. Detectan situaciones que a una persona neurotípica le cuestan más notar, ya sea por:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dificultad para mantener la concentración.&lt;/li&gt;
&lt;li&gt;Mayor capacidad para identificar &lt;strong&gt;discrepancias en detalles críticos&lt;/strong&gt; que hacen que un sistema funcione bien.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Además, son muy &lt;strong&gt;precisos y ordenados&lt;/strong&gt;, tanto en sus observaciones como en la ejecución de tareas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplos concretos de tareas donde destacaron
&lt;/h3&gt;

&lt;p&gt;En el día a día, noté diferencias claras en tareas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Revisión de logs de errores&lt;/strong&gt;: Mientras yo pasaba por alto líneas repetitivas, ellos detectaban patrones anómalos en timestamps o códigos de error que parecían iguales pero no lo eran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validación de datos de entrada&lt;/strong&gt;: Identificaban rápidamente campos mal formateados, valores fuera de rango o inconsistencias en estructuras JSON que a mí me tomaban más tiempo encontrar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguimiento de flujos de trabajo&lt;/strong&gt;: Al operar sistemas con múltiples pasos, recordaban el orden exacto y señalaban cuándo un paso se había saltado o ejecutado en secuencia incorrecta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimización de procesos repetitivos&lt;/strong&gt;: Sin que se les pidiera, proponían pequeñas mejoras, como agrupar tareas similares o eliminar pasos redundantes en la operación diaria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos no eran sistemas triviales: hablo de herramientas con múltiples módulos, integraciones y reglas de negocio que normalmente requieren semanas de entrenamiento.&lt;/p&gt;

&lt;h2&gt;
  
  
  El factor humano: confianza y acompañamiento
&lt;/h2&gt;

&lt;p&gt;Es cierto que, en ocasiones, debido a su condición, pueden sentirse &lt;strong&gt;inseguros o fuera de su espacio de confort&lt;/strong&gt;. Sin embargo, si se les transmite &lt;strong&gt;tranquilidad y seguridad&lt;/strong&gt;, responden muy bien.&lt;/p&gt;

&lt;p&gt;En uno de los casos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La madre lo acompañó durante un tiempo hasta que ganó confianza.&lt;/li&gt;
&lt;li&gt;Una vez en ese estado, &lt;strong&gt;asimiló rápidamente&lt;/strong&gt; lo que se le enseñaba.&lt;/li&gt;
&lt;li&gt;Aprendió tan rápido que, casi sin necesidad de explicaciones extensas, &lt;strong&gt;intuía los siguientes pasos&lt;/strong&gt; y qué hacía falta para optimizar el proceso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En el otro caso, una persona más interactiva:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Con explicaciones sencillas, empezó a operar el sistema con &lt;strong&gt;confianza y rapidez&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo que más valoré fue ver cómo, una vez que se sentían seguros, &lt;strong&gt;preguntaban menos por miedo y más por curiosidad técnica&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disciplina y atención superiores a la media
&lt;/h2&gt;

&lt;p&gt;Lo que más destacó fue la &lt;strong&gt;seriedad y dedicación&lt;/strong&gt; con que abordaron las tareas, mostrando una &lt;strong&gt;disciplina y atención muy superiores a la media&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mientras yo a veces me distraía con correos o mensajes, ellos mantenían el foco en la tarea hasta completarla con precisión. No era raro verlos revisando dos o tres veces un proceso antes de darlo por terminado, asegurándose de que todo estuviera en orden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Una reflexión final
&lt;/h2&gt;

&lt;p&gt;No pretendo generalizar: sé que la neurodivergencia es compleja, requiere guías profesionales y que encauzar estos talentos no es fácil. Cada persona es única y necesita su propio ritmo y enfoque.&lt;/p&gt;

&lt;p&gt;Pero veo una &lt;strong&gt;oportunidad real&lt;/strong&gt; para que, eventualmente, estas personas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se integren al mundo laboral técnico.&lt;/li&gt;
&lt;li&gt;Generen cierta independencia.&lt;/li&gt;
&lt;li&gt;Aporten desde sus &lt;strong&gt;fortalezas únicas&lt;/strong&gt; al desarrollo, operación y mejora de sistemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para mí, esta experiencia fue un recordatorio de que &lt;strong&gt;la diversidad cognitiva no es una barrera, sino una ventaja&lt;/strong&gt; cuando se sabe acompañar y dirigir.&lt;/p&gt;




&lt;p&gt;¿Has tenido experiencias similares trabajando con personas neurodivergentes en entornos técnicos? ¿Qué estrategias te han funcionado para facilitar el aprendizaje? Me encantaría leer tus comentarios y aprender de tu experiencia.&lt;/p&gt;

</description>
      <category>neurodiversity</category>
      <category>learning</category>
      <category>systems</category>
      <category>inclusion</category>
    </item>
    <item>
      <title>Arquitectura de integración entre Web 2 y blockchain: un enfoque desacoplado</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sun, 02 Aug 2026 01:52:58 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/arquitectura-de-integracion-entre-web-2-y-blockchain-un-enfoque-desacoplado-35hk</link>
      <guid>https://dev.to/carlos_arturocastaog_/arquitectura-de-integracion-entre-web-2-y-blockchain-un-enfoque-desacoplado-35hk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21fsc7w6tbm96br5wiix.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21fsc7w6tbm96br5wiix.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Arquitectura de integración entre Web 2 y blockchain: un enfoque desacoplado
&lt;/h1&gt;

&lt;p&gt;En el desarrollo de aplicaciones que combinan la web tradicional (Web 2) con funcionalidades blockchain, es común enfrentar la necesidad de generar &lt;strong&gt;contratos inteligentes&lt;/strong&gt; o &lt;strong&gt;NFTs&lt;/strong&gt; desde una plataforma de gestión centralizada.&lt;/p&gt;

&lt;p&gt;Inicialmente, este tipo de procesos se manejaba de forma convencional: invocando un servidor externo (por ejemplo, con Python o Node.js), ejecutando el proceso y esperando los resultados de manera síncrona.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ejemplo típico de llamada síncrona&lt;/span&gt;
python deploy_contract.py &lt;span class="nt"&gt;--network&lt;/span&gt; ethereum &lt;span class="nt"&gt;--params&lt;/span&gt; contract_data.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si bien este enfoque puede funcionar en entornos controlados, presenta &lt;strong&gt;limitaciones importantes&lt;/strong&gt; cuando se trabaja con blockchain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tiempos de confirmación variables&lt;/li&gt;
&lt;li&gt;Posibilidad de fallos en cualquiera de las múltiples etapas del proceso&lt;/li&gt;
&lt;li&gt;Necesidad de implementar mecanismos robustos de recuperación de errores&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Problema clave&lt;/strong&gt;: la gestión del control se vuelve más compleja que el propio objetivo de publicar información en la cadena de bloques.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  El problema del acoplamiento directo
&lt;/h2&gt;

&lt;p&gt;En una arquitectura típica, coexisten &lt;strong&gt;dos sistemas fundamentalmente independientes&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sistema&lt;/th&gt;
&lt;th&gt;Características&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Servidores, bases de datos, lenguajes convencionales, arquitectura backend/frontend completa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blockchain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Protocolos propios, tiempos de confirmación variables, modelos de consenso, ejecución de contratos inteligentes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cuando se intenta conectar ambos sistemas mediante &lt;strong&gt;llamadas directas&lt;/strong&gt; (es decir, invocando funciones blockchain desde la aplicación Web 2), se genera un &lt;strong&gt;acoplamiento estrecho&lt;/strong&gt; que obliga al sistema principal a gestionar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reintentos automáticos&lt;/li&gt;
&lt;li&gt;Manejo de excepciones específicas de blockchain&lt;/li&gt;
&lt;li&gt;Sincronización de estados&lt;/li&gt;
&lt;li&gt;Validación de transacciones&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  La solución: desacoplamiento mediante un patrón de cola (spooler)
&lt;/h2&gt;

&lt;p&gt;La mejor práctica en este tipo de escenarios es &lt;strong&gt;desacoplar los procesos&lt;/strong&gt;. Para ello, se propone una arquitectura basada en &lt;strong&gt;tres componentes clave&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Definición clara de procesos blockchain
&lt;/h3&gt;

&lt;p&gt;Se identifican y documentan los procesos que requieren interacción con la blockchain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creación de contratos inteligentes&lt;/li&gt;
&lt;li&gt;Emisión de NFTs&lt;/li&gt;
&lt;li&gt;Actualización de estados en la cadena&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada proceso se diseña para responder de manera uniforme a operaciones &lt;strong&gt;CRUD&lt;/strong&gt; (crear, leer, actualizar, borrar), siguiendo patrones convencionales de desarrollo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ejemplo de definición de proceso
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BlockchainProcess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Gestor independiente de contratos y NFTs
&lt;/h3&gt;

&lt;p&gt;Se desarrolla un &lt;strong&gt;módulo especializado&lt;/strong&gt;, completamente desacoplado del sistema Web 2, encargado de gestionar la lógica blockchain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Gestor independiente con pruebas unitarias
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ContractManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;deploy_contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contract_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Lógica específica de blockchain
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;contract_id&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mint_nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nft_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Lógica específica de NFT
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nft_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este módulo incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Pruebas unitarias&lt;/li&gt;
&lt;li&gt;✅ Pruebas de integración&lt;/li&gt;
&lt;li&gt;✅ Validación con variables de prueba conocidas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Spooler (cola de mensajes)
&lt;/h3&gt;

&lt;p&gt;Se implementa una &lt;strong&gt;cola o spooler&lt;/strong&gt; donde la aplicación Web 2 deposita las solicitudes de procesamiento blockchain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uuid-12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"process_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deploy_contract"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-01T10:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez que la solicitud se almacena en el spooler, la aplicación Web 2 queda &lt;strong&gt;liberada de cualquier responsabilidad&lt;/strong&gt; sobre el proceso.&lt;/p&gt;




&lt;h2&gt;
  
  
  Flujo de procesamiento asíncrono
&lt;/h2&gt;

&lt;p&gt;El sistema completo opera mediante los siguientes pasos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sequenceDiagram
    participant Web2 as Aplicación Web 2
    participant Spooler as Cola (Spooler)
    participant Worker as Microservicio Blockchain
    participant Chain as Blockchain

    Web2-&amp;gt;&amp;gt;Spooler: 1. Deposita solicitud
    Web2--&amp;gt;&amp;gt;Web2: 2. Continúa su ejecución
    Worker-&amp;gt;&amp;gt;Spooler: 3. Monitorea nuevas solicitudes
    Worker-&amp;gt;&amp;gt;Chain: 4. Procesa en la blockchain
    Chain--&amp;gt;&amp;gt;Worker: 5. Retorna resultado (ID, estado)
    Worker-&amp;gt;&amp;gt;Spooler: 6. Actualiza estado
    Worker-&amp;gt;&amp;gt;Web2: 7. Notifica resultado
    Web2-&amp;gt;&amp;gt;Web2: 8. Actualiza procesos en espera
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Servicio de procesamiento asíncrono
&lt;/h3&gt;

&lt;p&gt;Un &lt;strong&gt;microservicio&lt;/strong&gt; monitorea el spooler y, al detectar nuevas solicitudes, las procesa utilizando la lógica blockchain correspondiente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Worker que procesa la cola
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_queue&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;spooler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_pending_requests&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;contract_manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;spooler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;notify_web2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este servicio opera en &lt;strong&gt;los tiempos y condiciones propios de la blockchain&lt;/strong&gt;, sin afectar el rendimiento del sistema principal.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Actualización de estados y notificación
&lt;/h3&gt;

&lt;p&gt;El microservicio actualiza el spooler con los resultados del procesamiento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ID del contrato o NFT creado&lt;/li&gt;
&lt;li&gt;Variables de control&lt;/li&gt;
&lt;li&gt;Estado de la transacción (&lt;code&gt;pending&lt;/code&gt;, &lt;code&gt;confirmed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Posteriormente, notifica a la aplicación Web 2, que actualiza los procesos que habían quedado en espera.&lt;/p&gt;




&lt;h2&gt;
  
  
  Beneficios de esta arquitectura
&lt;/h2&gt;

&lt;p&gt;Este enfoque, que puede considerarse una &lt;strong&gt;API asíncrona entre Web 2 y DApp (blockchain)&lt;/strong&gt;, ofrece varias ventajas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Beneficio&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Desacoplamiento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cada sistema se ocupa de lo suyo: Web 2 gestiona la interfaz y lógica de negocio; blockchain se encarga de contratos e inmutabilidad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resiliencia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los fallos en la blockchain no afectan la disponibilidad del sistema principal. Las solicitudes pueden reintentarse automáticamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Escalabilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El microservicio de procesamiento puede escalarse independientemente según la demanda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mantenibilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Al separar responsabilidades, el código es más fácil de entender, probar y mantener&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trazabilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;El spooler permite auditar todas las solicitudes y sus estados en cualquier momento&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Consideraciones adicionales
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Manejo de errores
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;contract_manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deploy_contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;spooler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;BlockchainError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;spooler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
    &lt;span class="c1"&gt;# El worker puede reintentar automáticamente según política definida
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Monitoreo y alertas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implementar logs estructurados para cada solicitud&lt;/li&gt;
&lt;li&gt;Configurar alertas cuando el spooler acumule muchas solicitudes pendientes&lt;/li&gt;
&lt;li&gt;Monitorear tiempos de procesamiento promedio&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Seguridad
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Validar y sanitizar todos los datos antes de enviarlos a la blockchain&lt;/li&gt;
&lt;li&gt;Implementar autenticación entre el microservicio y la aplicación Web 2&lt;/li&gt;
&lt;li&gt;Usar variables de entorno para credenciales y claves privadas&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;La arquitectura propuesta sigue un patrón similar al de las &lt;strong&gt;API tradicionales&lt;/strong&gt; (frontend → API → backend), pero adaptado a la integración entre &lt;strong&gt;Web 2 y blockchain&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>microservices</category>
    </item>
    <item>
      <title>No te puedo enseñar IA (pero sí te puedo enseñar a pensar en procesos)</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Sun, 26 Jul 2026 23:44:13 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/no-te-puedo-ensenar-ia-pero-si-te-puedo-ensenar-a-pensar-en-procesos-1bfd</link>
      <guid>https://dev.to/carlos_arturocastaog_/no-te-puedo-ensenar-ia-pero-si-te-puedo-ensenar-a-pensar-en-procesos-1bfd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fis3liqzi6l7roeck4pow.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fis3liqzi6l7roeck4pow.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hace unos días, en una fiesta, una señora se me acercó angustiada. Me dijo, casi disculpándose, que la tecnología la estaba dejando atrás. Que todo el mundo hablaba de inteligencia artificial, que sentía que el tren ya había pasado y ella seguía en el andén.&lt;/p&gt;

&lt;p&gt;Le respondí algo que llevo años pensando y que hoy quiero compartir con calma, porque creo que le sirve a mucha más gente de la que cabe en una conversación de fiesta.&lt;/p&gt;

&lt;p&gt;Le dije: no te puedo enseñar inteligencia artificial. Y no porque sea difícil, sino porque eso no se enseña. Lo que se enseña —y lo que en realidad necesitas— es otra cosa, mucho más antigua y mucho más tuya de lo que crees.&lt;/p&gt;

&lt;h2&gt;
  
  
  La calculadora no nos hizo peores matemáticos
&lt;/h2&gt;

&lt;p&gt;Hace muchas décadas existían las reglas de cálculo y las tablas de logaritmos. Con eso se diseñaban puentes, se calculaban órbitas, se hacía ingeniería seria. Cuando llegó la calculadora de bolsillo, hubo ingenieros que la vieron con desconfianza: "si dejas que la máquina calcule, pierdes el entendimiento profundo".&lt;/p&gt;

&lt;p&gt;Tenían razón a medias. Sí, se perdió cierta destreza manual. Pero se ganó algo mucho más grande: la capacidad de resolver problemas que antes eran impensables por el tiempo que tomaban a mano.&lt;/p&gt;

&lt;p&gt;Lo mismo pasó cuando el procesador de texto reemplazó a la máquina de escribir. No solo escribimos más rápido — cambió &lt;em&gt;cómo&lt;/em&gt; pensamos mientras escribimos. Con máquina de escribir tenías que pensar la frase completa antes de teclear, porque corregir era costoso. Con un computador puedes escribir en flujo, corregir sobre la marcha, reordenar ideas sin volver a copiar la hoja entera.&lt;/p&gt;

&lt;p&gt;En ningún caso el cambio fue malo. Fue traumático para algunos, sí. Pero nos dio un impulso.&lt;/p&gt;

&lt;p&gt;Con la inteligencia artificial está pasando exactamente lo mismo, solo que en un ciclo mucho más rápido y mucho más ruidoso.&lt;/p&gt;

&lt;h2&gt;
  
  
  El ruido que no ayuda
&lt;/h2&gt;

&lt;p&gt;Y aquí está el problema: alrededor de ese cambio real se ha montado un negocio de pánico. Cursos que prometen que si no te inscribes ya, te vas a quedar sin trabajo. Escuelas que venden angustia empaquetada en doce clases. Es el mismo modelo de negocio de siempre —vender miedo urgente— solo que ahora el protagonista es la IA en vez de "hazte rico trabajando desde casa".&lt;/p&gt;

&lt;p&gt;Ese ruido no resuelve nada. Solo lucra del roce entre las personas y una herramienta que, en el fondo, no es tan complicada de entender si alguien te la explica bien, sin prisa y sin querer venderte algo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que sí es enseñable
&lt;/h2&gt;

&lt;p&gt;Volviendo a la señora de la fiesta: le dije que no le podía enseñar IA, pero tampoco le podía enseñar a pensar — eso ya lo sabe hacer, lleva toda una vida haciéndolo. Lo que sí le podía enseñar es a &lt;strong&gt;estructurar su pensamiento en procesos claros&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;¿Qué quiere decir esto en la práctica? Que antes de pedirle algo a una herramienta de IA, vale la pena hacerse tres preguntas sencillas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;¿Qué tengo?&lt;/strong&gt; (la información o el problema de partida)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Qué necesito?&lt;/strong&gt; (el resultado que busco, lo más concreto posible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Cómo sabré que está bien?&lt;/strong&gt; (cómo voy a revisar lo que me entreguen)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eso no es "aprender inteligencia artificial". Es lo que cualquier persona ordenada hace toda su vida para resolver un problema: organizar antes de actuar. La diferencia es que ahora, si organizas bien esas tres preguntas, tienes un interlocutor —la IA— que te puede ayudar muchísimo más rápido que antes. Y si las tienes desordenadas, la IA también te lo va a devolver desordenado.&lt;/p&gt;

&lt;h2&gt;
  
  
  El talante correcto
&lt;/h2&gt;

&lt;p&gt;No hay que tenerle miedo al cambio. El cambio es bueno, aunque a veces duela. La calculadora, el procesador de texto, y ahora la inteligencia artificial, no vinieron a quitarnos algo — vinieron a correr la línea de lo que podemos hacer un poco más lejos.&lt;/p&gt;

&lt;p&gt;Lo único que sí pido, y esto es importante: no confundas el entusiasmo por el cambio con fe ciega. La regla de cálculo no te mentía con confianza. Una herramienta de IA sí te puede dar una respuesta que suena perfecta y no lo es. Por eso, junto con perder el miedo, hay que ganar el hábito de revisar. Ese es el verdadero "talante": ni pánico, ni entrega total. Curiosidad, con los ojos abiertos.&lt;/p&gt;

&lt;p&gt;A la señora de la fiesta no le hizo falta un curso. Le hizo falta que alguien le dijera, sin venderle nada, que lo que ya sabe hacer —pensar con orden— sigue siendo lo más valioso que tiene.&lt;/p&gt;

</description>
      <category>ia</category>
      <category>opinion</category>
      <category>productividad</category>
      <category>aprendizaje</category>
    </item>
  </channel>
</rss>
