Saltar al contenido

Blog técnico | ¡Aprende un nuevo idioma!

Hoy en día, el mundo que nos rodea está lleno de llamadas para aprender a programar. Me dicen que si aprendo a codificar, cambiará mi vida. Una rápida búsqueda en Google te dará una lista de los numerosos beneficios de aprender a codificar. Si eres como yo, puedes pensar: «Sé codificar». He estado trabajando como ingeniero de software durante un tiempo. Ya soy un experto en mi lenguaje/marco preferido». Aprender a codificar puede ser el principio del viaje, pero yo postulo que incluso dominar un lenguaje no debería ser el final. Puede que sólo sea el momento de aprender un nuevo idioma.

¿Por qué?

Hay varias ventajas en el aprendizaje de un nuevo idioma.

Blog técnico | ¡Aprende un nuevo idioma!
Blog técnico | ¡Aprende un nuevo idioma!

No trabajo mucho con herramientas manuales, pero tengo dos juegos de herramientas en casa. Uno de ellos es un juego grande que se puede usar para arreglar la mayoría de las cosas de la casa. El otro es un juego más pequeño que está destinado a trabajar en la electrónica.

Creo que los lenguajes de programación siguen el mismo patrón. Para ser claro, no digo que un lenguaje sea como un destornillador y otro como un martillo. Aunque, a veces eso es cierto, a menudo es más sutil que eso.

Mis dos juegos de herramientas contienen un juego de destornilladores. Digamos que tengo dos tareas: arreglar una puerta para mi dormitorio y reemplazar el disco duro de mi ordenador. En teoría podría usar cualquier juego de destornilladores para hacer cualquier trabajo. De hecho lo he hecho antes en nombre de la conveniencia. Sin embargo, en la mayoría de los casos un juego de herramientas u otro es claramente lo mejor para el trabajo.

Seleccionar un lenguaje de programación para un proyecto es como elegir qué juego de destornilladores debo usar. ¿Es el proyecto una API web? ¿Necesita ejecutar los hilos de forma simultánea? ¿En paralelo? ¿Necesita acceso a recursos externos? etc… La mayoría de los lenguajes modernos me permiten hacer cualquiera de estas cosas, pero dependiendo de la situación, uno de ellos puede hacerlo más fácil, limpio o sencillo que los otros.

Aprende diferentes ideologías

Valores

¿Alguna vez has considerado lo que valoran los creadores de tu lenguaje de programación favorito? Cuando paso el cursor por la pestaña «about» en python.org veo la siguiente declaración:

Haciendo clic en «Aprende más sobre Python…» me lleva a su página «Acerca de». Allí aprendo un poco más sobre los valores de la pitón:

De la página web de Microsoft dotnet:> «Gratis. Plataforma cruzada. Código abierto»

Sumergiéndose en la página de sus idiomas, describen los idiomas mismos con más detalle.

¿Alguno de estos conjuntos de valores coincide con lo que valoras en tu próximo proyecto? O tal vez sólo resuenan con usted personalmente. O tal vez coinciden con lo que su equipo o su empresa valora. Si es así, tal vez sea un buen lenguaje para aprender.

Sintaxis y Semántica y Estilo

La sintaxis, la semántica y el estilo preferido de un lenguaje bien diseñado debe representar los valores de sus desarrolladores.

La mayoría de los idiomas publican guías de estilo que ayudan a los desarrolladores a aprender las formas recomendadas de escribir código limpio. Véase, por ejemplo, el documento de las Convenciones de Codificación de Microsoft o el PEP 8 de Python.

Algunos lenguajes también usan «linting» para ayudar a los desarrolladores a estilizar el código automáticamente. Véase, por ejemplo, el hlint de Haskell o el ESLint de Javascript.

Otros lenguajes, como el Go, promueven aún más el código limpio al hacer cumplir una sintaxis estricta.

¿Los fragmentos de lenguaje (tomados del Código de Rosetta) que aparecen a continuación representan los valores de cada idioma? ¿Alguno de ellos representa algo que usted valora?

establecido en Factorial(intnumber){si(number<0)lanzamos un Argumento Fuera de RangoExcepción(nameeof(number),number, "Debe ser cero o un número positivo.");varacumulador=1;for(varfactor=1;factor<=número;factor++){acumulador*=factor;}retornoacumulador;}
funcfactorial(nint64)*big.Int{ifn<0{returnnil}r:=big.NewInt(1)varfbig.Intfori:=int64(2);i<=n;i++{r.Mul(r,f.SetInt64(i))}retorno}
factorial::Integral-{integralfactorial0=1factorialn=n*factorial(n-1)

<pre>factorial(n){//comprobar nuestro borde caseif(n<0){tirar"El número debe ser no-negativo";}varsum=1;//nos saltamos el cero y el uno ya que ambos son 1 y son identidadwhile(n>1){sum*=n;n–;}returnsum;}</pre>
<pre>deffactorial(n):result=1foriinrange(1,n+1):result*=ireturnresultado</pre>

Aprende nuevas formas de resolver problemas

El aprendizaje de un nuevo idioma te introduce en nuevos enfoques para la resolución de problemas. Un ejemplo claro de esto es pasar de un idioma imperativo a un idioma funcional.

La programación funcional es un estilo de programación en el que los datos son sin estado y inmutables ;mientras que la programación imperativa se ocupa de datos con estado . ¿Y en un estilo funcional? Si no está familiarizado con uno u otro estilo, la respuesta puede tardar algún tiempo en comprenderse, pero una vez que lo haga, cambiará su forma de pensar sobre el estado y la mutabilidad, independientemente del marco que esté utilizando en ese momento.

Hay muchas otras diferencias cuando se pasa de un idioma a otro:

  • Tipificación dinámica/estática
  • Tipificación explícita/implícita
  • Alcances variables
  • Funcionalidad de los bucles
  • Construido en implementaciones de estructuras de datos
  • Objetos, herencia
  • etc…

El hecho de comprender muchas formas diferentes de enfocar un problema le da flexibilidad y le permite ser creativo, ya que puede identificar las ventajas y desventajas de los distintos enfoques y seleccionar el adecuado.

Desvincularse de los detalles minuciosos

El aprendizaje de un idioma permite ver un problema, una solución, un algoritmo representado de múltiples maneras.

<pre>de la importación del operador de azufre de las funciones de importación de los octooles, reducción del factor(n): reducción del retorno(mul,rango(1,n+1),1)</pre>
<pre>factorialn=foldl(*)1[1..n]</pre>

Aunque la sintaxis es diferente, ambos implementan el factorial de la misma manera. Ambos usan un pliegue para calcular la multiplicación en una lista de 1 a n.

Echa un vistazo a la implementación del código de Rosetta en C# funcional:

<pre>estáticaintFactorial(intnumber){retornoNumerable.Rango(1,número).Agregado((acumulador,factor)=>acumulador*factor);}</pre>

Mientras esto funciona, yo personalmente tomaría el enfoque de la sección anterior o una variante recursiva de la misma.

El punto es que si conoces más de un idioma, no estás restringido al contexto de ese idioma, sino que eres libre de concentrarte en determinar el mejor algoritmo para resolver tu problema. Luego puedes implementarlo en cualquier lenguaje o frameworkbest que se ajuste a tus necesidades.

El borde sangrante eventualmente se convierte en legado

Desafortunadamente el envejecimiento es un hecho de la vida. En algún momento su código será legado. Su lenguaje o marco de elección también lo será. La tecnología es un campo de ritmo rápido. Innovamos, buscamos retroalimentación, e iteramos. Nuevas ideas, nuevos patrones, nuevas formas de hacer las cosas aparecen rápidamente y a menudo. Con el tiempo, nuevas herramientas más modernas se convierten en el nuevo estándar, y las herramientas que hemos estado usando se vuelven cada vez menos aplicables. Son la herramienta correcta cada vez menos, hasta que se convierten en legado, desaprobadas, o simplemente "no la forma recomendada". Por ejemplo, ¿con qué frecuencia escribes RPG? ¿O Pascal? O Fortran… Excepto tal vez en algunas circunstancias, estos ni siquiera son considerados por la mayoría de los desarrolladores para nuevos proyectos. Sin embargo, en algún momento, estos fueron la vanguardia de la tecnología.

Llamada a la acción

Espero haberte inspirado para ir a aprender un nuevo lenguaje de programación. El aprendizaje de nuevos lenguajes no sólo te permite construir nuevos proyectos de la mejor manera posible, sino que también mejorará tus capacidades con tus lenguajes actuales.

Categorías: cultureTags: mejora continua, lenguajes de programación