<?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: Ariel Calix</title>
    <description>The latest articles on DEV Community by Ariel Calix (@arielcalix).</description>
    <link>https://dev.to/arielcalix</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%2F665531%2Fa059a261-2d5b-4910-80f6-39e11f21f90d.jpg</url>
      <title>DEV Community: Ariel Calix</title>
      <link>https://dev.to/arielcalix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arielcalix"/>
    <language>en</language>
    <item>
      <title>Instalar WSL</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Wed, 10 Jan 2024 19:35:48 +0000</pubDate>
      <link>https://dev.to/arielcalix/instalar-wsl-2oah</link>
      <guid>https://dev.to/arielcalix/instalar-wsl-2oah</guid>
      <description>&lt;h2&gt;
  
  
  Instalando WSL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Habilitar la Virtualizacion en el equipo.
&lt;/h3&gt;

&lt;p&gt;En algunos equipos como los &lt;em&gt;DELL&lt;/em&gt; existe una opción a nivel de BIOS para habilitar la virtualización en el equipo, por tanto deberemos verificar si nuestro equipo la tiene. Para ello puedes consultar la documentacion del fabricante o entrar en ella &lt;strong&gt;Con mucho cuidado&lt;/strong&gt; y buscar la opción. Para ello presiona F2 o F12 en cuanto enciendes el PC.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Verificar que WSL esté habilitado en windows.
&lt;/h3&gt;

&lt;p&gt;Una vez que ya hemos comprobado que la virtualización esá activa debemos verificar que el WSL esté habilitado en nuestro Windows y para ello debemos ir a &lt;strong&gt;Panel de Control &amp;gt; Programas y Características&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0M6xKD6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9o257tt241c9eki5ns0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0M6xKD6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9o257tt241c9eki5ns0z.png" alt="Programas y Características" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez hallamos accedido se nos mostrara un cuadro como el siguiente:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nUDUIJpM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvk15advj4n2u1ah3poi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nUDUIJpM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvk15advj4n2u1ah3poi.png" alt="Características adicionales" width="415" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahí deberemos bajar y buscar la caracteristica de Susistema de Windows para Linux y marcar la casilla.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l7SPp3rq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vic4v54lw65l67kmw1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l7SPp3rq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vic4v54lw65l67kmw1y.png" alt="WSL" width="409" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Instalacion del Nucleo
&lt;/h2&gt;

&lt;p&gt;Una vez tenemos los dos primeros pasos listos. Ejecutamos una PowerShell con privilegios de administrador. Para ello existen varias rutas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Presionar las teclas &lt;code&gt;Windows + R&lt;/code&gt; y escribir &lt;code&gt;PowerShell&lt;/code&gt; luego Mantener pulsar la combinación de teclas &lt;code&gt;Ctrl + Shift + Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Buscar en el equipo (Desde el buscador) PowerShell, dar clic derecho y clic en &lt;code&gt;Ejecutar como Administrador&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez abierta ejecutaremos los siguientes comandos en orden.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hasta aqui ya hemos instalado WSL 1, pero si deseamos actualizar a la versión dos del nucleo descargamos y ejecutamos el siguiente paquete&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi"&gt;WSL Update V2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último ejecutamos el siguiente (En el PowerShell abierto) comando para habilitar WSL 2.&lt;br&gt;
&lt;code&gt;wsl --set-default-version 2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ahora puedes entrar en el store y buscar la distribución con la que te sientas más comodo.&lt;/p&gt;

&lt;p&gt;En próximas entregas veremos como configurar nuestra terminal para dejarla visualmente hermosa.&lt;/p&gt;

&lt;p&gt;Hasta la próxima.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;¡Happy Hacking!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Estandares de escritura C# (Parte II)</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Sun, 04 Dec 2022 00:14:48 +0000</pubDate>
      <link>https://dev.to/arielcalix/estandares-de-escritura-c-parte-ii-g7a</link>
      <guid>https://dev.to/arielcalix/estandares-de-escritura-c-parte-ii-g7a</guid>
      <description>&lt;p&gt;Hola amigos, anteriormente hablamos sobre los estsndares de escritura, ahora en este post acompañame a ver las convenciones de lenguaje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de datos String
&lt;/h2&gt;

&lt;p&gt;Para las concatenaciones de estring es recomendsble utilizar las interpolaciones de cadenas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;displsyName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nameList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nameList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;FirstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tipos de datos sin signo
&lt;/h2&gt;

&lt;p&gt;Cuando desarrollamos en C# es mejor utilizar &lt;code&gt;int&lt;/code&gt; en lugar del uso de tipos sin signo, usar &lt;code&gt;int&lt;/code&gt; es más común en todo C# y de hecho es más facil de interactuar con otras bibliotecas cuando se usa &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Matrices
&lt;/h2&gt;

&lt;p&gt;Para lasmatrices es mejor utilizar una sintaxis concisa para la inicialización de matrices en linea de declaración.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;vowels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"e"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"o"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"u"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En cuanto a las convenciones y estándares de C# hemos abordado las más importantes y útiles. En el futuro abordaremos los estándares para consultas con  LINQ. Espero les haya gustado. Hasta la próxima.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;em&gt;¡Happy Hacking!&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Estándares de escritura C# (Parte I)</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Sun, 31 Jul 2022 23:25:00 +0000</pubDate>
      <link>https://dev.to/arielcalix/estandares-de-escritura-c-3j16</link>
      <guid>https://dev.to/arielcalix/estandares-de-escritura-c-3j16</guid>
      <description>&lt;p&gt;Como desarrolladores parte de nuestro tiempo es la escritura del código para las funcionalidades de una solución del negocio. Esta actividad no es solo escribirlo y ya, sino también es escribirlo bien e implementando buenas prácticas.&lt;br&gt;
Por eso, hoy hablaremos de los Estandares de la escritura de código en el lenguaje C#.&lt;/p&gt;
&lt;h2&gt;
  
  
  ¿Qué es un estandar de escritura?
&lt;/h2&gt;

&lt;p&gt;Primero hay que saber que un estándar es la forma de hacer algo con una serie de rúbricas que lo harán comprensible a otras personas del rubro. Por eso en el código cada una de las lineas debería implementar las buenas practicas.&lt;/p&gt;

&lt;p&gt;Algunas de las ventajas de implementarlo son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dan una apariencia más coherente a nuestro código, para que los lectores puedan centrarse en el contenido, no en el diseño.&lt;/li&gt;
&lt;li&gt;Permiten la rapida comprensión del código al poder hacer suposiciones basadas en experiencias anteriores.&lt;/li&gt;
&lt;li&gt;Facilitan la realización de copias, cambios y mantenimiento del código.&lt;/li&gt;
&lt;li&gt;Muestran los procedimientos recomendados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recuerda no es solo escribir el código, sino escribirlo bien o como dijo Linus Torvalds&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hablar es fácil. Enséñame el código.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Pascal Case
&lt;/h2&gt;

&lt;p&gt;Este tipo de nomenclatura lo utilizaremos al momento de escribir los nombres de nuestras &lt;code&gt;Class&lt;/code&gt;, &lt;code&gt;Struct&lt;/code&gt; o &lt;code&gt;Record&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Ejemplo de clases&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DataService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Ejemplo de record&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;PhysicalAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Street&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;City&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;StateOrProvince&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;ZipCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Ejemplo de struct&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;ValueCoordinate&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;Tambien cuando asignamos nombres a mi3mbros de clase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExampleEvents&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsValid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IWorkerQueue&lt;/span&gt; &lt;span class="n"&gt;WorkerQueue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;StartEventProcessing&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;CountQueueItems&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;WorkerQueue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Coun&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Uso de Prefijos
&lt;/h2&gt;

&lt;p&gt;Generalmente no utilizamos prefijos, pero en ciertas ocasiones resulta bastante útil implementarlos. Por ejemplo, para escribir el nombre de una &lt;code&gt;interfaz&lt;/code&gt; utilizaremos el prefijo en mayusacula &lt;code&gt;I&lt;/code&gt; así quien haga una implementación de nuestro código sabrá que eso es una &lt;code&gt;interfaz&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IWorkerQueue&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;También cuando hacemos uso de tipos &lt;code&gt;internal&lt;/code&gt; o &lt;code&gt;private&lt;/code&gt; colocaremos como prefijo &lt;code&gt;_&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DataService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;IWorkerQueue&lt;/span&gt; &lt;span class="n"&gt;_workerQueue&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;O cuando implementamos campos &lt;code&gt;static&lt;/code&gt; que sean del tipo &lt;code&gt;private&lt;/code&gt; o &lt;code&gt;internal&lt;/code&gt; usaremos &lt;code&gt;s_&lt;/code&gt; y para los subprocesos estaticos &lt;code&gt;t_&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DataService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;IWorkerQueue&lt;/span&gt; &lt;span class="n"&gt;s_workerQueue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ThreadStatic&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt; &lt;span class="n"&gt;t_timeSpan&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;h2&gt;
  
  
  Camel Case
&lt;/h2&gt;

&lt;p&gt;Cuando escribimos los parametros de &lt;code&gt;method&lt;/code&gt; utilizamos la nomenclatura del tipo &lt;code&gt;camelCase&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="n"&gt;SomeMethod&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;someNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isValid&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Estandares Adicionales
&lt;/h2&gt;

&lt;p&gt;Los estandares adicionales nos ayudarán a encontrar maneras de hacer nuestro código más eficiente y limpio.&lt;/p&gt;

&lt;p&gt;Por ejm.&lt;br&gt;
Utilizar las interpolaciones proporcionadas por el lenguaje puede resultar en codigo más práctico y fácil de leer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;displayName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nameList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nameList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;FirstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuando necesitamos anexar cadenas en un bucle es una mejor opción implementar un objeto del tipo &lt;code&gt;StringBuilder&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;frase&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;muchasFrases&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;muchasFrases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tra"&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;muchasFrases&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Buenas Prácticas en Uso de Variables
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Una buena práctica es utilizar los tipos implícitos solo cuando la asignación hace evidente el tipo de la variable y en los bucles &lt;code&gt;for&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;var1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"This is clearly a string."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;var2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Bucles for&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;frase&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;muchasFrases&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;muchasFrases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//Console.WriteLine("tra" + muchasFrases);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; utilizar tipos implícitos cuando no es evidente el tipo de la variable o cuando desea determinar el tipo en el bucle &lt;code&gt;foreach&lt;/code&gt;.
&lt;em&gt;Nota: Se considera que la variable tiene un tipo claro si implementa un operador &lt;code&gt;new&lt;/code&gt; o se origina en una conversión.&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;var3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Convert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToInt32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; 
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;var4&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ExampleClass&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ResultSoFar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt; confíe en especificar el tipo de la variable en el nombre.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;inputInt&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputInt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Como se puede obserar el nombre de la variable es engañoso&lt;/span&gt;
&lt;span class="c1"&gt;// ya que inputInt es una _cadena_&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En las próximas entregas continuaremos hablando de buenas prácticas de desarrollo con C#, por el momento estas son todas. Hasta la próxima.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;¡Happy Hacking!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Principios Básicos de Redux</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Sat, 18 Jun 2022 04:48:20 +0000</pubDate>
      <link>https://dev.to/arielcalix/principios-basicos-de-redux-4ln3</link>
      <guid>https://dev.to/arielcalix/principios-basicos-de-redux-4ln3</guid>
      <description>&lt;p&gt;En Redux existen conceptos que es importante conocerlos y por eso hoy hablaremos sobre ellos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux: Actions
&lt;/h2&gt;

&lt;p&gt;En Redux existen las &lt;em&gt;Actions&lt;/em&gt; que no son más que las definiciones de Acciones que realizara nuestro reducer para manipular el estado de nuestra aplicación. Por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SET_LOGIN_USER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SET_LOGIN_USER&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como podemos notarlo la &lt;em&gt;Action&lt;/em&gt; es lo que queremos ejecutar, puedes definir cuantas &lt;em&gt;Actions&lt;/em&gt; se requieran, pero ten cuidado porque podrían llegar a ser difíciles de manejar en caso de no utilizarlos correctamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux: Action Creators
&lt;/h2&gt;

&lt;p&gt;Las &lt;em&gt;ActionCreator&lt;/em&gt; son las funciones que nos ayudan a crear una &lt;em&gt;Action&lt;/em&gt; estas hacen que recibamos un objeto y lo transformemos a un objeto de redux, el cual tiene una &lt;code&gt;type&lt;/code&gt; y un &lt;code&gt;payload&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Asumamos que hemos creado un archivo con nombre &lt;em&gt;actionTypes&lt;/em&gt;, el cual importaremos en nuestro archivo &lt;em&gt;actionCreator&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ActionTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./actionTypes&lt;/span&gt;&lt;span class="dl"&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;SetUserLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userAccount&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ActionTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SET_LOGIN_USER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="nx"&gt;userAccount&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Redux: Reducers
&lt;/h2&gt;

&lt;p&gt;Finalmente, el concepto que le da esencia a Redux, los reducers, estos no son más que funciones puras, igual que los anteriores, pero que son las que hacen que nuestra implementación de Redux, llegue a feliz término.&lt;/p&gt;

&lt;p&gt;Los reducer combinan las &lt;em&gt;ActionTypes&lt;/em&gt; y permiten a nuestra aplicación modificar su estado. Para este ejemplo tendremos siempre en cuenta que hemos creado el archivo &lt;code&gt;actionTypes&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ActionTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./actionTypes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userDefaultState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;isLogged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;userLoginReducer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;userDefaultState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&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="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;actionTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SET_USER_LOGIN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAccount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;isLogged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLogged&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como observamos, el &lt;em&gt;reducer&lt;/em&gt; ejecuta la &lt;em&gt;action&lt;/em&gt; que ha sido disparada &lt;em&gt;dispatch&lt;/em&gt; desde un componente por nuestro usuario.&lt;/p&gt;

&lt;p&gt;De este modo ya hemos visto los tres elementos necesarios para implementar Redux. Hasta la próxima.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;¡Happy Hacking!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>redux</category>
      <category>node</category>
    </item>
    <item>
      <title>Top 4 lenguajes más amados en 2021</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Fri, 11 Mar 2022 17:22:49 +0000</pubDate>
      <link>https://dev.to/arielcalix/top-4-lenguajes-mas-amados-en-2021-3g58</link>
      <guid>https://dev.to/arielcalix/top-4-lenguajes-mas-amados-en-2021-3g58</guid>
      <description>&lt;p&gt;El año pasado hice un post como este, me decidí en hacer la revisión del 2021 y me lleve algunas sorpresas en la encuesta que StackOverflow una de las comunidades de software reconocida, y que es el punto de encuentro de muchos desarrolladores (Hasta la llegada de DevTo). Realiza cada año, y en la que participaron 80,000 desarrolladores de todo el mundo.&lt;/p&gt;

&lt;p&gt;Aquí fue donde dieron a conocer los lenguajes más odiados, así como los más amados, es por eso, que hoy hablaremos de un top de lenguajes más amados según esta encuesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. RUST
&lt;/h2&gt;

&lt;p&gt;Por tercer año consecutivo desde el 2019, y llegando apenas a su versión 1.59. Rust encabeza la lista en la encuesta elaborada por StackOverflow.&lt;/p&gt;

&lt;p&gt;Este lenguaje surgió en el año 2010 como un proyecto personal de &lt;em&gt;&lt;a href="https://everipedia.org/wiki/lang_en/graydon-hoare"&gt;Graydone Hoare&lt;/a&gt;&lt;/em&gt; de Mozilla, en ese entonces buscaban un lenguaje del mismo nivel de C/C++, pero que no tuviera los mismos problemas de gestión de memoria.&lt;/p&gt;

&lt;p&gt;Buscaban un lenguaje que fuera lo suficientemente seguro y con la capacidad de soportar los exigentes requisitos en el rendimiento. De esta forma Rust comenzó su evolución gracias al impulso proporcionado por Firefox y a la contribución de un gran número de miembros de la comunidad.&lt;/p&gt;

&lt;p&gt;Hoy día forma parte del motor del navegador Servo el motor de renderizado usado por Firefox, que aprovecha las bondades del paralelismo y la gestión eficiente de la memoria.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Clojure
&lt;/h2&gt;

&lt;p&gt;Un lenguaje de programación algo similar a C/C++ en el sentido que es de propósito general, es utilizado por muchas empresas de gran y/o mediano tamaño entre las cuales podemos mencionar a &lt;em&gt;Amazon&lt;/em&gt;, &lt;em&gt;Staples&lt;/em&gt; y &lt;em&gt;Walmart&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Particularmente posee un eficiente procesamiento de datos y programación recurrente, dos de los procesos que son más relevantes en el desarrollo de software.&lt;/p&gt;

&lt;p&gt;Fue escrito originalmente por &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Rich_Hickey"&gt;Rich Hickey&lt;/a&gt;&lt;/em&gt; y lanzado como proyecto de código abierto en el 2007. Luego fue adoptado y mantenido por &lt;em&gt;Cognitec&lt;/em&gt; compañía cofundada por el mismo Rich con la ayuda de 125 colaboradores. Su ciclo de lanzamiento favorece la compatibilidad con versiones anteriores haciéndolo más estable, aunque el lenguaje continúa desarrollando características potentes y modernas.&lt;/p&gt;

&lt;p&gt;Lo que hace a Clojure único y buena opción es su diseño como lenguaje alojado. En lugar de definir su propia plataforma al estilo de &lt;em&gt;py, Ruby, Java&lt;/em&gt; Clojure había sido prácticamente destinado a sacar provecho de plataformas existentes y construir sobre ellas, pero actualmente se desarrolla en dos plataformas principales:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Java VM&lt;/li&gt;
&lt;li&gt;JavaScript
Haciendo de Clojure un lenguaje de alcance increíble y capaz de ejecutarse donde sea que lo haga Java.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. TypeScript
&lt;/h2&gt;

&lt;p&gt;En el año 2019, TypeScript ocupó el tercer lugar de la lista, pero al parecer, en el 2020 las comunidades de desarrolladores decidieron darle una oportunidad al lenguaje desarrollado por los chicos de Redmond en el año 2012, pero en el 2021 retrocedió un lugar en la lista, pero no deja de estar en los primeros 4.&lt;/p&gt;

&lt;p&gt;Con dos años de desarrollo, Microsoft lanzo TypeScript como una solución para el desarrollo de aplicaciones con JavaScript a gran escala para ellos y para sus clientes. convirtiéndolo en el lenguaje preferido para la implementación de la plataforma SharePoint y su SPFx.&lt;/p&gt;

&lt;p&gt;TypeScript es una solución que busca solventar muchos problemas de JS, está pensado para el desarrollo de aplicaciones robustas, TS es un super set de JS (una tecnología es un super set cuando es capaz de ejecutar programas de la tecnología de la que es un super set) En resumen un programa escrito en JS es un programa valido de TS aunque sean lenguajes diferentes.&lt;/p&gt;

&lt;p&gt;Algunas de las bondades de TS son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El tipado para las variables.&lt;/li&gt;
&lt;li&gt;Los valores sólo se pueden asignar a variables del tipo correspondiente.&lt;/li&gt;
&lt;li&gt;Implementación de interfaces.
Genéricos.&lt;/li&gt;
&lt;li&gt;Conversión de tipos.&lt;/li&gt;
&lt;li&gt;Argumentos con tipados.&lt;/li&gt;
&lt;li&gt;Tipo de retorno para las funciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Elixir
&lt;/h2&gt;

&lt;p&gt;Es un lenguaje de programación dinámico y funcional, diseñado para crear aplicaciones escalables y mantenibles.&lt;/p&gt;

&lt;p&gt;Creado en el 2012 por José Valim. Comparado con otros lenguajes, Elixir se convierte en una tecnología bastante nueva, pero, no es un motivo para dejarnos engañar, que sea un lenguaje relativamente nuevo no significa que sea frágil o que contenga cientos de miles de bugs (Exageración, por cierto). De hecho, podríamos decir que Elixir se distingue por ser muy estable y robusto, ya que los programas creados en este lenguaje se ejecutan en la MV de &lt;a href="https://dev.to/sophiedebenedetto/elixir-and-the-beam-how-concurrency-really-works-354n"&gt;Erlang (BEAM)&lt;/a&gt; &lt;em&gt;&lt;a href="https://dev.to/sophiedebenedetto"&gt;Enlace de Sophie DeBenedetto&lt;/a&gt;&lt;/em&gt; (por si deseas comenzar a entender más sobre Elixir) para los programadores de Ruby On Rails, la sintaxis y las buenas prácticas les serán familiares. ya que José Valim, es programador de Ruby On Rails.&lt;/p&gt;

&lt;p&gt;Para finalizar otros lenguajes que figuran en la lista de los más amados en el 2021 son Julia, Python, Dart y Swift, te invito a utilizarlos, y si ya lo has hecho, enriquece este post con tus comentarios.&lt;/p&gt;

&lt;p&gt;Hasta el siguiente review anual de la encuesta.&lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

&lt;p&gt;Imagen por &lt;a href="https://unsplash.com/@ffstop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Fotis Fotopoulos&lt;/a&gt; en &lt;a href="https://unsplash.com/@ffstop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 Habilidades para ser un desarrollador Front-End</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Wed, 02 Mar 2022 00:43:44 +0000</pubDate>
      <link>https://dev.to/arielcalix/3-habilidades-para-ser-desarrollador-front-end-49k1</link>
      <guid>https://dev.to/arielcalix/3-habilidades-para-ser-desarrollador-front-end-49k1</guid>
      <description>&lt;p&gt;En este articulo veremos las claves para convertirte en un desarrollador Front-End, tambien podras descubrir si ya estás en el camino.&lt;/p&gt;

&lt;p&gt;Todos los sitios web constan de dos partes esenciales, el Back-End y el Front-End.&lt;/p&gt;

&lt;p&gt;El &lt;em&gt;Back-End&lt;/em&gt; es lo que le da sentido al Front-End, esta parte es la que contiene toda la lógica del negocio, las conexiones a Bases de Datos y demas servicios web.&lt;/p&gt;

&lt;p&gt;El &lt;em&gt;Front-End&lt;/em&gt; es la parte visual del sitio, el componente estetico y con el que los usuarios interactuan.&lt;/p&gt;

&lt;p&gt;Ahora bien, el desarrollo de software se categoriza en tres tipos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Desarrollo Front-End.&lt;/li&gt;
&lt;li&gt;Desarrollo Back-End.&lt;/li&gt;
&lt;li&gt;Desarrollo Fullt Stack.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por hoy nos centraremos en tres habilidades que necesitas para ser un desarrollador Front-End.&lt;/p&gt;

&lt;h2&gt;
  
  
  Habilidad 1: Aprende a desarrollar pensando en bloques.
&lt;/h2&gt;

&lt;p&gt;Acá cabe destacar tres cosas que debes Aprender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML.&lt;/li&gt;
&lt;li&gt;CSS.&lt;/li&gt;
&lt;li&gt;JavaScript.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;HTML&lt;/em&gt;: Es la forma diminutiva para Lenguaje de Marcado de Hyper Texto (Hypertext Language Markup), con el comenzamos la contrucción de los pequeños bloques que constituyen cada uno de los componentes de nuestro Sitio Web.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CSS&lt;/em&gt;: Es la forma diminutiva para Hojas de Estilo en Cascada (Cascade Style Sheet), este lenguaje de marcado es el que nos ayudara a darle el estilo visual a nuestros componentes o bloques contruidos a partir de HTML. En pocas palabras es el que le da vida a nuestro sitio.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;JavaScript&lt;/em&gt;: Más conocido como JS, es el lenguaje para desarrollar todos los efectos, las interacciones entre cada uno de los bloques de nuestro sitio, es el que terminara de darle el aliento a nuestro sitio, con el todos los contenidos estaticos podran tener movimiento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Habilidad 2: Frameworks.
&lt;/h2&gt;

&lt;p&gt;La mayor parte del tiempo en el desarrollo Front-End, las cosas suelen tornarse repetitivas de ahí el porque nacen las librerías o Frameworks.&lt;/p&gt;

&lt;p&gt;Este tipo de herramientas nos ayudan a que las tareas que son repetitivas en nuestro desarrollo dejen de serlo, ya que la gran mayoría están pensados para ser sollo llamados y establecidos con los valores que sean necesarios segun el caso.&lt;/p&gt;

&lt;p&gt;Para mencionar algunos de los Frameworks o librerías destacamos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ReactJs.&lt;/li&gt;
&lt;li&gt;VueJs.&lt;/li&gt;
&lt;li&gt;Laravel.&lt;/li&gt;
&lt;li&gt;Spring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entre otros tantos Frameworks, desde los proporcionados por Microsoft como ASP y terminando por los Open Source como Vue o React.&lt;/p&gt;

&lt;h2&gt;
  
  
  Habilidad 3: Aprende un sistema de control de código fuente.
&lt;/h2&gt;

&lt;p&gt;Llegamos a la tercera y no menos importante habilidad, y es que hoy en día no debería existir un desarrollador de software (indistintamente de la orientación de sus desarrollos) que no tenga los conocimientos al menos básicos sobre un sistema de control de código fuente.&lt;/p&gt;

&lt;p&gt;Este nos permite poder llevar un registro de todos los cambios realizados a nuestro código fuente sin importar el tiempo (historico) y el ordenador desde que lo hemos realizado, del mismo modo nos permite poder trabajar de manera colaborativa, no solo con personas de nuestra area o país sino con desarrolladores de otros paises.&lt;/p&gt;

&lt;p&gt;Por mencionar a los más famosos en cuanto a este tipo de sistemas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;Github&lt;/li&gt;
&lt;li&gt;DevOps (Antiguamente llamado TFS – Team Foundation Server)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusiones
&lt;/h2&gt;

&lt;p&gt;Si has comenzado con la tarea de encontrar un trabajo como desarrollador porque acabas de culminar un curso/estudios universitarios, estas tres habilidades son necesarias para que lo encuentres, porque si es cierto que comenzaste, podras notar que en todos los trabajos (al menos casi todos) son tres de las cosas esenciales que solicitan para sus desarrolladores (junior/senior/engineer).&lt;/p&gt;

&lt;p&gt;Por ahora concentrate en esas tres habilidades si es que realmente quieres desarrollar, y con el paso del tiempo comienza a aprender algo sobre construcción de Back-End. Verás que poco a poco te convertiras en un Desarrollador Full-Stack.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Consejo&lt;/em&gt;: No trates de aprender todo de una vez, concentrate en uno, y aprendelo bien.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Breve Historia de Redux</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Fri, 25 Feb 2022 16:54:17 +0000</pubDate>
      <link>https://dev.to/arielcalix/redux-1bh9</link>
      <guid>https://dev.to/arielcalix/redux-1bh9</guid>
      <description>&lt;h2&gt;
  
  
  Redux: Sus Inicios
&lt;/h2&gt;

&lt;p&gt;Redux es un patron orientado a la arquitectura de datos con el que podemos manejar el estado de nuestra aplicacion de una manera sencilla y muy predecible.&lt;/p&gt;

&lt;p&gt;Nace en la comunidad de React como una mejora a las ideas desarrolladas por Flux, actualmente es un patron transversal adaptable a todo tipo de libreria o Framework JavaScript (Jsfx). Esto le permite ser ejecutado en el lado de servidor o incluso en aplicaciones para dispositivos móviles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux: Detalles Técnicos
&lt;/h2&gt;

&lt;p&gt;Es una libreria liviana con tan solo un peso total de 2KB y posee una comunidad amplia para soporte, esto ha provocado que compañias como Netflix la adopten con gran exito.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux: Sus Beneficios
&lt;/h2&gt;

&lt;p&gt;Los beneficios son muchos, pero intentando resumirlos mencionamos solo algunos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arquitectura de datos Escalable.&lt;/li&gt;
&lt;li&gt;Mayor control sobre el flujo de datos y el estado de la aplicacion.&lt;/li&gt;
&lt;li&gt;El estado es global e inmutable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos beneficios tienen un gran impacto para las aplicaciones medianas en las que el set de estados que se utiliza cambia constante debido a diversos componentes.&lt;/p&gt;

&lt;p&gt;Podemos mencionar que las necesidades actuales del lado del frontend se facilitan en gran medida al implementar el patron de Redux, simplificando las necesidades de las aplicaciones avanzadas, como la congelaciòn del estado actual de una aplicación y entregarla tal cual se hayaba cuando el usuario vuelve a entrar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redux: Patron de Arquitectura de Datos
&lt;/h2&gt;

&lt;p&gt;Existen multiples patrones de arquitectura de datos que han sido adoptados al pasar los años en distintos Frameworks (Fx), entre ellos podríamos mencionar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Model View Controller&lt;/em&gt; (MVC)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Model View ViewModel&lt;/em&gt; (MVVM)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos son solo los modelos más famosos, mismos que han sido adoptados por empresas como Microsoft.&lt;/p&gt;

&lt;p&gt;Estos patrones muestran cual es el flujo de la información entre los componentes de una aplicación y como transitan los datos de la aplicación entre vistas, modelos, controladores, etc.&lt;/p&gt;

&lt;p&gt;Cada uno de estos patrones poseé una característica que los hace diferentes de Redux. Dado que hasta el momento los cambios del estado podian darse desde varios elementos del patron, ya fuera en la vista o en los modelos. &lt;/p&gt;

&lt;p&gt;Este tipo de comportamiento produce aplicaciones con mucha interacción entre los componentes, por tanto se dificulta su depuración, mantenimiento e incluso la escalabilidad.&lt;/p&gt;

&lt;p&gt;Facebook Inc, ahora &lt;em&gt;META&lt;/em&gt; con la intención de simplificar los modelos y hacer más predecible el flujo de los datos en la aplicación, lanzó Flux.&lt;/p&gt;

&lt;p&gt;Flux tiene cémo caracteristica más destacable el flujo de los datos ya que éste se realiza siempre en una única dirección.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fffd5k9e4j1iuqqtmhin0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fffd5k9e4j1iuqqtmhin0.jpg" alt="Diagrama Flux"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El diagrama ejemplifica el flujo de datos y nos dice que el &lt;em&gt;Store&lt;/em&gt; contiene todos los datos de la aplicación, su estado. También muestra que los datos fluyen hacia la vista en una única dirección y para modificarlos, desde la vista se lanzan acciones, estas una vez tratadas por el &lt;em&gt;Dispatcher&lt;/em&gt; son capaces de producir un cambio de Estado en el &lt;em&gt;Store&lt;/em&gt; que a su vez viaja hacia la vista.&lt;/p&gt;

&lt;p&gt;Ahora bien con Redux el flujo evoluciona un poco pero la esencia de flux se mantiene.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fojorv9vi47omtbodcqdy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fojorv9vi47omtbodcqdy.jpg" alt="Diagrama Redux"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Además de implentar la arquitectura de Flux, en Redux se agregan los &lt;em&gt;Reducers&lt;/em&gt; que no son más que funciones puras que se encargan de procesar las acciones y generar un nuevo estado.&lt;/p&gt;

&lt;p&gt;Ya hemos conocido la historia de Redux, el patrón que implementa y explicado a grosso modo algunos elementos.&lt;/p&gt;

&lt;p&gt;Por ahora esto es lo que hablaremos de Redux. En la siguiente entrega seguiremos hablando sobre Redux y sus principios básicos. Hasta la Próxima.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;¡Happy Hacking!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>redux</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Las mejores extensiones para Visual Studio Code</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Mon, 22 Nov 2021 23:27:51 +0000</pubDate>
      <link>https://dev.to/arielcalix/las-mejores-extensiones-para-visual-studio-code-2bab</link>
      <guid>https://dev.to/arielcalix/las-mejores-extensiones-para-visual-studio-code-2bab</guid>
      <description>&lt;p&gt;Hola amigos.&lt;br&gt;
Teniendo en cuenta que en algunas ocasiones nuestro flujo de trabajo requiere de varias actividades para llevarlo a cabo. Hoy quiero compartir con ustedes las extensiones que a mi criterio son de mucha utilidad a la hora de realizar nuestro trabajo.&lt;/p&gt;

&lt;p&gt;Y bueno sin más empecemos.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Bracket Pair Colorized
&lt;/h2&gt;

&lt;p&gt;Como su nombre lo indica, es una extensión que le da diferentes colores según lo configuremos nosotros a los Corchetes &lt;code&gt;[  ]&lt;/code&gt;,  Llaves &lt;code&gt;{ &lt;br&gt;
 }&lt;/code&gt; y Paréntesis &lt;code&gt;(  )&lt;/code&gt;. Y es que a la hora de comenzar con nuestra tarea de escritura de código y a medida que el mismo crece, se vuelve complejo detectar donde inicia y donde finalizan los elementos antes mencionados, en cada una de las funciones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6QjwCLns--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yh8xiggdjz66h35pzhkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6QjwCLns--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yh8xiggdjz66h35pzhkf.png" alt="Bracket Pair Colorized 2" width="620" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2"&gt;Bracket Pair Colorized 2&lt;/a&gt; la encuentras en el marketplace de Microsoft para Visual Studio Code y está desarrollada por &lt;a href="https://marketplace.visualstudio.com/publishers/CoenraadS"&gt;CoenraadS&lt;/a&gt;. Es gratuita, y a mi criterio, aparte de darle color a nuestros desarrollos, te facilitara la identificación de funciones o anidaciones en tu código.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Color Higlight
&lt;/h2&gt;

&lt;p&gt;La segunda extensión que recomiendo sirve en el momento que iniciamos a tabajar a nivel de Frontend. Todo aquel que este o en algún momento haya trabajado en el Frontend de un desarrollo sabe lo tedioso que es tener que cambiar al navegador para buscar que color es cada uno de las asignasiones ya sean &lt;code&gt;RGB&lt;/code&gt;, &lt;code&gt;HEX&lt;/code&gt;, &lt;code&gt;HSL&lt;/code&gt; o cualquier otro modo que estemos utilizando.&lt;/p&gt;

&lt;p&gt;Con &lt;strong&gt;Color Highlight&lt;/strong&gt; se acaba ese dolor de cabeza ya que resalta cada uno de los códigos de color según el color que este sea, de modo que al momento de buscar un color lo podrás identificar facilmente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--evPcinjn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdr9zde2h9seg5lfmz3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--evPcinjn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdr9zde2h9seg5lfmz3e.png" alt="Color Highlight" width="353" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight"&gt;Color Highlight&lt;/a&gt; la encuentras siempre en el Marketplace de Microsoft para Visual Studio Code y está desarrollada por &lt;a href="https://marketplace.visualstudio.com/publishers/naumovs"&gt;Sergii Naumov&lt;/a&gt;. Es totalmente gratuita y te facilitara mucho al momento de trabajar con archivos de tipo &lt;code&gt;SCSS&lt;/code&gt;, &lt;code&gt;CSS&lt;/code&gt; o incluso en el mismo &lt;code&gt;HTML&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. TODO Tree
&lt;/h2&gt;

&lt;p&gt;Esta interesante extensión, te ayuda a tener un repositorio en tiempo real de los comentarios de tipo &lt;code&gt;TODO, FIX, BUG, HOTFIX&lt;/code&gt; entre otros, es muy configurable y permite extender a otras palabras para que sean reconocidas, se abre en el panel lateral, y aparte de eso, al dar clic te lleva donde se encuentra el comentario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yArj-sHw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5zbn4316cik92djg8rgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yArj-sHw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5zbn4316cik92djg8rgp.png" alt="TODO tree" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree"&gt;TODO Tree&lt;/a&gt; la encuentras siempre en el Marketplace de Microsoft para Visual Studio Code y está desarrollada por &lt;a href="https://marketplace.visualstudio.com/publishers/Gruntfuggly"&gt;Gruntfuggly&lt;/a&gt;. Es totalmente gratuita y vale la pena darle una oportunidad, al final terminas encariñandote y sacandole provecho.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Git Graph
&lt;/h2&gt;

&lt;p&gt;Git Graph, es una extensión que nos ayuda a realizar un rastreo de los commits en nuestro repositorio de manera Local y Remota.&lt;/p&gt;

&lt;p&gt;Con Git Graph tenemos una manera más fácil y gráfica de identificar los commits realizados, listándolos todos desde la fecha más antigua a la más reciente e incluso poder ver los cambios y la descripción para cada uno de ellos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ik5bJeQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7lrft0rjevqcqm84fm23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ik5bJeQm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7lrft0rjevqcqm84fm23.png" alt="Git Graph 1" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al dar clic sobre un commit podrás ver la descripción, los archivos modificados, el usuario que realiza el commit y la fecha y al dar clic derecho sobre el commit podrás ver la opción para revertir el desarrollo al commit seleccionado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xUHpN8-k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0zvaoax7acnfy32o7gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xUHpN8-k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0zvaoax7acnfy32o7gl.png" alt="Git Graph 2" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph"&gt;Git Graph&lt;/a&gt; la encuentras siempre en el Marketplace de Microsoft para Visual Studio Code y está desarrollada por &lt;a href="https://marketplace.visualstudio.com/publishers/mhutchie"&gt;Mhutchie&lt;/a&gt;. Es totalmente gratuita.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Vscode Faker
&lt;/h2&gt;

&lt;p&gt;Finalizaremos la entrega con una extensión no menos importante pero si muy útil llamada Vscode Faker.&lt;/p&gt;

&lt;p&gt;Esta extensión nos ayuda a crear datos aleatorios para nuestro desarrollo, si aun no has planeado conectarte a un API puedes hacer uso de ella permite la creación de correos, nombres, números de teléfono, empresas, entre otros datos ficticios y completamente validos para el momento de realizar una presentacion de plantillas HTML o incluso en desarrollos con frameworks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=deerawan.vscode-faker"&gt;Vscode Faker&lt;/a&gt; la encuentras siempre en el Marketplace de Microsoft para Visual Studio Code y está desarrollada por &lt;a href="https://marketplace.visualstudio.com/publishers/deerawan"&gt;Burdi Irawan&lt;/a&gt;. Es totalmente gratuita.&lt;/p&gt;

&lt;p&gt;Por ahora dejo estas extensiones, espero sean de utilidad. no olvides dejar tus comentarios o tus reacciones, hasta la préxima.&lt;/p&gt;

&lt;p&gt;Imagen por &lt;a href="https://unsplash.com/@ffstop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Fotis Fotopoulos&lt;/a&gt; en &lt;a href="https://unsplash.com/s/photos/developer?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>extensiones</category>
      <category>developers</category>
    </item>
    <item>
      <title>Resumen</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Sun, 14 Nov 2021 18:19:01 +0000</pubDate>
      <link>https://dev.to/arielcalix/net-core-vs-nodejs-resumen-275h</link>
      <guid>https://dev.to/arielcalix/net-core-vs-nodejs-resumen-275h</guid>
      <description>&lt;p&gt;Hola Amigos y bienvenidos a este vs entre dos tecnologías, en esta ocasion haremos un resumen de los que hemos venido Hablando.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿NodeJS o .Net Core?
&lt;/h2&gt;

&lt;p&gt;Como lo hemos dicho anteriormente, hablar de cada una y confrontarlas no es que queramos hacerte usar una o la otra, por el contrario, que tengas un panorama más amplio sobre cada una y los proyectos que pueden realizar en cada uno para que así completes el proyecto sin problemas, cada una tiene sus bondades para un proyecto en específico que la otra no posea y viceversa, queda a tu elección cual usar. Solamente ten en cuenta que para el lado web, tanto a nivel de cliente como servidor NodeJS es bastante rapido lo que lo hace un gran candidato y ganador es ese ambito, mientras que en proyectos transaccionales .Net Core se lleva el premio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ventajas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;.Net Core&lt;/th&gt;
&lt;th&gt;NodeJS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Es Multiplataforma&lt;/td&gt;
&lt;td&gt;Es multiplataforma&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sistema de almacenamiento en cache confiable&lt;/td&gt;
&lt;td&gt;Base de Código única y potente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implementacion y mantenimiento flexible y sencillo&lt;/td&gt;
&lt;td&gt;Escalabilidad e implementación seguras&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Desventajas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;.Net Core&lt;/th&gt;
&lt;th&gt;NodeJS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Soporte relacional de objetos limitado&lt;/td&gt;
&lt;td&gt;Bloqueo de E/S&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La brecha entre el lanzamiento y la estabilidad&lt;/td&gt;
&lt;td&gt;Estandarización de librerias.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Tipos de Proyectos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;.Net Core&lt;/th&gt;
&lt;th&gt;NodeJS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web, mismas que pueden ser desplegadas en Windows, Linux o Mac OS&lt;/td&gt;
&lt;td&gt;Aplicaciones de chat en tiempo real&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aplicaciones con Docker, en cualquiera de las nubes ya sea (Azure, AWS o GCP)&lt;/td&gt;
&lt;td&gt;Aplicaciones web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aplicaciones de Escritorio UWP lo que permite que tus apps sean ejecutadas en Windows 10, XBOX y HoloLens&lt;/td&gt;
&lt;td&gt;Servicios de API Rest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IoT&lt;/td&gt;
&lt;td&gt;IoT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IA&lt;/td&gt;
&lt;td&gt;Streaming de datos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desarrollo de juegos&lt;/td&gt;
&lt;td&gt;Aplicaciones complejas de una sola Página&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En resumen, cada una de ellas está en continuo desarrollo para el soporte de distintos proyectos y arquitecturas, queda de tí implementarlos de la mejor forma.&lt;/p&gt;

&lt;p&gt;Me despedido, y espero les agrade este vs, espero sus comentarios.&lt;/p&gt;

&lt;p&gt;Imagen por &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Marius Niveri&lt;/a&gt; en &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>netcore</category>
      <category>programming</category>
    </item>
    <item>
      <title>NodeJS</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Fri, 12 Nov 2021 01:34:20 +0000</pubDate>
      <link>https://dev.to/arielcalix/net-core-vs-nodejs-3gn0</link>
      <guid>https://dev.to/arielcalix/net-core-vs-nodejs-3gn0</guid>
      <description>&lt;p&gt;Hola Amigos y bienvenidos a este vs entre dos tecnologías, hablaremos sobre que son cada una y en que podemos implementarlas y sin más les presento a nuestro segundo contendiente NodeJS.&lt;/p&gt;

&lt;h2&gt;
  
  
  NodeJS ¿Sus inicios?
&lt;/h2&gt;

&lt;p&gt;NodeJS nacio en el año 2009 bajo del nombre de Nodo por &lt;a href="https://en.wikipedia.org/wiki/Ryan_Dahl"&gt;Ryan Dahl&lt;/a&gt;, quien para ese año formaba parte de Joyent, la empresa que sería la propietaria de NodeJS.&lt;/p&gt;

&lt;p&gt;A pesar que en sus inicios NodeJS tuvo un desarrollo lento, llego a ser la potente plataforma que es hoy, consagrandose como una de las más amadas de los últimos años.&lt;/p&gt;

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

&lt;p&gt;Es un entorno de ejecucion de un solo hilo de código abierto y multiplataforma, de ahí que tenga tan buena comunidad de soporte, se ejecuta bajo el motor JS V8 usado por Google.&lt;/p&gt;

&lt;p&gt;En cuanto al lenguaje implementado, el elegido fue JS, mismo que se uso en Scripts del lado de cliente durante sus primeros años (20 aproximadamente), y solo podia usarse con la implementación de &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; en el que un desarrollador necesitaba trabajar con multiples lenguajes para moverse entre el Backend y Frontend.&lt;/p&gt;

&lt;p&gt;NodeJS está escrito en los inmortales C y C++, y no dejando por fuera JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  NodeJS ¿En que lo uso?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Aplicaciones de chat en tiempo real.&lt;/li&gt;
&lt;li&gt;Aplicaciones web.&lt;/li&gt;
&lt;li&gt;Servicios de API Rest.&lt;/li&gt;
&lt;li&gt;IoT.&lt;/li&gt;
&lt;li&gt;Streaming de datos.&lt;/li&gt;
&lt;li&gt;Aplicaciones complejas de una sola Página.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  NodeJS ¿Su futuro?
&lt;/h2&gt;

&lt;p&gt;Sobre el futuro de NodeJS es dificil de decirlo a ciencia cierta, dado que es una tecnología joven y que continua expandiendose, cuenta con un gran futuro por delante, pero tambien dependera del apoyo que la comunidad siga brindandole.&lt;/p&gt;

&lt;p&gt;Imagen por &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Marius Niveri&lt;/a&gt; en &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>node</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>.Net Core</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Wed, 10 Nov 2021 19:28:00 +0000</pubDate>
      <link>https://dev.to/arielcalix/net-core-vs-nodejs-4c0b</link>
      <guid>https://dev.to/arielcalix/net-core-vs-nodejs-4c0b</guid>
      <description>&lt;p&gt;Hola Amigos y bienvenidos a este vs entre dos tecnologías, hablaremos sobre que son cada una y en que podemos implementarlas y sin más les presento a nuestro primer contendiente &lt;strong&gt;.Net Core&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  .Net ¿Sus Inicios?
&lt;/h2&gt;

&lt;p&gt;para conocer .Net Core debemos hablar un poco sobre los inicios de .Net.&lt;/p&gt;

&lt;p&gt;.Net nacio en el año 2001, con la publicacion de los primeros estandares (334 y 335) en ECMA para C# y CLR(Common Language Runtime). Y en 2002 se libera .Net Framework 1.&lt;/p&gt;

&lt;p&gt;Para el año 2008 Microsoft da el anuncio que el proyecto ASP.Net MVC será de tipo &lt;a href="https://es.wikipedia.org/wiki/C%C3%B3digo_abierto"&gt;Open Source&lt;/a&gt;, ese mismo año en la conferencia &lt;a href="https://es.wikipedia.org/wiki/Build_(conferencia_desarrolladores)"&gt;//build/&lt;/a&gt; &lt;a href="https://es.wikipedia.org/wiki/Anders_Hejlsberg"&gt;Anders Hejlsberg&lt;/a&gt; anuncia que el compilador Roslyn de C# sera de tipo Open Source. Y es en 2008 que comienza el desarrollo de .Net Core.&lt;/p&gt;

&lt;h2&gt;
  
  
  .Net Core ¿Qué es?
&lt;/h2&gt;

&lt;p&gt;Esta es la plataforma más moderna para desarrollo ofrecida por Microsoft, su lanzamiento oficial fue en 2016 con .Net Core 1.0. Actualmente nos encontramos con la version 6 lanzada apenas en el año 2021 y en la que se unifican .Net Framework, .Net Core y Mono en una sola plataforma. Es un lenguaje del tipo Open Source, es multiplataforma y de un rendimiento muy alto para crear todo tipo de aplicaciones.&lt;/p&gt;

&lt;p&gt;Dentro de las principales características de .Net Core tenemos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiplataforma y con soporte para uso en contenedores Docker.&lt;/li&gt;
&lt;li&gt;Alto rendimiento (fue diseñado desde 0).&lt;/li&gt;
&lt;li&gt;Asincronia, este patron en todas las librerías comunes para mejorar el rendimiento en las llamadas I/O.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  .Net Core ¿En que lo uso?
&lt;/h2&gt;

&lt;p&gt;.Net Core nos permite implementar todo tipo de aplicaciones desde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web, mismas que pueden ser desplegadas en Windows, Linux o Mac OS.&lt;/li&gt;
&lt;li&gt;Aplicaciones con Docker, en cualquiera de las nubes ya sea (Azure, AWS o GCP).&lt;/li&gt;
&lt;li&gt;Aplicaciones de Escritorio UWP lo que permite que tus apps sean ejecutadas en Windows 10, XBOX y HoloLens.&lt;/li&gt;
&lt;li&gt;IoT.&lt;/li&gt;
&lt;li&gt;IA.&lt;/li&gt;
&lt;li&gt;Desarrollo de juegos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  .Net Core ¿Su Futuro?
&lt;/h2&gt;

&lt;p&gt;A lo largo de muchos años han sido creadas diferentes plataformas de .Net como ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.Net Framework.&lt;/li&gt;
&lt;li&gt;.Net Core.&lt;/li&gt;
&lt;li&gt;Mono.
Y otras como:&lt;/li&gt;
&lt;li&gt;Silverlight&lt;/li&gt;
&lt;li&gt;Windows Phone&lt;/li&gt;
&lt;li&gt;.Net Compact Framework
Mismas que de alguna forma ayudaron a perfilar .Net como lo que es hoy en día.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desde la version 3 de .Net Core no se han continuado con la migracion de características desde .Net Clasico. Por lo que las siguientes tecnologías ya no tienen un equivalente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Web Forms.&lt;/li&gt;
&lt;li&gt;WCF.&lt;/li&gt;
&lt;li&gt;Workflow Foundation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ahora bien Aunque existe Blazor, mismo que es su sustituto no existe una migración directa. Si quieres migrar tus servicios WCF, tienes que utilizar Web API's.&lt;/p&gt;

&lt;p&gt;Lo anterior no significa que tengas que migrar todas tus aplicaciones actuales a .Net Core si ya son funcionales. Recuerda que son paltaformas diferentes, por lo que migrar puede llevar más tiempo del que crees.&lt;/p&gt;

&lt;p&gt;Abordaremos más sobre .Net en una serie especial para este framework pero por el momento esto es lo que necesitas saber para este versus entre estas dos tecnologías.&lt;/p&gt;

&lt;p&gt;Imagen por &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Marius Niveri&lt;/a&gt; en &lt;a href="https://unsplash.com/@m4r1vs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>programming</category>
      <category>netcore</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Principios SOLID</title>
      <dc:creator>Ariel Calix</dc:creator>
      <pubDate>Wed, 03 Nov 2021 23:39:18 +0000</pubDate>
      <link>https://dev.to/arielcalix/principios-solid-3mh</link>
      <guid>https://dev.to/arielcalix/principios-solid-3mh</guid>
      <description>&lt;h2&gt;
  
  
  ¿Qué son los principios SOLID?
&lt;/h2&gt;

&lt;p&gt;Cuando hablamos de SOLID, hablamos de un conjunto de buenas prácticas de desarrollo, también podemos decir que son los principios de la programación orientada a objetos, estos principios tienen una estrecha relación con los patrones de programación.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué aportan a nuestros código?
&lt;/h2&gt;

&lt;p&gt;Los principios SOLID nos ayudan a tener un mejor tiempo durante la compilacion, alta coherencia de nuestro código y una fuerte encapsulación del mismo. Estos principios tienen en esencia la finalidad de escribir código de mayor calidad, facilitar el mantenimiento, permitir la reutilizacion y la escalabilidad del código.&lt;/p&gt;

&lt;p&gt;SOLID es un acrónimo introducido por el Sr. Michael Feathers, tomando como base los 5 principios propuestos por &lt;a href="https://es.wikipedia.org/wiki/Robert_C._Martin"&gt;Robert C. Martin&lt;/a&gt; en el año 2000.&lt;/p&gt;

&lt;p&gt;Cada letra del acrónimo es la referencia a un principio de modo que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S&lt;/strong&gt; (SRP) – Principio de responsabilidad única (Single responsibility principle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O&lt;/strong&gt; (OCP) – Principio de abierto/cerrado (Open/closed principle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L&lt;/strong&gt; (LSP) – Principio de sustitución de Liskov (Liskov substitution  principle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I&lt;/strong&gt; (ISP) – Principio de segregación de la interfaz  (Interface segregation principle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D&lt;/strong&gt; (DIP) – Principio de inversión de la dependencia (Dependency inversion principle)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Principio de Responsabilidad Única
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Nunca debería haber mas de una razón en una clase para cambiar”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Con este principio buscamos que un objeto/clase tenga únicamente una responsabilidad y que se encuentre completamente encapsulada por la clase. Cuando hablamos de responsabilidad, hacemos referencia a una razón para cambiar. Este principio dirige nuestro desarrollo hacia una coherencia más fuerte en la clase y un encaje más flojo entre la dependencia de clases, una mayor lectura, más eficiente y un código con menos complejo. Por ejm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Clase Rectangulo {
      area();
      dibujar();
   }

   Clase CalcularGeometria : Rectangulo {
      area calcularArea();
      dibujar dibujarArea();
   }

   Function dibujar(){
      return dibujarArea();
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo se muestra la clase rectángulo con dos métodos, area() y dibujar(),  Como puedes observar la clase Rectángulo.area() se encargaría de retornar el valor del área para ser dibujada por Rectángulo.dibujar().&lt;br&gt;
Con esta forma de diseñar una clase, si en un futuro realizáramos una modificación a la clase dibujar, para extender su funcionalidad a otra clase llamada Triangulo. Estaríamos forzados a tener que probar de nuevo  la clase Rectángulo para asegurarnos que su funcionalidad no fue alterada. Lo que el SRP propone es lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Clase Dibujar {
      dibujar();
   }

   Clase Rectangulo : Dibujar {
      area();
      dibujar dibujarRectangulo();
   }

   Clase CalcularGeometria {
      return calcularArea();
   }

   Function dibujarVista(){
      return dibujarRectangulo();
   }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora si observas, se crea una nueva clase llamada dibujarVista que contiene un solo método llamado dibujarRectangulo().&lt;br&gt;
Es fácil comprender que las clases son  generales, y que cualquier llamado a estas no significa tener que modificarla, y si quisiéramos extender su funcionalidad lo podríamos hacer fácilmente.&lt;/p&gt;

&lt;p&gt;Este principio probablemente sea el más importante de todos, al mismo tiempo es el más sencillo y a su vez el más complicado de llevar a cabo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Principio Abierto-Cerrado
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Las entidades de Software (clases, módulos, funciones, etc.) han de estar abiertas para tener extensiones, pero cerradas para modificaciones”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este principio busca que una entidad nos permita que su comportamiento se pueda extender en cuanto a funcionalidad, pero nunca modificarse el código existente. Cualquier clase (o cualquier cosa que codifiques) debe estar escrito de un manera que pueda ser utilizada por lo que es, y que pueda entender de ser necesario. Pero nunca se deben realizar cambios modificando el código ya existente.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.  Principio de sustitución de Liskov
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Los subtipos deben ser sustituidos por su tipo de base”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lo que este principio definido por &lt;a href="https://es.wikipedia.org/wiki/Barbara_Liskov"&gt;Barbara Liskov&lt;/a&gt; sugiere es que los objetos deberían ser reemplazados por ejemplos de su subtipo, y ello sin que la funcionalidad del sistema desde el punto de vista de los clientes se vea afectada. En esencia en lugar de utilizar la implementación actual, deberías ser capaz de inplementar una clase base y obtener el resultado deseado. Frecuentemente, cuando queremos representar un objeto, diseñamos la clase base en sus propiedades y en lugar de eso deberíamos poner énfasis en su comportamiento.&lt;/p&gt;

&lt;p&gt;Muchos desarrolladores dicen que este principio de Liskov tiene una estrecha relación con el principio anterior (open-close). &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“una violación de LSP es una violación latente de OCP”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Principio de segregación de la interfaz
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Las clases que implementan interfaces, no deberían ser forzadas a implementar los métodos que no serán utilizados.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este principio expone cómo escribir interfaces. si la interfaz se convierte en un largo archivo de código, será necesario particionarla en pequeñas partes específicas. Una interfaz será definida por el cliente que lo utilice, lo que significa que es el único que tenga conocimientos de todos los métodos relacionados entre ellos.&lt;/p&gt;

&lt;p&gt;En realidad, si al añadir métodos que no deberían estar ahí, las clases que implementan la interfaz deberán  implementar tambien los métodos que no utilice. Los clientes no deberían ser forzados a depender de las interfaces que usarán. ISP intenta mantener un sistema desacoplado, más fácil de refactorizar, cambiar y desplegar.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.  Principio de inversión de la dependencia
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Los módulos de altos modelos no deberían depender de niveles de módulos bajos, sino de abstracciones. Abstracciones no deberían depender de detalles; sino los detalles de la abstracción”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este principio en esencia consiste en la reducción de dependencias entre los diferentes módulos de nuestro código, esto nos sera de ayuda para entender cómo vincular correctamente sistemas juntos.&lt;/p&gt;

&lt;p&gt;Cuando los detalles de implementación dependen de altos niveles de abstracció, este prinicipio nos ayudara a conseguir un sistema bien acoplado. También, influirá en la encapsulación y en coherencia del sistema.&lt;/p&gt;

&lt;p&gt;Supongamos que un módulo concreto A, no debe depender directamente de otro módulo concreto B, sino de una abstracción de modulo _B. Tal abstracción se convierte en una interfaz o una clase (que podría ser abstracta) y que sirve como base para un conjunto de &lt;br&gt;
clases hijas.&lt;/p&gt;

&lt;p&gt;Al inicio de la vida como desarrollador, aplicar estos principios puede resultar un poco complejo, pero con el tiempo y la práctica se llega a un dominio de ellos mejor.&lt;/p&gt;

&lt;p&gt;Foto por &lt;a href="https://unsplash.com/@ffstop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Fotis Fotopoulos&lt;/a&gt; en &lt;a href="https://unsplash.com/s/photos/software?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solid</category>
      <category>programming</category>
      <category>practice</category>
      <category>fundamentals</category>
    </item>
  </channel>
</rss>
