<?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>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>
    <item>
      <title>Programar no pasa de moda: por qué la claridad importa más que la sintaxis</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Fri, 24 Jul 2026 19:09:42 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/programar-no-pasa-de-moda-por-que-la-claridad-importa-mas-que-la-sintaxis-3kpc</link>
      <guid>https://dev.to/carlos_arturocastaog_/programar-no-pasa-de-moda-por-que-la-claridad-importa-mas-que-la-sintaxis-3kpc</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%2F0hz9v0b6kezpcqgml542.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%2F0hz9v0b6kezpcqgml542.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Programar no pasa de moda: por qué la claridad importa más que la sintaxis
&lt;/h1&gt;

&lt;p&gt;Sigue la polémica: ¿es necesario aprender a programar? ¿Debe hacerlo quien trabaja en backend, frontend o integra con APIs?&lt;/p&gt;

&lt;p&gt;La verdad es que programar nunca pasará de moda, porque programar no es solo escribir programas de computador. Programar es tener una idea clara de los procesos necesarios para realizar una tarea, ya sea dentro de un computador o en la vida cotidiana.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programar es pensar en procesos
&lt;/h2&gt;

&lt;p&gt;Los programadores siempre han sido y serán necesarios. Lo que cambia —y está cambiando ahora— es la forma en que los programadores le dan órdenes a la máquina.&lt;/p&gt;

&lt;p&gt;Cada cierto tiempo surgen nuevos lenguajes y métodos para comunicarse con el computador, porque existen distintos propósitos: manipular imágenes, audio, video o procesar transacciones bancarias, por ejemplo. No todos los lenguajes sirven para lo mismo; cada uno se diseñó pensando en un objetivo concreto.&lt;/p&gt;

&lt;p&gt;Aunque, en teoría, con cualquier lenguaje se puede hacer casi todo, en la práctica no siempre es eficiente. Es como usar herramientas de mano: puedes clavar con un martillo, un destornillador o una piedra y eventualmente lograrás algo, pero no siempre con eficiencia. Por eso existen diferentes herramientas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cada tarea pide una herramienta
&lt;/h2&gt;

&lt;p&gt;En programación ocurre lo mismo: no es igual crear software para edición de imágenes que para gestionar transacciones financieras. Cada tarea suele tener los lenguajes, marcos y herramientas que mejor se ajustan al fin perseguido.&lt;/p&gt;

&lt;p&gt;Hoy los programadores usan inteligencia artificial para que traduzca lo que dicen en su lengua natural a un lenguaje de computador, o para que el sistema explique qué debe hacer. A ese conjunto de tecnologías y componentes —bases de datos, sistema operativo, protocolos, modelos de comunicación, entre otros— se le llama &lt;em&gt;stack&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Antes se usaba más el término &lt;em&gt;framework&lt;/em&gt;, que agrupaba modelos y librerías que indicaban a un lenguaje cómo comportarse. Y siempre ha habido múltiples opciones según el lenguaje y el propósito.&lt;/p&gt;

&lt;h2&gt;
  
  
  La novedad está en la interfaz
&lt;/h2&gt;

&lt;p&gt;¿Qué se vislumbra en el futuro? Que cualquier persona, con o sin conocimientos profundos de lenguajes de programación, pueda indicarle a un sistema lo que debe hacer usando lenguaje natural.&lt;/p&gt;

&lt;p&gt;Sin embargo, la IA no adivina lo que no le explicas: si no sabes lo que quieres, la IA no lo sabrá. Por eso, tener claridad sobre los procesos involucrados en una necesidad específica permite pedirle a una IA que convierta esa idea en realidad.&lt;/p&gt;

&lt;p&gt;Hay un truco: si le das instrucciones imprecisas a la IA, obtendrás resultados imprecisos. En programación se dice: si no sabes para dónde vas, llegarás a cualquier parte. Con la IA esto es más cierto que nunca.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pensamiento claro, resultados mejores
&lt;/h2&gt;

&lt;p&gt;Ahora se pueden dar instrucciones en lenguaje natural; esto no es totalmente nuevo —ya existían lenguajes más estructurados desde los años 60—, pero la novedad es que ya no es necesario formular instrucciones tan rígidas.&lt;/p&gt;

&lt;p&gt;No obstante, el pensamiento debe seguir siendo estructurado: si quieres algo de calidad, necesitas descomponerlo en pasos concretos. Por eso han surgido prácticas como el diseño de &lt;em&gt;prompts&lt;/em&gt;, los bucles de refinamiento y otras técnicas que estructuran el pensamiento en tareas claras y precisas, recuperando muchos principios de la programación estructurada.&lt;/p&gt;

&lt;p&gt;Usar &lt;em&gt;prompts&lt;/em&gt;, &lt;em&gt;loops&lt;/em&gt; u otras herramientas para comunicarse con una IA ayuda a organizar la idea y presentarla de forma coherente, lo cual, si se hace con cuidado, produce resultados satisfactorios.&lt;/p&gt;

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

&lt;p&gt;En definitiva, siempre será necesario que quien "programa" —o quien indica a la IA qué hacer— tenga lucidez y claridad para transmitir sus necesidades de forma precisa.&lt;/p&gt;

&lt;p&gt;Igual que cualquier profesional que encarga una tarea: si no entrega instrucciones claras, el resultado será deficiente.&lt;/p&gt;

&lt;p&gt;Por eso, quizá dentro de no mucho tiempo no será imprescindible conocer la sintaxis de un lenguaje de programación, pero sí será necesario aprender a expresar ideas con claridad. En ese futuro tendrá gran valor la formación en pensamiento lógico, dialéctica, redacción, sintaxis y todas las habilidades que ayudan a transmitir ideas de forma clara, precisa y coherente.&lt;/p&gt;

</description>
      <category>programacion</category>
      <category>ia</category>
      <category>productividad</category>
      <category>tecnologia</category>
    </item>
    <item>
      <title>IA en la nube vs. local: ¿realmente puedes elegir?</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Thu, 23 Jul 2026 18:53:51 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/ia-en-la-nube-vs-local-realmente-puedes-elegir-1o43</link>
      <guid>https://dev.to/carlos_arturocastaog_/ia-en-la-nube-vs-local-realmente-puedes-elegir-1o43</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%2F8nal9unzw69ehm4m4k3p.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%2F8nal9unzw69ehm4m4k3p.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En un artículo anterior, hablaba sobre la dicotomía que enfrentamos al decidir &lt;strong&gt;dónde ejecutar nuestros modelos de IA&lt;/strong&gt;: ¿en la nube o en infraestructura local?&lt;/p&gt;

&lt;p&gt;Señalé que la decisión gira, en gran medida, en torno a dos factores críticos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control de costos&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protección de datos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y esto sigue siendo cierto. Pero hoy quiero profundizar en un matiz que complica esta elección desde la trinchera de la ingeniería y la gestión administrativa.&lt;/p&gt;




&lt;h2&gt;
  
  
  El precio de tener el control
&lt;/h2&gt;

&lt;p&gt;Tener un servidor local no es solo comprar un equipo. Es asumir toda una cadena de costos ocultos que muchas veces no se consideran en el presupuesto inicial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Racks y sistemas de refrigeración&lt;/li&gt;
&lt;li&gt;Gabinetes eléctricamente aislados&lt;/li&gt;
&lt;li&gt;Cableado estructurado&lt;/li&gt;
&lt;li&gt;Mantenimiento físico y actualizaciones&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Solo en infraestructura básica, el desembolso inicial puede superar fácilmente los &lt;strong&gt;4.000 USD&lt;/strong&gt;, dependiendo de las exigencias de rendimiento.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Y el problema no termina ahí. Compartir datos que deben protegerse —algo cada vez más común— encarece aún más la operación, porque las soluciones de seguridad y cumplimiento normativo suman capas de complejidad y gasto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La conclusión es incómoda pero real&lt;/strong&gt;: mantener el control total es deseable, pero no siempre está al alcance del bolsillo empresarial.&lt;/p&gt;




&lt;h2&gt;
  
  
  La alternativa que está ganando terreno: las "factory IA"
&lt;/h2&gt;

&lt;p&gt;Cuando el coste de la infraestructura propia es prohibitivo, surge una opción intermedia que cada vez se menciona más en círculos tecnológicos: las &lt;strong&gt;infraestructuras compartidas&lt;/strong&gt;, también conocidas como &lt;strong&gt;"factory IA"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No son data centers tradicionales. Su enfoque no es el almacenamiento masivo de datos, sino &lt;strong&gt;ejecutar modelos de lenguaje (LLM) ya probados y listos para consumo empresarial&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Empresas con suficiente capital intelectual y financiero montan estas fábricas de IA y ofrecen acceso a modelos maduros como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mistral&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Llama&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos modelos se entregan listos para funcionar en servidores potentes, aunque no necesariamente masivos. Y al ser servicios de uso intensivo pero compartido, los precios resultan mucho más manejables.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿No pagamos ya por IA en la web?
&lt;/h2&gt;

&lt;p&gt;Es cierto. Hoy cualquiera paga por acceso a ChatGPT, Claude o Gemini. Pero el problema de fondo no es el precio por token, sino &lt;strong&gt;la soberanía digital&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La soberanía digital no es solo independencia política, sino la capacidad de decidir dónde se alojan los datos, cómo se procesan, quién los controla y a qué costo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No todos los países, incluso con buen desarrollo tecnológico, pueden crear, capacitar y mantener las enormes infraestructuras necesarias para entrenar modelos desde cero. Pero sí pueden —con apoyo adecuado— ofrecer acceso a modelos ya entrenados, configurados para casos de uso locales.&lt;/p&gt;




&lt;h2&gt;
  
  
  El rol del Estado y las políticas públicas
&lt;/h2&gt;

&lt;p&gt;Crear una &lt;strong&gt;factory IA&lt;/strong&gt; no es algo que cualquier empresa pueda hacer por sí sola. Requiere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grandes inversiones iniciales&lt;/li&gt;
&lt;li&gt;Personal altamente calificado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apoyo estatal&lt;/strong&gt; para su creación y operación&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El Estado debe facilitar incentivos fiscales, marcos regulatorios claros y condiciones que permitan a las empresas invertir en este tipo de infraestructura sin quedar en desventaja frente a los gigantes tecnológicos internacionales.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sin un impulso público, la palabra "soberanía" queda vacía.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿Qué pasa si no actuamos?
&lt;/h2&gt;

&lt;p&gt;Me atrevo a hacer una comparación: lo que ocurrió con la expansión de Internet.&lt;/p&gt;

&lt;p&gt;Hoy, quien no tiene buena cobertura de red está en desventaja competitiva. Lo mismo pasará con las factory IA. Los países que no construyan una infraestructura adecuada para el procesamiento de IA quedarán rezagados, mientras otros avanzan y consolidan su ventaja.&lt;/p&gt;




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

&lt;p&gt;La dicotomía nube vs. local no se resuelve con una fórmula única. Depende del tamaño de la empresa, del tipo de datos que maneja y del presupuesto disponible.&lt;/p&gt;

&lt;p&gt;Pero lo que está claro es que la &lt;strong&gt;soberanía digital&lt;/strong&gt; no puede ser un lujo solo para unos pocos. Las &lt;strong&gt;factory IA&lt;/strong&gt; representan una vía realista para que países y regiones con menos recursos puedan competir en la nueva economía del conocimiento.&lt;/p&gt;

&lt;p&gt;La pregunta no es si debemos optar por una u otra, sino cómo podemos construir un ecosistema que permita &lt;strong&gt;elegir con soberanía&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;¿Tú qué opinas? ¿Has considerado migrar a infraestructura local o compartida? Te leo en los comentarios. 👇&lt;/p&gt;

</description>
      <category>ia</category>
      <category>infraestructura</category>
    </item>
    <item>
      <title>La IA no adivina lo que no pensaste: el 5% que siempre falla</title>
      <dc:creator>Carlos Arturo Castaño G.</dc:creator>
      <pubDate>Mon, 20 Jul 2026 17:56:40 +0000</pubDate>
      <link>https://dev.to/carlos_arturocastaog_/la-ia-no-adivina-lo-que-no-pensaste-el-5-que-siempre-falla-gel</link>
      <guid>https://dev.to/carlos_arturocastaog_/la-ia-no-adivina-lo-que-no-pensaste-el-5-que-siempre-falla-gel</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%2Fu1qxtyl1t1oeelt25st0.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%2Fu1qxtyl1t1oeelt25st0.jpg" alt=" " width="320" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  La IA no adivina lo que no pensaste: el 5% que siempre falla
&lt;/h1&gt;

&lt;p&gt;En los últimos meses se repite una idea peligrosa: &lt;em&gt;“con IA ya no te equivocas”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;La realidad, después de usarla de forma intensiva en proyectos reales, es mucho más simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Si no pensaste algo, la IA no lo va a adivinar.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Y si lo adivina, no significa que sea correcto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;La IA acelera el desarrollo, pero &lt;strong&gt;no sustituye el criterio&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 La ilusión de la “decisión asistida”
&lt;/h2&gt;

&lt;p&gt;Las herramientas de IA actuales son muy buenas para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generar código&lt;/li&gt;
&lt;li&gt;Repetir patrones&lt;/li&gt;
&lt;li&gt;Completar estructuras&lt;/li&gt;
&lt;li&gt;Ajustar implementaciones existentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero fallan —y siempre fallarán— en algo clave:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;crear intención donde no existe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Si al diseñar un sistema no pensaste en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la evolución del endpoint&lt;/li&gt;
&lt;li&gt;un caso de uso futuro&lt;/li&gt;
&lt;li&gt;una validación de negocio&lt;/li&gt;
&lt;li&gt;un cambio de requerimientos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...la IA no puede suplir esa ausencia.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚖️ El 95 % funciona, el 5 % aparece después
&lt;/h2&gt;

&lt;p&gt;En la práctica, ocurre esto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;El sistema se genera correctamente (&lt;strong&gt;95 %&lt;/strong&gt;), si fue bien concebido y se le dieron:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;los parámetros y contexto correcto&lt;/li&gt;
&lt;li&gt;las herramientas adecuadas&lt;/li&gt;
&lt;li&gt;las proyecciones y límites claros&lt;/li&gt;
&lt;li&gt;los tests que debe cumplir&lt;/li&gt;
&lt;li&gt;las reglas del negocio de forma clara y precisa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Al probar o usar, aparecen ajustes&lt;br&gt;&lt;br&gt;
No porque la IA “falló”.&lt;br&gt;&lt;br&gt;
Sino porque &lt;strong&gt;el requisito no existía aún&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ese &lt;strong&gt;5 %&lt;/strong&gt; no es un bug de IA.&lt;br&gt;&lt;br&gt;
Es &lt;strong&gt;pensamiento tardío&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Y eso es &lt;strong&gt;normal en ingeniería&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Por qué más herramientas no solucionan esto
&lt;/h2&gt;

&lt;p&gt;Editores con IA (Cursor, Copilot, Claude Code, etc.):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Editan más rápido&lt;/li&gt;
&lt;li&gt;Refactorizan mejor&lt;/li&gt;
&lt;li&gt;Ahorran trabajo mecánico&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero &lt;strong&gt;no mejoran la toma de decisiones&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cambian el &lt;em&gt;cómo&lt;/em&gt; escribes código,&lt;br&gt;&lt;br&gt;
no el &lt;em&gt;qué&lt;/em&gt; deberías haber diseñado.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔑 La regla fundamental
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;La IA amplifica lo que ya sabes pensar.&lt;br&gt;&lt;br&gt;
Si tu punto de partida es cero, el resultado sigue siendo cero.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;La IA &lt;strong&gt;no reduce el error conceptual&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Solo &lt;strong&gt;acelera su materialización&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;La IA es una herramienta excelente para &lt;strong&gt;ejecutar ideas&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Pero las ideas siguen siendo &lt;strong&gt;responsabilidad humana&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Usarla bien no consiste en delegar el pensamiento,&lt;br&gt;&lt;br&gt;
sino en &lt;strong&gt;llegar al código con algo que ejecutar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Porque al final:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;la decisión correcta no se genera,&lt;br&gt;&lt;br&gt;
&lt;strong&gt;se piensa&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;🚀 &lt;em&gt;¿Te ha pasado? Cuéntame en los comentarios cómo estás usando IA en tus proyectos.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ia</category>
      <category>desarrollo</category>
      <category>productividad</category>
      <category>reflexion</category>
    </item>
  </channel>
</rss>
