<?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: Orli Dun</title>
    <description>The latest articles on DEV Community by Orli Dun (@orli).</description>
    <link>https://dev.to/orli</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1042215%2Fa31bc4bc-65c1-4d21-bfce-8f0cf251f8e4.png</url>
      <title>DEV Community: Orli Dun</title>
      <link>https://dev.to/orli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orli"/>
    <language>en</language>
    <item>
      <title>AI Stack: desde ML hasta agentic AI</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Thu, 12 Mar 2026 15:54:33 +0000</pubDate>
      <link>https://dev.to/orli/ai-stack-desde-ml-hasta-agentic-ai-5f52</link>
      <guid>https://dev.to/orli/ai-stack-desde-ml-hasta-agentic-ai-5f52</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 La inteligencia artificial ha dejado de ser interpretada como una herramienta aislada para consolidarse como un ecosistema dinámico de capas interconectadas, donde cada nivel sustenta la innovación del siguiente. &lt;/p&gt;

&lt;p&gt;En el 2026, la comprensión de esta estructura no es solo un requisito técnico, sino una necesidad estratégica para el liderazgo tecnológico, permitiendo identificar cómo las piezas de este rompecabezas (desde el hardware fundacional hasta la autonomía agéntica), encajan para transformar la productividad global. La transición de sistemas que simplemente asisten a sistemas que ejecutan flujos de trabajo de forma independiente, marca el inicio de una nueva era industrial impulsada por la inteligencia conectada.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zyhmjynbvg8n32yexb7.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.amazonaws.com%2Fuploads%2Farticles%2F8zyhmjynbvg8n32yexb7.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo funcionan realmente las capas que están construyendo el futuro de la inteligencia&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La inteligencia artificial suele presentarse como un concepto único, casi mágico. Pero la realidad es mucho más interesante: la IA es un ecosistema de capas tecnológicas, construido durante décadas de investigación, donde cada nivel se apoya sobre el anterior.&lt;/p&gt;

&lt;p&gt;Entender este AI Stack no solo ayuda a evitar confusiones entre términos como Machine Learning, Deep Learning o Generative AI, sino que también permite diseñar mejores sistemas, elegir tecnologías adecuadas y anticipar hacia dónde se dirige la industria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artificial Intelligence (AI)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La IA es el campo general que busca crear sistemas capaces de realizar tareas que normalmente requieren inteligencia humana: razonamiento, aprendizaje, percepción o toma de decisiones. Ejemplos clásicos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chatbots.&lt;/li&gt;
&lt;li&gt;Sistemas de recomendación.&lt;/li&gt;
&lt;li&gt;Robots industriales.&lt;/li&gt;
&lt;li&gt;Sistemas de diagnóstico médico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La IA moderna combina múltiples enfoques: lógica simbólica, aprendizaje automático, modelos probabilísticos y redes neuronales. Históricamente, los primeros sistemas de IA eran &lt;code&gt;rule-based systems&lt;/code&gt;:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;loan_approval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;income&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;credit_score&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;income&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;credit_score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Approved&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Denied&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este tipo de sistema no aprende, sólo ejecuta reglas definidas por humanos; por eso surgió la siguiente capa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine Learning (ML)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es un subconjunto de la IA donde los sistemas aprenden patrones a partir de datos, sin ser programados explícitamente para cada caso. En lugar de definir reglas, entrenamos modelos. Ejemplo: &lt;em&gt;clasificación con Scikit-Learn.&lt;/em&gt;&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;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.datasets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_iris&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.model_selection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.ensemble&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RandomForestClassifier&lt;/span&gt;

&lt;span class="c1"&gt;# dataset
&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_iris&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;return_X_y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# dividir datos
&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# modelo
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RandomForestClassifier&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# entrenamiento
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# predicción
&lt;/span&gt;&lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Casos de uso comunes:&lt;/strong&gt; predicción de fraude, recomendación de productos, predicción de demanda o análisis de &lt;code&gt;churn&lt;/code&gt;. Pero el ML tradicional tiene límites cuando los datos son muy complejos o de alta dimensión; ahí entran las redes neuronales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Neural Networks (NN)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se inspiran en la estructura del cerebro humano: nodos interconectados que procesan información. Cada neurona artificial calcula:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;output = activation(weight * input + bias)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Las redes modernas se entrenan mediante backpropagation, un algoritmo que ajusta los pesos para minimizar el error. Ejemplo en &lt;em&gt;PyTorch&lt;/em&gt;:&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;torch&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch.nn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;

&lt;span class="c1"&gt;# red neuronal simple
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NeuralNetwork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Module&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;__init__&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="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&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;layer1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&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;layer2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&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;def&lt;/span&gt; &lt;span class="nf"&gt;forward&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;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;relu&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="nf"&gt;layer1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;layer2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NeuralNetwork&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rand&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="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aplicaciones típicas:&lt;/strong&gt; reconocimiento de imágenes, procesamiento del lenguaje, detección de anomalías o predicción financiera. Pero cuando estas redes crecen en profundidad… ocurre algo poderoso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deep Learning (DL)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una evolución de las redes neuronales: más capas, más datos, más poder computacional. Esto permitió avances históricos en: visión por computadora, reconocimiento de voz, NLP y conducción autónoma. Los modelos modernos incluyen arquitecturas como: &lt;em&gt;CNN, RNN, Transformers, Autoencoders&lt;/em&gt;, entre otras.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplo simple de red profunda en TensorFlow&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tensorflow&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;keras&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tensorflow.keras&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;layers&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keras&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Sequential&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Dense&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;activation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;relu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Dense&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;activation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;relu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Dense&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="n"&gt;activation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;softmax&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="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;optimizer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sparse_categorical_crossentropy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;metrics&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;accuracy&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El deep learning permitió entrenar modelos generativos, capaces de crear contenido nuevo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generative AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una rama de la IA capaz de generar contenido nuevo: texto, imágenes, audio, código o video. Entre los modelos generativos encontramos: GANs, VAEs, Diffusion models, LLMs. Un ejemplo clásico es GAN (&lt;em&gt;Generative Adversarial Networks&lt;/em&gt;), donde dos redes compiten: generador y discriminador, esto permite crear datos sintéticos realistas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplo conceptual en PyTorch&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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;torch&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;torch.nn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Module&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;__init__&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="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&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;net&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Sequential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ReLU&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Linear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;784&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tanh&lt;/span&gt;&lt;span class="p"&gt;()&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;forward&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;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;net&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;generator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;noise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randn&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="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fake_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;noise&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fake_image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoy vemos generative AI en: &lt;em&gt;ChatGPT, Midjourney, Copilot, Claude, Gemini&lt;/em&gt; y otros. Pero dentro de este mundo hay dos categorías clave.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Large Language Models (LLMs) y Small Language Models (SLMs)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LLMs:&lt;/strong&gt; son modelos gigantes con miles de millones de parámetros. Sus ventajas: el razonamiento complejo, la generación extensa y la comprensión contextual profunda. Su arquitectura base: &lt;strong&gt;Transformers.&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ejemplo usando &lt;strong&gt;&lt;em&gt;HuggingFace&lt;/em&gt;&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;span class="n"&gt;generator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Artificial Intelligence will transform&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SLMs:&lt;/strong&gt; son versiones más compactas optimizadas para: menor latencia, menor consumo energético y ejecución local. Se usan en: dispositivos edge, automatización empresarial y asistentes embebidos. La tendencia actual en sistemas productivos es arquitecturas híbridas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SLM&lt;/strong&gt; -&amp;gt; tareas rápidas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt; -&amp;gt; razonamiento complejo&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI Agents y Agentic AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La capa más reciente es Agentic AI. Aquí la IA deja de ser solo un generador de respuestas y se convierte en un sistema que planifica y ejecuta acciones. Un agente puede: planificar tareas, usar herramientas, recordar información o tomar decisiones. Estos sistemas se consideran intelligent agents, capaces de actuar de forma autónoma en entornos complejos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arquitectura típica de un agente:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;
User
 ↓
LLM reasoning
 ↓
Planning
 ↓
Tools / APIs
 ↓
Execution
 ↓
Memory
&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplo de agente en Python:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.colab&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;userdata&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_weather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;userdata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;WEATHER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Retrieve the API key from Colab secrets
&lt;/span&gt;    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.weatherapi.com/v1/current.json?key=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;q=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&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;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# Raise an HTTPError for bad responses (4xx or 5xx)
&lt;/span&gt;    &lt;span class="k"&gt;return&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;def&lt;/span&gt; &lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;search_weather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Check if 'current' key exists before accessing it
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temp_c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;current&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;temp_c&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="c1"&gt;# Handle cases where 'current' or 'temp_c' might be missing even in a 'successful' JSON response
&lt;/span&gt;        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Could not retrieve temperature for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. API response: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No pude obtener la temperatura actual.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hace frío, lleva chaqueta.&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;El clima está agradable.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bogota&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frameworks populares:&lt;/strong&gt; &lt;em&gt;LangChain, CrewAI, AutoGPT, Semantic Kernel&lt;/em&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo se combinan todas estas capas en sistemas reales?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un sistema moderno de IA puede verse así:&lt;/p&gt;

&lt;pre&gt;
        AI Agents
           ↑
      Generative AI
           ↑
        LLMs / SLMs
           ↑
       Deep Learning
           ↑
      Neural Networks
           ↑
       Machine Learning
           ↑
    Artificial Intelligence
&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo real de arquitectura:&lt;/strong&gt; un asistente de atención al cliente podría usar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CNN&lt;/strong&gt; → analizar imágenes de productos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt; → responder preguntas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG&lt;/strong&gt; → recuperar información de documentos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt; → ejecutar procesos de soporte&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;La inteligencia emerge de la combinación de capas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El futuro del AI Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La próxima evolución apunta a tres tendencias claras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI multi-agent systems:&lt;/strong&gt; múltiples agentes colaborando.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modelos híbridos:&lt;/strong&gt; SLMs + LLMs + herramientas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomía progresiva:&lt;/strong&gt; IA que ejecuta procesos completos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Incluso se está explorando la idea de un Agentic Web, donde redes de agentes colaboran en internet como una nueva capa de inteligencia distribuida. La IA no es una sola tecnología, es una &lt;strong&gt;&lt;em&gt;arquitectura evolutiva de capas&lt;/em&gt;&lt;/strong&gt; que durante décadas ha ido agregando capacidades:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4jds09ou26iaqlqw4o6.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.amazonaws.com%2Fuploads%2Farticles%2Fm4jds09ou26iaqlqw4o6.jpg" alt=" " width="444" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El ecosistema de la inteligencia artificial en 2026 es un testimonio de la convergencia entre la potencia del software y la solidez de la infraestructura física. Desde el ML que sustenta la analítica predictiva hasta los agentes autónomos que ejecutan la estrategia empresarial, cada capa del stack tecnológico ofrece una oportunidad única para la innovación y la eficiencia. Sin embargo, la verdadera ventaja competitiva reside en la capacidad de integrar estas capas bajo un marco de confianza, seguridad y ética.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El futuro de la IA no pertenece a quienes adoptan la tecnología más rápido, sino a quienes la integran mejor en sus cimientos operativos, entendiendo que cada vatio de energía, cada token de razonamiento y cada acción agéntica deben estar alineados con un propósito humano superior. En este nuevo orden económico, la inteligencia ya no es un atributo individual de las máquinas, sino una propiedad conectada de un ecosistema global que está redefiniendo los límites de lo posible. La gran transición que estamos viviendo es clara, de herramientas inteligentes → a sistemas autónomos. Y quien entienda este stack no solo usará la IA… la diseñará.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Gracias por acompañarme en esta aventura tech! 👩🏻‍🦰 👩🏻‍💻✨&lt;/strong&gt;&lt;br&gt;
🚀 ¿Te ha inspirado este contenido?&lt;br&gt;
Me encantaría saber tu opinión o leer tus experiencias. 🧡&lt;/p&gt;

&lt;p&gt;Si quieres explorar más de lo que estoy creando (proyectos, blogs, contenido tech y novedades en IA/ML), te invito a visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🎯 &lt;a href="https://orlidun.vercel.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;orli_.app&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Y si prefieres conectar:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔗 &lt;a href="https://www.linkedin.com/in/orlibetdungonzalez/" rel="noopener noreferrer"&gt;&lt;strong&gt;Conecta conmigo en Linkedin&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📚 &lt;a href="https://my-million-friend-blog.vercel.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;Mi blog personal&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Code with heart - Create with soul ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referencias:&lt;/strong&gt;&lt;br&gt;
Imágenes creadas con Gemini (google.com)&lt;/p&gt;

&lt;h2&gt;
  
  
  porunmillondeamigos #makeyourselfvisible #creatorcontent #linkedin #developers #opentowork #agents #ai #machinelearning #deeplearning #NN
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hi615l072n6h3ny6q45.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.amazonaws.com%2Fuploads%2Farticles%2F0hi615l072n6h3ny6q45.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>agents</category>
    </item>
    <item>
      <title>El nuevo rol del ingeniero</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Fri, 13 Feb 2026 21:34:53 +0000</pubDate>
      <link>https://dev.to/orli/el-nuevo-rol-del-ingeniero-1k00</link>
      <guid>https://dev.to/orli/el-nuevo-rol-del-ingeniero-1k00</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 durante décadas, la excelencia en ingeniería se midió por la capacidad de traducir lógica humana a sintaxis de máquina. Pero el tablero ha cambiado. Hoy, el valor no reside en la escritura, sino en la orquestación.&lt;/p&gt;

&lt;p&gt;Los equipos de alto rendimiento ya no ven a la Inteligencia Artificial como un “chat” para resolver dudas; la han integrado como un componente activo de su infraestructura.&lt;/p&gt;

&lt;p&gt;El valor ya no está en quién escribe más rápido líneas de código, sino en quién diseña sistemas donde una o varias IAs generan, prueban, corrigen y despliegan software de forma orquestada. Esto implica pensar en procesos, contextos, memoria y seguridad antes que en funciones aisladas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zmtcyujyk7n8os3vf0r.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.amazonaws.com%2Fuploads%2Farticles%2F0zmtcyujyk7n8os3vf0r.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El cambio de paradigma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Estamos pasando de un modelo artesanal a uno de manufactura automatizada de software. Quienes lideran el sector están aplicando estas cinco palancas de eficiencia:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Desacoplamiento de la fase de diseño (plan vs. execute)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La mayor ineficiencia de un desarrollador hoy es empezar a escribir código sin un plano validado por la IA. Se utiliza una fase de &lt;em&gt;Thinking&lt;/em&gt; donde el modelo analiza la arquitectura, detecta &lt;em&gt;edge cases&lt;/em&gt; y redacta un documento de diseño técnico. Solo cuando el plan es robusto, se delega la ejecución del código a la máquina.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Contexto persistente y memoria viva (&lt;code&gt;CONTEXT.md&lt;/code&gt;)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El gran fallo de muchos es tratar cada interacción con la IA como un lienzo en blanco. La solución sería la creación de archivos de instrucciones de contexto (estilo &lt;code&gt;.ai-rules&lt;/code&gt; o &lt;code&gt;CONTEXT.md&lt;/code&gt;). Estos actúan como la "memoria a largo plazo" del proyecto, almacenando patrones de diseño, estándares de seguridad y lecciones aprendidas de errores pasados para que la IA no los repita jamás.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Ejecución paralela mediante worktrees&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El flujo lineal de “&lt;em&gt;una tarea a la vez&lt;/em&gt;” ha muerto. Los ingenieros avanzados utilizan &lt;em&gt;Git Worktrees&lt;/em&gt; para mantener múltiples entornos de trabajo activos. Mientras una instancia de IA refactoriza el módulo de autenticación, otra genera la documentación de la API y una tercera limpia la deuda técnica en una rama paralela. El ingeniero supervisa la integración, no la escritura.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Sistemas Multi-Agente y especialización&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ya no se le pide “&lt;em&gt;todo a un modelo&lt;/em&gt;”. Se diseñan flujos agentizados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agentes de auditoría:&lt;/strong&gt; revisan seguridad y cumplimiento en tiempo real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentes de QA:&lt;/strong&gt; diseñan y ejecutan tests de integración basados en el comportamiento del usuario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentes de contexto:&lt;/strong&gt; filtran la información relevante para no saturar la ventana de contexto de los modelos principales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Debugging de Ciclo Cerrado&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En lugar de buscar errores manualmente en los logs, se conectan los flujos de salida (logs de CI/CD) directamente a la IA. El sistema no solo detecta el error, sino que propone y, tras validación humana, aplica el &lt;em&gt;patch&lt;/em&gt; de forma autónoma.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamento práctico y referencias&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los patrones de subagentes y orquestación de múltiples sesiones son ya prácticas emergentes en ingeniería de agentes: delegar tareas a subagentes con &lt;em&gt;prompts&lt;/em&gt; y permisos limitados mejora la escalabilidad y la seguridad del flujo de trabajo. Proyectos y repositorios de ejemplo muestran cómo convertir un asistente único en una red de subagentes que colaboran y se especializan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplos de implementación paso a paso&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A continuación verás ejemplos genéricos (no ligados a un proveedor) que puedes adaptar a la API de la IA que uses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Paralelizar con Git worktrees (aislar contexto)&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Crear un worktree por feature
git fetch origin main
git worktree add ../wt-feature-123 origin/main -b feature/123
cd ../wt-feature-123
# Aquí la IA trabajará en ese directorio aislado
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Explicación:&lt;/em&gt;&lt;/strong&gt; cada &lt;em&gt;worktree&lt;/em&gt; es un checkout independiente; la IA puede generar &lt;em&gt;commits/PRs&lt;/em&gt; en ese directorio sin contaminar la rama principal ni otras sesiones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Orquestador básico (patrón genérico):&lt;/em&gt;&lt;/strong&gt; el objetivo es lanzar sesiones paralelas de IA, guardar artefactos en &lt;em&gt;worktrees&lt;/em&gt; y delegar a subagentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# orchestrator.py
import concurrent.futures
import subprocess
import json
from pathlib import Path
from typing import Dict

class AIClient:
    """Cliente genérico: sustituir send_prompt por la llamada real a la IA."""
    def __init__(self, session_name: str):
        self.session_name = session_name
    def send_prompt(self, prompt: str) -&amp;gt; Dict:
        # Simulación: en producción, llamar a la API de la IA y devolver JSON con 'files' y 'notes'
        return {"files": {"app.py": f"print('Hello from {self.session_name}')"}, "notes": "Simulated"}

def create_worktree(path: Path, base_branch: str = "main"):
    path_parent = path.parent
    subprocess.run(["git", "fetch", "origin", base_branch], check=True)
    subprocess.run(["git", "worktree", "add", str(path), f"origin/{base_branch}"], check=True)

def write_files(path: Path, files: Dict[str, str]):
    path.mkdir(parents=True, exist_ok=True)
    for fname, content in files.items():
        (path / fname).write_text(content, encoding="utf-8")

def run_session(session_name: str, prompt: str, base_dir: Path):
    client = AIClient(session_name)
    result = client.send_prompt(prompt)
    wt_path = base_dir / session_name
    write_files(wt_path, result["files"])
    # Opcional: crear commit
    subprocess.run(["git", "-C", str(wt_path), "add", "."], check=False)
    subprocess.run(["git", "-C", str(wt_path), "commit", "-m", f"AI: changes for {session_name}"], check=False)
    return {"session": session_name, "notes": result["notes"]}

def main():
    base_dir = Path("../worktrees")
    tasks = [
        ("feature-1", "Genera endpoint /users con validación y tests unitarios"),
        ("feature-2", "Refactor auth para tokens rotativos y añade tests"),
    ]
    for name, _ in tasks:
        wt = base_dir / name
        create_worktree(wt, base_branch="main")
    with concurrent.futures.ThreadPoolExecutor(max_workers=4) as ex:
        futures = [ex.submit(run_session, name, prompt, base_dir) for name, prompt in tasks]
        for fut in concurrent.futures.as_completed(futures):
            print("Resultado:", fut.result())

if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9itgf2qw7v01it2o6xj3.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.amazonaws.com%2Fuploads%2Farticles%2F9itgf2qw7v01it2o6xj3.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Nota:&lt;/em&gt;&lt;/strong&gt; Reemplaza &lt;code&gt;AIClient.send_prompt&lt;/code&gt; por la llamada real a la API de la IA que uses. Maneja errores de git y permisos; en CI usa runners con credenciales limitadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Subagentes:&lt;/em&gt;&lt;/strong&gt; la idea es que cada subagente tenga un prompt del sistema, permisos y herramientas limitadas (p. ej. sólo ejecutar tests, o sólo analizar dependencias).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# subagents.py
from typing import Dict

class Subagent:
    def __init__(self, name: str):
        self.name = name
    def handle(self, artifact: Dict) -&amp;gt; Dict:
        raise NotImplementedError

class SecurityAgent(Subagent):
    def handle(self, artifact):
        # artifact puede contener: files, dependency_list, lockfile
        # Aquí llamarías a SCA o a la IA con prompt de auditoría
        return {"ok": True, "issues": []}

class TestAgent(Subagent):
    def handle(self, artifact):
        # Ejecuta tests en un entorno aislado (ej. Docker)
        # Simulación:
        return {"ok": False, "failed": ["test_create_user"], "logs": "Traceback..."}

def delegate(agents, artifact):
    results = {}
    for a in agents:
        results[a.name] = a.handle(artifact)
    return results

# Uso
if __name__ == "__main__":
    agents = [SecurityAgent("security"), TestAgent("tests")]
    artifact = {"files": {"app.py": "print('x')"}}
    print(delegate(agents, artifact))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;¿Por qué funciona?&lt;/em&gt;&lt;/strong&gt; porque cada subagente puede tener su propio system prompt y acceso restringido a herramientas (SCA, runner de tests, DB read-only), lo que reduce riesgos y mejora trazabilidad. Estudios y guías sobre subagentes muestran que esta especialización facilita la orquestación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Memoria viva: &lt;code&gt;AGENTS.md&lt;/code&gt; (plantilla)&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# AGENTS.md
**Última actualización:** 2026-02-13
**Propósito:** registrar prompts canónicos, errores recurrentes y subagentes.

## Prompts canónicos
- Crear endpoint CRUD: "Genera POST /items con validación X, esquema JSON y tests unitarios."

## Errores recurrentes
- Race condition en job de sincronización
  - Causa: falta de locking
  - Solución: usar distributed lock; PR #456

## Subagentes
- security-agent: SCA y revisión de dependencias
- test-agent: ejecuta tests unitarios e integración
- cleanup-agent: resume y recorta contexto de sesiones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Beneficio:&lt;/em&gt;&lt;/strong&gt; evita repetir prompts, acelera onboarding y documenta decisiones de diseño.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depuración desde logs, Slack o CI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Flujo:&lt;/em&gt;&lt;/strong&gt; ingest logs → indexar en vector DB → IA recibe slice de logs + prompt: “Encuentra la excepción raíz y propone 3 fixes con difs.” → IA genera PR con parche y tests que reproducen el fallo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Recomendación técnica:&lt;/em&gt;&lt;/strong&gt; almacenar trazas estructuradas (timestamp, trace_id, commit) y exponer un endpoint que permita a la IA recuperar el contexto mínimo reproducible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Analytics y deuda técnica sin escribir SQL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Técnica:&lt;/em&gt;&lt;/strong&gt; construir un semantic layer (metadatos + modelos) y exponerlo a la IA mediante embeddings o APIs que traduzcan prompts en consultas parametrizadas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Resultado:&lt;/em&gt;&lt;/strong&gt; la IA genera pipelines o queries a través de la capa semántica, no SQL ad-hoc; los ingenieros revisan y aprueban cambios en la capa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de prompt canónico (plantilla)&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;System:&lt;/strong&gt; Eres un subagente especializado en pruebas unitarias.&lt;br&gt;
&lt;strong&gt;User:&lt;/strong&gt; Contexto: repo con tests en &lt;code&gt;tests/&lt;/code&gt;, falla en &lt;code&gt;test_user_create&lt;/code&gt;. Adjunta &lt;code&gt;stacktrace&lt;/code&gt; y último &lt;code&gt;commit&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;Tarea:&lt;/strong&gt; Identifica la causa raíz, genera un test que reproduzca la falla y propone un parche con diff. Explica por qué el parche es seguro y añade pasos para reproducir localmente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Riesgos y mitigaciones&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coste por sesión paralela:&lt;/strong&gt; controlar con budgeting, límites de tokens y sesiones efímeras.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cambios inseguros propuestos por la IA:&lt;/strong&gt; obliga a pasar por security-agent y pruebas reproducibles antes de merge automático.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drift de contexto:&lt;/strong&gt; usar un subagente de limpieza que resuma y recorte la conversación periódicamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Falsos positivos/overfitting en tests generados por IA:&lt;/strong&gt; exige tests humanos revisados y métricas de cobertura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trazabilidad y auditoría:&lt;/strong&gt; cada PR generado por IA debe incluir: prompt usado, versión del modelo, hash del prompt y AGENTS.md entry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resultado: menos fricción, más velocidad&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta transición no trata de reemplazar al programador, sino de multiplicar su capacidad de impacto. Un solo ingeniero orquestando un sistema de IA puede mover la aguja más rápido que un equipo entero atrapado en la sintaxis manual.&lt;/p&gt;

&lt;p&gt;La brecha ya no está entre quienes saben programar y quienes no. Está entre quienes siguen escribiendo código y quienes diseñan los sistemas que lo escriben por ellos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Diseñar el sistema que escribe código por ti no es magia: es arquitectura, procesos y disciplina. Paralelizar sesiones, aislar contextos, usar subagentes especializados y mantener una memoria viva transforma velocidad y calidad. Si sigues escribiendo código línea a línea, estás perdiendo ventaja; si diseñas la orquesta que lo produce, estás construyendo la ventaja competitiva.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gracias por acompañarme en esta aventura tech! 👩🏻‍🦰 👩🏻‍💻✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha inspirado este contenido?&lt;br&gt;
Me encantaría saber tu opinión o leer tus experiencias. 🧡&lt;/p&gt;

&lt;p&gt;Si quieres explorar más de lo que estoy creando (proyectos, blogs, contenido tech y novedades en IA/ML), te invito a visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 [&lt;a href="https://orlidun.vercel.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;orli_.app&lt;/strong&gt;&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y si prefieres conectar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 [&lt;a href="//linkedin.com/in/orlibetdungonzalez"&gt;&lt;strong&gt;Conecta conmigo en Linkedin&lt;/strong&gt;&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;📚 [&lt;a href="https://my-million-friend-blog.vercel.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;Mi blog personal&lt;/strong&gt;&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✨ &lt;em&gt;&lt;strong&gt;Code with heart — Create with soul&lt;/strong&gt;&lt;/em&gt;✨&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referencias:&lt;/strong&gt;&lt;br&gt;
Imágenes creadas con Gemini (google.com)&lt;/p&gt;

&lt;h2&gt;
  
  
  porunmillondeamigos #makeyourselfvisible #creatorcontent #linkedin #developers #opentowork #Claudemd #IA #SystemsEngineers #Automatization #CI #CD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc84pvmhpavqo9l4bl7qh.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.amazonaws.com%2Fuploads%2Farticles%2Fc84pvmhpavqo9l4bl7qh.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Diseño de sistemas: los cimientos invisibles que mantienen vivos tus servicios</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Wed, 04 Feb 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/orli/diseno-de-sistemas-los-cimientos-invisibles-que-mantienen-vivos-tus-servicios-47o0</link>
      <guid>https://dev.to/orli/diseno-de-sistemas-los-cimientos-invisibles-que-mantienen-vivos-tus-servicios-47o0</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 La mayoría de los sistemas no fallan por falta de código. Fallan por falta de pensamiento. Por correr antes de entender. Por construir sin cimientos. En diseño de sistemas no hay atajos elegantes: hay decisiones silenciosas que se notan solo cuando todo tiembla. Idempotencia, caché, health checks, balanceo de carga… palabras que suenan técnicas, sí, pero que en el fondo hablan de algo muy humano: prever el error antes de que ocurra.&lt;/p&gt;

&lt;p&gt;Este post es una invitación a volver a lo esencial. A entender por qué estas piezas existen, cómo se usan en la vida real y qué compromisos implican. Sin humo. Sin dogmas. Con ejemplos claros y cicatrices incluidas. Si alguna vez tu sistema se cayó "sin razón aparente", este texto es para ti. Si nunca se te ha caído ninguno… léelo antes de que te pase.&lt;/p&gt;

&lt;p&gt;El diseño de sistemas no va de dibujar cajas y flechas para una presentación. Va de pensar antes de correr. De honrar lo que ya funciona. De preparar el terreno para lo que todavía no existe, pero llegará. Porque los sistemas, como las ciudades, crecen. Y si no hay orden desde el inicio, el caos se cobra su precio.&lt;/p&gt;

&lt;p&gt;Los pilares del diseño de sistemas no son reglas talladas en piedra. Son acuerdos silenciosos entre el presente y el futuro. Escalabilidad, confiabilidad, simplicidad. Nada nuevo. Nada obsoleto. Todo esencial. Todo sistema, al final, cuenta una historia: la de las decisiones que se tomaron… y las que se evitaron.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es realmente el diseño de sistemas?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagina el plano de una gran infraestructura digital. No una casa, sino una ciudad viva. El diseño de sistemas es el proceso de definir la arquitectura, los módulos, las interfaces y los datos de un sistema para que cumpla necesidades reales, hoy y mañana. No es escribir código a lo loco; es pensar cómo se va a construir, cómo se va a desplegar, cómo se va a mantener y cómo va a sobrevivir cuando el tráfico se multiplique por diez.&lt;/p&gt;

&lt;p&gt;Un buen diseño no presume. Funciona. Crece. Resiste. Y, cuando falla, porque todo falla, se recupera con dignidad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pw6ujroh8y09olbqj4s.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.amazonaws.com%2Fuploads%2Farticles%2F9pw6ujroh8y09olbqj4s.jpg" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Los objetivos que guían toda buena arquitectura&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Todo ingeniero que diseña sistemas persigue, consciente o no, cuatro grandes metas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidad:&lt;/strong&gt; que el sistema soporte más usuarios sin romperse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desempeño:&lt;/strong&gt; que responda rápido y sin desperdiciar recursos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad:&lt;/strong&gt; que los datos estén protegidos, incluso cuando algo sale mal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usabilidad:&lt;/strong&gt; que sea útil para las personas, no solo correcto en teoría.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si uno de estos pilares se ignora, el sistema lo recordará tarde o temprano.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Las piezas del juego&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un sistema se arma como un set de Lego bien pensado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bases de datos, donde vive la memoria.&lt;/li&gt;
&lt;li&gt;Balanceadores de carga, que reparten el esfuerzo para que nadie se queme.&lt;/li&gt;
&lt;li&gt;Cachés, pequeños atajos que ahorran tiempo y paciencia.&lt;/li&gt;
&lt;li&gt;Servidores web y de aplicaciones, el hogar del código.&lt;/li&gt;
&lt;li&gt;Colas y mensajería, para que las partes se comuniquen sin empujarse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ninguna pieza es mágica por sí sola. El valor está en cómo se conectan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conceptos clave para empezar con buen pie&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Diseñar sistemas es aprender las reglas del tráfico digital:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Balanceo de carga:&lt;/strong&gt; distribuir peticiones para evitar embotellamientos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patrones de arquitectura:&lt;/strong&gt; experiencia destilada en guías prácticas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway, Load Balancer y Reverse Proxy:&lt;/strong&gt; cada uno con su rol claro; uno recibe, otro reparte, otro protege.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocolos de comunicación como HTTPS o gRPC&lt;/strong&gt;, que dictan cómo se hablan los servicios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocolos de API&lt;/strong&gt;, los acuerdos que permiten que distintos sistemas se entiendan sin gritarse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gRPC&lt;/strong&gt;, por ejemplo, es rápido, eficiente y moderno. No es moda: es evolución.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo: Balanceador mínimo (Nginx) - config esencial&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;- Objetivo:&lt;/strong&gt;&lt;/em&gt; repartir tráfico entre instancias.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# nginx.conf (fragmento)
upstream app_servers {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    listen 80;
    location / {
        proxy_pass http://app_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Explicación:&lt;/em&gt;&lt;/strong&gt; Nginx reparte peticiones y puede usar health checks; combina con API Gateway para seguridad y autenticación.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Arquitectura: dividir para conquistar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los microservicios proponen una idea sencilla y poderosa: dividir una aplicación grande en servicios pequeños e independientes. Cada uno hace poco, pero lo hace bien. Eso sí, esta libertad exige disciplina.&lt;/p&gt;

&lt;p&gt;Aquí entra la idempotencia en el diseño de APIs: repetir una acción no debería causar un desastre. Un pago duplicado, un pedido fantasma… errores así no son bugs menores, son traiciones al sistema. La idempotencia mantiene la cordura.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo: Endpoint idempotente&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Objetivo:&lt;/em&gt;&lt;/strong&gt; evitar efectos duplicados si el cliente reintenta la misma petición.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// idempotent.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());

const processed = new Set(); // en producción usar DB

app.post('/charge', (req, res) =&amp;gt; {
  const idempotencyKey = req.header('Idempotency-Key');
  if (!idempotencyKey) return res.status(400).send('Idempotency-Key required');

  if (processed.has(idempotencyKey)) {
    return res.status(200).send({status: 'already_processed'});
  }

  // procesar pago (simulado)
  processed.add(idempotencyKey);
  return res.status(201).send({status: 'processed'});
});

app.listen(3000);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Explicación:&lt;/em&gt;&lt;/strong&gt; usar una clave de idempotencia evita duplicados; en producción guarda la clave y resultado en una base de datos. Idempotencia es esencial en APIs de pago y pedidos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyojo9qfmqwdga65mnzj.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.amazonaws.com%2Fuploads%2Farticles%2Fkyojo9qfmqwdga65mnzj.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendimiento y monitoreo: escuchar al sistema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un sistema sano habla. Hay que saber escucharlo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caché en bases de datos para no preguntar lo mismo mil veces.&lt;/li&gt;
&lt;li&gt;Atributos de calidad como escalabilidad, disponibilidad y mantenibilidad.&lt;/li&gt;
&lt;li&gt;Health checks para saber si un servicio funciona.&lt;/li&gt;
&lt;li&gt;Heartbeats para confirmar que sigue con vida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitorear no es paranoia: es responsabilidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo: Cache básico con Redis&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Objetivo:&lt;/em&gt;&lt;/strong&gt; reducir latencia y carga en la base de datos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// cache.js
const express = require('express');
const redis = require('redis');
const client = redis.createClient();
const app = express();

app.get('/user/:id', async (req, res) =&amp;gt; {
  const key = `user:${req.params.id}`;
  client.get(key, (err, data) =&amp;gt; {
    if (data) return res.json(JSON.parse(data));
    // simula DB
    const user = {id: req.params.id, name: 'Orli'};
    client.setex(key, 60, JSON.stringify(user)); // TTL 60s
    res.json(user);
  });
});

app.listen(3001);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Explicación:&lt;/em&gt;&lt;/strong&gt; usar TTL evita datos obsoletos; cachear lecturas frecuentes mejora rendimiento y escalabilidad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Seguridad y despliegue: el arte de no romperlo todo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La seguridad no es un "extra":&lt;/li&gt;
&lt;li&gt;HTTPS cifra la comunicación. Punto.&lt;/li&gt;
&lt;li&gt;JWT permite autenticar y autorizar de forma segura.&lt;/li&gt;
&lt;li&gt;CI/CD automatiza despliegues para reducir errores humanos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un buen pipeline no acelera solo el desarrollo; protege al sistema de nosotros mismos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El arte de decidir: los trade-offs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No existe el diseño perfecto. Solo decisiones conscientes. Más velocidad puede significar menos seguridad. Más simplicidad, menos flexibilidad. Aquí entran los patrones de arquitectura, no como dogma, sino como brújula.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Balanceo de carga y microservicios: una alianza inevitable&lt;/li&gt;
&lt;li&gt;Los microservicios viven de escalar horizontalmente. Para eso necesitan balanceadores:&lt;/li&gt;
&lt;li&gt;Reparten tráfico entre múltiples instancias.&lt;/li&gt;
&lt;li&gt;Trabajan junto a un API Gateway como puerta de entrada.&lt;/li&gt;
&lt;li&gt;Usan health checks para evitar enviar tráfico a servicios caídos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hay balanceo externo (desde internet) e interno (entre servicios). Sin ambos, los microservicios pierden su mayor ventaja.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo: Health check simple&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Objetivo:&lt;/em&gt;&lt;/strong&gt; que orquestadores y balanceadores detecten servicios caídos.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# health.py
from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/health')
def health():
    # aquí podrías chequear DB, cache, etc.
    return jsonify(status='UP'), 200

if __name__ == '__main__':
    app.run(port=5000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Explicación:&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;/health&lt;/code&gt; debe devolver &lt;code&gt;UP/DOWN&lt;/code&gt;; los balanceadores y Kubernetes usan esto para no enviar tráfico a instancias malas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Calidad y seguridad: dos caras de la misma moneda&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La calidad se construye con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atributos bien definidos.&lt;/li&gt;
&lt;li&gt;CI/CD confiable.&lt;/li&gt;
&lt;li&gt;Monitoreo constante.&lt;/li&gt;
&lt;li&gt;Gestión inteligente del tráfico y del rendimiento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y la seguridad se refuerza con estándares probados, no con ocurrencias.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atributos de calidad: cómo se mide un buen diseño&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un sistema de calidad equilibra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escalabilidad&lt;/li&gt;
&lt;li&gt;Disponibilidad&lt;/li&gt;
&lt;li&gt;Mantenibilidad&lt;/li&gt;
&lt;li&gt;Resiliencia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todo esto se logra entendiendo los trade-offs, aplicando patrones y respetando principios que llevan décadas funcionando. Porque en tecnología, como en la arquitectura clásica, avanzar no es olvidar el pasado: es apoyarse en él para llegar más lejos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Riesgos, trade-offs y buenas prácticas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistencia de idempotencia:&lt;/strong&gt; usar una base de datos o almacén duradero, no Set en memoria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache vs consistencia:&lt;/strong&gt; cache mejora latencia pero puede servir datos viejos; usar TTL y invalidación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoreo y health checks:&lt;/strong&gt; implementa checks que verifiquen dependencias (DB, Redis).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad:&lt;/strong&gt; siempre HTTPS y autenticación (JWT) en producción.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dicen, y con razón, que para construir bien hay que empezar por los cimientos. En tecnología eso no solo sigue vigente: es casi una ley natural. Diseñar sistemas sin fundamentos es como levantar una casa sin planos. Puede que aguante un tiempo, incluso que se vea bonita… hasta que cruje, se inclina y un día, sin avisar, falla.&lt;/p&gt;

&lt;p&gt;Diseñar sistemas, al final, es un acto de responsabilidad. Con el código. Con los usuarios. Y con el futuro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Gracias por acompañarme en esta aventura tech! 👩🏻‍🦰 👩🏻‍💻✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha inspirado este contenido?&lt;br&gt;
 Me encantaría saber tu opinión o leer tus experiencias. 🧡&lt;/p&gt;

&lt;p&gt;Si quieres explorar más de lo que estoy creando (proyectos, blogs, contenido tech y novedades en IA/ML), te invito a visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 &lt;a href="https://linktr.ee/orlidevs" rel="noopener noreferrer"&gt;&lt;strong&gt;Mi Linktree&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y si prefieres conectar directamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://www.linkedin.com/in/orlibetdungonzalez" rel="noopener noreferrer"&gt;&lt;strong&gt;Conecta conmigo en Linkedin&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="//my-million-friend-blog.vercel.app"&gt;&lt;strong&gt;Mi blog personal&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Code with heart - Create with soul ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referencias:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imágenes creadas con Gemini (google.com)&lt;/p&gt;

&lt;h2&gt;
  
  
  porunmillondeamigos #makeyourselfvisible #creatorcontent #linkedin #developers #opentowork #SystemDesign #ArquitecturaDeSoftware #DrivenDevelopment #idempotencia #caché #HealthChecks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwvlahwbyd452xs4cyz1.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.amazonaws.com%2Fuploads%2Farticles%2Fkwvlahwbyd452xs4cyz1.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Figma Make Acaba de Eliminar la Barrera entre Código y Diseño🤯</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Thu, 16 Oct 2025 15:51:59 +0000</pubDate>
      <link>https://dev.to/orli/figma-make-acaba-de-eliminar-la-barrera-entre-codigo-y-diseno-24p7</link>
      <guid>https://dev.to/orli/figma-make-acaba-de-eliminar-la-barrera-entre-codigo-y-diseno-24p7</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 visionarios, product managers y diseñadores que viven al límite entre la idea y el píxel. Hoy, el universo de Figma tiembla con una actualización que no es solo una función, sino un cambio de paradigma en cómo interactuamos con nuestros prototipos.&lt;/p&gt;

&lt;p&gt;La nueva capacidad de Figma Make de convertir un prototipo interactivo (generado por IA, que es código) en capas de diseño totalmente editables dentro de Figma Design es, sencillamente, la promesa del diseño asistido por IA cumplida.&lt;/p&gt;

&lt;p&gt;La frontera entre prototipado y diseño final acaba de desdibujarse. Con la nueva actualización de #FigmaMake, ahora es posible transformar prototipos interactivos en capas de diseño editables directamente dentro de Figma Design.&lt;br&gt;
Esto significa que ya no hablamos de un flujo lineal (wireframe → prototipo → diseño), sino de un ciclo fluido, donde cada interacción validada en un prototipo puede convertirse en un componente editable, listo para iterar y escalar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔑 ¿Qué cambia con esta función?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Antes:&lt;/strong&gt; Los prototipos eran estáticos en cuanto a edición de diseño. Servían para validar interacciones, pero no podías reutilizar esas pantallas como base editable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahora:&lt;/strong&gt; Cada interacción validada en Figma Make puede exportarse como capas editables en Figma Design, listas para aplicar estilos, auto-layouts, tokens de diseño o integraciones con librerías. En otras palabras: prototipar es diseñar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🌉 El Puente entre el Código y el Lienzo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hasta ahora, la magia de Figma Make residía en su capacidad para tomar una indicación de texto (o un diseño existente) y transformarla en un prototipo funcional, interactivo, basado en código (HTML/CSS/JS). Esto era ideal para pruebas rápidas de concepto, validación de producto y obtención de un MVP funcional.&lt;/p&gt;

&lt;p&gt;Pero había una barrera: ese prototipo funcional vivía en un entorno de código. Si querías refinar el diseño (ajustar un Auto Layout, cambiar una sombra o la tipografía en detalle), tenías que volver a recrearlo manualmente en Figma Design. ¡Esa era la fricción! ¡Ese era el doble trabajo!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ La Novedad Que Lo Cambia Todo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ahora, Figma ha integrado un flujo de trabajo que permite capturar un "snapshot" de la vista previa funcional de Figma Make y pegarlo como capas de diseño nativas y editables dentro de tu archivo de Figma Design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué significa esto en la práctica?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iteración sin Pérdida:&lt;/strong&gt; Creas un prototipo funcional en Make con una prompt rápida. La IA lo genera. Lo pruebas. ¡Te encanta el layout! Ahora, puedes copiarlo y pegarlo directamente en Figma Design. No es una imagen, es un conjunto de capas vectoriales, marcos, Auto Layouts, textos y componentes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La IA como Punto de Partida Editable:&lt;/strong&gt; La IA no solo te da un resultado final, te da una base de diseño limpia y estructurada que puedes optimizar. Ya no empiezas desde un lienzo en blanco o un wireframe estático.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unificando el Flujo Design-Dev:&lt;/strong&gt; Los diseñadores obtienen una estructura sólida para refinar la estética final, y los desarrolladores obtienen una fuente clara de la verdad, ya sea el código funcional de Make o las capas detalladas de Design. El ciclo de retroalimentación se acelera exponencialmente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2Ae9QaoIFtt6-Red30Pchnjw.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%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2Ae9QaoIFtt6-Red30Pchnjw.png" alt="Figma Make" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Ejemplo: de prototipo a diseño editable&lt;/strong&gt;&lt;br&gt;
Imagina que creas un prototipo de app de reservas en Figma Make con un flujo de login → dashboard → reserva.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prototipo en Figma Make (pseudo-código de interacción)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "screen": "Login",
  "elements": [
    { "type": "TextField", "id": "email_input", "placeholder": "Correo electrónico" },
    { "type": "TextField", "id": "password_input", "placeholder": "Contraseña", "secure": true },
    { "type": "Button", "id": "login_btn", "label": "Iniciar sesión", "action": "navigate:Dashboard" }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Conversión automática a capas editables en Figma Design&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "frame": "Login",
  "layers": [
    { "type": "Text", "content": "Correo electrónico", "style": "Label/Default" },
    { "type": "Input", "binding": "email_input", "constraints": { "width": "fill" } },
    { "type": "Text", "content": "Contraseña", "style": "Label/Default" },
    { "type": "Input", "binding": "password_input", "constraints": { "width": "fill" } },
    { "type": "Button", "label": "Iniciar sesión", "variant": "Primary", "action": "navigate:Dashboard" }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;👉 Observa cómo los elementos del prototipo se convierten en capas editables con estilos, constraints y bindings listos para personalizar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Beneficios inmediatos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iteración más rápida:&lt;/strong&gt; No necesitas reconstruir pantallas desde cero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistencia:&lt;/strong&gt; Los prototipos validados se convierten en componentes reutilizables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colaboración:&lt;/strong&gt; Diseñadores y PMs pueden validar interacciones y luego entregar capas editables al equipo de UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidad:&lt;/strong&gt; Perfecto para sistemas de diseño, donde cada prototipo puede alimentar librerías de componentes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 Casos de Uso que Explotan la Productividad&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validación de Layouts Complejos:&lt;/strong&gt; Usa Make para generar rápidamente 5 variaciones de una "landing page" o una "dashboard". Copia el layout que mejor funcione como capas editables en Design. A partir de ahí, solo tienes que aplicar tu Design System y refinar el estilo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diseño de Componentes Funcionales:&lt;/strong&gt; Necesitas un componente de navegación con ciertos estados interactivos. Genera el código funcional en Make, tráelo a Design como capas, guárdalo en tu librería. ¡Boom! Tienes un componente diseñado y validado funcionalmente, casi al instante.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversión de Ideas Rápidas:&lt;/strong&gt; ¿Tienes una idea en una reunión y la sketches en el chat de Make? La IA lo convierte en una IU interactiva. A los 5 minutos, ya tienes las capas de diseño en tu archivo principal para seguir trabajando.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🌟 Caso de uso avanzado: integración con tokens de diseño&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Supongamos que tu prototipo usa un botón primario. Al convertirlo en capa editable, puedes mapearlo a un token de tu sistema de diseño:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "Button",
  "label": "Reservar ahora",
  "variant": "Primary",
  "designToken": {
    "backgroundColor": "{colors.primary.500}",
    "textColor": "{colors.neutral.0}",
    "borderRadius": "{radii.md}"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto asegura que cada interacción validada en prototipo se alinee automáticamente con tu sistema de diseño.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 El Futuro es la Fluidez&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta característica simboliza la fluidez total en el proceso de diseño de producto. Figma Make está convirtiendo a la Inteligencia Artificial en un co-diseñador que no solo genera ideas funcionales, sino que las entrega en el formato que los diseñadores necesitan para su trabajo de precisión: capas editables. Deja de recrear. Empieza a refinar. Esta es la verdadera promesa de un Design System vivo, potenciado por IA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La nueva función de #FigmaMake no es solo una mejora incremental: es un cambio de paradigma. Ahora, cada prototipo validado puede convertirse en diseño editable, cerrando la brecha entre idea, validación y entrega. El futuro del diseño ya no es lineal, es iterativo, editable y escalable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Gracias por acompañarme en esta aventura tech! 👩🏻‍🦰👩🏻💻✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha inspirado este contenido?&lt;br&gt;
 Me encantaría saber tu opinión o leer tus experiencias. 🧡&lt;/p&gt;

&lt;p&gt;Si quieres explorar más de lo que estoy creando (proyectos, blogs, contenido tech y novedades en IA/ML), te invito a visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 &lt;a href="https://linktr.ee/orlidevs" rel="noopener noreferrer"&gt;&lt;strong&gt;Mi Linktree&lt;/strong&gt;&lt;/a&gt;
Y si prefieres conectar directamente:&lt;/li&gt;
&lt;li&gt;🔗 &lt;a href="https://www.linkedin.com/in/orlibetdungonzalez" rel="noopener noreferrer"&gt;&lt;strong&gt;Conecta conmigo en Linkedin&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="//my-million-friend-blog.vercel.app"&gt;&lt;strong&gt;Mi blog personal&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Code with heart - Create with soul ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referencias:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imágenes creadas con Gemini (google.com)&lt;/p&gt;

&lt;h1&gt;
  
  
  #porunmillondeamigos #makeyourselfvisible #creatorcontent #linkedin #developers #opentowork #Figma #FigmaMake #ProductDesign #UIdesign #HerramientasDeDiseño
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgncyccz11ajejzstpmv.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.amazonaws.com%2Fuploads%2Farticles%2Fmgncyccz11ajejzstpmv.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>figma</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🚀 DTOs, Entidades y JPA: El Trío Dinámico de la Persistencia en Java ☕</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Thu, 16 Oct 2025 15:48:47 +0000</pubDate>
      <link>https://dev.to/orli/dtos-entidades-y-jpa-el-trio-dinamico-de-la-persistencia-en-java-28n0</link>
      <guid>https://dev.to/orli/dtos-entidades-y-jpa-el-trio-dinamico-de-la-persistencia-en-java-28n0</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 Cuando trabajamos con Java + Spring Boot + JPA, tarde o temprano nos topamos con tres conceptos que parecen similares, pero cumplen roles muy distintos: Entidades, DTOs y el propio JPA como puente entre el mundo de los objetos y la base de datos. Entenderlos bien es clave para escribir código limpio, mantenible y seguro. &lt;em&gt;&lt;em&gt;¡No es Solo Guardar Datos, es Estrategia!&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;En el mundo del desarrollo en Java, especialmente cuando trabajamos con bases de datos relacionales, existe un trío fundamental que todo desarrollador debe dominar: Entidades, DTOs (Data Transfer Objects) y JPA (Java Persistence API). Confundir sus roles o, peor aún, ignorar uno de ellos, es un camino directo a problemas de rendimiento, seguridad y mantenimiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Las Entidades (El Corazón del Dominio) 💖&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las Entidades JPA son clases POJO (Plain Old Java Objects) que representan las tablas de tu base de datos. Son la representación en código de tu modelo de datos relacional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Características Clave:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistencia:&lt;/strong&gt; Están anotadas con &lt;a class="mentioned-user" href="https://dev.to/entity"&gt;@entity&lt;/a&gt; y mapeadas a una tabla. Cada instancia de una Entidad corresponde a una fila.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identidad Única:&lt;/strong&gt; Siempre deben tener un campo que actúe como clave primaria (anotado con &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lógica de Negocio:&lt;/strong&gt; Deberían contener la lógica de negocio esencial (métodos para cambiar su estado, validar datos, etc.) que pertenece al objeto en sí mismo (aunque a veces esta lógica se delega a servicios).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relaciones:&lt;/strong&gt; Gestionan las relaciones con otras Entidades (@OneToMany, @ManyToOne, etc.), lo que puede llevar a problemas de carga perezosa (Lazy Loading) si no se manejan con cuidado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;*Entidades = ¡Tu modelo de datos, tus reglas, tu fuente de la verdad para la persistencia!&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;En palabras simples, una Entidad es una clase Java anotada con &lt;a class="mentioned-user" href="https://dev.to/entity"&gt;@entity&lt;/a&gt; que representa una tabla en la base de datos. Cada instancia equivale a una fila. Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import jakarta.persistence.*;

@Entity
@Table(name = "usuarios")
public class Usuario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nombre;

    private String email;

    // Getters y Setters
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Aquí, Usuario es la Entidad que JPA usará para mapear la tabla usuarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DTOs (El Mensajero Eficiente) ✉️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un Data Transfer Object (DTO) es un objeto plano, sin lógica de negocio, cuyo único objetivo es transferir datos entre diferentes capas o subsistemas de una aplicación (por ejemplo, entre el Backend y el Frontend).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2ACvJJe_SmpdBJU6m5IdpIxg.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%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2ACvJJe_SmpdBJU6m5IdpIxg.png" alt="img299" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Por Qué Usar DTOs? La Necesidad Estratégica:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad y Control:&lt;/strong&gt; Las Entidades a menudo contienen campos sensibles (como contraseñas hasheadas o IDs internos) o muchas relaciones. Al enviar un DTO al cliente, expones solo los datos necesarios, blindando tu modelo de dominio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendimiento (El Gran Ahorro):&lt;/strong&gt; Este es el punto crítico. Al usar DTOs, puedes proyectar directamente los resultados de una consulta JPA/JPQL/Criteria API a un DTO. Esto significa que solo se consultan y cargan las columnas de la DB que el DTO necesita, evitando la sobrecarga de cargar Entidades completas (con sus relaciones Lazy) cuando solo se requiere una pequeña fracción de la información.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desacoplamiento:&lt;/strong&gt; Separas la interfaz de comunicación (el DTO) del modelo de persistencia (la Entidad). Si cambias un nombre de columna en la Entidad, el DTO de la API puede permanecer inalterado, evitando romper clientes externos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En resumidas, un DTO (Data Transfer Object) no está ligado a la base de datos. Su misión es transportar datos entre capas (controlador, servicio, cliente) sin exponer directamente la entidad. Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class UsuarioDTO {
    private String nombre;
    private String email;

    // Constructor
    public UsuarioDTO(String nombre, String email) {
        this.nombre = nombre;
        this.email = email;
    }

    // Getters
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Notarás que aquí no hay anotaciones de JPA. El DTO es más liviano y seguro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evita exponer campos sensibles (ej. contraseñas).&lt;/li&gt;
&lt;li&gt;Permite personalizar la respuesta (ej. concatenar nombre + apellido).&lt;/li&gt;
&lt;li&gt;Reduce acoplamiento entre la API y la base de datos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;JPA (El Mago de la Persistencia) ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JPA es la especificación de Java para la persistencia de objetos. No es una implementación en sí misma, sino un conjunto de reglas y anotaciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Funcionalidad Esencial:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mapeo Objeto-Relacional (ORM):&lt;/strong&gt; JPA, a través de implementaciones como Hibernate o EclipseLink, toma tus Entidades y se encarga de todo el boilerplate SQL (SELECT, INSERT, UPDATE, DELETE).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gestor de Entidades (EntityManager):&lt;/strong&gt; Es la API principal. Se encarga de gestionar el ciclo de vida de las Entidades: persistir, buscar, actualizar y eliminar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contexto de Persistencia:&lt;/strong&gt; Mantiene un caché de las Entidades que han sido cargadas o modificadas durante una transacción.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;*JPA = La capa de abstracción que te libera de escribir SQL manual, permitiéndote interactuar con la DB usando objetos Java.&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;Simplificando, JPA (Java Persistence API) es la especificación que nos permite mapear objetos Java a tablas SQL. Con implementaciones como Hibernate, podemos olvidarnos de escribir SQL repetitivo y trabajar con repositorios. Ejemplo de repositorio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.springframework.data.jpa.repository.JpaRepository;

public interface UsuarioRepository extends JpaRepository&amp;lt;Usuario, Long&amp;gt; {
    // Métodos personalizados si los necesitas
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conexión entre Entidad y DTO&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El flujo típico es:&lt;/li&gt;
&lt;li&gt;El controlador recibe una petición.&lt;/li&gt;
&lt;li&gt;El servicio consulta la entidad desde la base de datos.&lt;/li&gt;
&lt;li&gt;Se transforma la entidad en un DTO para devolver al cliente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo en un servicio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class UsuarioService {

    private final UsuarioRepository usuarioRepository;

    public UsuarioService(UsuarioRepository usuarioRepository) {
        this.usuarioRepository = usuarioRepository;
    }

    public List&amp;lt;UsuarioDTO&amp;gt; listarUsuarios() {
        return usuarioRepository.findAll()
                .stream()
                .map(u -&amp;gt; new UsuarioDTO(u.getNombre(), u.getEmail()))
                .collect(Collectors.toList());
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Controlador exponiendo DTOs&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/usuarios")
public class UsuarioController {

    private final UsuarioService usuarioService;

    public UsuarioController(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    @GetMapping
    public List&amp;lt;UsuarioDTO&amp;gt; obtenerUsuarios() {
        return usuarioService.listarUsuarios();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Observa que el cliente nunca recibe la entidad completa, solo el DTO. Esto protege la integridad de los datos y mantiene la API más clara.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 El Patrón de Mapeo: El Puente Esencial&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para aprovechar este patrón, necesitas un mecanismo para convertir entre Entidades y DTOs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entidad → DTO:&lt;/strong&gt; Se utiliza para enviar datos al cliente (ej. GET /usuarios).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DTO → Entidad:&lt;/strong&gt; Se utiliza para recibir datos del cliente (ej. POST /usuarios) y convertirlos en una Entidad para su persistencia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En resumen, utiliza Entidades para modelar tu dominio y persistir datos con JPA, pero usa DTOs como el vehículo de datos que viaja a través de las fronteras de tu aplicación. Esta separación de preocupaciones es la clave para aplicaciones Java escalables, seguras y de alto rendimiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entidades:&lt;/strong&gt; Representan tablas y se usan para persistencia.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DTOs:&lt;/strong&gt; Transportan datos de forma segura y flexible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JPA:&lt;/strong&gt; Hace de traductor entre objetos Java y SQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Separar responsabilidades con esta trilogía no es burocracia: es arquitectura limpia. Te da seguridad, escalabilidad y claridad en tu código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Tip final:&lt;/strong&gt; Herramientas como MapStruct o ModelMapper automatizan este proceso de mapeo, reduciendo el código boilerplate y garantizando que esta conversión sea rápida y precisa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fuentes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aprende más sobre cómo optimizar el uso de DTOs con Spring Data JPA en este video: 👉 &lt;a href="https://www.youtube.com/watch?v=5NKTfyTNir0" rel="noopener noreferrer"&gt;&lt;strong&gt;Uso de DTOs con Spring Data JPA&lt;/strong&gt;&lt;/a&gt; Este video explica y demuestra la importancia y la implementación de DTOs junto con Entidades en un contexto de Spring Data JPA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Gracias por acompañarme en esta aventura tech! 👩🏻💻✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha inspirado este contenido?&lt;br&gt;
 Me encantaría saber tu opinión o leer tus experiencias. 🧡&lt;/p&gt;

&lt;p&gt;Si quieres explorar más de lo que estoy creando (proyectos, blogs, contenido tech y novedades en IA/ML), te invito a visitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 &lt;a href="https://linktr.ee/orlidevs" rel="noopener noreferrer"&gt;&lt;strong&gt;Mi Linktree&lt;/strong&gt;&lt;/a&gt;
Y si prefieres conectar directamente:&lt;/li&gt;
&lt;li&gt;🔗 &lt;a href="https://www.linkedin.com/in/orlibetdungonzalez" rel="noopener noreferrer"&gt;&lt;strong&gt;Conecta conmigo en Linkedin&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="//my-million-friend-blog.vercel.app"&gt;&lt;strong&gt;Mi blog personal&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✨ Code with heart - Create with soul ✨&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referencias:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imágenes creadas con Gemini (google.com)&lt;/p&gt;

&lt;h1&gt;
  
  
  #porunmillondeamigos #makeyourselfvisible #creatorcontent #linkedin #developers #opentowork #DTOs #JPA #Entities #java #sprinboot #persistencia #data
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpdhonaorsainjk7n80z.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.amazonaws.com%2Fuploads%2Farticles%2Fcpdhonaorsainjk7n80z.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jpa</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>**¡Hoy es el día para darle un 💖 a tu salud mental! **</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Mon, 13 Jan 2025 20:09:50 +0000</pubDate>
      <link>https://dev.to/orli/hoy-es-el-dia-para-darle-un-a-tu-salud-mental--1d8f</link>
      <guid>https://dev.to/orli/hoy-es-el-dia-para-darle-un-a-tu-salud-mental--1d8f</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 En este mundo digital que nos conecta con un clic, también es importante conectar con nosotros mismos. El 13 de enero es una fecha significativa: el Día Mundial de la Lucha contra la Depresión. Este día nos invita a reflexionar sobre una condición que nos afecta a millones de personas en todo el mundo, un tema que a menudo queda en segundo plano y que debemos recordar que cuidar de nuestra salud mental es tan importante como actualizar nuestro software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hv7t99owvlgt183k6z4.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.amazonaws.com%2Fuploads%2Farticles%2F2hv7t99owvlgt183k6z4.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
¿Eres un/a techie y sientes que la presión te supera? No estás solo/a. La tecnología puede ser una herramienta increíble, pero también puede generar estrés y ansiedad.&lt;/p&gt;

&lt;p&gt;La tecnología: un arma de doble filo&lt;br&gt;
La industria de la tecnología nos ha brindado herramientas increíbles para conectar, crear y transformar el mundo. Trabajar en TI puede ser emocionante y gratificante, pero también puede ser increíblemente desafiante. La presión constante por mantenerse al día con las últimas tecnologías, cumplir con plazos ajustados y resolver problemas complejos puede generar un nivel de estrés significativo. Este estrés, si no se maneja adecuadamente, puede llevar a la depresión y la ansiedad.&lt;/p&gt;

&lt;p&gt;La Importancia de la Salud Mental&lt;br&gt;
La salud mental es fundamental para nuestro bienestar general. Ignorar los signos de depresión no solo afecta nuestra calidad de vida, sino que también puede impactar negativamente en nuestro rendimiento laboral y en nuestras relaciones personales. Es crucial que tanto los empleadores como los empleados en el campo TI reconozcan la importancia de la salud mental y tomen medidas para protegerla.&lt;/p&gt;

&lt;p&gt;La depresión en TI: un problema oculto&lt;br&gt;
La depresión en el sector tecnológico es un problema más común de lo que pensamos. Muchos profesionales sentimos la presión de ocultar nuestras luchas para no ser percibidos como débiles o poco productivos. Esto puede llevar al aislamiento, la disminución del rendimiento y, en casos extremos, al burnout.&lt;/p&gt;

&lt;p&gt;¿Por qué es importante hablar de salud mental en TI?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Impacto en la productividad: La depresión puede afectar significativamente la capacidad de concentración, la creatividad y la capacidad para resolver problemas.&lt;/li&gt;
&lt;li&gt;Relaciones laborales: Un ambiente de trabajo que prioriza la salud mental fomenta la colaboración, la innovación y la retención del talento.&lt;/li&gt;
&lt;li&gt;Bienestar personal: La salud mental es fundamental para disfrutar de una vida plena y satisfactoria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldnr0rc6uw25tgal6wy0.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.amazonaws.com%2Fuploads%2Farticles%2Fldnr0rc6uw25tgal6wy0.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
¿Qué podemos hacer?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normalizar la conversación: Hablar abiertamente sobre salud mental puede ayudar a romper el estigma y crear un ambiente más seguro.&lt;/li&gt;
&lt;li&gt;Buscar ayuda: Si estás luchando con la depresión, no dudes en buscar ayuda profesional.&lt;/li&gt;
&lt;li&gt;Cuidar de ti mismo: Prioriza el descanso, la alimentación saludable, el ejercicio y las relaciones sociales.&lt;/li&gt;
&lt;li&gt;Establecer límites: Aprende a decir no y a desconectar del trabajo cuando sea necesario.&lt;/li&gt;
&lt;li&gt;Fomentar una cultura de bienestar: Las empresas pueden jugar un papel importante al crear un ambiente de trabajo más humano y flexible.&lt;/li&gt;
&lt;li&gt;Conéctate con los tuyos: Rodéate de personas que te quieran y te apoyen. ¡Una llamada o un abrazo pueden hacer maravillas!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class DiaMundialLuchaContraDepresion {
    public static void main(String[] args) {
        String titulo = "Hoy, Día Mundial de la Lucha contra la Depresión";
        String[] mensajes = {
            "Cuida de ti mismo. ¡Tu salud mental importa!",
            "No estás solo. Juntos podemos superar esto.",
            "La salud mental es crucial. ¡Busca apoyo!",
            "Hablar es fortaleza, no debilidad.",
            "Eres valiente y puedes superar esto.",
            "Pequeños pasos, grandes cambios. ¡Adelante!",
            "Tu bienestar es prioridad. Pide ayuda.",
            "La esperanza es el primer paso. No la pierdas.",
            "Eres más fuerte de lo que crees.",
            "La salud mental es un viaje. ¡Sigue adelante!"
        };

        for (String mensaje : mensajes) {
            System.out.println(mensaje);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La tecnología también puede ser una solución&lt;br&gt;
Existen numerosas aplicaciones y plataformas que pueden ayudar a gestionar el estrés, mejorar el sueño y promover el bienestar mental. La tecnología puede ser una herramienta poderosa para cuidar de nuestra salud mental, no dudes en utilizarla!.&lt;br&gt;
Recuerda: ¡Tu salud mental es lo más importante! Al igual que cuidas tu equipo, cuida también de tu mente. Juntos podemos crear un mundo tecnológico más humano y saludable.&lt;/p&gt;

&lt;p&gt;Conclusión&lt;br&gt;
La salud mental es un aspecto fundamental de nuestro bienestar general. En el sector tecnológico, es crucial que prioricemos nuestro bienestar y que trabajemos juntos para crear un ambiente de trabajo más saludable y sostenible. Recordemos que la salud mental es un componente esencial para el bienestar general y el éxito profesional.&lt;/p&gt;

&lt;p&gt;¡Gracias por leer! 👇🏻&lt;br&gt;
🚀 ¿Te ha gustado? Comparte tu opinión.&lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn&lt;/a&gt; &lt;a href="https://lnkd.in/eAjM_Smy" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy&lt;/a&gt; 👩💻 &lt;a href="https://lnkd.in/eKvu-BHe" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe&lt;/a&gt; &lt;a href="https://dev.to/orlidev"&gt;https://dev.to/orlidev&lt;/a&gt; &lt;a href="https://lnkd.in/ecHHabTD" rel="noopener noreferrer"&gt;https://lnkd.in/ecHHabTD&lt;/a&gt; &lt;a href="https://pin.it/2BuZ9N4n8" rel="noopener noreferrer"&gt;https://pin.it/2BuZ9N4n8&lt;/a&gt; &lt;a href="https://linktr.ee/orlidevs" rel="noopener noreferrer"&gt;https://linktr.ee/orlidevs&lt;/a&gt; ¡No te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias:&lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox7hu6b4y6kicyq843wm.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.amazonaws.com%2Fuploads%2Farticles%2Fox7hu6b4y6kicyq843wm.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>help</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>✨ Adiós, 2024 🌟 ¡Hola, 2025! 🚀💫</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Tue, 31 Dec 2024 17:18:46 +0000</pubDate>
      <link>https://dev.to/orli/adios-2024-hola-2025-4onf</link>
      <guid>https://dev.to/orli/adios-2024-hola-2025-4onf</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 y llegó el último post del año 🍾 🎆 El 2024 llega a su fin, y no puedo evitar detenerme un momento para abrazar todo lo que me dejó: aprendizajes, desafíos, llanto, risas y, sobre todo, encuentros que llenaron mi vida de significado.&lt;/p&gt;

&lt;p&gt;CHIQUIS ✨ gracias por su energía, por esa buena onda que ilumina cualquier día y por recordarme que en las conexiones humanas encontramos la magia de lo cotidiano. Cada risa compartida, cada logro celebrado y cada obstáculo superado son tesoros que me llevo conmigo.&lt;br&gt;
Este año me enseñó que el crecimiento no siempre se mide en grandes pasos, sino en esos pequeños momentos llenos de autenticidad y propósito. Lo bueno, lo complicado y lo inesperado fueron piezas clave para llegar a este punto, y por eso, me despido del 2024 con el corazón lleno de gratitud.&lt;/p&gt;

&lt;p&gt;🎉 Ahora, con los brazos abiertos y el corazón lleno de esperanza, doy la bienvenida al 2025. Que sea un año de nuevas aventuras, aprendizajes y muchas razones para sonreír. 💪🏼💫&lt;/p&gt;

&lt;p&gt;💛 CHIQUIIIIIIIIIS, ¡les deseo un 2025 brillante, lleno de amor, éxitos y toda la buena vibra que merecen! Sigamos soñando en grande y construyendo juntos un mundo más llevadero. ¡Vamos con todo, que siiii se puedeeeee! 🚀✨&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqglh2yequnuuex7otykd.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.amazonaws.com%2Fuploads%2Farticles%2Fqglh2yequnuuex7otykd.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>¡Haciendo Magia con npm: Tu Varita Mágica como Desarrollador!✨</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Tue, 08 Oct 2024 18:14:11 +0000</pubDate>
      <link>https://dev.to/orli/haciendo-magia-con-npm-tu-varita-magica-como-desarrollador-1o9j</link>
      <guid>https://dev.to/orli/haciendo-magia-con-npm-tu-varita-magica-como-desarrollador-1o9j</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 ¿Te imaginas tener dos padrinos mágicos que te ayuden a crear tus proyectos de desarrollo web? Pues bien, ¡npm es algo así! Si eres desarrollador, ya sabes lo importante que es tener las herramientas adecuadas para hacer tu trabajo de manera eficiente. Y npm es, sin duda, una de las más poderosas.&lt;/p&gt;

&lt;p&gt;Si alguna vez te has sentido como Timmy Turner, deseando que tus problemas de desarrollo se resuelvan mágicamente, entonces npm (Node Package Manager) es como tus propios Padrinos Mágicos, Cosmo y Wanda, listos para ayudarte a hacer tu vida más fácil. Vamos a explorar todo lo que necesitas saber sobre npm, con un toque de magia y diversión.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iwpn5z65x3hpzcfg0qv.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.amazonaws.com%2Fuploads%2Farticles%2F8iwpn5z65x3hpzcfg0qv.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué es npm? 🎇&lt;br&gt;
npm es el gestor de paquetes predeterminado para Node.js, y es esencialmente una herramienta que te permite instalar, compartir y gestionar paquetes de JavaScript. Piensa en npm como una varita mágica que te da acceso a millones de hechizos (paquetes) que otros desarrolladores han creado para hacer tu trabajo más fácil.&lt;/p&gt;

&lt;p&gt;Piensa en él como una tienda mágica donde puedes encontrar cualquier ingrediente que necesites para crear tus proyectos. Desde hechizos simples hasta conjuros complejos, npm tiene todo lo que necesitas.&lt;/p&gt;

&lt;p&gt;¿Por Qué Usar npm?💫&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instalación de Paquetes: Con npm, puedes instalar librerías y herramientas con un simple comando. Es como pedirle a Cosmo que te traiga una pizza, ¡rápido y fácil!&lt;/li&gt;
&lt;li&gt;Gestión de Dependencias: npm se encarga de todas las dependencias de tu proyecto, asegurándose de que todo funcione bien junto. Es como tener a Wanda organizando tu cuarto, asegurándose de que todo esté en su lugar.&lt;/li&gt;
&lt;li&gt;Scripts de npm: Puedes definir scripts en tu archivo package.json para automatizar tareas comunes. Es como tener a tus Padrinos Mágicos haciendo tus deberes por ti.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggjskuagw57vwqzhvx0d.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.amazonaws.com%2Fuploads%2Farticles%2Fggjskuagw57vwqzhvx0d.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cosmo y Wanda, tus padrinos npm 🌠&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cosmo: Es el padrino más entusiasta y un poco despistado. Representa los paquetes más básicos y útiles que necesitarás para cualquier proyecto, como Express para crear servidores web o React para construir interfaces de usuario.&lt;/li&gt;
&lt;li&gt;Wanda: Es la madrina más sabia y organizada. Ella te ayudará a gestionar todas tus dependencias, a resolver conflictos y a mantener tu proyecto en orden.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⭐Comenzando con npm&lt;br&gt;
Para empezar a usar npm, primero necesitas instalar Node.js, que viene con npm incluido. Una vez que lo tengas, puedes inicializar un nuevo proyecto con:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Esto creará un archivo package.json que contiene la información de tu proyecto y sus dependencias. Es como la lista de deseos de Timmy, donde puedes especificar todo lo que necesitas. Este hechizo crea un nuevo proyecto y genera un archivo package.json, que es como tu libro de hechizos personal. Aquí anotas todos los ingredientes (paquetes) que necesitas para tu proyecto.&lt;/p&gt;

&lt;p&gt;Analogía con los Padrinos Mágicos🌠&lt;br&gt;
Imagina que cada paquete de npm es un deseo que Timmy le pide a Cosmo y Wanda. Aquí hay algunos ejemplos divertidos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instalación de Paquetes:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install lodash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Es como pedirle a Cosmo que te traiga una herramienta mágica para manipular arrays y objetos. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uso de Scripts:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En tu package.json, puedes definir scripts como este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scripts": {
    "start": "node app.js",
    "test": "jest"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Es como decirle a Wanda que haga tus pruebas y ejecute tu aplicación con un simple comando.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gestión de Dependencias: Cuando instalas un paquete, npm se asegura de que todas las dependencias necesarias también se instalen. Es como cuando Timmy pide un deseo y Cosmo y Wanda se aseguran de que todo funcione perfectamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aquí tienes algunos ejemplos de cómo npm puede hacer tu vida más fácil, con un toque de humor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instalación de un Paquete Mágico:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install magic-wand
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { castSpell } from 'magic-wand';
castSpell('abracadabra');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Automatización de Tareas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scripts": {
    "clean": "rimraf dist",
    "build": "webpack --config webpack.config.js",
    "deploy": "npm run build &amp;amp;&amp;amp; firebase deploy"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Es como tener a Cosmo y Wanda haciendo todo el trabajo pesado por ti.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manejo de Errores:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {
    const result = await fetchData('https://api.example.com/data');
    console.log(result);
} catch (error) {
    console.error('¡Oh no! Algo salió mal:', error);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Es como cuando Timmy pide un deseo y algo sale mal, pero siempre hay una solución.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0fnkwfnzk24ckmc1nvz.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.amazonaws.com%2Fuploads%2Farticles%2Fh0fnkwfnzk24ckmc1nvz.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐Los hechizos más comunes con npm&lt;br&gt;
&lt;code&gt;npm install&lt;/code&gt;: Con este hechizo, puedes añadir nuevos ingredientes (paquetes) a tu proyecto. Es como pedirle a Cosmo que te traiga un nuevo juguete mágico.&lt;br&gt;
&lt;code&gt;npm update&lt;/code&gt;: Este hechizo actualiza todos los ingredientes de tu proyecto a la última versión. Es como cuando Cosmo y Wanda te traen una versión mejorada de tu juguete favorito.&lt;br&gt;
&lt;code&gt;npm run&lt;/code&gt;: Este hechizo te permite ejecutar scripts personalizados que has definido en tu archivo package.json. Es como cuando le pides a Wanda que te ayude a realizar un hechizo complicado.&lt;/p&gt;

&lt;p&gt;Consejos mágicos para usar npm ✨&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organiza tu baúl de hechizos: Mantén tu archivo package.json limpio y organizado.&lt;/li&gt;
&lt;li&gt;No abuses de los hechizos: Instala solo los paquetes que realmente necesites.&lt;/li&gt;
&lt;li&gt;Explora la tienda mágica: npm tiene una enorme cantidad de paquetes disponibles. ¡No dudes en buscar nuevos ingredientes para tus proyectos!&lt;/li&gt;
&lt;li&gt;Aprende los conjuros más poderosos: Dominar los comandos básicos de npm te hará un desarrollador más eficiente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En resumen, npm es una herramienta esencial para cualquier desarrollador. Al igual que Cosmo y Wanda, npm te proporciona todo lo que necesitas para crear proyectos web increíbles. ¡Así que adelante, libera tu magia interior y comienza a construir cosas asombrosas!&lt;br&gt;
Aquí tienes algunos paquetes npm divertidos y útiles que pueden añadir un toque de magia y diversión a tus proyectos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cowsay: Este paquete te permite generar mensajes en la terminal con una vaca (u otros animales) diciendo lo que quieras. Es perfecto para añadir un poco de humor a tus scripts.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install cowsay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const cowsay = require('cowsay');

console.log(cowsay.say({
    text: "¡Hola, desarrollador!",
    e: "oO",
    T: "U "
}));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Fortune: Este paquete genera frases aleatorias de la fortuna, similar a las galletas de la fortuna. Es una forma divertida de recibir mensajes motivadores o graciosos.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install fortune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const fortune = require('fortune');

console.log(fortune.fortune());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Cat-Me: Este paquete genera imágenes de gatos en la terminal. ¡Porque todos necesitamos más gatos en nuestras vidas!
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install cat-me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const catMe = require('cat-me');

console.log(catMe());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Chuck Norris Jokes: Este paquete te permite obtener chistes de Chuck Norris. Perfecto para añadir un poco de humor a tus proyectos.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install chuck-norris-jokes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const chuckNorris = require('chuck-norris-jokes');

chuckNorris.getRandomJoke().then(joke =&amp;gt; {
    console.log(joke);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq71llxy2r3n67mkdiez.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.amazonaws.com%2Fuploads%2Farticles%2Fjq71llxy2r3n67mkdiez.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Faker: Este paquete genera datos falsos para pruebas, como nombres, direcciones, números de teléfono, etc. Es muy útil y también puede ser bastante divertido.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install faker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const faker = require('faker');

console.log(`Nombre: ${faker.name.findName()}`);
console.log(`Dirección: ${faker.address.streetAddress()}`);
console.log(`Teléfono: ${faker.phone.phoneNumber()}`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;JokeAPI: Este paquete te permite obtener chistes de una API. Puedes especificar el tipo de chistes que quieres recibir.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install jokeapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const JokeAPI = require('jokeapi');

JokeAPI.getJoke({ type: 'single' }).then(joke =&amp;gt; {
    console.log(joke.joke);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Inspire: Este paquete genera citas inspiradoras. Perfecto para empezar el día con una buena dosis de motivación.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install inspire
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const inspire = require('inspire');

console.log(inspire.getQuote());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Superheroes: Este paquete genera nombres de superhéroes aleatorios. Ideal para cuando necesitas un nombre épico para tus variables o proyectos.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install superheroes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const superheroes = require('superheroes');

console.log(superheroes.random());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Supervillains: Y si tienes superhéroes, ¡también necesitas supervillanos! Este paquete genera nombres de supervillanos aleatorios.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install supervillains
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const supervillains = require('supervillains');

console.log(supervillains.random());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Dad Jokes: Este paquete te permite obtener chistes de papá. Perfecto para añadir un poco de humor "cringe" a tus proyectos.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install dad-jokes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const dadJokes = require('dad-jokes');

console.log(dadJokes.random());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conclusión🧙🏻‍♀️&lt;br&gt;
npm es una herramienta poderosa que puede hacer tu vida como desarrollador mucho más fácil, al igual que los Padrinos Mágicos hacen la vida de Timmy más divertida y manejable. Con npm, puedes instalar paquetes, gestionar dependencias y automatizar tareas con facilidad. Así que, ¡no dudes en usar esta varita mágica en tu próximo proyecto!&lt;/p&gt;

&lt;p&gt;¡Gracias por leer y déjame tus comentarios! 👇🏻&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha gustado? Comparte tu opinión.&lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn&lt;/a&gt; &lt;a href="https://lnkd.in/eAjM_Smy" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy&lt;/a&gt; 👩💻 &lt;a href="https://lnkd.in/eKvu-BHe" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe&lt;/a&gt; &lt;a href="https://dev.to/orlidev"&gt;https://dev.to/orlidev&lt;/a&gt; &lt;a href="https://lnkd.in/ecHHabTD" rel="noopener noreferrer"&gt;https://lnkd.in/ecHHabTD&lt;/a&gt; &lt;a href="https://pin.it/2BuZ9N4n8" rel="noopener noreferrer"&gt;https://pin.it/2BuZ9N4n8&lt;/a&gt; &lt;a href="https://linktr.ee/orlidevs" rel="noopener noreferrer"&gt;https://linktr.ee/orlidevs&lt;/a&gt; ¡No te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias:&lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8rkl2uo79cx6ot7muq8m.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.amazonaws.com%2Fuploads%2Farticles%2F8rkl2uo79cx6ot7muq8m.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff5nzwv6q1133ucqnu2vz.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.amazonaws.com%2Fuploads%2Farticles%2Ff5nzwv6q1133ucqnu2vz.png" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>🏝️ Domina el DOM en JavaScript como Link en Zelda: The Wind Waker 🏝️</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Mon, 09 Sep 2024 12:00:00 +0000</pubDate>
      <link>https://dev.to/orli/domina-el-dom-en-javascript-como-link-en-zelda-the-wind-waker-leb</link>
      <guid>https://dev.to/orli/domina-el-dom-en-javascript-como-link-en-zelda-the-wind-waker-leb</guid>
      <description>&lt;p&gt;¡Hola Chiquis!👋🏻 ¡Lunes! ¿Listos para sumergirnos en un nuevo mundo lleno de aventuras? Imagina que el DOM (Document Object Model) es el vasto océano de The Wind Waker. Cada isla, cada criatura y cada objeto en el juego representa un elemento del DOM que puedes manipular con JavaScript. ¡Prepárate para zarpar y convertirte en el héroe que dominará este mar de código!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19cdmis5rbg8aa14tabd.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.amazonaws.com%2Fuploads%2Farticles%2F19cdmis5rbg8aa14tabd.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
¡Navegando el Mar Celesta del DOM con Link! ⛵️&lt;br&gt;
¡Atención, marineros del código! ⚓️ ¿Alguna vez te has sentido como Link, perdido en el vasto océano del DOM, buscando el Triforce de una página web perfecta? ¡No te preocupes! En este post, vamos a embarcarnos en una aventura épica para dominar las aguas del DOM, usando la legendaria saga de Zelda: Wind Waker como nuestra guía.&lt;/p&gt;

&lt;p&gt;🛶 1. El Barco Rey de los Leones Rojos: Tu Navegador&lt;br&gt;
Así como Link navega por el Gran Mar en el Barco Rey de los Leones Rojos, tú navegarás por el DOM usando tu navegador web. El navegador es tu fiel compañero, interpretando tu código JavaScript y permitiéndote interactuar con el DOM.&lt;/p&gt;

&lt;p&gt;🗺️ 2. El Mapa del Mar: El Árbol DOM&lt;br&gt;
El mapa del mar en Wind Waker te muestra todas las islas y ubicaciones importantes. De manera similar, el árbol DOM te muestra la estructura de tu documento HTML. Cada nodo en el árbol representa un elemento HTML, y puedes acceder a ellos y manipularlos con JavaScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Accediendo a un elemento del DOM
let isla = document.getElementById('isla-inicial');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🏝️ 3. Las Islas: Los Elementos del DOM&lt;br&gt;
Cada isla en Wind Waker tiene su propio encanto y desafíos. En el DOM, cada elemento HTML es una isla que puedes explorar y modificar. Puedes cambiar su contenido, estilo y atributos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Cambiando el contenido de un elemento
isla.innerHTML = '¡Bienvenido a la Isla Inicial!';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon80rakvw4k8en67y02j.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.amazonaws.com%2Fuploads%2Farticles%2Fon80rakvw4k8en67y02j.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
🗡️ 4. La Espada Maestra: Métodos y Propiedades del DOM&lt;br&gt;
La Espada Maestra es la herramienta principal de Link para enfrentar enemigos y resolver problemas. En el DOM, tus métodos y propiedades son tus herramientas principales. Con ellos, puedes agregar, eliminar y modificar elementos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Creando un nuevo elemento
let nuevaIsla = document.createElement('div');
nuevaIsla.id = 'isla-nueva';
nuevaIsla.innerHTML = '¡Una nueva isla ha aparecido!';
document.body.appendChild(nuevaIsla);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; y &lt;code&gt;querySelectorAll&lt;/code&gt; 🛡️&lt;br&gt;
Para navegar por el DOM, necesitamos un arma poderosa. En Zelda, es la Espada Maestra; en JavaScript, son los métodos &lt;code&gt;querySelector&lt;/code&gt; y &lt;code&gt;querySelectorAll&lt;/code&gt;. Con ellos, podemos seleccionar elementos específicos de la página, como si estuviéramos buscando un tesoro escondido. Imagina que &lt;code&gt;querySelector&lt;/code&gt; es como la Espada Maestra, capaz de encontrar un solo elemento, mientras que &lt;code&gt;querySelectorAll&lt;/code&gt; es como la Bola de Hadas, que nos permite encontrar múltiples elementos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Encontrar el primer elemento con la clase "botón"
const botón = document.querySelector('.botón');

// Encontrar todos los elementos con la etiqueta "p"
const párrafos = document.querySelectorAll('p');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🌪️ 5. El Viento del Oeste: Eventos del DOM&lt;br&gt;
El Viento del Oeste en Wind Waker te permite cambiar la dirección del viento para navegar más fácilmente. En el DOM, los eventos son como esos vientos, permitiéndote reaccionar a las acciones del usuario y cambiar el comportamiento de tu página.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Añadiendo un evento a un elemento
nuevaIsla.addEventListener('click', function() {
    alert('¡Has descubierto una nueva isla!');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlyalz9ug6mbbcs82gb8.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.amazonaws.com%2Fuploads%2Farticles%2Fwlyalz9ug6mbbcs82gb8.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
🧭 6. La Trifuerza: Buenas Prácticas&lt;br&gt;
Así como Link busca la Trifuerza para derrotar a Ganondorf, tú debes buscar las mejores prácticas para escribir código limpio y eficiente. Usa selectores específicos, evita el uso excesivo de &lt;code&gt;innerHTML&lt;/code&gt; y mantén tu código organizado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Usando selectores específicos
let islas = document.querySelectorAll('.isla');
islas.forEach(isla =&amp;gt; {
    isla.style.color = 'blue';
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La Trifuerza: Eventos 💻&lt;br&gt;
Los eventos son como la Trifuerza, el poder que une todo en el mundo de Zelda. En JavaScript, los eventos son acciones que ocurren en la página, como hacer clic en un botón, mover el ratón o cargar la página. Al igual que Link busca las piezas de la Trifuerza para obtener un gran poder, nosotros podemos usar eventos para hacer que nuestra página web sea interactiva y dinámica.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Agregar un evento de clic al botón
botón.addEventListener('click', () =&amp;gt; {
  alert('¡Has hecho clic en el botón!');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El Gran Árbol Deku: El document 🌳&lt;br&gt;
Al igual que Link comienza su viaje en el Gran Árbol Deku, nuestra aventura en JavaScript inicia en el &lt;code&gt;document&lt;/code&gt;. Este es el nodo raíz de toda la página web, el punto de partida para explorar todos los elementos que la componen. Es como el Gran Árbol Deku, el corazón de la isla inicial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nrx208pwq06en40tw8d.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.amazonaws.com%2Fuploads%2Farticles%2F1nrx208pwq06en40tw8d.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
La Vela de los Vientos: Manipulando el DOM 🌫️&lt;br&gt;
Una vez que hemos encontrado los elementos que queremos, podemos manipularlos a nuestro antojo. Es como controlar la Vela de los Vientos, dirigiendo el barco a donde queramos. Podemos cambiar el texto, agregar o eliminar elementos, modificar estilos, y mucho más.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Cambiar el texto del botón
botón.textContent = '¡Haz clic en mí!';

// Agregar un nuevo párrafo
const nuevoPárrafo = document.createElement('p');
nuevoPárrafo.textContent = '¡Hola, mundo!';
document.body.appendChild(nuevoPárrafo);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¡Zarpa hacia la Aventura! 🗺️&lt;br&gt;
Dominar el DOM es como navegar por el Mar Celesta. Es un viaje lleno de desafíos y recompensas. Con un poco de práctica y creatividad, podrás crear páginas web increíbles y personalizadas. ¡Así que, al igual que Link, zarpa hacia la aventura y explora el vasto mundo del DOM!&lt;/p&gt;

&lt;p&gt;¡Y ahí lo tienes! Con estas herramientas y conocimientos, estarás listo para dominar el DOM en JavaScript como un verdadero héroe de Hyrule. ¡Que los vientos de la programación siempre estén a tu favor! 🌬️💻&lt;/p&gt;

&lt;p&gt;¡Gracias por leer y déjame tus comentarios! 👇🏻&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha gustado? Comparte tu opinión. &lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn &lt;/a&gt;&lt;br&gt;
&lt;a href="https://lnkd.in/eAjM_Smy" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy&lt;/a&gt; 👩‍💻 &lt;a href="https://lnkd.in/eKvu-BHe%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe &lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/orlidev"&gt;https://dev.to/orlidev&lt;/a&gt; &lt;a href="https://lnkd.in/ecHHabTD" rel="noopener noreferrer"&gt;https://lnkd.in/ecHHabTD&lt;/a&gt; ¡No te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias: &lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible #LinkedIn #DOM
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbgvw8aheymv3ayizzk9.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.amazonaws.com%2Fuploads%2Farticles%2Fsbgvw8aheymv3ayizzk9.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgargtlz303mkipl9kjmy.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.amazonaws.com%2Fuploads%2Farticles%2Fgargtlz303mkipl9kjmy.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>** De los bits al chi: El sorprendente vínculo entre la programación y el Tai Chi **👩‍💻</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Fri, 06 Sep 2024 12:00:00 +0000</pubDate>
      <link>https://dev.to/orli/-de-los-bits-al-chi-el-sorprendente-vinculo-entre-la-programacion-y-el-tai-chi--34aa</link>
      <guid>https://dev.to/orli/-de-los-bits-al-chi-el-sorprendente-vinculo-entre-la-programacion-y-el-tai-chi--34aa</guid>
      <description>&lt;p&gt;¡Hola Chiquis! 👋🏻 En un mundo cada vez más digital, a menudo nos olvidamos de la importancia del equilibrio y la armonía. Pero ¿qué pasaría si te dijera que puedes encontrar estas cualidades incluso en el mundo de la programación? ¡Sumérgete conmigo en un viaje de descubrimiento donde el código y el Tai Chi se entrelazan de manera fascinante!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4thuujgf6on948jy7mg4.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.amazonaws.com%2Fuploads%2Farticles%2F4thuujgf6on948jy7mg4.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Código vs. Tai Chi: Un Combate de Precisión y Fluidez 🥋&lt;br&gt;
¿Quién diría que un programador y un maestro de Tai Chi tienen más en común de lo que parece? Ambas disciplinas, a primera vista tan distintas, comparten un núcleo común: la búsqueda de la perfección a través de la precisión, la paciencia y la atención al detalle.&lt;/p&gt;

&lt;p&gt;Imagina esto: El programador es un artesano digital, esculpiendo líneas de código para dar vida a sus ideas. Cada carácter, cada espacio, tiene un propósito preciso. Un solo error puede hacer que todo se desmorone, como un bloque mal colocado en una torre de Jenga.&lt;/p&gt;

&lt;p&gt;El maestro de Tai Chi es un bailarín de la energía, donde cada movimiento es una respuesta fluida a una fuerza invisible. Sus posturas son precisas, pero su mente está en constante movimiento, anticipando y adaptándose a cada cambio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenatrsws7k8mho8jhnne.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.amazonaws.com%2Fuploads%2Farticles%2Fenatrsws7k8mho8jhnne.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comparando el Código con el Tai Chi: Una Danza de Precisión y Paciencia 💪🏻&lt;br&gt;
En el mundo del desarrollo de software, escribir código es una disciplina que requiere precisión, paciencia y una atención meticulosa al detalle. Curiosamente, estas mismas cualidades son esenciales en el arte del Tai Chi, una antigua práctica china que combina movimientos suaves y fluidos con una profunda concentración mental. Para ilustrar esta comparación, vamos a sumergirnos en el universo de la película "Man of Tai Chi" (2013), dirigida por Keanu Reeves, y explorar cómo los personajes y la filosofía de esta película reflejan la esencia de ambas disciplinas.&lt;/p&gt;

&lt;p&gt;¿Y si fusionáramos estos dos mundos? 🧘‍♀️&lt;br&gt;
La película "Man of Tai Chi" nos ofrece una visión fascinante de esta conexión. Nuestro protagonista, un joven practicante de Tai Chi, es reclutado para un torneo de artes marciales mixtas. Al principio, sus movimientos fluidos y elegantes parecen desventaja frente a la fuerza bruta de sus oponentes. Sin embargo, cuando logra integrar la precisión de sus formas con la espontaneidad del combate, descubre un poder interior inimaginable.&lt;/p&gt;

&lt;p&gt;Así como el programador debe dominar la sintaxis y la lógica de un lenguaje de programación, el maestro de Tai Chi debe conocer a la perfección cada movimiento de su forma. Ambos necesitan una mente clara y enfocada, capaz de ver el panorama general y los detalles más minúsculos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foogrdlikg33vjfdveate.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.amazonaws.com%2Fuploads%2Farticles%2Foogrdlikg33vjfdveate.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero ahí es donde las similitudes se vuelven aún más interesantes. 🥢&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La paciencia: Un programador puede pasar horas depurando un código, buscando ese pequeño error que impide que su aplicación funcione correctamente. Un maestro de Tai Chi dedica años a perfeccionar cada postura, buscando la armonía entre cuerpo y mente.&lt;/li&gt;
&lt;li&gt;La atención al detalle: Un solo carácter mal escrito puede causar un error en un programa. Un movimiento ligeramente fuera de lugar puede romper el equilibrio en una forma de Tai Chi.&lt;/li&gt;
&lt;li&gt;La creatividad: Al igual que un programador puede crear mundos virtuales increíbles a partir de líneas de código, un maestro de Tai Chi puede expresar emociones profundas a través de sus movimientos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En última instancia, tanto el código como el Tai Chi son expresiones de la mente humana, buscando la belleza en la complejidad. Y al igual que el protagonista de "Man of Tai Chi", todos podemos aprender a combinar la fuerza y la fluidez, la precisión y la creatividad, en cualquier aspecto de nuestras vidas.&lt;/p&gt;

&lt;p&gt;El Maestro y el Aprendiz 🎐&lt;br&gt;
En "Man of Tai Chi", seguimos la historia de Tiger Chen, un joven y talentoso practicante de Tai Chi que se enfrenta a desafíos tanto internos como externos. Al igual que Tiger, un desarrollador de software novato debe aprender de un mentor experimentado. El maestro de Tiger, el Maestro Yang, le enseña que cada movimiento debe ser ejecutado con precisión y control, sin apresurarse. De manera similar, un mentor en programación enseña que cada línea de código debe ser escrita con cuidado, revisada y optimizada para evitar errores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F453d35yckqogecfu82uv.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.amazonaws.com%2Fuploads%2Farticles%2F453d35yckqogecfu82uv.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La Fluidez en el Movimiento y el Código 🎊&lt;br&gt;
El Tai Chi se caracteriza por movimientos lentos y fluidos que requieren una conexión mente-cuerpo. En la película, vemos a Tiger perfeccionando su forma, moviéndose con gracia y precisión. En el mundo del código, esta fluidez se traduce en la capacidad de escribir código limpio y eficiente. Un buen desarrollador sabe que el código debe ser legible y mantenible, permitiendo que otros puedan entender y trabajar con él sin problemas. La fluidez en el código es tan importante como la fluidez en los movimientos de Tai Chi.&lt;/p&gt;

&lt;p&gt;La Paciencia y la Perseverancia 🏮&lt;br&gt;
Tiger enfrenta numerosos obstáculos en su camino, desde combates intensos hasta dilemas morales. Sin embargo, su paciencia y perseverancia le permiten superar estos desafíos. En el desarrollo de software, la paciencia es clave. Los errores y los bugs son inevitables, pero un buen desarrollador sabe que cada problema tiene una solución. La perseverancia en la depuración y la mejora continua del código es lo que lleva a un producto final exitoso.&lt;/p&gt;

&lt;p&gt;La Atención al Detalle ⛩️&lt;br&gt;
En Tai Chi, cada pequeño movimiento cuenta. Un ligero desvío puede romper la armonía del flujo. De manera similar, en la programación, un pequeño error puede causar grandes problemas. La atención al detalle es crucial en ambas disciplinas. En la película, Tiger aprende a enfocarse en cada movimiento, asegurándose de que cada gesto sea perfecto. En el desarrollo de software, los desarrolladores deben revisar su código minuciosamente, buscando errores y optimizando cada línea para asegurar un funcionamiento perfecto.&lt;/p&gt;

&lt;p&gt;El Equilibrio entre la Fuerza y la Suavidad 🏯&lt;br&gt;
Una de las lecciones más importantes que Tiger aprende es el equilibrio entre la fuerza y la suavidad. En Tai Chi, no se trata solo de fuerza bruta, sino de encontrar el equilibrio perfecto. En la programación, esto se traduce en encontrar el equilibrio entre la funcionalidad y la eficiencia. Un código bien escrito no solo cumple su propósito, sino que también es eficiente y fácil de mantener.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9urayzohviucy6gbt4t.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.amazonaws.com%2Fuploads%2Farticles%2Fh9urayzohviucy6gbt4t.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tiger Chen (Chen Lin-Hu) 🧧&lt;br&gt;
Tiger Chen es el protagonista de la película, un joven y talentoso practicante de Tai Chi que trabaja como mensajero en Pekín. Su viaje es uno de autodescubrimiento y superación. En el contexto del desarrollo de software, Tiger representa al desarrollador apasionado y dedicado que está dispuesto a enfrentar cualquier desafío para mejorar sus habilidades. Su evolución en la película refleja el crecimiento de un programador que, con el tiempo y la experiencia, se convierte en un maestro de su arte.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Donaka Mark (Keanu Reeves) 👦🏻&lt;br&gt;
Donaka Mark es el antagonista de la película, un empresario sin escrúpulos que organiza combates clandestinos. Representa las tentaciones y los atajos que pueden desviar a un desarrollador de su camino ético y profesional. En el mundo del código, Donaka simboliza las prácticas poco éticas, como el uso de código no autorizado o la falta de integridad en el trabajo. La lucha de Tiger contra Donaka es una metáfora de la lucha interna que enfrentan los desarrolladores para mantener su integridad y ética profesional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maestro Yang (Yu Hai) 👴🏻&lt;br&gt;
El Maestro Yang es el sabio y experimentado mentor de Tiger. Enseña a Tiger la importancia de la paciencia, la precisión y la atención al detalle en el Tai Chi. En el desarrollo de software, el Maestro Yang representa a los mentores y líderes que guían a los desarrolladores novatos, enseñándoles las mejores prácticas y ayudándoles a perfeccionar sus habilidades. Su sabiduría y experiencia son invaluables para el crecimiento profesional de un desarrollador.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Qing Sha (Karen Mok) 🧏🏻&lt;br&gt;
Qing Sha es una detective de la policía que investiga las actividades ilegales de Donaka. Su papel en la película es crucial para desenmascarar la verdad y llevar justicia. En el contexto del desarrollo de software, Qing Sha simboliza la importancia de la revisión y la auditoría del código. Así como ella busca la verdad y la justicia, los desarrolladores deben revisar y auditar su código para asegurar su calidad y seguridad.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gilang Sanjaya (Iko Uwais) 👨🏻‍🦱&lt;br&gt;
Gilang es uno de los oponentes más formidables de Tiger en los combates organizados por Donaka. Su habilidad y destreza en las artes marciales representan los desafíos técnicos que un desarrollador puede enfrentar en su carrera. Cada combate con Gilang es una oportunidad para que Tiger demuestre su habilidad y crecimiento, al igual que cada proyecto desafiante es una oportunidad para que un desarrollador demuestre su competencia y creatividad.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybhrbni5e5354c6pqihk.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.amazonaws.com%2Fuploads%2Farticles%2Fybhrbni5e5354c6pqihk.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anécdota de Bug 🐼&lt;br&gt;
Hace un tiempo como desarrolladora, estaba trabajando en un proyecto. Después de horas de escribir y depurar código, me encontré con un bug persistente que simplemente no podía resolver. Frustrada, decidí tomar un descanso y asistir a una clase de Tai Chi en el parque local.&lt;/p&gt;

&lt;p&gt;Durante la clase, mi Shifu, notó la tensión en mí y me preguntó qué me preocupaba. Yo le explico el problema con el código, y mi Maestra, con una sonrisa, me dijo: "El código es como el Tai Chi. A veces, debes dejar de luchar contra él y dejar que fluya."&lt;/p&gt;

&lt;p&gt;Intrigada, decido aplicar esta filosofía a el problema. Regreso a mi escritorio, cierro los ojos y respiro profundamente, recordando los movimientos suaves y fluidos del Tai Chi. En lugar de forzar una solución, dejo que mi mente se relaje y observo el código con una nueva perspectiva.&lt;/p&gt;

&lt;p&gt;De repente, como un rayo de claridad, veo el error: una simple coma fuera de lugar. Corrijo el bug y el programa funcionó perfectamente. Allí me di cuenta de que, al igual que en el Tai Chi, a veces la mejor manera de resolver un problema es relajarse, respirar y dejar que la solución llegue de manera natural.&lt;/p&gt;

&lt;p&gt;Desde ese día, siempre procuro recordar las palabras de mi Shifu Gladys y aplicar la filosofía del Tai Chi a mi trabajo de programación. Y cada vez que me encuentro  con un problema difícil, simplemente me tomo un momento para respirar y dejar que el código fluya.&lt;/p&gt;

&lt;p&gt;Les muestro algunos ejemplos de código que ilustran los principios del Tai Chi aplicados a la programación. Estos ejemplos se centran en la precisión, la paciencia y la atención al detalle, al igual que en el Tai Chi.&lt;/p&gt;

&lt;p&gt;Ejemplo 1: Precisión en el Código&lt;br&gt;
En Tai Chi, cada movimiento debe ser preciso. De manera similar, en el código, cada línea debe ser exacta para evitar errores. Aquí un ejemplo de una función en JavaScript que calcula el factorial de un número:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function factorial(n) {
    if (n &amp;lt; 0) return -1; // Caso de error
    if (n === 0) return 1; // Caso base
    return n * factorial(n - 1); // Llamada recursiva
}
console.log(factorial(5)); // Salida: 120
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, cada condición y llamada recursiva está cuidadosamente colocada para asegurar que la función funcione correctamente.&lt;/p&gt;

&lt;p&gt;Ejemplo 2: Paciencia en la Depuración&lt;br&gt;
La paciencia es clave tanto en Tai Chi como en la programación. Aquí un ejemplo de cómo manejar errores en Python, lo que requiere paciencia para identificar y corregir problemas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: División por cero no permitida."
    return result

print(divide(10, 2))  # Salida: 5.0
print(divide(10, 0))  # Salida: Error: División por cero no permitida.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código muestra cómo manejar excepciones con paciencia, asegurando que el programa no falle inesperadamente.&lt;/p&gt;

&lt;p&gt;Ejemplo 3: Atención al Detalle en la Optimización&lt;br&gt;
En Tai Chi, la atención al detalle es crucial. En programación, esto se traduce en la optimización del código. Aquí un ejemplo en Java de cómo optimizar una búsqueda binaria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int left = 0, right = arr.length - 1;
        while (left &amp;lt;= right) {
            int mid = left + (right - left) / 2;
            if (arr[mid] == target) return mid;
            if (arr[mid] &amp;lt; target) left = mid + 1;
            else right = mid - 1;
        }
        return -1; // Elemento no encontrado
    }

public static void main(String[] args) {
        int[] arr = {2, 3, 4, 10, 40};
        int result = binarySearch(arr, 10);
        System.out.println(result); // Salida: 3
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código muestra una implementación eficiente de la búsqueda binaria, donde cada detalle está optimizado para mejorar el rendimiento.&lt;/p&gt;

&lt;p&gt;Al igual que en el Tai Chi, la programación requiere precisión, paciencia y atención al detalle. Estos ejemplos de código ilustran cómo estos principios pueden aplicarse en el desarrollo de software para crear soluciones efectivas y eficientes.&lt;/p&gt;

&lt;p&gt;Conclusión 😮‍💨&lt;br&gt;
Los personajes de "Man of Tai Chi" no solo enriquecen la narrativa de la película, sino que también ofrecen valiosas lecciones para los desarrolladores de software. Desde la dedicación y el crecimiento personal de Tiger hasta la sabiduría del Maestro Yang y la integridad de Qing Sha, cada personaje aporta una perspectiva única sobre la importancia de la precisión, la paciencia y la atención al detalle en ambas disciplinas.&lt;/p&gt;

&lt;p&gt;Al igual que Tiger Chen, los desarrolladores de software debemos cultivar la precisión, la paciencia y la atención al detalle. Ambas disciplinas, aunque aparentemente diferentes, comparten una filosofía común de mejora continua y perfección. Así que, la próxima vez que te sientes a escribir código, recuerda a Tiger y su viaje, y aborda tu tarea con la misma dedicación y enfoque.&lt;/p&gt;

&lt;p&gt;¡Gracias por leer y déjame tus comentarios! 👇🏻&lt;br&gt;
🚀 ¿Te ha gustado? Comparte tu opinión. &lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn &lt;/a&gt;&lt;br&gt;
&lt;a href="https://lnkd.in/eAjM_Smy" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy&lt;/a&gt; 👩‍💻 &lt;a href="https://lnkd.in/eKvu-BHe%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe &lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/orlidev"&gt;https://dev.to/orlidev&lt;/a&gt; &lt;a href="https://lnkd.in/ecHHabTD" rel="noopener noreferrer"&gt;https://lnkd.in/ecHHabTD&lt;/a&gt; ¡No te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias: &lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible #LinkedIn
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwx1rjwlu557y2cincdp.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.amazonaws.com%2Fuploads%2Farticles%2Fuwx1rjwlu557y2cincdp.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>**Todo lo que Necesitas Saber sobre los Microservicios**</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Wed, 21 Aug 2024 12:00:00 +0000</pubDate>
      <link>https://dev.to/orli/todo-lo-que-necesitas-saber-sobre-los-microservicios-38ea</link>
      <guid>https://dev.to/orli/todo-lo-que-necesitas-saber-sobre-los-microservicios-38ea</guid>
      <description>&lt;p&gt;Los microservicios son una arquitectura de software que permite desarrollar aplicaciones como un conjunto de servicios pequeños e independientes. Cada microservicio se enfoca en una funcionalidad específica y puede ser desarrollado, desplegado y escalado de manera independiente. Esta arquitectura es especialmente útil para aplicaciones grandes y complejas, ya que facilita el mantenimiento y la escalabilidad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0m3usan6h1ucdwtt1xh.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.amazonaws.com%2Fuploads%2Farticles%2Fq0m3usan6h1ucdwtt1xh.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué son los Microservicios?&lt;br&gt;
Los microservicios son componentes de software autónomos que se comunican entre sí a través de APIs ligeras, generalmente utilizando HTTP/REST. A diferencia de las arquitecturas monolíticas, donde todas las funcionalidades están integradas en una sola aplicación, los microservicios permiten dividir la aplicación en partes más pequeñas y manejables.&lt;/p&gt;

&lt;p&gt;Ventajas de los Microservicios&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escalabilidad: Cada microservicio puede escalarse de manera independiente según la demanda, lo que optimiza el uso de recursos.&lt;/li&gt;
&lt;li&gt;Desarrollo Independiente: Los equipos pueden trabajar en diferentes microservicios de manera simultánea sin interferir entre sí.&lt;/li&gt;
&lt;li&gt;Despliegue Rápido: Los microservicios pueden ser desplegados de manera independiente, lo que permite actualizaciones y mejoras más rápidas.&lt;/li&gt;
&lt;li&gt;Resiliencia: Si un microservicio falla, no afecta a toda la aplicación, lo que mejora la disponibilidad y la resiliencia del sistema.&lt;/li&gt;
&lt;li&gt;Tecnología Diversa: Cada microservicio puede ser desarrollado utilizando diferentes tecnologías y lenguajes de programación, según lo que mejor se adapte a su funcionalidad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpeq3qx717pl9u9jjkecv.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.amazonaws.com%2Fuploads%2Farticles%2Fpeq3qx717pl9u9jjkecv.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desventajas de los Microservicios&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complejidad Operacional: Gestionar múltiples microservicios puede ser complejo y requiere una infraestructura robusta.&lt;/li&gt;
&lt;li&gt;Comunicación entre Servicios: La comunicación entre microservicios puede introducir latencia y requiere una gestión cuidadosa.&lt;/li&gt;
&lt;li&gt;Consistencia de Datos: Mantener la consistencia de datos en un sistema distribuido puede ser desafiante.&lt;/li&gt;
&lt;li&gt;Sobrecarga de Red: La comunicación constante entre microservicios puede generar una sobrecarga en la red.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8f3i5ow407gmh00tc2dv.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.amazonaws.com%2Fuploads%2Farticles%2F8f3i5ow407gmh00tc2dv.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comparación con la Arquitectura Monolítica&lt;br&gt;
En una arquitectura monolítica, todas las funcionalidades de la aplicación están integradas en una sola unidad. Esto puede ser más sencillo de desarrollar y desplegar inicialmente, pero a medida que la aplicación crece, se vuelve más difícil de mantener y escalar. En contraste, los microservicios permiten una mayor flexibilidad y escalabilidad, pero a costa de una mayor complejidad operativa.&lt;/p&gt;

&lt;p&gt;Implementación de Microservicios&lt;br&gt;
Paso 1: Definir los Servicios&lt;br&gt;
Identifica las funcionalidades clave de tu aplicación y divídelas en servicios independientes. Cada servicio debe tener una responsabilidad clara y bien definida.&lt;/p&gt;

&lt;p&gt;Paso 2: Elegir las Tecnologías&lt;br&gt;
Selecciona las tecnologías y lenguajes de programación que mejor se adapten a cada microservicio. Puedes utilizar diferentes tecnologías para diferentes servicios según sus necesidades específicas.&lt;/p&gt;

&lt;p&gt;Paso 3: Configurar la Comunicación&lt;br&gt;
Establece cómo se comunicarán los microservicios entre sí. Generalmente, se utilizan APIs RESTful, pero también puedes considerar otras opciones como gRPC o mensajería basada en eventos.&lt;/p&gt;

&lt;p&gt;Paso 4: Implementar la Infraestructura&lt;br&gt;
Configura la infraestructura necesaria para desplegar y gestionar los microservicios. Esto incluye contenedores (como Docker), orquestadores (como Kubernetes) y herramientas de monitoreo y logging.&lt;/p&gt;

&lt;p&gt;Paso 5: Desplegar y Escalar&lt;br&gt;
Despliega los microservicios de manera independiente y escala cada uno según la demanda. Utiliza herramientas de automatización para facilitar el proceso de despliegue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwx6d4x5gxhqrvgxu4n3m.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.amazonaws.com%2Fuploads%2Farticles%2Fwx6d4x5gxhqrvgxu4n3m.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mejores Prácticas&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatización: Automatiza el despliegue, las pruebas y el monitoreo de los microservicios para reducir errores y mejorar la eficiencia.&lt;/li&gt;
&lt;li&gt;Desacoplamiento: Asegúrate de que los microservicios estén lo más desacoplados posible para minimizar las dependencias.&lt;/li&gt;
&lt;li&gt;Monitoreo y Logging: Implementa soluciones de monitoreo y logging para rastrear el rendimiento y los errores de cada microservicio.&lt;/li&gt;
&lt;li&gt;Seguridad: Asegura la comunicación entre microservicios y protege los datos sensibles.&lt;/li&gt;
&lt;li&gt;Pruebas: Realiza pruebas exhaustivas de cada microservicio de manera independiente y en conjunto para garantizar su correcto funcionamiento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conclusión&lt;br&gt;
Los microservicios ofrecen una manera flexible y escalable de desarrollar aplicaciones complejas. Aunque introducen cierta complejidad operativa, sus ventajas en términos de escalabilidad, resiliencia y velocidad de desarrollo los hacen una opción atractiva para muchas organizaciones. Al seguir las mejores prácticas y utilizar las herramientas adecuadas, puedes aprovechar al máximo esta arquitectura.&lt;/p&gt;

&lt;p&gt;Espero que esta guía te sea útil.&lt;br&gt;
¡Gracias por leer y déjame tus comentarios! 👇🏻&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha gustado? Comparte tu opinión. &lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn &lt;/a&gt;&lt;br&gt;
&lt;a href="https://lnkd.in/eAjM_Smy%C2%A0%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy 👩‍💻&lt;/a&gt; &lt;a href="https://lnkd.in/eKvu-BHe%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe &lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/orlidev"&gt;https://dev.to/orlidev&lt;/a&gt; &lt;a href="https://lnkd.in/ecHHabTD%C2%A0%C2%A1No" rel="noopener noreferrer"&gt;https://lnkd.in/ecHHabTD ¡No&lt;/a&gt; te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias: &lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h2&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>**Cómo Crear una API REST con Nest.js y TypeScript**</title>
      <dc:creator>Orli Dun</dc:creator>
      <pubDate>Tue, 20 Aug 2024 12:00:00 +0000</pubDate>
      <link>https://dev.to/orli/como-crear-una-api-rest-con-nestjs-y-typescript-14j0</link>
      <guid>https://dev.to/orli/como-crear-una-api-rest-con-nestjs-y-typescript-14j0</guid>
      <description>&lt;p&gt;Nest.js es un framework progresivo de Node.js para construir aplicaciones del lado del servidor eficientes y escalables. Utiliza TypeScript por defecto y está inspirado en Angular, lo que facilita la creación de aplicaciones modulares y bien estructuradas. En esta guía, aprenderás a crear una API REST básica utilizando Nest.js y TypeScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbwu496e9qhtmmihdemey.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.amazonaws.com%2Fuploads%2Farticles%2Fbwu496e9qhtmmihdemey.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requisitos Previos&lt;/strong&gt;&lt;br&gt;
Antes de comenzar, asegúrate de tener instalado lo siguiente:&lt;br&gt;
Node.js (versión 12 o superior)&lt;br&gt;
npm (gestor de paquetes de Node.js)&lt;br&gt;
Nest CLI (puedes instalarlo con npm install -g @nestjs/cli)&lt;/p&gt;

&lt;p&gt;Paso 1: Crear un Nuevo Proyecto Nest.js&lt;br&gt;
Primero, crea un nuevo proyecto utilizando el CLI de Nest.js:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nest new my-api&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sigue las instrucciones para configurar el proyecto. Una vez creado, navega al directorio del proyecto:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd my-api&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paso 2: Crear un Módulo&lt;br&gt;
Nest.js organiza el código en módulos. Vamos a crear un módulo para manejar una entidad llamada “usuarios”:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nest generate module users&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paso 3: Crear un Controlador&lt;br&gt;
El controlador maneja las solicitudes HTTP. Vamos a crear un controlador para los usuarios:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nest generate controller users&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esto creará un archivo users.controller.ts en el directorio src/users.&lt;/p&gt;

&lt;p&gt;Paso 4: Crear un Servicio&lt;br&gt;
El servicio contiene la lógica de negocio. Vamos a crear un servicio para los usuarios:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nest generate service users&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esto creará un archivo users.service.ts en el directorio src/users.&lt;/p&gt;

&lt;p&gt;Paso 5: Definir la Entidad Usuario&lt;br&gt;
Vamos a definir una entidad básica de usuario. Crea un archivo user.entity.ts en el directorio src/users con el siguiente contenido:&lt;br&gt;
TypeScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01f5pmqy52qxtlekn6d2.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.amazonaws.com%2Fuploads%2Farticles%2F01f5pmqy52qxtlekn6d2.png" alt=" " width="337" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paso 6: Implementar el Servicio&lt;br&gt;
En el archivo users.service.ts, implementa métodos para manejar los usuarios:&lt;br&gt;
TypeScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnx9io072rlcg3fv9g8rh.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.amazonaws.com%2Fuploads%2Farticles%2Fnx9io072rlcg3fv9g8rh.png" alt=" " width="446" height="592"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;br&gt;
Paso 7: Implementar el Controlador&lt;br&gt;
En el archivo users.controller.ts, define las rutas y métodos para manejar las solicitudes HTTP:&lt;br&gt;
TypeScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo57sshee7vgdmty4n379.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.amazonaws.com%2Fuploads%2Farticles%2Fo57sshee7vgdmty4n379.png" alt=" " width="517" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paso 8: Ejecutar la Aplicación&lt;br&gt;
Finalmente, ejecuta la aplicación:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tu API REST estará disponible en &lt;a href="http://localhost:3000/users" rel="noopener noreferrer"&gt;http://localhost:3000/users&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2ngl6uyblg5uvj6e1tj.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.amazonaws.com%2Fuploads%2Farticles%2Fe2ngl6uyblg5uvj6e1tj.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conclusión&lt;br&gt;
¡Felicidades! Has creado una API REST básica con Nest.js y TypeScript. Desde aquí, puedes expandir la funcionalidad agregando autenticación, validación de datos, y conectando a una base de datos como PostgreSQL o MongoDB.&lt;/p&gt;

&lt;p&gt;Espero que esta guía te sea útil.&lt;/p&gt;

&lt;p&gt;¡Gracias por leer y déjame tus comentarios! 👇🏻&lt;/p&gt;

&lt;p&gt;🚀 ¿Te ha gustado? Comparte tu opinión.&lt;br&gt;
Artículo completo, visita: &lt;a href="https://lnkd.in/ewtCN2Mn%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/ewtCN2Mn &lt;/a&gt;&lt;br&gt;
&lt;a href="https://lnkd.in/eAjM_Smy%C2%A0%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB" rel="noopener noreferrer"&gt;https://lnkd.in/eAjM_Smy 👩‍💻&lt;/a&gt; &lt;a href="https://lnkd.in/eKvu-BHe%C2%A0" rel="noopener noreferrer"&gt;https://lnkd.in/eKvu-BHe &lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/orlidev%C2%A0https://lnkd.in/ecHHabTD%C2%A0%C2%A1No"&gt;https://dev.to/orlidev https://lnkd.in/ecHHabTD ¡No&lt;/a&gt; te lo pierdas!&lt;/p&gt;

&lt;p&gt;Referencias:&lt;br&gt;
Imágenes creadas con: Copilot ( microsoft.com )&lt;/p&gt;

&lt;h1&gt;
  
  
  PorUnMillóndeAmigos #MakeYourselfVisible
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
