Qual è la differenza, davvero?
La vera e importante differenza tra un linguaggio di programmazione e questi altri linguaggi è questa:
HTML e CSS descrivono la presentazione , mentre i linguaggi di programmazione descrivono la
funzione
Ho intenzione di illustrare il motivo per cui questa differenza è importante, ma quella pedanteria su questo tema è talvolta fuori luogo.
Una storia vera :
Una volta ho trascorso alcuni mesi a sviluppare un complesso sistema di gestione delle prestazioni utilizzando un linguaggio di programmazione "adeguato". Ha automatizzato il processo di raccolta dei dati da vari altri sistemi, eseguito varie manipolazioni su tali dati e quindi presentato i risultati in una semplice tabella.
Una volta che era in diretta, un senior manager ha visto uno strumento scritto per un'attività simile e ha chiesto se potevamo sostituire ciò che avevo scritto usando la loro alternativa. Inoltre, era sconvolto dal fatto che avevo trascorso settimane a sviluppare la mia soluzione, in cui questa nuova app era stata scritta in pochi giorni.
Ulteriori indagini hanno rivelato che l'opzione preferita del manager era tutta la presentazione senza sostanza: c'erano molti colori, icone e grafici, ma non c'era assolutamente alcuna logica dietro di loro. Tutti i dati dovevano essere raccolti e manipolati manualmente. Nonostante la bella interfaccia, l'applicazione era essenzialmente inutile.
Sono felice di dire che il manager in questione era convinto che il mio approccio fosse quello che soddisfaceva le sue reali esigenze aziendali.
L'importanza della presentazione :
C'è spesso un'implicazione che le abilità in HTML, CSS ecc. Sono in qualche modo inferiori alle abilità nei linguaggi di programmazione "reali". Questo è un grave errore.
Nella mia storia, il senior manager ha ritenuto che il design fosse molto importante per lui, nella misura in cui inizialmente era pronto a trascurare la funzione a suo favore. Ora, se questo fosse un episodio isolato, potrei suggerire che il manager fosse solo sciocco. Ma non lo era. Di volta in volta, ho incontrato utenti che sono rimasti colpiti dalla grafica appariscente e dai widget frizzanti, ma non impressionato dalla funzionalità grezza e dai miei risultati tecnici. Penso che ci siano diverse lezioni da imparare qui:
- Le persone valutano il software in base a criteri che comprendono. Capiscono spesso la differenza tra bello e brutto, ma raramente apprezzano le sfumature tecniche.
- Le persone sono ingannate dalle apparenze. Questa potrebbe non essere una buona cosa, ma è una realtà con cui dobbiamo convivere.
- Le apparenze influenzano il modo in cui le persone sentono il software. Il modo in cui le persone pensano del software è importante per loro. In effetti, le persone a volte preferiscono software che li faccia sentire bene rispetto a software funzionalmente superiore. In effetti, potrebbero essere più produttivi con strumenti di benessere che con strumenti tecnicamente superiori. In questa misura, i nostri utenti non vengono ingannati. Stanno davvero facendo una scelta saggia e ponderata.
- Come programmatori, spesso trascuriamo il ruolo della presentazione mentre ci concentriamo sulla funzione. In una certa misura, questo è giusto e corretto. Tuttavia, è importante riconoscere che esiste un'altra dimensione nel nostro lavoro che è importante per i nostri clienti.
Pertanto, i linguaggi orientati alla presentazione (HTML, CSS) sono importanti. Il valore aggiunto di coloro che possono utilizzare questi strumenti in modo efficace non deve essere sottovalutato.
L'importanza dei linguaggi di programmazione reali
Come sottolineato dall'OP, i linguaggi di programmazione "reali" sono Turing Complete. Come un vero disadattato triste, trovo questo sublimemente affascinante. Significa che, per qualsiasi programma scritto in un linguaggio TC, un programma funzionalmente equivalente può essere scritto in qualsiasi altro linguaggio TC. Ovviamente, ciò non significa che tutte le lingue siano uguali. Ognuno di essi ha i suoi punti di forza e di debolezza che li rendono più o meno adatti a determinati compiti. Tuttavia, a parte l'I / O, ciò significa che tutti i programmi possono essere scritti in tutti i veri linguaggi di programmazione.
(Per inciso, la cosa importante è TC. Il dichiarativo contro l'imperativo è un'aringa rossa qui. SQL, ad esempio, è dichiarativo ma è anche un linguaggio di programmazione appropriato perché è TC.)
Naturalmente, lo stesso non vale per un linguaggio di markup come HTML o CSS. In effetti, ci sono intere classi di problemi che queste lingue semplicemente non possono risolvere . Dove posso programmare tutto ciò che voglio in un vero linguaggio di programmazione - inclusi i motori di layout - non è possibile ottenere le stesse cose con linguaggi che non sono TC.
Come evidenziato nella mia storia, HTML e i suoi simili sono usati per produrre presentazioni. Veri linguaggi di programmazione vengono utilizzati per produrre funzionalità.
Perché i programmatori sono pedanti per tutto ciò?
- I programmatori impiegano molto tempo, sforzi e denaro per sviluppare le proprie capacità. Le persone apprezzano naturalmente le cose in cui investono ("il tuo cuore è dove sono i tuoi soldi").
- I programmatori sentono spesso la necessità di giustificare la quantità di tempo necessaria per produrre risultati rispetto ai rapidi risultati raggiunti dai progettisti dell'interfaccia utente. Per fare ciò, devono fare una distinzione tra ciò che effettivamente fanno i due gruppi .
- Perché i datori di lavoro devono applicare le persone giuste ai lavori giusti. A meno che non chiariamo le differenze (spesso tecniche), i manager fanno facilmente le chiamate sbagliate.
- Perché c'è una differenza reale e fondamentale , come indicato sopra.
È sempre appropriato essere pedanti?
Ammettiamolo, come programmatori siamo un lotto naturalmente pedante . Va con il territorio. Non aiuta il fatto che molti di noi siano stati bruciati quando i non programmatori non hanno capito cosa facciamo.
Tuttavia (e ad essere sincero, questo va contro il mio istinto naturale), non penso che dobbiamo chiamare le persone ogni volta che scivolano su ogni piccola distinzione .
Le cose importanti qui sono il contesto
e la prospettiva .
Mi è stato detto che, dal punto di vista di un biologo, un pomodoro è un frutto. Ma quando li compro al supermercato, li cerco tra le verdure. Perché? Perché la distinzione tecnica non ha importanza in quel particolare contesto. Inoltre, la distinzione avrebbe effettivamente ostacolato la loro utilità: se fossi stato abbastanza stupido da includere pomodori in una macedonia, per esempio.
È lo stesso con i linguaggi del computer. Ci sono momenti in cui la differenza tra linguaggi di programmazione e altri linguaggi conta davvero . Abbastanza spesso, tuttavia, possiamo tutti comunicare perfettamente in modo efficace quando li raggruppiamo tutti insieme. Nel caso della domanda collegata dall'OP, in realtà non importava quali lingue fossero veri e propri linguaggi di programmazione e quali no. Sottolineare la distinzione non ha fatto avanzare la discussione in alcun modo. Per fortuna, oltre ad aggiungere un po 'di rumore (e diventare lo stimolo per una discussione interessante!) La pedanteria collegata dall'OP era di scarsa importanza. Nel peggiore dei casi, tuttavia, la pedanteria può suscitare sentimenti negativi e danneggiare i rapporti ... almeno secondo mia moglie.
:-)
Come gestire la pedanteria tra i programmatori
Un mio predicatore amico una volta pronunciò un sermone intitolato:
è una collina che vale la pena morire per essere su?
Si riferiva a generali che fanno una valutazione strategica su quali battaglie vale la pena combattere: i guadagni valgono i costi?
- Vale davvero la pena interrompere il flusso della discussione per fare questa distinzione?
- La mia pedanteria deriva da un senso di arroganza o da ferite passate?
- I miei commenti valorizzano le capacità degli altri e le mie?
Certo, ci sono momenti in cui è necessario fare delle distinzioni. Il mio obiettivo è che, quando darò un contributo, aggiungerà valore ai nostri sforzi collettivi.
Dopo tutto, questo è il lavoro di ogni vero programmatore.