<?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>Forem: Make It Real</title>
    <description>The latest articles on Forem by Make It Real (@makeitrealcamp).</description>
    <link>https://forem.com/makeitrealcamp</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%2F1100664%2F7d4b85f8-ce87-4699-9864-28184208d7f2.jpg</url>
      <title>Forem: Make It Real</title>
      <link>https://forem.com/makeitrealcamp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/makeitrealcamp"/>
    <language>en</language>
    <item>
      <title>React useEffect</title>
      <dc:creator>Make It Real</dc:creator>
      <pubDate>Wed, 14 Jun 2023 13:26:12 +0000</pubDate>
      <link>https://forem.com/makeitrealcamp/react-useeffect-17a</link>
      <guid>https://forem.com/makeitrealcamp/react-useeffect-17a</guid>
      <description>&lt;p&gt;&lt;code&gt;useEffect&lt;/code&gt; es probablemente el hook más confuso e incomprendido en React. Hoy quiero aclararte eso.&lt;/p&gt;

&lt;p&gt;Usamos hooks todo el tiempo en Make It Real y comprender useEffect es crucial si vamos a escribir código React de estilo moderno.&lt;br&gt;
A continuación veremos:&lt;/p&gt;

&lt;p&gt;A continuación veremos:&lt;br&gt;
Cómo ejecutar un effect(efecto) en cada &lt;code&gt;render&lt;/code&gt;.&lt;br&gt;
Cómo ejecutar un efecto solo en el primer &lt;code&gt;render&lt;/code&gt;.&lt;br&gt;
Cómo ejecutar un efecto en el primer render y volver a ejecutarlo cuando cambia una “dependencia”.&lt;br&gt;
Cómo ejecutar un efecto con limpieza.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es useEffect?&lt;/strong&gt;&lt;br&gt;
El hook &lt;code&gt;useEffect&lt;/code&gt; nos permite realizar &lt;em&gt;side effects&lt;/em&gt; (efectos secundarios) en nuestros componentes de función. Los side effects son acciones externas al código que se está ejecutando, por ejemplo:&lt;/p&gt;

&lt;p&gt;Llamadas a API&lt;br&gt;
Actualizar el DOM&lt;br&gt;
Suscribirse a eventos (event listeners).&lt;br&gt;
Todos estos son efectos secundarios que podríamos necesitar que un componente realice en diferentes momentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejecutar useEffect en cada render&lt;/strong&gt;&lt;br&gt;
El hook &lt;code&gt;useEffect&lt;/code&gt; no devuelve ningún valor, sino que toma dos argumentos, siendo el primero obligatorio y el segundo opcional. El primer argumento es la función callback del efecto que queremos que ejecute hook (es decir, el efecto en sí). Supongamos que queríamos colocar un mensaje &lt;code&gt;console.log()&lt;/code&gt; dentro del callback del useEffect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;run for every componentrender&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De forma predeterminada, el efecto establecido en el hook &lt;code&gt;useEffect&lt;/code&gt; se ejecuta cuando el componente se renderiza por primera vez y después de cada actualización. Si ejecutamos el código anterior, notaremos que se genera el mensaje &lt;code&gt;console.log('run for every componentrender')&lt;/code&gt;a medida que se renderiza nuestro componente. Si nuestro componente alguna vez se volviera a renderizar (por ejemplo, de un cambio de estado con algo como useState), el efecto se ejecutaría nuevamente.&lt;/p&gt;

&lt;p&gt;A veces, volver a ejecutar un efecto en cada renderizado es exactamente lo que quieres. Pero la mayoría de las veces, solo desea ejecutar el efecto en ciertas situaciones, como en el primer renderizado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo ejecutar el useEffect solo en el primer render&lt;/strong&gt;&lt;br&gt;
El segundo argumento del hook &lt;code&gt;useEffect&lt;/code&gt; es opcional y es una lista de dependencias que nos permite decirle a React que omita la aplicación del efecto solo hasta que se den ciertas condiciones. En otras palabras, el segundo argumento del hook &lt;code&gt;useEffect&lt;/code&gt; nos permite limitar cuándo se ejecutará el efecto. Si simplemente colocamos un array vacío como segundo argumento, así es como le decimos a React que solo ejecute el efecto en el renderizado inicial.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;run only for first component render (i.e.component mount)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con el código anterior, el mensaje &lt;code&gt;console.log()&lt;/code&gt; solo se activará cuando el componente se monte por primera vez y no se volverá a generar, incluso si el componente se vuelve a renderizar varias veces.&lt;/p&gt;

&lt;p&gt;Esto es mucho más “eficiente” que ejecutar en cada renderizado, pero ¿no hay un término medio feliz? ¿Qué pasa si queremos rehacer el efecto, si algo cambia?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejecutar el useEffect en el primer render y volver a ejecutarlo cuando cambie la dependencia&lt;/strong&gt;&lt;br&gt;
En lugar de hacer que un efecto se ejecute una vez al principio y en cada actualización, podemos intentar restringir el efecto para que se ejecute solo al principio y cuando cambie cierta dependencia.&lt;/p&gt;

&lt;p&gt;Supongamos que queríamos lanzar un mensaje &lt;code&gt;console.log()&lt;/code&gt; cada vez que cambiara el valor de una propiedad de estado. Podemos lograr esto colocando la propiedad de estado como una dependencia del callback del efecto. Mira el siguiente ejemplo de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;run for first component render and re-run when 'count' changes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Click&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;trigger&lt;/span&gt; &lt;span class="nx"&gt;effect&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arriba tenemos un botón en el template del componente responsable de cambiar el valor de la propiedad de estado de &lt;code&gt;count&lt;/code&gt; cuando se hace click. Cada vez que se cambie la propiedad de estado &lt;code&gt;count&lt;/code&gt; (es decir, cada vez que se haga click en el botón), notaremos que se ejecuta el callback del efecto y se activa el mensaje &lt;code&gt;console.log()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejecutar efecto con limpieza&lt;/strong&gt;&lt;br&gt;
Se ejecuta un callbak de efecto cada vez en el procesamiento inicial y cuando especificamos cuándo se debe ejecutar un efecto. El hook useEffect también brinda la capacidad de ejecutar una limpieza después del efecto. Esto se puede hacer especificando una función de retorne al final de nuestro efecto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FunctionComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;run for first component render and re-run when 'count' changes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;run before the next effectand when component unmounts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Click&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;trigger&lt;/span&gt; &lt;span class="nx"&gt;effect&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el ejemplo anterior, notaremos que el mensaje de la función de limpieza se activa antes de que se ejecute el efecto deseado. Además, si nuestro componente alguna vez se desmonta, la función de limpieza también se ejecutará.&lt;/p&gt;

&lt;p&gt;Un buen ejemplo de cuándo podríamos necesitar una limpieza es cuando configuramos una suscripción a nuestro efecto, pero queremos eliminar la suscripción cada vez que se realice la próxima llamada de suscripción, para evitar memory leaks.&lt;/p&gt;

&lt;p&gt;Estas son principalmente todas las diferentes formas en que el hook &lt;code&gt;useEffect&lt;/code&gt; se puede utilizar para ejecutar efectos secundarios en componentes. Te invito a ver esta guia visual de useEffect de ALEX SIDORENKO que ilustra estos conceptos a través de una serie de GIF es a la vez inteligente y eficaz, especialmente para los estudiantes visuales. También hay una visualización de cómo funcionan las funciones de primera clase si quieres más.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://alexsidorenko.com/blog/useeffect/"&gt;https://alexsidorenko.com/blog/useeffect/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>useeffect</category>
      <category>coding</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>¿ChatGPT reemplazará a los programadores?</title>
      <dc:creator>Make It Real</dc:creator>
      <pubDate>Wed, 14 Jun 2023 12:51:37 +0000</pubDate>
      <link>https://forem.com/makeitrealcamp/chatgpt-reemplazara-a-los-programadores-43jo</link>
      <guid>https://forem.com/makeitrealcamp/chatgpt-reemplazara-a-los-programadores-43jo</guid>
      <description>&lt;p&gt;El surgimiento de ChatGPT y otros LLMs (Modelos de Lenguaje Avanzado) ha despertado temor por la posibilidad de que pueda reemplazar varios trabajos, incluyendo el de los programadores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo funcionan los LLMs como ChatGPT?&lt;/strong&gt;&lt;br&gt;
Un LLM (Large Language Model) se alimenta de una gran cantidad de información (p.e. la información pública que existe hoy en Internet) para crear un modelo estadístico que dada una entrada (p.e. una pregunta) genere una salida (una respuesta).&lt;/p&gt;

&lt;p&gt;Por ejemplo, al ingresar el texto “Había una vez” en ChatGPT recibí la siguiente continuación: “Había una vez una pequeña aldea en lo profundo del bosque. Esta aldea estaba rodeada de exuberante vegetación y habitada por personas amables y trabajadoras …”. Y ahí continúa.&lt;/p&gt;

&lt;p&gt;Como es un modelo estadístico la respuesta puede cambiar así usemos el mismo texto. Por ejemplo, la segunda vez generó el siguiente texto: “Había una vez una historia.”. Y ahí terminó.&lt;/p&gt;

&lt;p&gt;Ignorando lo aburrido de la última respuesta, es increíble que el concepto funcione y que genere respuestas coherentes.&lt;/p&gt;

&lt;p&gt;Muchos LLMs también son capaces de generar código y ¡lo hacen muy bien!&lt;/p&gt;

&lt;p&gt;Sin embargo, debemos tener en cuenta que los LLMs dependen de la información de la que se alimenten y del modelo estadístico que genere. Se necesitan enormes cantidades de datos y un gran poder computacional para generar estos modelos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué hace un(a) programador(a)?&lt;/strong&gt;&lt;br&gt;
Hay muchos tipos de programadores. Algunos trabajan aplicaciones Web, otros en aplicaciones móviles, otros en crear herramientas para otros programadores, etc. En este post nos vamos a centrar en programadores Web y móvil Juniors, que son los que más nos interesan en esta discusión.&lt;/p&gt;

&lt;p&gt;Generalmente, cuando una persona termina el programa TOP de Make It Real y empieza a trabajar en una empresa como desarrollador Web y/o móvil, el primer paso es descargar el código de la aplicación que le hayan asignado y hacerlo funcionar en su propia máquina. Cada aplicación es diferente así que la instalación puede tomar desde algunas horas hasta algunos días.&lt;/p&gt;

&lt;p&gt;Luego le asignarán tareas para desarrollar nuevas funcionalidades y solucionar errores o problemas. Esto requiere entender el contexto del problema, identificar el código que se necesita escribir o cambiar, investigar cómo hacerlo, escribir o modificar el código (idealmente escribir algunas pruebas automatizadas) y seguir el proceso que tenga la empresa para desplegarlo en producción para que los usuarios finales lo puedan utilizar.&lt;/p&gt;

&lt;p&gt;La programación es un proceso que requiere personas creativas y recursivas que puedan entender el contexto de la aplicación (cómo está la aplicación estructurada, qué tecnologías se están usando, cómo afectan el código que estamos escribiendo, qué es realmente lo que quiere el cliente, qué restricciones existen, etc.) y generen una solución.&lt;/p&gt;

&lt;p&gt;Escribir código es sólo una fracción del trabajo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Los LLMs reemplazaran a los programadores?&lt;/strong&gt;&lt;br&gt;
La programación es de las disciplinas más documentadas en Internet y de las comunidades más abiertas a compartir conocimiento.&lt;/p&gt;

&lt;p&gt;Incluso antes de ChatGPT se podían encontrar respuestas a la mayoría de problemas a las que uno se puede enfrentar en programación en sitios como StackOverflow o en la infinidad de blogs de programación.&lt;/p&gt;

&lt;p&gt;Esto ha permitido que la productividad de los programadores haya crecido de forma exponencial desde la llegada de la Web en los noventas. Pero ese incremento en productividad no desaceleró la demanda de programadores, al contrario, las aplicaciones se hicieron mucho más complejas y se crearon nuevas tecnologías como voz sobre IP, servicios de streaming, criptomonedas, entre muchas otras.&lt;/p&gt;

&lt;p&gt;Mi predicción es que las empresas no van a requerir menos programadores, al contrario, van a requerir más, porque cada vez van a querer hacer cosas más interesantes y complejas, que les den una mayor ventaja competitiva y les permita aumentar sus ingresos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Reemplazará algún día la Inteligencia Artificial a los programadores?&lt;/strong&gt;&lt;br&gt;
Los logros de los LLMs son impresionantes, pero son solo el inicio de la revolución hacia una automatización mucho más completa.&lt;/p&gt;

&lt;p&gt;Se va a necesitar mucho más que LLMs para automatizar nuestro trabajo como programadores, pero ese debería ser nuestro objetivo a largo plazo, porque una vez lo logremos, lo más probable es que también hayamos automatizado el trabajo del resto de la humanidad y nadie más necesite un trabajo para sobrevivir.&lt;/p&gt;

&lt;p&gt;Es muy temprano para predecir qué pasará pero lo único cierto es que los programadores tendremos una gran influencia en ese futuro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;br&gt;
No, los LLMs no reemplazarán a los programadores. Escribir código es sólo una fracción del trabajo de un(a) programador(a) y los LLMs son una herramienta que incrementará la productividad (o eso es lo que esperamos).&lt;/p&gt;

&lt;p&gt;Un aumento en productividad no significa que las empresas dejarán de contratar programadores, al contrario, los avances en Inteligencia Artificial están creando nuevas oportunidades para que las empresas creen y actualicen sus soluciones, y aumenten su ventaja competitiva.&lt;/p&gt;

&lt;p&gt;Sin embargo, a largo plazo, nuestro objetivo como programadores sí debería ser el de lograr reemplazarnos, porque es muy posible que cuando lo logremos nadie más tenga que volver a trabajar para sobrevivir.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>programacion</category>
      <category>developer</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
