Prima di tutto: sono un matematico, un professionista (in quanto vengo pagato per fare matematica). Sono non un programmatore. Faccio un po 'di programmazione, ma decisamente della varietà Cargo Cult (vedi primo commento a https://tex.stackexchange.com/q/451/86 e la mia risposta) e niente del genere che normalmente mi porta a questo sito (in effetti, mi sono registrato qui per pubblicare questa risposta dopo aver visto un link nella chat room di TeX).
Il riassunto della mia risposta è: la matematica è programmazione .
Recentemente ho avuto modo di insegnare un corso di matematica a un gruppo di studenti non matematici. Erano la sezione di programmazione. Ho pensato che fosse fantastico! Alla fine, sarei stato in grado di insegnare la matematica a persone che già comprendevano le idee di base e che avevano già un kit di strumenti rudimentale per fare matematica. Sono stato incredibilmente deluso quando ho chiesto quanti di loro avevano effettivamente scritto un programma e ottenuto una risposta tra 0 e 1.
Prima di continuare, dovrei chiarire alcune cose. Ci sono aree della matematica che si occupano direttamente della programmazione e hanno a che fare con la valutazione di algoritmi e la classificazione di linguaggi e simili. Non sto parlando di quelli. C'è anche un programma che sta cercando di tradurre tutta la matematica in un linguaggio formale che può essere valutato da un computer. Questo è un po 'più vicino a ciò di cui sto parlando, ma anche così focalizzarmi su ciò mancherebbe la parte principale di ciò che sto cercando di dire. La matematica che faccio e la programmazione che faccio sono quasi completamente indipendenti dall'argomento. La connessione tra loro è a un livello diverso.
Da dove vorrei iniziare è il commento sulla domanda principale:
Se ciò sta facendo matematica, allora tutte le attività umane sono una forma di matematica. In tal caso, la parola matematica non ha un significato utile, poiché non può essere utilizzata per distinguere un'attività da un'altra.
Sì, questo sta facendo matematica. Ma "matematica" è ancora una parola utile perché, come dice la canzone, "Non è quello che fai, è il modo in cui lo fai". Direi che sto facendo matematica quando mi sto avvicinando a qualcosa in modo matematico . A volte, questa è matematica "hard core": formulazione di definizioni, dimostrazione di teoremi. A volte no. A volte, sta scrivendo piccoli programmi sciocchi in modo che i miei figli possano imparare le loro parole ortografiche.
Questo è ciò che la matematica mi aiuta quando programma:
Astrazione Questa è probabilmente la più importante abilità trasferibile dalla matematica. Con questo intendo la capacità di eliminare tutte le cose non necessarie e concentrarsi sulle proprietà importanti.
Prospettiva Se potessi scegliere solo una cosa che tutti i miei studenti dovrebbero imparare, sarebbe questa: la capacità di cambiare il proprio punto di vista per adattarlo al problema. Lo trattiamo comunemente in algebra lineare con formule di cambio di base (che portano a matrici orrende e complicazioni orrende), ma è molto più applicabile di così. In sostanza, l'idea è che solo perché qualcosa ti è stato presentato in un modo, non deve essere il modo in cui ci lavori. Questo separa la visione della cosa stessa dal modo in cui è stata presentata. Questo può essere estremamente pratico: si tratta di fare qualcosa di utile o efficiente. Se ho un elenco di vettori ed è più efficiente memorizzarli come un elenco di coordinate xe un elenco di coordinate y, così sia .
Forma contro funzione Partendo da quanto sopra; se una cosa può essere presentata in molti modi diversi, non è più giusto dire che una presentazione particolare è la cosa. Per citare nuovamente quella canzone: "Non è quello che sei , è quello che fai " che conta.
Potrei continuare, ma quelli sono quelli che mi vengono in mente.
Ora, probabilmente ci sono molte reazioni (negative) a ciò che ho scritto finora. Uno sarà "Non sono matematica, è solo un buon senso". (o cattivo senso) a cui rimando alla mia osservazione sopra concordando con il sentimento che "tutte le attività umane sono una forma di matematica". Un altro sarà "Questo non è il tipo di matematica che si intende nella domanda". Questo è quasi certamente vero e qui in realtà ho molta più simpatia per la persona che ha detto "Almeno non ho toccato la matematica per 10 anni". Ha torto, ovviamente, hanno fatto matematica per 10 anni perché ogni volta che scrivevano un programma stavano facendo matematica . Semplicemente non se ne sono accorti.
In realtà uso alcuni "veri calcoli" nei miei programmi. Di recente ho codificato un divertente esploratore di forme 3D che prevedeva l'uso di alcuni calcoli matematici per capire le proiezioni e le altre trasformazioni che dovevo applicare ai miei dati. Ero un po 'divertito nel trovarmi a codificare quaternioni! Ma, naturalmente, la matematica che è stata coinvolta è stata banale rispetto a quella che faccio quando lavoro. Era roba da "retro della busta". Quel tipo di matematica, quindi sono d'accordo con il sentimento che lo raccogli quando ne hai bisogno, e se hai bisogno di qualcosa di più complicato di quello che puoi trovare su Wikipedia, allora trovi un vero matematico per farlo per te. Tuttavia, per poterlo raccogliere quando ne hai bisogno, devi aver imparato qualcosa. Quella cosa potrebbe non essere qualsiasi cosa tu abbia mai effettivamente usato, ma dopo aver appreso che qualcosa rende più facile raccogliere ciò che effettivamente usi più avanti nella vita. Quindi è qui che non sono d'accordo con Coder: devi imparare un po 'di matematica se hai mai intenzione di usare qualsiasi matematica e devi impararla dal lato matematico (il che non significa dimostrare i teoremi, a proposito).
E così finalmente alla "Matematica sta programmando". Puoi imparare tutte queste cose dall'essere un buon programmatore. E se hai imparato queste cose, troverai la matematica molto più facile perché capirai che quando parliamo di un vettore in uno spazio vettoriale, allora è solo un'istanza della classe Vector
che significa che possiamo fare tutto ciò che Vector
fa per quell'istanza: aggiungi, sottrai, ridimensiona e così via. Ecco perché mi piacerebbe insegnare la matematica ai programmatori. Ma, parlando come un matematico, direi che il primodi questi, "Astrazione", è più facile da imparare in matematica che in programmazione perché la matematica è la ricerca dell'astrazione. Ogni volta che vediamo un comportamento, il nostro allenamento è sempre quello di chiedere "Che cos'è quella cosa che lo fa comportare in quel modo? Che cosa succede se prendessi un'altra cosa simile, si comporterebbe nello stesso modo? Quanto di quella cosa dovrei perdere per smettere di comportarmi così? " (Portare questo all'estremo porta alla "matematica millepiedi" - cerca il termine). Ma non lo facciamo con (solo) oggetti del "mondo reale" (qualunque essi siano), lo facciamo con cose che sono già state astratte.
Questo è andato avanti abbastanza a lungo, quindi lasciami chiudere con una delle classiche battute del matematico:
Un matematico e un fisico hanno entrambi partecipato a un seminario su alcuni nuovi modelli che coinvolgono lo spazio a 24 dimensioni. Successivamente, ne stavano discutendo e il fisico ha osservato: "È stato davvero difficile. Voglio dire, come si visualizza lo spazio a 24 dimensioni?" a cui il matematico rispose: "Oh, è facile. Basta visualizzare lo spazio n-dimensionale e quindi impostare n = 24.".
Aggiunto 2012-03-2
Ci sono stati alcuni commenti su questa risposta che esprimono una varietà di opinioni. Questi sono stati ora eliminati da un moderatore nella comprensione che avrei cercato di incorporarli (o di rispondere ad essi) nella mia risposta.
Tuttavia, non sono sicuro di poterlo fare. Leggendo quei commenti e il resto di ciò che è in questa pagina, posso solo giungere alla conclusione che c'è un enorme fraintendimento su cosa sia effettivamente la matematica. Inoltre, non mi sento abbastanza competente per spiegarlo. Fortunatamente, qualcuno si è già collegato al Lockament's Lament, quindi rimanderò la spiegazione a questo. Anche se avrei potuto dirlo diversamente (dato che sono cresciuto in un ambiente scientifico, avrei messo maggiormente l'accento sulla natura sperimentale della matematica), non penso che potrei metterlo meglio .
Penso ancora di poter aggiungere qualcosa. Così come i fraintendimenti su ciò che la matematica è , ci sono anche i malintesi su ciò che "fare matematica" si intende. Vedo due posizioni quasi contraddittorie:
La matematica riguarda equazioni e formule. Quindi non c'è bisogno di studiarlo perché esiste Wikipedia (questo è quasi il contrario della sfida apocrifa di Eulero a Diderot ).
La matematica riguarda teoremi e definizioni. Quindi non c'è bisogno di studiarlo poiché i programmi non provano mai nulla (che è un errore completo quanto ... inserisci l'errore preferito qui).
Mentre le due posizioni si contraddicono a vicenda, finiscono nello stesso posto: non ha senso che un programmatore apprenda matematica - e sicuramente non da un matematico! Dopo tutto, cosa che sanno di nulla? Tutto ciò che un programmatore ha davvero bisogno di sapere può essere trovato su Wikipedia o paralizzato da qualcun altro.
Sopra, mi sono descritto come un programmatore di culto del carico. Scommetto che molti di voi hanno avuto una risatina privata con se stessi e hanno pensato: "Ah sì, scommetto che so com'è il tuo programma allora". Probabilmente ti sei sentito un po 'compiaciuto e superiore (anche se sono sicuro che ti sei sentito male nel sentirti compiaciuto e superiore).
Quello che ho descritto sopra è la Matematica del culto del carico.
Quindi quando dico che dovresti imparare un po 'di matematica per capire come funziona la matematica, lo dico esattamente per lo stesso motivo che potresti se vedessi un po' di codice che avevo scritto: "Quanto più facile la tua vita sarebbe se smettessi di tagliare e incollare il codice da StackOverflow e imparassi solo un po 'su come farlo correttamente ".
La cosa più importante, tuttavia, è che dovresti impararlo dai matematici. Perchè così? Ecco un'analogia. La lingua in cui sono più abile è TeX. (Dice tutto, davvero!). Ora supponiamo che io voglia saperne di più su TeX e succede che Don Knuth è in città e si è offerto di offrire alcuni tutorial su TeX. O potrei semplicemente leggerlo su Wikipedia. O forse è Perl e Larry Wall, o C # (è quello giusto?) E Jon Skeet. Può darsi che queste persone non siano i migliori insegnanti , ma sicuramente lo compenseranno nella quantità che conoscono!
Ed è quello che sono i matematici . Siamo le persone che scrivono la lingua attuale, che poi scrivono le librerie che usi. Naturalmente, non si deve saper dimostrare un teorema - non avete intenzione di scrivere una libreria! Ma se sai un po 'di come pensiamo, allora potrebbe aiutarti a capire perché abbiamo scritto la libreria come abbiamo fatto e se capisci che potrebbe aiutarti a sfruttarlo meglio.
C'è una via di mezzo tra la ricerca di equazioni su Wikipedia e la dimostrazione della congettura di Poincaré, proprio come - per riferirsi al lamento di Lockhart - c'è una via di mezzo tra "Non so molto sull'arte, ma so cosa mi piace" ed essere Monet, e tra "Dov'è la chiave 'ANY'?" ed essere Don Knuth. Se sei ancora all'università, hai una straordinaria opportunità di imparare da persone che sono esperte nella loro zona e che - per qualche ragione - sono disposte a passare il loro tempo a spiegartelo.
L'altro punto su cui volevo approfondire un po 'era il motivo per cui come programmatore non dovresti aver paura di imparare un po' più di matematica. Non sono le connessioni profonde, né l'utilità. È che la tua capacità di programmare un computer può aiutarti direttamente ad imparare la matematica. Voglio solo menzionarne alcuni.
Comprensione delle variabili. Così tante persone vengono confuse da semplici dichiarazioni come "Let n be a natural number ...". O "Lascia epsilon> 0". Ci sono posti in matematica in cui è importante ricordare l' ambito di una variabile. Questi sono tutti all'ordine del giorno in programmazione. Impara a tradurre una dichiarazione matematica in un programma e troverai molto più facile tenere traccia di cosa.
La natura della prova. Se hai mai scritto un test o un programma per essere utilizzato da qualcun altro, allora capisci il nucleo delle prove. Quando lo fai, devi sapere che qualunque cosa l'utente inserisca, puoi gestirlo (inserisci qui il riferimento xkcd obbligatorio). Questa è tutta una prova! Una dimostrazione che qualunque cosa l '"utente / universo" inserisca, la dichiarazione sarà valida. Gli sperimentatori si appoggeranno al "Se funziona in circostanze normali, è vero" ma i programmatori sanno che c'è sempre quel bambino che proverà Alt + G + Shift + ÅØÆ solo per vedere cosa succede.
ASCIUTTO. Mi dispiace dirtelo, ma l'abbiamo inventato, non tu. "Non ci ripetiamo" da millenni. Ecco perché ho una copia degli elementi di Euclide sui miei scaffali ed è ancora utile .
E c'è di più. Se sapessi qualcosa di più sulla programmazione, scriverei un libro chiamato "Matematica per programmatori" in cui l'obiettivo non era quello di insegnare "La matematica che i programmatori dovrebbero conoscere" ma "Matematica che tutti dovrebbero conoscere, ma ottimizzata per i programmatori" . Ma probabilmente non saprò mai abbastanza della programmazione per scriverlo - a meno che qualcuno non si offra di collaborare con me!
Lo lascerò lì. Probabilmente se pensassi di più, cambierei ciò che ho scritto; spero di spiegarlo meglio. Tra un mese potrei persino non essere d'accordo con parti di esso. Se qualcuno desidera discutere ulteriormente, o commentare diversamente, probabilmente è meglio non farlo nei commenti qui. Sai dove trovarmi .