it-swarm.it

Perché è importante che HTML e CSS non siano linguaggi di programmazione?

Esempio qui:

Quali lingue dovrei sapere se sono interessato a creare applicazioni Web?

Sì, capisco che HTML e CSS non sono completi di Turing. Sì, capisco che sono lingue dichiarative, non imperative. Ma perché le persone sono sempre in disordine con questo fatto pedante (e probabilmente ovvio) quando fanno una domanda su queste lingue?

160
Robert Harvey

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.

na 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 in diretta, un senior manager vide uno strumento scritto per un'attività simile e chiese 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 gestore era tutta la presentazione senza sostanza: c'erano molti colori, icone e grafici, ma c'era assolutamente nessuna logica dietro 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 errore grave.

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, a volte le persone preferiscono un software che li fa sentire sentirsi bene rispetto a un 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, l'importante è T-C. Il dichiarativo contro l'imperativo è un'aringa rossa qui. SQL, ad esempio, è dichiarativo ma è anche un linguaggio di programmazione appropriato perché è T-C.)

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 quello che voglio in un vero linguaggio di programmazione - inclusi i motori di layout - non è possibile ottenere le stesse cose con linguaggi che non sono 't 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ò?

  1. 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").
  2. 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 fanno effettivamente i due gruppi .
  3. 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.
  4. 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 che molti di noi siano stati bruciati quando i non programmatori non hanno capito cosa facciamo.

Tuttavia (e ad essere onesti, 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 contesto e 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é distinzione tecnica non importa in quel particolare contesto. Inoltre, la distinzione interferirebbe effettivamente della loro utilità: se fossi 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 è davvero importante . Abbastanza spesso, tuttavia, possiamo tutti comunicare perfettamente in modo efficace quando li raggruppiamo tutti insieme. Nel caso della domanda collegata dall'OP, non importava davvero quali linguaggi 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 valgono 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.

Questo è, dopo tutto, il lavoro di ogni reale programmatore.

300
Kramii

Informa un ingegnere civile o meccanico che hai studiato "Ingegneria del software" e ti diranno che "Ingegneria del software" non è reale ingegneria.

Di 'a un pilota dell'F-16 che fai volare Cessnas per divertimento e ti dirà che non sei un pilota reale.

Di 'a un dottore che sei un chiropratico e te lo dirà ... beh, non andiamo lì :-)

Penso che sia soprattutto che alle persone non piaccia l'idea che la loro professione venga infiltrata da pretendenti o persone che non sono veramente "degne".

Ora, per essere onesti, è abbastanza chiaro che HTML e CSS non sono linguaggi di programmazione . Non sono più linguaggi di programmazione che il formato .docx è un linguaggio di programmazione e affermare che sei un programmatore se tutto ciò che sai è HTML e CSS è sicuramente impreciso. Ma penso che parte della veemenza nella risposta possa essere attribuita a ciò che ho detto sopra.

Inoltre, nella domanda che hai collegato, l'interrogatore ha chiamato HTML e CSS un "linguaggio", non un "linguaggio di programmazione". L'HTML è un linguaggio di markup e anche il CSS è un linguaggio (non so quale "tipo" di linguaggio chiameresti CSS, però?), Quindi penso che sia stato un po 'ingiusto chiamarlo fuori per chiamarlo "lingue " ...

117
Dean Harding

Non importa davvero tanto per me.

Ma presumo che per quelli per cui lo fa, la distinzione tra HTML, CSS, XML, ecc. E Real Programming Languages ​​™ è un po 'come la distinzione tra legno e Paint come materiali da costruzione. Non puoi costruire cose con Paint come puoi fare con il legno, e allo stesso modo non puoi programma con HTML come puoi fare con un RPL.

Ti concedo, tuttavia, per alcune conversazioni, fare una tale distinzione può essere irrilevante, e quindi pedante e fastidioso.

9
Eric King

Potrebbe non essere una distinzione "importante", dal momento che probabilmente tanto lavoro va nella parte html/css di alcuni siti Web come nella parte di programmazione.

Ma è una distinzione significativa, dal momento che chiunque non sappia cosa significhi non ha posto in un team che si occupa dello sviluppo web.

Se un designer ritiene che l'HTML stia programmando, lascia che continui a progettare con gli strumenti Adobe e faccia progetti relativi alla stampa; ma non credere a una cosa che potrebbe dire sulle app Web.

Se uno sviluppatore pensa di essere al di sopra dei designer perché "i suoi" linguaggi sono completi di Turing, non aspettarti che lavori bene con i designer, o che il suo codice possa essere "preimpostato" dopo averlo fatto.

6
Javier

Per alcune persone è importante perché nessuno dei due è scienza missilistica in superficie, ma ci sono molti arcani che li circondano a causa del fatto che si implementano in modo diverso in tipicamente 5 a dozzine di ambienti diversi a cui tieni davvero. Quel tipo di imprevedibilità e attenzione all'artigianato spaventa una certa varietà di professionisti della tecnologia che è inorridita da rischi non quantificabili e ancor più inorridita imparando qualcosa di più di quello che devono assolutamente fare dopo essersi assicurati una laurea.

Se qualcuno mi chiedesse quali lingue conoscevo e avrei lanciato CSS lì fuori e avrebbero detto "ma non è un linguaggio REALE" gli chiederei come avrebbero gestito centrando verticalmente un div in IE 5, IE 6-8 e IE9 +. Quindi potremmo passare ad angoli arrotondati, problemi di trasparenza alfa, il vero colpevole dietro tutti questi ridicoli argomenti di tabelle come layout che solo ora stanno iniziando a diventare veramente irrilevanti e dozzine di argomenti in più per dire Uber-coder che probabilmente conosce una lingua e afferma una o due che non ha praticamente funzionato a causa delle lezioni che è stato costretto a frequentare al college 10 anni fa.

Sono sicuramente "lingue". Non li definirei "linguaggi di programmazione". Mi sentirei a mio agio nel descrivere il processo di scrittura in queste "codifiche" di queste lingue.

Per quanto mi riguarda, tuttavia, chiunque sia riuscito a gestire il grande maestro CSS ha la faccia tosta e l'etica del lavoro per diventare un eccellente programmatore, ha già un background nel pensiero orientato agli oggetti e senza dubbio ha imparato a pensare a come scrive ora potrebbe influire sul suo lavoro 25 progetti per il futuro.

5
Erik Reppen

Lo hai colpito alla testa quando hai detto "dichiarativo, non imperativo". Il markup (sia esso HTML, CSS o altro) descrive le cose. L'intero punto della programmazione è fare cose.

Il set di abilità richiesto per usare il markup è completamente diverso dal set di abilità richiesto per programmare.

I tipi di problemi risolti scrivendo markup sono completamente diversi dai tipi di problemi risolti dalla programmazione.

5
HedgeMage

Il linguaggio di programmazione è un po 'un termine inesatto perché è un termine comune utilizzato anche dai professionisti e dai laici. I praticanti hanno un significato sfumato di quel termine in cui i laici di solito non lo fanno. Normalmente la loro definizione è se ha parole/sintassi divertenti che non capisco immediatamente e che i programmatori lo usano allora deve essere un linguaggio di programmazione. Non completamente fuori dal comune, ma possiamo concordare che è inesatto.

Parole come dichiarative, imperative e turing complete sono termini più precisi con significati molto specifici. Quando fai una domanda come perché HTML/CSS non è un linguaggio di programmazione, stai chiedendo una definizione più precisa di cosa sia realmente un linguaggio di programmazione. Non siamo pedanti, ma stiamo cercando di rispondere alla tua domanda. Sono i termini migliori da usare quando anche se li cerchi su Google è difficile capire cosa significano? Dipende. Volevi la risposta breve o lunga. :-)

I linguaggi di programmazione sono generalmente pensati per essere completati dai programmatori, ma cosa significa? Significa che la lingua può descrivere il comportamento o come fare le cose. Lo chiamiamo formalmente logica. HTML/CSS può descrivere che c'è un pulsante situato nell'angolo in alto a destra, oppure c'è una tabella con 4 colonne 5 righe, le prime due righe sono gialle e la riga inferiore ha il testo verde e ogni cella nella tabella ha 5 pixel di spazio vuoto attorno al contenuto.

Ciò che HTML/CSS non può fare è esprimere il comportamento o la logica di ciò che accade quando si fa clic sul pulsante. Non posso dire quando faccio clic su quel pulsante per estrarre i valori da quella tabella e aggiungerli e scrivere quel valore in una nuova riga nella parte inferiore della tabella. Descrivere il comportamento è all'incirca equivalente a Turning-complete senza diventare eccessivamente pedante.

Più precisamente Turing-complete significa che potresti implementare la lingua in sé. Ciò significherebbe che potrei scrivere un programma javascript che accetta una stringa di javascript e potrebbe eseguirlo (e non usando la funzione eval ()). In effetti, posso scrivere un programma javascript che potrebbe prendere un programma scritto in qualsiasi linguaggio completo di Turing e valutarlo. Questo è ciò che significa essere Turing completo. Tutte le lingue che stanno completando sono equivalenti in quali programmi possono essere espressi. Rivelazione piuttosto sorprendente se ci pensate.

3
chubbsondubs

HTML e CSS non sono linguaggi di programmazione. Farsene una ragione.

Tuttavia: JavaScript è un linguaggio di programmazione. La macchina è il browser. PHP è un linguaggio di programmazione. La macchina è virtuale nel server.

Quindi se stai usando solo HTML e CSS, non stai facendo alcuna programmazione (anche se potresti fare un po 'di ingegneria).

Ma se stai utilizzando JavaScript, PHP o un altro linguaggio di scripting. Stai programmando.

Per quanto riguarda i linguaggi di programmazione REAL. Se stai operando su una macchina (vera o virtuale). E stanno usando i TUOI algoritmi per dire alla macchina di fare le cose. Quindi stai usando un linguaggio di programmazione REALE.

3
Ricardo Santos

Ecco i miei due centesimi. HTML e CSS non sono chiaramente linguaggi di programmazione. Per questo motivo, quando vedo HTML o CSS sul curriculum di qualcuno in "Linguaggi di programmazione", ciò mi dice semplicemente che questa persona non sa di cosa sta parlando.

A parte questo, no, non importa davvero.

A proposito, i programmatori generalmente tendono ad essere pedanti. Questo viene semplicemente con il lavoro.

1
Dima

Penso che ciò dipenda da questo: HTML e CSS, sebbene abbastanza complicati da richiedere un po 'di buon senso, sono i linguaggi di presentazione, più adatti come formato per i report generati. Pertanto, le persone che possono fare solo queste cose non sono considerate programmatori. Tenendo presente che alcuni programmatori sono stati nell'informatica abbastanza a lungo da ricordare quando l'elaboratore di testi medio ha preso più sintassi dei comandi per lo stile del testo che per HTML.

Ciò che alcuni chiamerebbero un linguaggio "reale" è quello che elaborerebbe i dati in qualche modo per generare un rapporto. O qualcosa che potrebbe essere usato per scrivere un gioco. Conoscere HTML e CSS dentro e fuori è un'abilità preziosa, ma lo è molto di più, quindi combina con la conoscenza di JS per il front-end e Java, PHP, Perl, Ruby, Python, C/C++ o C # nel back-end.

Al contrario, qualcuno che conosce solo una di quelle lingue "reali" senza alcuna tecnologia di front-end Web, limita moltissimo la propria flessibilità come programmatore.

0
Danny Staple

Non importa. Ed è anche una questione di definizione. Che cos'è un linguaggio di programmazione? Alcuni indicano che deve essere Turing completo. Altri hanno altre definizioni, che rendono HTML un linguaggio di programmazione. (E nel tuo esempio, non erano nemmeno chiamati linguaggi di programmazione, solo lingue, che ovviamente sono).

Il mio consiglio: cerca di ignorare le persone che indicano questo tipo di affermazioni inutili e in molti sensi persino errate. È solo una variazione della grammatica nazista. Chiamare HTML un linguaggio di programmazione non è errato in alcun senso significativo.

0
Lennart Regebro

Il piccione/stereotipo logico "cervello sinistro" o creativo "cervello destro" descrive accuratamente le competenze di molte persone. Nella mia esperienza, "HTML/CSS è un linguaggio di programmazione" riguarda più se le persone che sono brave in HTML/CSS possono anche essere brave in altre attività di programmazione.

La maggior parte dei web designer con cui ho lavorato negli ultimi 13 anni che ho sviluppato web sono stati in grado di creare HTML e CSS funzionanti, ma non sono in grado di gestire sfide di programmazione più impegnative (niente più che il più semplice cut-and- JavaScript incollato). La maggior parte dei programmatori hot-shot e dei progettisti di database non si preoccupano abbastanza della presentazione visiva per fare un buon lavoro con HTML/CSS o la presentazione in generale. La maggior parte in realtà si rifiuta di provare.

HTML e CSS richiedono alcune abilità di programmazione: sperimentazione, risoluzione dei problemi, test accurati, comprensione dell'eredità ... Ma richiedono almeno un numero uguale delle capacità di progettazione: sensibilità al colore, linea, spaziatura, equilibrio - la maggior parte degli stessi tipi di abilità di composizione visiva che rendono una buona fotografia.

Poiché HTML/CSS è un linguaggio di layout o presentazione, è alla fine del diagramma del flusso di dati. Nessun altro codice si trova a valle di esso. Le competenze di progettazione di livello superiore di cui qualcuno ha bisogno per progettare una buona API, servizio o schema di database non sono utilizzate in HTML e CSS. In genere non è necessario modulare qualsiasi cosa sia correlata a HTML o CSS o, in tal caso, non spetta al graphic designer farlo. È raro che qualsiasi la funzionalità sia realizzata con HTML/CSS . I menu a discesa sono probabilmente l'eccezione più comune, ma possono essere creati tagliando e incollando una ricetta dal Web anziché progettando il codice.

È insolito, ma non impossibile per un programmatore avere alcune capacità di progettazione visiva o di layout o per un progettista avere alcune abilità di programmazione. Queste persone sono particolarmente utili in un team Web perché aiutano a colmare un divario che la maggior parte di noi ha. Ma sono spesso soggetti a stereotipi, che essere in grado di fare HTML/CSS è impossibile per un "vero programmatore" o viceversa. Ma questa combinazione di abilità non è più impossibile che per quello stesso programmatore essere un marinaio, un pittore, un cuoco decente o avere qualche altra abilità che praticano nel loro tempo libero.

Come altri hanno già detto, questa distinzione si concentra maggiormente durante l'assunzione. Poiché le persone con talenti crossover sono rare, la maggior parte delle offerte di lavoro deve essere mirata a un set di abilità o all'altro. Se un programmatore elenca HTML/CSS in "Linguaggi di programmazione", genera una bandiera rossa che non è in grado di svolgere attività di programmazione generali o che forse la loro definizione di programmazione è molto limitata. Forse possono, solleva solo una domanda. Se un designer elenca HTML/CSS, vuoi sicuramente guardare il loro portfolio per vedere che hanno la capacità artistica di creare l'effetto visivo desiderato.

L'HTML/CSS può essere ripetutamente cestinato come non essere un vero linguaggio di programmazione perché è più sicuro e socialmente più accettabile rispetto al cestinare le persone che non riescono a superare la divisione dell'emisfero che rappresentano. Certo, alcune persone potrebbero non avere questa inibizione. In realtà ho lavorato con un manager che spesso diceva: "Ha scritto [inserire la funzionalità backbone del dipartimento qui]? Pensavo avesse appena fatto HTML?"

Ottima domanda!

0
GlenPeterson