12 razones por las que deberías aprender la línea de comandos

Cambiar de interfaces gráficas de usuario (GUI) a la línea de comandos no es fácil para muchos programadores novatos. Además, parece que podrías romper algo aquí rápidamente o hacer que el sistema operativo se dañe. Este no es el caso, sin embargo, porque la línea de comandos es una herramienta muy eficiente para cualquier usuario y especialmente para programadores.

A continuación te damos las 12 razones por las que definitivamente aprender bash 

Los usuarios experimentados de Bash son populares y están bien pagados

Según la Encuesta para desarrolladores de Stack Overflow, el shell (línea de comando / bash) es uno de los lenguajes (habilidades) más populares. Alguien que tenga buenas habilidades en la línea de comandos puede esperar salarios más altos que los de los programadores de Python y R.

aprender a programar gratis
aprender a programar

Aunque esta encuesta se trata principalmente de desarrolladores, la línea de comandos es particularmente interesante en el área de la ciencia de datos. Bash trabaja de la mano con lenguajes de programación y tecnologías de ciencia de datos como Python, IPython, Jupyter, TensorFlow, PyTorch y muchos más.

Automatizas los molestos procesos repetitivos

Un científico de datos tiene la tarea de hacer que cierta información esté disponible de forma regular. Dependiendo de la fuente de datos, estos datos deben proporcionarse varias veces al día. La forma en que se registran, procesan y muestran estos datos es en su mayoría idéntica.

La línea de comandos es muy adecuada para este propósito, ya que los comandos se pueden automatizar y replicar fácilmente.

Veamos el siguiente escenario:

Tu empleador ha decidido realizar una inversión en análisis de datos. Varios profesionales de datos se unirán al equipo. Tú eres responsable de configurar todas las computadoras con todos los programas para que los nuevos empleados puedan comenzar de inmediato.

Si puedes trabajar con un CLI (Command Language Interpreter), puede escribir algunos scripts simples que instalan, configuran y prueban todo automáticamente.

Si no puedes hacer eso, tendrás que recurrir a una GUI y repetir los mismos movimientos del mouse y hacer clic en varias computadoras. Este proceso manual rápidamente se vuelve tedioso y requiere mucho tiempo. Este es solo un ejemplo de cómo las habilidades simples de la línea de comandos pueden ayudar a escalar y automatizar los procesos de ciencia de datos.

Las habilidades te hacen más flexible

En una función de ciencia de datos, a menudo encontrará que tiene más flexibilidad si usas la terminal en lugar de las GUI. Dado que la línea de comandos es un programa que ejecuta otros programas (de ahí el nombre «Shell»), la interacción entre programas suele ser más fácil de configurar en la línea de comandos.

Una vez que hayas dominado los comandos necesarios, es relativamente fácil escribir scripts. Los scripts de shell facilitan mucho la creación de todo tipo de canalizaciones de datos y flujos de trabajo. En pocas palabras, estas habilidades te permiten interactuar mejor y de manera más eficiente con tu computadora. Siempre puedes volver a las GUI, pero la línea de comandos puede brindarte un control más directo cuando lo necesites.

Trabajar con archivos de texto es más fácil

Los archivos de texto son una de las formas más comunes de almacenar y procesar datos. Casi todos los proyectos de ciencia de datos involucrarán archivos de texto en algún lugar. La capacidad de manipular archivos de texto de manera rápida y eficiente es, por lo tanto, una habilidad muy útil para un científico de datos.

El shell tiene herramientas de procesamiento de texto muy poderosas, como AWK, que te ayudan a conocer los archivos y facilitar la limpieza de datos. ¡Todo lo que normalmente se necesita es una línea de código!

Es amigable con los recursos

Si estás trabajando con recursos informáticos limitados o simplemente deseas maximizar tu salida, usar la línea de comando será prácticamente siempre más beneficioso que usar una GUI. La razón de esto es que los recursos en las GUI deben usarse para representar la salida gráfica.

Esto se aplica tanto al trabajo local como al remoto. Cuando se conectan de forma remota, las GUI consumen mucho más ancho de banda que los terminales y «desperdician» recursos.

Además, la latencia, es decir, el «intervalo de tiempo entre la entrada y la salida», es mayor cuando se utiliza una GUI. Esto puede resultar frustrante cuando intentas controlar un mouse, pero este responde entre 1 y 2 segundos más tarde. Si usas principalmente la línea de comando, la latencia es menor. Los procesos serán más fáciles de usar porque no es necesario utilizar el cursor del mouse y arrastrarlo al lugar correcto.

Servicios en la nube

Los servicios en la nube a menudo están conectados a una interfaz de línea de comandos y se operan a través de ella. Esto es particularmente importante para trabajos más avanzados, como el aprendizaje profundo, donde tu computadora local generalmente no es adecuada para hacer frente a las próximas tareas debido a la falta de recursos de hardware. 

Según varios estudios de 2018, solo el 4 por ciento de los proyectos de aprendizaje automático y aprendizaje profundo se llevan a cabo en el sitio. Entonces, si trabajas con aprendizaje profundo o aprendizaje automático, depende de la nube y, por lo tanto, de la línea de comandos.

Aprende una vez, aplica en todas partes

Hay muchos shells diferentes como bash, zsh, fish, ksh, tcsh, cmd, Windows PowerShell y muchos más. Si estás familiarizado con un shell, es muy fácil trabajar con otros shells. Esto es especialmente útil si utilizas servicios en línea que necesitan algún tipo de CLI. Por otro lado, todas las GUI se ven diferentes. Si trabajas con 10 programas, primero debes conocer las 10 GUI. Esto también requiere más tiempo que trabajar con un shell.

Escribe más rápido de lo que haces clic

Si bien definitivamente se necesita más tiempo para escribir rápidamente en el teclado (sistema de 10 dedos) que usar un mouse, la curva de aprendizaje más alta del teclado se amortiza rápidamente.

Hay varios estudios de usuarios de Microsoft Office que han demostrado que la mayoría de los usuarios tienen más probabilidades de hacer clic con el mouse que de usar los atajos de teclado más eficientes. Incluso si siente que está trabajando muy rápido en una GUI, existe una alta probabilidad de que sea más eficiente en la línea de comandos para al menos algunas tareas.

La auditoría y la depuración son más fáciles

Debido a que es tan fácil realizar un seguimiento de toda tu actividad en la línea de comandos, la auditoría y la depuración son mucho más fáciles.

Puedes utilizar la ventana de la línea de comandos como historial para realizar un seguimiento de cada acción que ha realizado en el shell. Por otro lado, un clic incorrecto en una GUI puede provocar un error que no puedes rastrear de inmediato porque no hay historial.

El shell de Unix está disponible en todas partes

Aunque el shell de Unix solo se instala en máquinas MacOS y Linux, los usuarios de Windows aún pueden beneficiarse del shell de Unix con herramientas como WSL, Cygwin y MinGW. Esto significa que puedes utilizar las habilidades que aprendes.

«Hablar» con la computadora

Cuando interactuamos con la computadora a través de una terminal, usamos comandos. Estos comandos son parte de un lenguaje y son extremadamente expresivos. La línea de comandos nos permite utilizar el poder del lenguaje para interactuar con la computadora de una manera elegante y eficiente.

Lograrás la mayor eficiencia con una combinación equilibrada de CLI y GUI. El objetivo de una línea de comando no es prescindir por completo de las GUI. Más bien, se trata de tener otra herramienta en su caja de herramientas para realizar ciertas tareas mejor y más rápidamente.

La línea de comandos es más fácil de lo que crees

Todavía existe una gran idea errónea de que es necesario conocer varios cientos de comandos para usar la línea de comandos. Sí, hay muchos cientos de comandos que puedes aprender. Pero solo necesitarás un puñado de comandos para crear automatizaciones complejas en el shell.