Perché la programmazione della shell è più piacevole di altri linguaggi di programmazione di alto livello come Java, C # o C ++?

Semplicemente perché molti non lo vedono come “Programmazione professionale”.

Per la maggior parte delle persone in questi giorni, scrivere software è la convinzione che tutto ciò che un programmatore fa è scrivere codice, e lo fa in un “linguaggio di codifica”, quindi molte persone credono che ci sia una disconnessione tra, linguaggi di codifica e impartire istruzioni a un computer.

Non vedono roba da shell come Bash o Power shell come linguaggi di programmazione, in realtà li vedono come strumenti che li aiutano a “portare a termine il lavoro” e, per i pochi che lo fanno come hobby, è visto come un casino sul computer.

Il fatto è che i “linguaggi di programmazione” sono gli stessi dei “linguaggi di shell”, il che non è la stessa disciplina e le regole non sono così rigide, ma quello che stai facendo è esattamente la stessa cosa, stai usando uno strumento, per comunicare alla macchina un processo che ti aiuti a raggiungere un obiettivo finale.

Una cosa simile è accaduta anche nei primi anni 2000 con Microsoft Office.

Office aveva un sistema di scripting integrato chiamato Visual Basic, Applications Edition, che era in qualche modo una versione ridotta di Visual Basic .NET, ma molte persone che lo usavano, specialmente per lo scopo previsto di automatizzare le attività di ufficio comuni, non lo consideravano essere un linguaggio di programmazione, era solo uno strumento, integrato in MS-Office.

Nel frattempo, l’utilizzo del prodotto Visual Basic .NET completo era considerato costoso e il modo professionale di fare le cose se fosse necessario creare qualcosa che si desidera vendere o utilizzare al di fuori dell’ufficio.

Il fatto è che entrambe le lingue erano più o meno esattamente la stessa cosa. Concesso VBA non era abbastanza potente come la versione completa, ma la base era la base era la base … era davvero così semplice.

La percezione è il 75% del problema e il 25% della soluzione il più delle volte. Il modo in cui le persone percepiscono le cose può e varia in modo immenso e drammatico tra estremi oltraggiosi, di solito quando meno te lo aspetti.

È piacevole solo per progetti molto piccoli. Le ragioni sono:

  • L’installazione dell’ambiente di sviluppo è estremamente semplice
  • Non è necessario impostare complesse strutture di progetto, cartelle, manifest, file di risorse ecc
  • Non è necessario installare nulla se si dispone già della shell
  • Non c’è bisogno di pasticciare con le librerie o le dipendenze di 3 °
  • Non è necessario compilare, è possibile eseguire il codice in modo semplice e interattivo
  • Alcune cose di base come le funzioni di stringhe avanzate e la capacità di eseguire altri processi e lavorare con input / output sono prontamente parte della shell, quindi funzionano facilmente e immediatamente
  • Non è necessario un IDE costoso per gestire il programma
  • È molto tollerante, a volte anche errori di sintassi non impediranno l’esecuzione del programma, anche se a un certo punto si comporta male

Ora, se il tuo obiettivo è troppo complesso, la shell smetterà semplicemente di essere abbastanza buona. Ho visto alcuni progetti seriamente grandi scritti in pura shell, ma per lo più realizzati e mantenuti da una sola persona e la codifica era piuttosto eccessiva e poteva essere eseguita molto più facilmente se scritta in un vero linguaggio di programmazione (di livello inferiore).

Un altro grosso problema con la programmazione della shell sono le prestazioni orribili e l’efficienza, praticamente per quasi tutte le istruzioni necessarie per eseguire un processo separato a livello di sistema operativo (ad esempio se [… avvia un eseguibile “/ usr / bin / [” e gli fornisce i parametri per valutare la condizione, quindi funziona con il codice di ritorno dell’eseguibile).

Astrazione.

Ecco un puzzle. È rilevante per la domanda, davvero.

Sei in una fabbrica che stampa le carte per un gioco. Le carte hanno sempre una lettera su un lato e un numero sull’altro lato. Ma a causa di una regola del gioco, se c’è un numero pari su un lato, l’altro lato deve avere una vocale.

Sei la persona del QA che cerca carte cattive. Puoi presumere che tutte le carte abbiano un numero da una parte e una lettera dall’altra, ma alcune carte hanno la lettera rivolta verso l’alto, altre il numero. Vedi quattro carte con queste lettere e numeri che mostrano:

AB 3 4

Rapidamente ora, quali carte devi girare per verificare che corrispondano tutte alla regola? Molte persone sbagliano. (Conosco anche programmatori professionisti che sbagliano, quindi non considerare questo tipo di test di programmazione.)

Ma ecco lo stesso problema, ma con meno astrazioni: la regola è ora che qualsiasi controllo superiore a $ 500 deve avere una firma del gestore sul retro. Vedi assegni per $ 25, $ 600 e due assegni a faccia in giù, uno con e uno senza firma del gestore. Quali controlli devi consegnare per verificare che tutti seguano la regola?

Praticamente tutti ricevono la seconda domanda corretta. Anche se è effettivamente lo stesso problema.

L’unica differenza è il livello di astrazione. Sono molto a mio agio con alti livelli di astrazione e trovo che la programmazione della shell sia molto restrittiva. Ci sono così tante cose che puoi fare in uno script di shell.

Ma la maggior parte delle persone non si sente veramente a proprio agio con l’astrazione, o almeno non tanto con i concetti concreti. E la programmazione della shell spesso consiste semplicemente nel definire l’ordine in cui si desidera che le cose accadano.

Conoscere qualsiasi tipo di programmazione è fantastico. Se ti alleni, puoi imparare a gestire una maggiore astrazione. Farà allungare la mente, il che non è sempre comodo, ma acquisire la capacità di manipolare le astrazioni è davvero al centro della programmazione più avanzata.

E Java, C # e C ++ sono tutti più potenti degli script di shell.

Naturalmente hanno anche un sacco di boilerplate, che è meno ideale, quindi forse è che non ti piace? Forse prova Python o JavaScript (Node.js) per piccoli strumenti da riga di comando.

In bocca al lupo.

Ok, per programmazione Shell probabilmente intendi script di shell?

Quindi, poiché i linguaggi di script sono più semplici ed essere onesti oltre a pochi comandi come se, mentre, per la maggior parte dei “comandi” sono in realtà programmi, che controlla già errori e tutti quei noiosi problemi con C ++, C # e Java.

Inoltre, poiché usi altri programmi, puoi fare MOLTO su un numero molto piccolo di righe.

Ad esempio, vuoi ordinare il testo in base ai numeri sulla quarta riga, facile, usa l’ordinamento per esso. Prova a farlo usando C ++ o Java, certo che non è niente di pazzesco o difficile, ma da nessuna parte vicino a 1 riga di codice 🙂 (A meno che tu non metta tutto in una riga).

Inoltre, di solito non scrivi sistemi così complessi e grandi usando script di shell (ho già visto un enorme sistema con diversi script per svolgere compiti super complessi … ma solo una volta). Quindi la complessità diminuisce molto, niente classi, praticamente scrivi quello che vuoi e un programma (probabilmente scritto in C, C + =, C # o java) farà questo compito per te o una combinazione di quelli.

Questo è ciò che è così divertente, sembra che tu abbia molta potenza sulla punta della mano e senza tutto quel controllo degli errori (devi ancora fare un po ‘), uso della memoria, multi thread, mutex.

Solo una nota a margine, ovviamente ci sono problemi, come ho detto, nessun meccanismo adeguato per l’utilizzo di memoria multithread, mutex, sarà quanto bene il programma che hai usato può gestire la memoria e altre cose.

È perché stai prendendo di mira casi d’uso che sono più facili da risolvere con gli script di shell.

Sh e gli amici non sono linguaggi di programmazione generici. Sono progettati per l’amministrazione del sistema. Sono progettati per facilitare la gestione di processi e file.

Se vuoi creare uno script per eseguire il backup dei file, avviare i servizi, rinominare i file, collegare insieme diversi processi, automatizzare le distribuzioni e le installazioni, allora sì, la programmazione della shell è un’ottima scelta.

Se si desidera accedere ai database, creare un sito Web, creare un gioco, creare una GUI, java e C ++ sono molto più adatti per il lavoro.

Non per me, mi piace bash come shell per navigare in un sistema, ma per programmare? Nessuna possibilità, penso che gli script di shell per la programmazione possano succhiare una palla da baseball attraverso un tubo da giardino.

Raggiungi i limiti in 10 minuti, puoi accedere realisticamente a un database? Puoi accedere a FTP / SFTP e farlo bene ? Non solo caricare / scaricare, ma verificare la presenza di file esistenti ecc.? Controlla le date di modifica e agire su di esse?

Per me Python è un’ottima alternativa agli script di shell, evito di usare il più possibile i linguaggi di shell tradizionali come bash.

Per me, preferisco Java o C # a shell scripting di un miglio di campagna.

La programmazione Java, C # o C ++ è una vera programmazione per computer. Con queste lingue, un programmatore può fare qualsiasi cosa. Ma la programmazione della shell è limitata da qualunque comando sia disponibile per quella particolare shell.

Questo è un argomento molto soggettivo.

Personnaly, non vedo come la scrittura di codice in un linguaggio di scripting limitato potrebbe essere davvero soddisfacente, soprattutto rispetto alla progettazione e costruzione di un sistema in C ++….

Non lo è, perché gli script di shell sono più difficili da eseguire il debug.