Come posso spiegare ai miei genitori che studio linguaggi di programmazione?


64

Attualmente sto finendo il mio Master in informatica. Sono interessato ai linguaggi di programmazione, in particolare ai sistemi di tipi. Mi sono interessato alla ricerca in questo campo e il prossimo semestre inizierò un dottorato di ricerca sull'argomento.

Ora ecco la vera domanda: come posso spiegare cosa (voglio) fare alle persone che non hanno alcuna conoscenza precedente in informatica o campi correlati?

Il titolo deriva dal fatto che non sono nemmeno in grado di spiegare cosa faccio ai miei genitori, amici e così via. Sì, posso dire "il punto è aiutare gli sviluppatori di software a scrivere software migliore" , ma non credo sia davvero utile: non sono a conoscenza della "programmazione", non hanno idea di cosa significhi. Mi sento come se stessi dicendo che sono un meccanico per qualcuno del Medioevo: semplicemente non sanno di cosa sto parlando, e tanto meno come migliorarlo.

Qualcuno ha buone analogie con il mondo reale? Esempi illuminanti che causano momenti "a-ha"? Dovrei effettivamente mostrare un frammento di codice breve e semplice a 60 anni senza esperienza informatica (né accademica)? In tal caso, quale lingua dovrei usare? Qualcuno qui ha affrontato problemi simili?


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
DW

3
Questa domanda ha ottenuto un downvote e una o più bandiere chiuse, se capisco correttamente il pannello. Per favore, considera di lasciare un commento in modo da poterlo migliorare. Anche se sono in agguato qui da un po ', questa è la prima volta che partecipo attivamente al sito e forse non ho familiarità con alcune politiche.
effeffe


1
Semplicemente non riesco a capire perché questa domanda sia più votata rispetto a una domanda relativa a un problema specifico, che è più utile. Questa domanda è ridicola ed è stata ridicolmente votata. Incredibile!
nbro,

2
@nbro Non capisco cosa sia ridicolo riguardo alla domanda e non sono sicuro di come tu abbia deciso che una domanda specifica sia "più utile" di un'altra.
effeffe

Risposte:


59

Se hai qualche minuto, la maggior parte delle persone sa come aggiungere e moltiplicare due numeri di tre cifre su carta. Chiedete loro di farlo, (o di ammettere che potevano, se dovessero) e chiedere loro di riconoscere che fanno questo compito metodicamente: se questo numero è maggiore di 9, quindi aggiungere un riporto, e così via. Questa descrizione che hanno appena dato su cosa fare è un esempio di algoritmo .

Questo è il modo in cui insegno alle persone l'algoritmo delle parole e, nella mia esperienza, questo è stato l'esempio migliore. Quindi puoi spiegare che si può immaginare che ci siano compiti più complessi che i computer devono svolgere e che quindi è necessario un linguaggio inequivocabile per alimentare questi algoritmi. Quindi c'è stata una proliferazione di linguaggi di programmazione perché le persone esprimono i loro pensieri in modo diverso e stai cercando modi per progettare questi linguaggi in modo che sia più difficile commettere errori.

Questa è una situazione molto riconoscibile. La maggior parte delle persone non ha idea che i computer che usano eseguano programmi o che quei programmi siano codici sorgente scritti da esseri umani, o che un computer possa "leggere" il codice sorgente o che il calcolo che associano all'aritmetica sia l'unica cosa che i computer do (e spostamento dei dati, e networking, forse).

La mia ricerca riguarda l'informatica quantistica, quindi quando le persone mi chiedono cosa faccio, non cerco di spiegarlo. Invece, provo a spiegare che esiste la fisica quantistica (di solito hanno sentito parlare del gatto di Schrödinger e cose che si trovano in due posti contemporaneamente), e che a causa di questa strana fisica, potrebbe essere possibile un calcolo più veloce.

Il mio obiettivo è lasciare che la persona si senta un po 'più informata di quanto non sia entrata, sentendosi eccitata per un mondo che non sapeva esistesse, ma con il quale ora le hai familiarizzate. Trovo che sia molto più prezioso che spiegare le mie particolari domande di ricerca.


27
L'ordinamento di un mazzo di carte è anche un modo semplice per introdurre la nozione di algoritmi.
Morwenn,

2
@Morwenn È vero! Ci sono un sacco di algoritmi che eseguiamo nella vita quotidiana! Trattare le carte è algoritmico, il traffico ha molti aspetti algoritmici, sebbene siano basati su eventi e non imperativi, cucinare è algoritmico quando lo fai su un pilota automatico. Il motivo per cui mi piace l'aggiunta è che tutti hanno imparato lo stesso algoritmo nella scuola elementare, mentre per ordinare un elenco di numeri, le strategie delle persone variano e non sono metodiche: cercano di trovare schemi di numeri vicini e adiacenti e non tutti conoscono il ordinare un mazzo di carte dovrebbe avere comunque (sono cuori prima di picche?)
Lieuwe Vinkhuijzen

Personalmente quando mi viene chiesto del calcolo quantistico, tendo ad evitare completamente la fisica, ma cerco di dare un'idea generale (che un computer quantistico non funziona meglio o più velocemente, ma può semplicemente fare calcoli in un modo che non rientra nell'ambito dei normali computer). Se chiedono in che modo tendono ad essere felici con una visione semplificata, fondamentalmente quella dell'elaborazione SIMD (con risorse lineari sufficienti per accedere alle dimensioni esponenziali dei dati di input paralleli), che in fondo sono la maggior parte degli algoritmi.
The Vee,

Puoi andare oltre le sole carte; Di recente mi sono ritrovato a utilizzare una variante di Quicksort per ordinare una pila di fogli che dovevo organizzare senza nemmeno pensarci perché ce n'erano troppi per un ordinamento di inserzione di base.
JAB

@JAB È fantastico! Ma probabilmente conosci già Quicksort nella parte posteriore della tua mente. Il vantaggio di spiegare l'addizione rispetto all'ordinamento è che chiunque ha lo stesso algoritmo di addizione, ma nessun profano ha un algoritmo di ordinamento metodico. D'altra parte, questo potrebbe essere un vantaggio! Spieghi diversi algoritmi. Questa è la strada che prendo quando parlo con qualcuno di mentalità matematica al di fuori di cs, e attraversa il concetto di algoritmi diversi per lo stesso compito con diversi limiti di tempo e perché i limiti inferiori sono difficili.
Lieuwe Vinkhuijzen,

18

Vorrei provare qualcosa del genere:

I programmatori possono dire ai computer cosa fare. Per farlo, devono usare un linguaggio di programmazione. Questo è un linguaggio compreso sia dai computer che dagli umani. Ad esempio, se modifichi un documento di Word e premi un tasto, il computer mostrerà la lettera che hai premuto. Questo perché un programmatore ha scritto un programma dicendo: Se l'utente preme "A", inserisci una "A" nel documento. Se l'utente preme "B", inserire una "B" nel documento e così via. Il computer segue semplicemente le regole del programma che il programmatore ha scritto.

Ora a volte i programmatori scrivono per errore una stupida regola. Il computer proverà comunque a seguire la stupida regola, ma se segui una regola sbagliata, accadrà qualcosa di brutto. Ad esempio, a volte, quando si modifica un documento di Word, improvvisamente tutto si blocca e il computer non reagisce più. Ciò può essere dovuto al fatto che alcuni programmatori di Microsoft hanno scritto un programma tutt'altro che perfetto.

Il mio lavoro riguarda l'invenzione di metodi per controllare i programmi per tali e altri errori, usando altri programmi e alcune matematiche. L'idea di base è capire come prevedere cosa accadrà quando viene eseguito un programma, senza eseguirlo effettivamente.

Naturalmente, dal momento che si tratta di ricerca, lavoro solo su un piccolo aspetto di questo, non tutto in una volta, ma questa è la visione d'insieme di ciò che stiamo cercando di ottenere.

Sto usando una spiegazione in uno stile simile per il mio campo (linguaggi specifici del dominio) e posso riferire che spesso mi ha aiutato a superare il "oh sei un informatico che non potrei mai fare che mi lasci andare e smettere di parlare a te "problema. La chiave sembra essere quella di ottenere le prime due frasi fino a quando non si raggiunge un esempio a cui l'altra persona può fare riferimento, come i documenti di Word in questo caso. Punti bonus per il caso speciale dell'esempio per l'altra persona, come Excel per ragionieri o Powerpoint per boss o giochi per computer per giocatori o browser Web o altro.

Nota che non devi rimanere a questo livello superficiale. Se tu (e l'altra persona!) Vuoi, puoi approfondire i dettagli di quello che stai facendo esattamente da lì. Ad esempio, "Nel mio attuale progetto, sto cercando di dimostrare matematicamente che ciò che ho inventato l'anno scorso funziona davvero. Ciò significa che devo definire con molta attenzione cosa significa realmente un programma, e cosa significa la mia invenzione che prevede un programma, e poi Posso dimostrare che la previsione è effettivamente giusta ".


12

Molte persone capiscono le ricette. Se segui le istruzioni, otterrai un pasto decente. A volte, tuttavia, le istruzioni possono essere difficili da seguire. Ad esempio, quando crei perogie, troverai istruzioni come questa, prese parola per parola dal polacco Perogies della nonna :

Per cucinare i perogie: porta a ebollizione una grande pentola di acqua leggermente salata. Rilascia i perogies in uno alla volta. Hanno finito quando galleggiano verso l'alto. Non far bollire troppo a lungo, o saranno molliccie! Rimuovere con un cucchiaio forato.

Yikes. Rivediamo il gentile consiglio della nonna per noi. Rilasciali uno alla volta ... quindi hanno tutti periodi di tempo diversi nel piatto. Fatto. Hanno finito quando galleggiano verso l'alto . Bene, quanti sono "loro"? Prendo ognuno mentre viene fuori? Aspetto che l'80% fluttui verso l'alto e poi li ottenga tutti? Questo è pazzo impreciso. Non far bollire troppo a lungo, o saranno molliccie! Come faccio a misurare quando stanno per diventare mollicci in modo che non durino troppo? Se cinque pop-up in cima allo stesso tempo, avrò tempo per ottenerli tutti?

E credetemi, ho rovinato un sacco di perogie ai miei tempi. Questo è un grave problema che un cuoco perogie ha già incontrato. Ma nonostante questi problemi che emergono anche dall'analisi più elementare, le persone sono ancora in grado di creare perogie usando questo stesso identico metodo. Ma c'è qualcosa che possiamo fare per ottenere più lotti di perogeni di successo e meno lotti di perogi falliscono?

Non sarebbe grandioso se qualcuno si specializzasse nel rendere le ricette più affidabili? Qualcuno che ha detto "possiamo pipeline i perogeni in modo che saltino fuori e fuori dall'acqua!" oppure "possiamo aggiungere un colorante speciale al perogie, naturalmente sicuro da mangiare, che dia loro sfumature diverse e sappiamo prima di ottenere quelli più scuri, poiché sono maggiormente a rischio di diventare mollicci". Vogliamo un esperto in grado di prendere questa ricetta e risolvere i potenziali problemi con essa. La vita dei cuccioli di perogie in tutto il mondo sarà più facile e un numero minore di grumi inzuppati di patate e pasta saranno nutriti con un cane.

I programmatori seguono sempre le ricette. Ma a volte l'attrezzatura che usano, le istruzioni che usano e le interpretazioni che usano non si uniscono per preparare il sontuoso pasto che volevano. Per fortuna, ci sono persone che dedicano la loro carriera a rendere la vita di un programmatore più produttiva. Nel tuo caso, ti sei specializzato in uno degli strumenti utilizzati da un programmatore, la lingua, per cercare di migliorarli.


7

Ecco come vorrei (provare) a spiegare questo a mia mamma:

I linguaggi di programmazione sono utilizzati dalle persone per fornire istruzioni a un computer. Tutto ciò che fa un computer è fatto attraverso un codice di computer scritto in un linguaggio di programmazione da un programmatore.

Quindi, se, ad esempio, vogliamo che il canale TV cambi quando premiamo un pulsante, per fare ciò dovremmo scrivere del codice in un linguaggio di programmazione. Lo stesso vale per tutto ciò che accade con un laptop, uno smartphone e qualsiasi altra cosa la cui operazione coinvolge un computer.

Potrebbe sembrare che ci sia un unico linguaggio di programmazione che i programmatori potrebbero usare per scrivere tutti i programmi. Ma questo non è il caso. Esistono diversi linguaggi di programmazione per tutti i diversi tipi di applicazioni.

Alcuni vengono utilizzati per creare siti Web, altri per creare applicazioni laptop (come Microsoft Word).

Uno dei motivi per cui esistono molti linguaggi di programmazione diversi è perché alcuni sono più adatti ad alcuni compiti rispetto ad altri. Un altro motivo è che alcune lingue sono progettate per essere utilizzate con computer diversi. Quindi non puoi sempre prendere il codice scritto per uno smartphone ed eseguirlo su un laptop. E mentre alcuni programmatori possono programmare in molte lingue e molti sono in grado o imparano rapidamente nuove lingue, qualsiasi programmatore conoscerà alcune lingue meglio di altre e alcune no.

Quindi i linguaggi di programmazione sono una delle tecnologie chiave che fanno funzionare i computer. Linguaggi di programmazione ben progettati possono aumentare enormemente la produttività dei programmatori. Possono anche migliorare la sicurezza e ridurre errori di programmazione, bug e difetti.

In sostanza, questo è ciò che studio: in che modo diverse parti dei linguaggi di programmazione influiscono sulla produttività del programmatore? Quali parti di una determinata lingua lo rendono migliore per la scrittura di codice per un sito Web? Perché alcune lingue sono più popolari di altre?

Mentre può sembrare che queste domande siano esoteriche e lontane dalla vita quotidiana della persona media, è vero il contrario. Lo studio dei linguaggi di programmazione è vitale per qualsiasi prodotto o servizio che utilizza un computer. E oggi questo significa quasi tutto;)


7

La tua scommessa migliore potrebbe essere quella di formare analogie con le lingue umane.

I linguaggi di programmazione vengono utilizzati per fornire istruzioni ai computer. I linguaggi umani sono usati per comunicare idee ad altre persone e per aiutare a formare i nostri pensieri. L' ipotesi Sapir-Whorf afferma che il linguaggio che usi influenza il tuo pensiero. (Il grado in cui l'ipotesi Sapir-Whorf è vera è dibattuto, ma possiamo solo accettarlo per discutere dei linguaggi di programmazione. Altrimenti, potresti anche rinunciare al tuo dottorato. 😜)

Esiste una grande varietà di lingue umane, alcune con caratteristiche che consideriamo esotiche. Per esempio:

  • Alcune lingue richiedono che tu indichi l' evidenza con ogni affermazione: se l'affermazione è dovuta alla tua esperienza, alla tua inferenza, al sentito dire, alla speculazione, ecc.
  • Alcune lingue formano parole enormi per agglutinazione; ogni parola può essere altamente modificata per codificare molte informazioni sul suo ruolo grammaticale. Altre lingue non modificano quasi mai le parole e si basano sull'ordine delle parole o sulle particelle per esprimere tali informazioni.
  • Le lingue differiscono nelle dimensioni del vocabolario . Alcune lingue hanno parole che possono essere tradotte solo con una circonlocuzione (es. 엄친아 ). Alcune lingue hanno espressioni brillanti che sono così buone che altre lingue le prendono in prestito (es. Schadenfreude).
  • Alcune lingue non hanno il concetto di sinistra / destra; devi esprimere tutto in termini di nord / sud / est / ovest.
  • Alcune lingue non hanno numeri. Le lingue variano anche nel numero di nomi di colori comuni .
  • Le lingue variano nella loro fonotattica. Ad esempio, il tasso di sillabe varia, con il giapponese che tende a usare molte sillabe semplici, mentre il cinese è più lento, ma codifica le informazioni in toni.
  • Le lingue variano nella densità delle informazioni . Se guardi una traduzione cinese-inglese-francese, vedrai che la versione cinese è molto compatta su carta e il francese occuperà più spazio.
  • Alcune lingue, come l'inglese, sono promiscue: chiunque può liberamente prendere in prestito una parola da un'altra lingua e inglese. Altre lingue, come il francese, hanno un organismo di standardizzazione che resiste al cambiamento. L'islandese, ad esempio, è di natura fortemente conservatrice.

Esiste una lingua migliore , oggettivamente parlando? La risposta potrebbe dipendere da cosa stai cercando di fare.

  • Se stai cercando di comunicare segretamente alla radio, Navajo sarebbe una buona scommessa. (Menziona la tua lingua preferita di "sola scrittura".)
  • Se stai cercando di scrivere un avvertimento per le generazioni future e l'iscrizione deve essere comprensibile tra qualche migliaio di anni, potresti voler usare il cinese (a causa del numero assoluto di parlanti e della stabilità del suo sistema di scrittura) o forse Inglese (che è cambiato radicalmente nell'ultimo millennio, ma è molto conosciuto). (C e JavaScript probabilmente vivranno "per sempre".)
  • Il cinese, con molti omofoni, è ottimo per punire . (Poesia Perl)
  • Forse la neutralità è importante, nel qual caso potresti scegliere l'esperanto. (Java è progettato per essere portatile; C lo è di meno.)
  • Forse hai bisogno di esprimere un pensiero con assoluta precisione e nessun linguaggio naturale sarà sufficiente. Devi ricorrere a Ithkuil !
  • Può essere molto difficile tradurre tra alcune coppie linguistiche (ad esempio arabo-inglese ) a causa delle grandi differenze culturali e delle connotazioni culturali con determinate parole. Allo stesso modo, alcune idee non sono facilmente espresse in alcuni linguaggi informatici perché il concetto non esiste (es. Ricorsività della coda).

Alla fine, tutto su un computer viene tradotto in linguaggio macchina, ma scegliere la lingua giusta per il lavoro può influenzare notevolmente la produttività, l'affidabilità, le prestazioni e l'agilità del software. Scegliamo le lingue della camicia di forza come Ada o Java per progetti "seri" e Ruby o Perl per la massima frusta . Per l'interrogazione di un database, SQL è la solita lingua; scrivere il tuo codice C sarebbe idiota.

Sulla base di queste analogie, sono sicuro che puoi spiegare idee come programmazione funzionale, sicurezza dei tipi, inferenza dei tipi, ecc. Per alcune ore.


1
Una difficoltà di questo è che alcune persone non hanno mai riflettuto sul proprio linguaggio naturale. Quindi gli esempi di linguaggio possono essere difficili da comprendere per alcune persone, come l'idea di un linguaggio di programmazione. Se sai che la persona è (almeno) bilingue, le prospettive sono probabilmente migliori ....
TextGeek,

@TextGeek Anche in inglese ci sono dialetti. Le persone discutono di regole linguistiche come i doppi negativi e la fine delle frasi con una preposizione. La lingua si evolve continuamente, a volte in modi controversi. La popolarità dei messaggi di testo ha portato a nuove abbreviazioni. In inglese americano, puoi trasformare qualsiasi nome in uno scandalo aggiungendo un suffisso "-gate". Non penso che tu debba essere bilingue per apprezzare l'innovazione e la diversità linguistica.
200_successo

3
  • i linguaggi informatici si riferiscono in qualche modo all'incirca ai linguaggi umani. usano parole standard / comuni / condivise. considera che ci sono migliaia di lingue umane, alcune defunte, altre attive, e il loro vocabolario e il loro uso si evolvono continuamente nel tempo. alcune persone creano nuove parole utili per esprimere concetti che prima non erano espressibili. un altro aspetto sovrapposto del linguaggio informatico e del linguaggio umano è la grammatica . alcune lingue, ad esempio l'inglese, hanno una grammatica molto complessa. considera tutti i diversi tempi e le complesse regole che li governano. altre lingue non hanno gli stessi tempi . un'altra correlazione è con parti del discorsocategorie, ad esempio sostantivo, verbo, avverbio, aggettivo ecc., funzionano in qualche modo come i tipi nei linguaggi del computer. immagina di creare nuove lingue con diverse parti delle categorie del parlato che non sono state precedentemente considerate, o con nuove combinazioni di parti del discorso che provengono da lingue diverse, ecc .; quindi si noti che la linguistica ha una connessione con l'informatica, ad esempio esp nella teoria della lingua chomskiana.

  • software e hardware sono spesso correlati a motori e macchine e hanno persino il nome di questo. esiste una vecchia analogia software secondo cui provare a modificare un complesso sistema di produzione 24/7 è come cambiare i motori di un aereo mentre è in volo . si noti inoltre che i motori a reazione sono estremamente complessi e comportano specifiche precise e massicce di parti intercambiabilie qui c'è qualche analogia con i linguaggi dei computer che controllano l'hardware. immaginare tutta la complessità dei documenti che descrivono esattamente come costruire motori a reazione: tutte le parti, come sono costruite, come si incastrano, come sono assemblate ecc; sono creati / compilati dagli ingegneri usando un formato / struttura / regole convenzionali precisi; il software è in qualche modo analogo a questo.

  • Per quanto riguarda le macchine, chiunque non abbia un'istruzione scientifica o matematica o persino un bambino può comprendere il concetto di base e molti aspetti di una macchina di Turing! una creazione meravigliosa. si sospetta che Turing sia stato ispirato da macchine da scrivere e / o macchine per il teletipo. si potrebbe descrivere la tabella di stato e mostrare loro una tabella di stato di esempio che calcola la moltiplicazione e qualcuno potrebbe guardare un'animazione su YouTube di una macchina di Turing calcolare un calcolo di base come una moltiplicazione. dire loro che la tabella di stato può calcolare o decidere letteralmente una lingua e che gli input sono letteralmente chiamati parole . infatti, le macchine di Turing accettano parole in lingueecc. quindi dire loro che ci sono due tabelle di stati che calcolano entrambe la moltiplicazione, ma una è molto più veloce o più efficiente dell'altra e che la vostra ricerca implica la ricerca di concetti di tabella di stati migliori. capire come costruire tabelle di stato in modo efficace coinvolge linguaggi di programmazione che riassumono il contenuto di grandi tabelle di stato! un compilatore converte il codice scritto in un linguaggio di programmazione in una grande tabella di stato.

  • gli algoritmi di ordinamento sono un'ottima metafora di base nell'informatica. si può guardare i diversi elenchi di istruzioni aka algoritmo per ogni tipo. si può imparare cos'è una specie di bolla rispetto a una specie di inserimento, si può usare un mazzo di carte. ora concentrarsi sui diversi set di istruzioni e considerare che devono essere scritti in un linguaggio molto preciso, preciso come le dichiarazioni matematiche, che ha una sintassi rigorosa ecc. e ha elementi comuni in comune / strutture: logica condizionale, loop, variabili ecc. e spiega che l'arte di questa specifica precisa riguarda i linguaggi informaticie che alcuni linguaggi diversi possono produrre gli stessi algoritmi, ma che ci sono alcune sottili variazioni stilistiche in questi linguaggi che sono studiati a fondo, ecc.


1
Perché votare questo? Penso che ci siano molte intuizioni. Uno potrebbe non essere d'accordo su tutti i punti, ma ci sono molte possibilità qui. +1
effeffe

3

Dici semplicemente "Sto aiutando i ragazzi che insegnano al computer a lavorare"

L'idea è che i programmatori insegnano ai computer a fare cose usando i programmi e tu li stai aiutando. Penso che funzionerà supponendo che sappiano già un po 'di computer.


"Penso che funzionerà supponendo che conoscano già un po 'di computer" questo è il punto: se leggi attentamente la mia risposta, vedrai che il problema principale è spiegare cosa faccio a coloro che non hanno idea di come il computer funzioni effettivamente .
effeffe

@effeffe: ma sono consapevoli che esistono i computer? E probabilmente hanno qualche idea che ci siano cose chiamate "programmi", "applicazioni" o "app", anche se non hanno mai usato consapevolmente un computer da soli. Quindi, per semplicità, la programmazione sta (tra le altre cose) creando un'app scrivendo le istruzioni che il computer può seguire. Naturalmente occorrerebbero molto tempo e istruzioni per apprezzare ogni dettaglio della programmazione o di come può essere migliorato, ma se sanno che computer e programmi migliorano nel tempo, almeno "sanno" dei computer.
Steve Jessop,

3

Se non si desidera utilizzare i confronti, sebbene ritenga che l '"algoritmo" adottato da Lieuwe sia molto utile per trasmettere l'idea, si potrebbe dire che si desidera ridurre i malintesi tra uomo e computer. Dopotutto, hai a che fare con le lingue, ed è qualcosa di molto basilare per gli umani, immagino. Quindi perché non fingere che il computer sia solo un'altra mente con cui vuoi parlare?

Gli umani hanno creato i computer, quindi sappiamo come funziona la mente del computer. Ma il computer di solito non "sa" come funzionano le nostre menti. (O quale fosse la nostra reale intenzione quando scriviamo un bug intricato e finemente elaborato che vive felicemente nei rovi del nostro codice per molti cicli;)) Pertanto, spetta a noi affinare il linguaggio che usiamo per comunicare con loro, e ridurre le possibilità di incomprensioni. Ed è quello che fai. Analogie come il controllo ortografico o la grammatica sono, ovviamente, molto apprezzate in questo contesto.


3

Ecco due analogie che potresti trovare utili:

  • Il mio lavoro è un po 'come esplorare nuovi approcci alla notazione musicale. ( esempio ) Sebbene i sistemi di notazione predominanti siano piuttosto sofisticati, è utile esplorare alternative che riducano il tempo / sforzo / errori per il compositore, per l'esecutore o consentano cose che sono goffe o che non è possibile esprimere nel sistema predominante, oppure anche solo promuovere diversi tipi di pensiero e quindi portare a nuove composizioni. (Questo rende facile capire che una delle sfide è convincere le persone ad adottare le nuove cose.)

  • Sto contribuendo a progettare strumenti migliori per le persone nel mio settore. Proprio come le persone nel settore manifatturiero sono aiutate da innovazioni come trapani avvitatori a batteria, laser cutter e stampanti 3D (nessuna delle quali esisteva 60 anni fa), le persone nel settore dello sviluppo software sono aiutate da più potenti, più precisi, più robusti o linguaggi di programmazione più facili da usare e loro caratteristiche.


2

Bene, molto probabilmente, hai qualche motivo per studiare le lingue: usa quella ragione. Per esempio:

Sto cercando di rendere i computer e le loro applicazioni più economici, più facili da usare e più sicuri.

Se è qualcosa che attira la loro attenzione, sentiti libero di andare un po 'più in profondità, ma non dimenticare la distanza inferenziale - la maggior parte delle persone ha enormi problemi a spiegare qualcosa che è troppo lontano dall'esperienza e dalle conoscenze esistenti dello studente.

Le lingue sono in fondo alla scala del computer. Le persone che stai cercando di spiegare probabilmente non sanno cos'è l' algoritmo , tanto meno che ci sono diversi modi di rappresentare detto algoritmo che sono più o meno utili. Puoi spiegare qualsiasi cosa se vai abbastanza delicatamente, ma preparati a passare attraverso molti livelli se vuoi spiegare qualcosa di "profondo" come "linguaggio di programmazione RnD". Aiuta se le persone che stai spiegando gestiscono già bene la matematica, ma è raro quanto la conoscenza del computer :)

Vacci piano con le analogie. Suonano come stanno aiutando, ma dalla mia esperienza, di solito aumentare la confusione, anche se si pensa che siano di grande aiuto. I linguaggi di programmazione sono un po 'come quelli che parlano gli avvocati ... ma non è molto utile per le persone che non capiscono già tanto la programmazione quanto l'avvocato. Se hai davvero bisogno di ulteriore aiuto, gli esempi funzionano abbastanza bene, ma devi adattarli alla persona a cui stai spiegando (e cosa stai cercando esattamente)

Sai come non puoi dividere per zero? Sto cercando di assicurarmi che i computer non provino nemmeno a dividere per zero, quindi non si bloccano quando qualcuno commette un errore.


▲ per aver suggerito un approccio graduale e delicato.
PJTraill,

1

Trovo che le migliori analogie siano personalizzate per la persona con cui stai parlando. Sono un pittore? Discuti come quello che stai facendo è l'equivalente dell'esplorazione della teoria di come realizzare pennelli migliori, solo questo campo ha solo 60 anni invece di 600! Cavalieri? Confrontalo con lo sviluppo di scarpe specifiche per cavalli nel corso degli anni.

Se vogliono davvero capire meglio, il mio modo preferito di spiegarlo è parlare di compilare i moduli fiscali e le istruzioni su ogni riga. Trovo che la maggior parte delle persone con più di 20 anni abbia una certa esperienza con IRS Form 1040, e quelle caselle che compili corrispondono abbastanza bene a parlare dell'assegnazione di variabili. Poi segnalo che il software fa l'equivalente di circa 2 miliardi di questi al minuto (un numero inventato, ma ottiene il punto). Se studi linguaggi informatici, è facile per le persone capire perché le istruzioni migliori contano davvero =)

Se sembrano ancora interessati, si tratta del punto in cui inizio a cercare di spiegare il controllo del flusso. Di solito, quando finisco di discutere del controllo del flusso sul modulo 1040, iniziano a sentirsi eccitati e iniziano a chiedere se ho ancora venduto alcune delle mie idee al governo!

Parlo spesso di sistemi embedded, quindi a volte unirò l'analogia del Form 1040 con un robot che cucina una pagnotta (o 500). Di solito funziona bene, anche se per qualche motivo passare da moduli fiscali IRS a fare qualcosa che lascia un buon gusto in bocca è un tratto davvero difficile per alcune persone.


1

I tuoi genitori hanno una specie di computer. Probabilmente non uno, ma molti. Possono avere un computer desktop o un laptop, un telefono o un iPad. In caso contrario, hanno una lavatrice o una registrazione video o un lettore DVD o qualcosa con un computer all'interno.

Se non lo fanno, dici: "Mi dispiace, ma sei riuscito ad avere una vita completamente senza computer. Quindi non posso spiegarti cosa sto facendo. Ma il mondo sta cambiando. Devi solo fidarti di me che So cosa sto facendo. "

Se hanno qualsiasi tipo di computer, dici: "Questo è un computer, e non funziona solo per magia. Funziona perché un uomo o una donna intelligente ha scritto un programma che dice al tuo computer come lavorare. E il lavoro di questi uomini e donne intelligenti sono davvero difficili, e quello che sto facendo è aiutarli a semplificare il lavoro ".


-1

Qualche tempo fa ho deciso che una buona analogia per la programmazione che potesse essere facilmente compresa per le persone con poca o nessuna esperienza al computer, sarebbe stata scrivere ricette per maglieria .

Una buona ricetta per maglieria contiene diverse taglie nello stesso elenco di istruzioni, che ti danno loop e istruzioni if. È illeggibile per quelli che non lavorano a maglia e se contiene errori si finisce con disegni disallineati o una manica extra. Spetta quindi a te, come autore della ricetta, scoprire dove la ricetta era sbagliata in base ai maglioni sbagliati e ripararla.

Puoi quindi usare l'esempio di "Sto osservando come le ricette sono diverse per lavorare a maglia, lavorare all'uncinetto, cucire insieme e simili" e imparare a X (dove devi trovare un'analogia per ciò che fai realmente ).


Il richiedente non sta studiando la programmazione. Stanno studiando la progettazione di linguaggi di programmazione.
David Richerby,

@DavidRicherby Questo è il motivo per cui ho suggerito di usare l'esempio di OP guardando come le ricette cercano diversi tipi di lavoro pratico. Apparentemente anche questi sono molto diversi.
Thorbjørn Ravn Andersen,

-1

È magico!

Quando le persone che non hanno alcuna preparazione tecnica chiedono cosa significhi scrivere software / programmi / fare ingegneria del software, dico loro che cos'è veramente: la magia. I maghi incantano in un linguaggio esoterico per svolgere determinati compiti, agitano le loro bacchette e succede qualcosa di magico. Incantare alcuni incantesimi in un linguaggio esoterico, muovo il mouse e succede qualcosa di magico (per quanto li riguarda).

Se non sono convinti, ho chiesto loro di accendere il loro smartphone e di dirmi come funziona davvero qualcosa. Di solito dicono: "Non lo so, lo fa e basta. Spingo i pulsanti e succede qualcosa." Poi dico loro: "Sì, esattamente, ma so cosa sta realmente succedendo, ed è praticamente lo stesso di Harry Potter che agita la sua bacchetta e dice:" Hocus pocus "" A tutti gli effetti, al laico, io penso che questa sia una spiegazione perfettamente legittima.

Quasi tutti sanno chi è Harry Potter, cosa fa e cosa lo rende speciale (almeno che è un mago e può fare cose potenti con la magia). Puoi semplicemente spiegare che a volte i maghi hanno bisogno di scrivere i loro incantesimi in una nuova lingua per rendere la loro magia ancora più potente, il che non è poi così lontano dalla verità. Puoi semplicemente dire loro che stai studiando il processo di creazione di libri degli incantesimi più potenti per aiutare una generazione di maghi ancora più potenti che possono creare magie ancora maggiori sui loro dispositivi di consumo preferiti. Tutti lo apprezzano.

Fallimento epico

Se fallisce, torno all'esempio della ricetta, perché la non uniformità delle soluzioni insegna almeno alle persone che esiste più di un modo per scuoiare un gatto (o cuocere una torta), e questo fa parte di ciò che rende la programmazione così difficile. Aiuta anche a mettere la persona nella posizione di essere la CPU e talvolta seguendo le istruzioni che potrebbero non capire (la maggior parte delle persone probabilmente non conosce la differenza tra bicarbonato di sodio e lievito in polvere, e perché una ricetta avrebbe l'una o l'altra).

Vicoli ciechi

Non mi piace usare la matematica come esempio, perché per fare la matematica devi capire a cosa servono i passaggi. Non puoi fare molta matematica seguendo le istruzioni alla cieca (beh, puoi, ma non è così che gli umani lo imparano, di solito). Non mi piace l'ordinamento come esempio perché è troppo tecnico per essere apprezzato dai non addetti ai lavori. Se sto parlando con qualcuno che può apprezzare l'esempio di ordinamento, allora probabilmente hanno già qualche idea di cosa parla la programmazione e probabilmente l'hanno provato da soli.


1
Non vedo cosa abbia a che fare con la domanda. In particolare, la domanda è: come spiegare la teoria dei tipi ai laici, e la teoria dei tipi è matematica.
David Richerby,

Forse purtroppo, forse no, ma la programmazione in generale è un libro chiuso al 99 +% della popolazione mondiale. Nel corso degli anni ho trascorso un bel po 'di tempo cercando di convincere i non programmatori a capire la programmazione, senza successo. Spiegare le complessità e le prelibatezze di vari sistemi di tipo è simile a spiegare la fisica delle particelle subatomiche a quelle stesse persone: i loro occhi si veleranno e probabilmente saranno educati ma non lo capiranno. E va bene così: NON DEVONO capirlo, e con ogni probabilità non CURA di non capirlo. Basta che lo facciamo. :-)
Bob Jarvis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.