687 - Por qué Linux es el mejor sistema para programar

687 - Por qué Linux es el mejor sistema para programar

#linux es el sistema mas eficiente gracias a sus potentes terminales como #kitty o #alacritty a su ecosistema de herramientas y la increíble personalización

1:25
-3:15

Llevo programando aplicaciones y herramientas para Linux mas de 15 años. Sin embargo, en esto último año, he estado implementado servicios web que pueden ser utilizados en cualquier sistema operativo. De la misma manera, en estos últimos años he podido comprobar la diferencia que hay entre programar en Linux y hacerlo en Windows. Por otro lado, hace unos días, y no recuerdo el contexto, un usuario, comentaba que Linux, no era una sistema operativo serio, aunque no se si esas fueron exactamente sus palabras. Lo que venía a decir, es que para recuperar un viejo ordenador y para navegar por internet, era suficiente, pero para cuestiones profesionales se necesitaba sistemas operativos profesionales. Y claro, esto, junto con la reflexión anterior, me hizo plantearme precisamente este episodio, en el que te quiero contar mi propia experiencia, y el porqué de mi conclusión de que Linux es el mejor sistema para programar.

Por qué Linux es el mejor sistema para programar

Un paseo por el pasado

Como te he comentado en varios episodios, actualmente estoy trabajando, entre otros side project, en varias aplicaciones web. Estas aplicaciones web, tienen un backend en Rust utilizando el framework Axum, mientras que el frontend estoy implementándolo en TypeScript utilizando el framework React. Y todo ello lo estoy haciendo en Linux.

Hasta la fecha, hice otras herramientas y aplicaciones en Linux, pero para Linux. En este caso, la aplicación la podría estar desarrollando en cualquier sistema operativo. Igual que cuando desarrollo en Java, o en Python, que lo podría hacer en cualquier sistema operativo. De echo eso es justo lo que sucede, que actualmente, en mi faceta profesional, estoy desarrollando tanto en Java como en Python, pero en Windows. Y claro, no puedo evitar comparar mi experiencia en ambos sistemas operativos. Por un lado, tengo mi experiencia personal, que es la que me lleva a pensar que Linux es el mejor sistema para programar. Y por otro lado, tengo mi experiencia profesional, que me lleva a pensar que Windows no es el mejor sistema para programar.

Sobre los lenguajes elegidos

Quiero explicarte las razones elegidas para programar esos servicios web, y las herramientas que estoy utilizando para desarrollarla para que veas que podría hacerlo en cualquier otro sistema operativo. Sin embargo, lo cierto es que podría habar elegido cualquier otro lenguaje de programación, y cualquier otro framework para desarrollar la aplicación. De hecho, en el caso del frontend, estoy utilizando React, pero podría haber utilizado Vue o Angular. En el caso del backend, estoy utilizando Axum, pero podría haber utilizado Django, Flask, Spring o cualquier otro framework. Por lo tanto, no es un tema de lenguajes de programación, sino de sistemas operativos.

El caso del backend ha sido totalmente caprichoso, he elegido Rust, no porque sea un lenguaje tan rápido como C o C++, o que gracias al tipado te ayuda a evitar errores o por su comundad y documentación fantásticas, si no porque actualmente estoy muy cómodo con él y me gusta como funciona. Lo cierto, es que en otras facetas estoy utilizando Java con Spring Boot, y me encuentro también muy cómodo, o también Fastapi con Python. Aunque este último caso, si que tengo mis dudas, por el consumo de recursos tan grande que hace.

Sin embargo, en el caso del frontend, durante estos últimos años he estado jugueteando con varios framework, eso si siempre con TypeScript, por el tipado mas que nada. En concreto he utilizado Svelte y React. Sin embargo, finalmente me he decantado por React, y creo que he acertado totalmente. Se trata de un framework maduro, con una comunidad muy activa y un ecosistema enorme.

Sobre los editores

Actualmente estoy utilizando Neovim casi en exclusiva en Linux, mientras que en Windows utilizo Pycharm, Idea y Visual Studio Code, aunque este último de forma marginal. Lo cierto es que podría utilizar en Linux también estos últimos, pero me resulta mucho mas cómodo actualmente trabajar con Neovim. Me gustaría hacerlo también en Windows, pero lo cierto es que actualmente no tengo esa posibilidad.

Entonces, si puedo utilizar los mismos editores en un sistema operativo que en el otro ¿que es lo que marca la diferencia? ¿Que es lo que hace que para mi Linux sea el mejor sistema para programar?

¿Por qué programar en Linux?

Claramente, lo que para mi marca la diferencia entre programar en un sistema y otro no son ni los editores ni los lenguajes de programación que utilizo. Lo que realmente marca la diferencia es el entorno. Linux no solo es un sistema operativo, es una caja de herramientas lista para la acción. Es un entorno totalmente personalizable que puede adaptar a tu flujo de trabajo y a tus necesidades.

En mi caso particular, utilizo como sabes Arch Linux, aunque mucho de lo que voy a comentar se podría aplicar a cualquier otra distribución. Te diría que todas a excepción de los repositorios propios y los repositorios AUR. Básicamente los repositorios de Arch Linux, junto con ser una Rolling Release es lo que me ha hecho quedarme en esta distribución.

Algunas de las razones por las que hacen que Linux me atraiga tanto a la hora de programar son,

  • La Terminal. Sin lugar a dudas la terminal es una herramienta realmente muy poderosa y que utilizo en ambos sistemas operativos. Sin embargo, en Linux tengo acceso a una terminal mucho mas potente y configurable que en Windows. En Windows, aunque tengo acceso a PowerShell y a la Windows Terminal, lo cierto es que no son tan potentes como la terminal de Linux. En este sentido, Windows Subsystem for Linux (WSL) es un gran avance, pero no es lo mismo. Te tengo que decir, que actualmente no tengo acceso a WSL con lo que no puedo comparar. Sin embargo, si que puedo comparar la terminal de Linux con la de Windows, y sin lugar a dudas, la de Linux es mucho mas potente. En este sentido, tienes diferentes terminales que son capaces de exprimir al máximo tu hardware como Kitty, Alacritty, por mencionarte algunas.
  • Personalización de la terminal. Puedes personalizar tu entorno en la terminal prácticamente como tu quieras. Puedes elegir la shell que mas se adecue a tu forma de trabajar. En mi caso esto ha sido con Fish, pero como te digo existen varias y de lo mas diverso. Y además, puedes utilizar frameworks para adaptar estas shells a tus necesidades, o utilizar distintas herramientas que te ayudan a personalizar esa shell. En mi caso utilizo Starship para personalizar el prompt y atuin para trabajar con el historial de comandos, y por supuesto, también tanto las funciones como los alias que utilizo en mi día a día, y que todo me lo facilita fish de forma sencilla. Y en el caso de tener que utilizar un multiplexor de terminal ahí entra zellij.
  • El *ecosistema de utilidades disponibles en la terminal gracias a los *enormes repositorios*. Así tienes herramientas como *ripgrep*, *fd*, *bat*, *jq*, *lsd*. Herramientas que son verdaderas *joyas* y que te facilitan y agilizan enormemente el trabajar. Encontrar archivos, buscar texto dentro de archivos, formatear JSON, listar archivos, etc. Todo ello lo puedes hacer con herramientas que son realmente rápidas y eficientes. Herramientas que no hacen mas tarea que la que tienen que hacer, y que lo hacen de forma completamente eficiente.
  • Los gestores de paquetes que desde la terminal te permite instalar todas las herramientas que necesites. En mi caso, actualmente utilizo pacman y paru, pero esto lo puedes extender a cada una de las distribuciones de Linux. Y esto te puedo asgurar que facilita mucho el trabajo, a la hora de instalar las herramientas que necesitas y tener tu entorno de programación preparado en unos pocos minutos donde vayas.
  • Una configuración a medida. Puedes elegir y construir el entorno que mejor se adapte a tus necesidades. Desde un tiling window manager como puede ser i3, sway o hyprland, con todas las herramientas necesarias para dejarlo totalmente operativo, hasta entornos completos como KDE o GNOME. He estado utilizando ambas soluciones, y lo cierto es que dependiendo del momento me siento mas cómodo con una o con otra. En mi caso, actualmente estoy utilizando GNOME y me siento muy cómodo con él. Y esto es así gracias a sus extensiones, que me han permitido recrear los tiling pero con el resto de componentes que GNOME me ofrece.
  • Los contenedores. Por supuesto que trabajar con contenedores de forma completamente nativa es una auténtica gozada. Lo que antes era un dolor, y me refiero a montar un LAMP o XAMP o lo que quieras, actualmente es cuestión de un archivo, un docker-compose.yml y un comando docker compose up -d. Y con la ventaja que puedes tener tantos como necesites y en cuestión de segundos. Esto me permite tener mi servidor o servidores de bases de datos Postgresql para hacer el desarrollo o pruebas, sin apenas esfuerzo, y pararlo cuando deje de utilizarlo. Y no solo esto, sino que puedo en un momento levantarlo hacer lo que necesite y volver a pararlo con unos pocos comandos.
  • Las herramientas propias de programación. Así, el control de versiones con git es algo completamente nativo en Linux, al igual que otras herramientas como puede ser cargo, que es el gestor de paquetes de Rust o pnpm que es el que utilizo para JavaScript. Todo esto es completamente nativo, y funciona de forma completamente transparente para ti. No tienes que hacer artes marciales para tenerlo instalado y funcionando, es como te digo transparente.
  • Es tu sistema. En Linux sientes que estás en tu sistema. Tienes el control total sobre el sistema operativo y el entorno. No tienes bloatware ni restricciones impuestas.

Las ventajas del día a días

Programar en Linux no es cuestión de filosofía, es eficiencia pura. No quiero decir, que no tenga su parte de filosofía, sus motivos éticos. Lo que quiero decir, es que además de tener esa motivación ética, la realidad es que es mas eficiente trabajar en Linux.

  • Agilidad. Levantar un servidor local, compilar código, hacer pruebas y automatizar tus despliegues, lo tienes a tu alcance en unos pocos comandos.
  • Control total. No dependes de un IDE, o de un entorno de desarrollo cerrado. Puedes trabajar con Neovim, Emacs, o cualquiera de los editores que he mencionado anteriormente. Elige el que prefieras y configúralo conforme a tus necesidades.
  • Recursos optimizados. Puedes controlar exactamente lo que se ejecuta en tu equipo, sin procesos que no sabes lo que hacen en segundo plano, ni aplicaciones que no utilizas. Puedes tener un entorno totalmente optimizado para tu trabajo.
  • Integración continua. Todas las herramientas de integración continua están disponibles y son fáciles de configurar. Puedes tener tu propio servidor de integración continua o utilizar servicios como GitHub Actions o GitLab CI/CD.

Conclusión

Por supuesto que esta es mi visión y mi experiencia, y como tal es completamente subjetiva. Sin embargo, lo que quiero transmitirte es que Linux es un sistema operativo que te permite programar de forma eficiente y productiva. No es cuestión de filosofía, ni de ética, sino de eficiencia pura. Te permite tener el control total sobre tu entorno y tus herramientas, y eso es algo que no puedes conseguir en otros sistemas operativos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *