Come costruire il tuo ambiente di sviluppo senza mouse

Pubblicato: 2022-03-10
Riepilogo rapido ↬ La creazione di un ambiente di sviluppo con la shell come chiave di volta offre molteplici vantaggi. Puoi utilizzare strumenti che si adattano perfettamente l'uno all'altro, puoi personalizzare tutto in base alle tue esigenze e, soprattutto, puoi controllare l'intero ambiente di sviluppo con la tua tastiera. Ciò può far risparmiare molta energia cognitiva e offrire un'esperienza utente piacevole.

C'era una volta, nella magica terra dello sviluppo del Software, un giovane sviluppatore, il tuo umile servitore, che scopriva Linux per la prima volta. Improvvisamente, ho avuto accesso alla shell di Linux, uno strumento che offre molti modi per automatizzare tutto ciò che non volevo fare ancora e ancora.

Ma Ubuntu non era privo di inconvenienti. Sono stato spesso vittima di bug di visualizzazione e arresti anomali, e con il passare del tempo stava diventando sempre più lento.

Un giorno accadde qualcosa di terribile: dovevo aggiornare Ubuntu alla sua successiva versione principale. Tutto è andato in crash. Non potevo più avviare il mio sistema. Non avevo idea di come avrei potuto risolvere i problemi che stavo affrontando perché non avevo idea di come stesse funzionando Linux sotto il cofano. Ubuntu stava astraendo tutto il nocciolo della questione per non preoccuparmene.

Ho dovuto reinstallare tutto manualmente: Ubuntu e tutti i miei strumenti. La parte peggiore è stata riconfigurare tutto. Tutto sommato, mi ci sono voluti giorni per tornare al sistema che avevo prima del crash. Ma non conoscevo altre alternative, quindi ho continuato a usare Ubuntu per anni. Durante questo periodo, non sono mai riuscito ad aggiornarlo alla sua prossima versione principale senza la necessità di reinstallare tutto manualmente, ancora e ancora.

La mia vita come sviluppatore è cambiata di nuovo quando la mia azienda ha assunto due grandi sviluppatori. Sapevano molto di Linux e delle diverse distribuzioni che potevo usare. Mi hanno guidato, mi hanno mostrato gli strumenti che hanno risolto tutti i problemi che avevo con Ubuntu. Questi strumenti hanno migliorato drasticamente il mio flusso di lavoro ; mi hanno mostrato quanto fosse pratico per uno sviluppatore tenere le mani sulla tastiera il più possibile.

Questo è successo sei anni fa. Uso ancora lo stesso ambiente di sviluppo oggi. Uso la tastiera il 92,8% delle volte per gestire tutti i miei strumenti, utilizzando sequenze di tasti sensate e facili da ricordare. Posso reinstallare il mio intero sistema con un sacco di script che ho scritto, inclusi tutti gli strumenti che uso e le loro configurazioni.

Oggi vorrei condividere con voi questi strumenti affinché anche voi possiate aumentare la vostra efficienza e il vostro comfort nel vostro lavoro quotidiano. Funzionano bene insieme, dando forma a quello che chiamo il mio ambiente di sviluppo senza mouse . Più precisamente, parleremo di:

  • Perché l'uso della shell Linux può essere molto potente quando si lavora con testo normale (incluso il codice);
  • Perché usare il temuto Arch Linux;
  • Il vantaggio di un gestore di finestre di piastrellatura;
  • Come avere un'ottima esperienza terminale con URxvt, tmux e tmuxp;
  • Perché Vim può diventare il tuo migliore amico.

Nota : gli strumenti che sostengo in questo articolo funzionano su sistemi basati su Linux. Puoi anche usarli con macOS ad eccezione di i3. Per Windows, il modo più semplice è utilizzare il sottosistema Windows Linux (WSL) per installarli e utilizzarli.

Non avrei mai scoperto questo nuovo modo di lavorare senza provare questi strumenti. Ecco perché ti incoraggio a installarli, sperimentarli e vedere da solo se ti innamori come me.

Senza mouse con il guscio

Come sviluppatore, è quasi impossibile evitare di usare una shell. Questo è un potente strumento che può semplificare il flusso di lavoro automatizzando tutte le attività noiose.

I vantaggi della conchiglia

Prima di parlare dei vantaggi dell'utilizzo della shell e del terminale, spieghiamo brevemente qual è la differenza tra queste due idee.

Il terminale è un'interfaccia grafica che permette di interagire con la shell. Su Linux, questa shell è spesso Bash, ma può essercene anche un'altra, eh Zsh. La shell è un interprete. Puoi alimentarlo con i comandi e li eseguirà per eseguire alcune azioni. Inoltre, a volte, ti restituirà un output. I termini "riga di comando" e "shell" sono sinonimi.

Se paragoniamo l'ambiente di sviluppo senza topi al sistema solare, il guscio sarebbe il sole e tutto il resto gli girerebbe intorno. È perché la shell è davvero potente: ti permette di eseguire molti piccoli programmi che funzionano molto bene insieme. Si chiamano CLI (Command-Line Interfaces).

Il grande vantaggio di questi strumenti: sono molto semplici e limitati in isolamento, ma puoi concatenarli per risultati potenti . Ad esempio, puoi utilizzare complessivamente le CLI "history", "sort", "uniq" e "head" per visualizzare le CLI che utilizzi di più e la frequenza del loro utilizzo.

La shell Linux
La shell Linux. (Grande anteprima)

Ci sono molte CLI disponibili là fuori. Primo, perché la shell di Linux è in circolazione da molto tempo; gli sviluppatori hanno avuto il tempo di sviluppare molti strumenti e renderli affidabili. In secondo luogo, perché è più facile sviluppare CLI che GUI (Graphical User Interfaces). La progettazione e l'implementazione di queste interfacce grafiche richiede molto più lavoro. Le CLI hanno solo interfacce testuali , che sono più facili da sviluppare, modificare e mantenere.

È anche per questo che le CLI sono veloci: non c'è bisogno di pasticciare con il display e altri elementi grafici. Era uno dei miei problemi principali con Ubuntu: il suo ambiente desktop, Unity, era piuttosto pesante, lento e pieno di bug. Almeno secondo la mia esperienza. L'uso di più GUI in cima ha peggiorato le cose.

Un altro grande vantaggio della riga di comando : puoi scrivere script di shell per automatizzare tutte le attività noiose che ripeti giorno dopo giorno. Ad esempio, se hai bisogno di ridimensionare le immagini alla stessa dimensione molto spesso, puoi scrivere uno script per questo. Se cerchi spesso alcuni tipi specifici di file, puoi automatizzare anche quello. Il cielo è il limite.

Altro dopo il salto! Continua a leggere sotto ↓

Anche le CLI hanno degli svantaggi. È un po' più scoraggiante da utilizzare per i principianti, ma ci sono modi per ottenere rapidamente ciò di cui hai bisogno anche se non sai come utilizzare una specifica CLI.

Infine, se hai alcune attività da svolgere su server remoti, finirai spesso per utilizzare la shell. Non hanno alcuna interfaccia grafica per la maggior parte del tempo, quindi non avrai scelta. In questi casi, è necessario sapere come aggirare la riga di comando.

Un approccio senza topi

Poiché la shell ha un'interfaccia testuale, le tue mani rimangono sulla tastiera quando la usi. Questo è qualcosa che non ho mai considerato durante i miei primi anni come sviluppatore, ma è un grande vantaggio.

Secondo la mia esperienza, evitare le centinaia di movimenti della mano tra la tastiera e il mouse consente di risparmiare molta energia cognitiva. Sono rimasto scioccato nello scoprire quanto fosse comodo quando ho davvero cercato di attaccarmi alla mia tastiera. Come bonus, mi sento un hacker che usa solo la mia tastiera con la mia shell, anche se scrivo solo la mia lista della spesa! Quanto è bello?

Devo ammettere che ero molto scettico su questa idea "senza topo" prima di provarla. Con gli strumenti che descrivo di seguito, non ho dovuto cambiare tutte le mie abitudini da un giorno all'altro: puoi usare anche il mouse con loro. Ma brillano davvero quando vengono gestiti con la tastiera.

Anche se non è mai stato veramente dimostrato, credo anche che stare sulla tastiera ci renda più efficienti . Come ha sottolineato il libro The Pragmatic Programmer :

"L'uso delle sole sequenze di tasti per le operazioni di modifica comuni è più efficiente del mouse o dei comandi guidati dal menu perché le mani non lasciano mai la tastiera".

Detto questo, l'efficienza non è l'obiettivo principale qui. Adoro stare sulla mia tastiera e usare tutti questi strumenti perché posso concentrarmi interamente sui compiti a portata di mano. Mi motiva a iniziare a lavorare e portare a termine i miei compiti.

Il fondamento: Arch Linux

All'inizio del mio viaggio senza mouse, uno dei miei nuovi amici mi ha consigliato di usare Arch Linux invece di Ubuntu. Ancora una volta, lo scetticismo si stava insinuando, i dubbi stavano invadendo il mio povero cervello. Arch Linux? Questa orribile distribuzione Linux che devi installare e configurare completamente manualmente? Questo sistema instabile è diventato uno scherzo per molti?

A volte, gli stereotipi non hanno nulla a che fare con la realtà e Arch Linux è l'esempio perfetto per questa idea. Ho usato Windows (da 98 a 7), macOS e ho provato anche altre distribuzioni Linux. La mia conclusione, senza dubbio: Arch Linux è il più stabile di tutti.

Detto questo, Arch Linux non è un requisito per un ambiente di sviluppo senza mouse. Puoi utilizzare tutti gli altri strumenti descritti in questo articolo anche con altre distribuzioni Linux. Puoi anche usarli con macOS (tranne i3) o Windows se hai il sottosistema Windows per Linux (WSL). Ma, prima di farlo, lascia che ti dica perché dovresti considerare seriamente Arch Linux .

Un sistema di rilascio a rotazione

Arch Linux ha un sistema di rilascio progressivo . Significa che è necessario aggiornare spesso l'intero sistema, settimanalmente o ogni due settimane. Per tornare su Ubuntu, ha un sistema di supporto a lungo termine : devi solo aggiornarlo un paio di volte all'anno, o anche meno se lo desideri.

Molti sviluppatori pensano che un sistema a rilascio progressivo renda instabile l'ambiente di sviluppo, il che spiega in parte la reputazione di Arch Linux. Ma non ho mai avuto problemi in sei anni di utilizzo quotidiano, e nemmeno i miei amici lo usano. D'altro canto, i vantaggi di un sistema di laminazione sono notevoli:

  • Tutte le applicazioni che utilizzo sono costantemente aggiornate. Non c'è bisogno di compilarli manualmente per avere la versione più recente quando necessario.
  • L'aggiornamento del sistema spesso significa che verranno introdotte meno modifiche contemporaneamente. Di conseguenza, ci sono anche meno possibilità di arresti anomali.

Ti ho raccontato la mia esperienza con Ubuntu e gli arresti anomali che ho avuto durante l'aggiornamento. Non ho mai avuto problemi con Arch Linux.

Tutto ciò di cui hai bisogno

Inoltre, i repository di Arch Linux sono enormi. È molto probabile che troverai tutti gli strumenti di cui hai bisogno lì. Se non lo fai, puoi guardare gli AUR (Arch User Repositories), dove c'è tutto il resto. L'AUR non è un repository ufficiale, quindi potrebbero esserci dei problemi di sicurezza con le applicazioni che vi si trovano. Ancora una volta, non ho mai avuto alcun problema con loro, ma è possibile. Finché ti attieni ai repository ufficiali e non installi tutto e niente dall'AUR, non avrai alcun problema.

Un'opportunità di apprendimento

Diciamo anche che Arch Linux è una distribuzione molto minimale. Non impone molte applicazioni inutili quando lo installi. A proposito, è necessario installare manualmente l'intera distribuzione utilizzando la shell. Il compito può sembrare scoraggiante ma, dall'altro lato, imparerai molto dall'esperienza.

Come ho accennato all'inizio di questo articolo, conoscere un minimo di come funzionano i sistemi basati su Linux sotto il cofano può aiutarti quando il tuo sistema si comporta in modo strano o quando si arresta in modo anomalo. Non è così complesso come potrebbe sembrare e, se sei uno sviluppatore, direi che è obbligatorio. Il Web, il tuo telefono o il tuo Raspberry Pie funzionano su Linux al giorno d'oggi.

Ultimo ma non meno importante, Arch Wiki è il posto migliore che puoi trovare per qualsiasi cosa relativa a Linux. Mi ha aiutato molto nel corso degli anni, anche quando stavo usando Ubuntu. È un ottimo posto per risolvere i problemi del tuo sistema e trovare nuovi strumenti.

Gestire le tue finestre con i3

Ora che abbiamo esaminato il motivo per cui Arch Linux può essere una solida base per il tuo ambiente di sviluppo senza mouse, vediamo cosa possiamo aggiungere in cima.

Ma prima, un po' di teoria. I sistemi operativi hanno spesso tre livelli, più o meno accoppiati tra loro:

  1. Il kernel , che si diletta direttamente con l'hardware del tuo computer;
  2. La shell , un'interfaccia per te, o alcune applicazioni, per interagire con il kernel;
  3. Un livello di visualizzazione in alto, come un desktop manager o un gestore di finestre di affiancamento.

Gnome o Unity sono entrambi gestori desktop per sistemi basati su Linux. Gestiscono le tue finestre e molte altre cose, come la barra di stato o il lanciatore di applicazioni. I gestori di finestre affiancati sono un'alternativa ai gestori desktop e sono spesso più piccoli e più concentrati sulla manipolazione delle finestre.

Il tiling window manager i3 è davvero molto leggero: lo sto usando proprio ora su un computer di dieci anni (Lenovo x220) e non rallenta. È anche semplice da usare, la documentazione è ottima e, soprattutto, puoi gestire le tue finestre solo con la tastiera (se lo desideri).

Le basi di i3 sono semplici: puoi aprire finestre in diversi spazi di lavoro che rappresentano un intero schermo . È molto simile ai desktop virtuali di molti desktop manager Linux. Quindi, quando apri le tue applicazioni preferite, lo schermo verrà condiviso automaticamente in base al numero di finestre sullo schermo.

Ad esempio, se apri Firefox, la sua finestra occuperà il 100% dello schermo. Se apri tre istanze di Firefox, ognuna di esse occuperà il 33% dello schermo.

i3 con finestra Firefox
i3 con finestra Firefox. (Grande anteprima)

Puoi anche modificare il layout delle finestre. Invece di avere tutte le finestre visibili sullo schermo, puoi impilarle l'una sull'altra e sfogliarle con una semplice pressione di un tasto. Se hai bisogno di alcune finestre mobili "normali", puoi anche configurarle.

i3 con finestre Firefox impilate
i3 con finestre Firefox impilate. (Grande anteprima)

L'obiettivo di i3 è semplificare la gestione di tutte le tue finestre. Invece di usare il mouse per spostarli e ridimensionarli ogni volta che ne apri di nuovi, puoi utilizzare le sequenze di tasti per eseguire la stessa operazione solo quando è necessario .

Sembra troppo complicato? Sono stato efficiente con i3 due giorni dopo averlo provato. Non sono un genio; se posso farlo io, puoi farlo anche tu.

La ciliegina sulla torta: come ogni strumento descritto in questo articolo, puoi personalizzare i3 e le sue sequenze di tasti a tuo piacimento.

L'unico inconveniente di i3: non è disponibile per macOS. Ma ci sono ottime alternative , come il gestore di finestre di piastrellatura Amethyst o Divvy.

Fai salire di livello il tuo terminale con URxvt, tmux e tmuxp

Il terminale è l'interfaccia che ti dà accesso alla shell. Anche se la shell è un vero affare, possiamo renderla più facile da usare con un paio di strumenti.

Il percorso della semplicità con URxvt

Mi piace la semplicità, ed è in parte per questo che amo l'ambiente di sviluppo che descrivo in questo articolo. A proposito, URxvt è uno dei terminali più semplici che puoi trovare. È anche veloce e affidabile. In sei anni, non l'ho mai visto schiantarsi o addirittura rallentare. Fa quello che dovrebbe fare: permetterti di usare la shell. Ne più ne meno.

Il multiplexer terminale con tmux

Anche se mi piace la semplicità di URxvt, mi piace anche avere un buon multiplexer di terminale su cui posso fare affidamento, come tmux.

Che cos'è un multiplexer terminale? Ti consente di aprire sessioni contenenti più shell . Queste sessioni vengono mantenute in background: anche se il tuo terminale va in crash o se lo chiudi per sbaglio, le tue shell non scompariranno. Puoi recuperarli in un altro terminale quando vuoi (come se nulla fosse).

Questo è utile sul tuo computer locale, ma è ancora meglio su un server remoto. Ad esempio, puoi connetterti a un server tramite SSH, eseguire uno script, chiudere la tua connessione SSH e il tuo terminale sul tuo computer locale e tornare a casa. Poiché la tua shell è ancora in esecuzione sul tuo server grazie a tmux, anche il tuo script verrà eseguito.

Non è tutto: tmux è un po' un tuttofare, in senso buono. Puoi usarlo per aprire più finestre contenenti più riquadri in un terminale. Puoi pensare a una finestra come all'intero terminale e a un riquadro come a una shell che prende una percentuale della finestra.

Ti ricorda i3? Segue gli stessi principi, ma può solo creare nuove shell. Ecco perché molti utenti che sono soddisfatti di i3 non vedono alcun senso nell'usare tmux. Personalmente, mi piace usare entrambi.

Tmux con 4 finestre e 4 vetri
Tmux con 4 finestre e 4 vetri. (Grande anteprima)

Come sempre, puoi manipolare le finestre e i riquadri di tmux con la tua tastiera e puoi configurare tmux stesso seguendo i tuoi desideri più folli.

tmuxp

Immaginiamo che tu voglia usare tmux per l'applicazione dirompente che stai sviluppando in questo momento. Devi prima aprire un terminale. Quindi, devi creare tutte le finestre di tmux di cui hai bisogno e dividere queste finestre con i riquadri desiderati.

Ricorda : un riquadro rappresenta una shell. In ciascuna di queste shell, puoi quindi eseguire tutte le CLI necessarie per un progetto specifico: ad esempio, eseguire un contenitore docker o visualizzare alcuni log.

Ma puoi anche automatizzare tutto questo, ed è qui che la vera potenza di tmux , nel contesto di un ambiente di sviluppo, brilla davvero. Usando un'altra CLI chiamata tmuxp, puoi annotare in un file di configurazione YAML quali finestre, riquadri e qualsiasi comando desideri. Quindi, puoi caricare questa configurazione e creare automaticamente la tua sessione tmux personalizzata.

Ho uno di questi file di configurazione per ciascuno dei miei progetti. Mi fa risparmiare un sacco di tempo ed energia. Come dicevo sopra, questo è uno dei maggiori vantaggi dell'utilizzo della shell.

Editor Plus Shell è uguale a IDE

Dato che la shell è così potente, perché non avere un editor in esecuzione direttamente al suo interno? Perché non usare Vim?

Come Arch Linux, Vim ha la reputazione di essere difficile da imparare. È più sottile: è abbastanza facile essere produttivi con esso, ma ci vuole molto tempo per padroneggiarlo. Se esegui Linux e hai installato Vim, puoi imparare le basi in 20 minuti eseguendo vimtutor nella tua shell.

Vim offre molte funzionalità che possono essere ulteriormente estese con innumerevoli plugin. Inoltre, puoi interagire direttamente con la tua shell usando Vim, usando qualsiasi CLI tu voglia direttamente nel tuo editor. Trasformerà Vim in un IDE in piena regola.

Vim ha un altro grande vantaggio: puoi usarlo per sviluppare in molti linguaggi di programmazione. Non mi piace passare da un IDE all'altro ogni volta che devo programmare in PHP, Golang o Clojure. L'interfaccia è diversa, devo configurare ciascuno di questi editor separatamente e non posso davvero salvare le configurazioni da qualche parte per riutilizzarle quando reinstallo questi strumenti.

Con Vim, posso programmare in qualsiasi lingua desidero rimanendo nello stesso editor . Come VS Code, puoi utilizzare gli LSP (Language Server Providers) per abilitare il completamento automatico, il linting e il refactoring automatico per i linguaggi di programmazione più comuni (e anche più esoterici).

Vim in azione
Vim in azione. (Grande anteprima)

Anche Vim è veloce. Non richiede molte risorse per funzionare. Spesso ho 6 o 7 istanze dell'editor sempre aperte sul mio vecchio computer, senza alcun problema. In confronto, ho usato gli IntelliJ IDE per anni e, quando ne aprivo due, tutto il mio sistema cominciava a rallentare. È davvero pratico quando lavoro su progetti diversi contemporaneamente, come ad esempio un gruppo di microservizi.

Devo aggiungere che Vim è altamente configurabile ? Invece di avere molte funzionalità direttamente nel tuo IDE (incluse alcune che non utilizzerai mai), puoi scegliere esattamente ciò di cui hai bisogno e scartare ciò che non ti serve.

Un insieme di sequenze di tasti coerenti

Se Arch Linux è la base del mio ambiente di sviluppo senza mouse, allora i3, Zsh, tmux e Vim sono i banchi di lavoro per le mie esigenze creative. Mi dà un livello di comfort che non ho mai sperimentato con altri strumenti.

Ma potresti chiederti perché dovresti usare tutti questi nuovi strumenti e le loro sequenze di tasti quando puoi già utilizzare le scorciatoie per gli strumenti che già conosci?

Bene, le scorciatoie della maggior parte delle applicazioni là fuori sono spesso prive di significato . È una zuppa di chiavi che non hanno relazioni tra loro. Di conseguenza, sono difficili da ricordare e possono essere molto diversi da uno strumento all'altro.

Gli strumenti che descrivo in questo articolo sono pensati per adattarsi perfettamente l'uno all'altro. Puoi quasi usare la stessa sequenza di tasti per ciascuno di essi. Solo una chiave sarà diversa, in modo che il sistema sappia su quale strumento si desidera agire. Rende le diverse sequenze di tasti molto più facili da ricordare.

Inoltre, Vim è stato progettato per avere sequenze di tasti sensate creando un linguaggio semplice su cui fare affidamento. Ad esempio, per eliminare una parola, puoi daw . Per eliminare un paragrafo, è dap . Poiché molte CLI si basano sulle sequenze di tasti di Vim, l' apprendimento di Vim aprirà la porta a molte altre CLI .

Installazione automatica del tuo ambiente di sviluppo senza mouse

L'installazione manuale di Arch Linux è utile per imparare molto sui sistemi basati su Linux, ma diventa vecchio quando è necessario farlo ogni volta che si desidera installare il sistema su un nuovo computer. Ecco perché ho creato i miei script per installare il mio intero ambiente di sviluppo senza mouse. Installano Arch Linux e tutti gli strumenti che uso con le loro configurazioni. Quando ho bisogno di usare un nuovo computer, posso semplicemente eseguire questi script e voilà!

Sei pronto per essere uno sviluppatore senza mouse?

Grazie alla flessibilità che ho con il mio ambiente di sviluppo, posso anche cambiare facilmente gli strumenti. Ad esempio, se non voglio più usare tmux, posso sostituirlo con un altro multiplexer di terminale. Se non mi piace la barra di stato di i3 o il mio launcher delle applicazioni, posso anche sostituirli.

Come avrai intuito, la configurazione di questo tipo di sistema richiede tempo, motivazione e impegno . Ecco perché ho scritto un libro intitolato “Building Your Mouseless Development Environment”. Descrive in dettaglio come configurare tutti gli strumenti, come creare script per installare l'intero sistema con un comando e come personalizzare tutto per le proprie esigenze personali. Se non sai molto sulla shell di Linux, ti consente di creare un progetto personalizzato per familiarizzare con esso.

Se sei interessato, qui troverai un campione del libro e l'intero sommario.

Penso che il modo migliore per scoprire se ti piacerebbe questo tipo di sistema sia semplicemente provarlo. Ti posso garantire una cosa: imparerai molto lungo la strada!

Ulteriori letture su Smashing Magazine

  • "Ho usato il Web per un giorno con solo una tastiera", Chris Ashton
  • "Una guida completa alle tastiere meccaniche", Ben Frain
  • "Creare una solida argomentazione per l'accessibilità", Todd Libby
  • "Accessibilità in Chrome DevTools", Umar Hansa