Cosa c'entra la matematica con la programmazione? [chiuso]


89

Ho appena iniziato un diploma nello sviluppo di software. In questo momento stiamo iniziando con Java di base e simili (quindi, dal basso, si potrebbe dire) - va bene, non ho esperienza di programmazione oltre a sapere come fare "Hello World" in Java.

Continuo a sentire che la matematica è pertinente alla programmazione, ma com'è? Quali esempi generali mostrerebbero come la matematica e la programmazione vanno insieme o dipendono l'una dall'altra?

Chiedo scusa per la mia domanda è vaga, sto appena iniziando a farmi un'idea approssimativa del tipo di mondo in cui sto entrando come studente di codice scimmia ...


49
La programmazione è matematica. it.wikipedia.org/wiki/Discrete_mathematics
SK-logic

25
@Dave, ecco perché ho dato un link nei commenti, non come risposta.
SK-logic,

7
@FiascoLabs, anche più di questo - la struttura del linguaggio e la logica sono anche sottodomini della matematica. La programmazione non è altro che matematica applicata.
SK-logic,

19
Su una nota non correlata, iniziare con Java non è "proprio dal basso".
Matt H,

5
@ CharlesE.Grant, molti studenti di matematica fanno lo stesso (e continuano a superare i test).
SK-logic,

Risposte:


137

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:

  1. 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.

  2. 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 .

  3. 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 Vectorche significa che possiamo fare tutto ciò che Vectorfa 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:

  1. 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 ).

  2. 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.

  1. 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.

  2. 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.

  3. 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 .


19
Questa è una delle migliori risposte che abbia mai letto su SE; A proposito, non v'è un grande libro di "Matematica per programmatori"; si chiama Concrete Mathematics ed è co-scritto dall'autore di TeX, Donald Knuth. Ho appena ricevuto una copia ed è fantastico. Mi sento il tuo contrario; Ho preso sul serio la programmazione quando mi sono reso conto che il modo migliore (per me) di comprendere i concetti in classe di matematica era scrivere un programma per farlo per me. Certo, allora volevo usare il programma invece di fare calcoli manuali a mano, e ai miei insegnanti di matematica non piaceva.
Jason Lewis

Amico, +100 per quello.
Barry Brown,

2
Registrato solo per votare questo
Leo

Esattamente. Non puoi programmare bene senza il pensiero analitico che la matematica ti insegna.
Fiasco Labs

1
Esiste un buon libro sulla matematica della programmazione (guardare matematicamente alla programmazione)?
QED

27

Non sono così strettamente correlati. Per la programmazione, è importante conoscere la matematica, in particolare quei rami relativi, ad esempio, alle prestazioni degli algoritmi, ma il semplice fatto è che non esiste un ramo della matematica che ti dirà che i Singleton sono un'idea orribilmente cattiva, ad esempio, o quando favorire l'eredità rispetto alla composizione, o se hai davvero bisogno di quella flessibilità, e non ripetere te stesso e dozzine di altre necessità di programmazione di base.

La matematica potrebbe essere in grado di esprimere ciò che fa il tuo programma, ma sicuramente non può dirti il ​​modo più sostenibile, leggibile dall'uomo, fattibile per farlo.


6
1) Non c'è nulla di sbagliato nei singleton di per sé, 2) La teoria dell'informazione algoritmica, i linguaggi formali e la semantica denotazionale sono direttamente rilevanti per le cose semplici di cui sei così preoccupato per qualche motivo (non sono così importanti per la programmazione in generale).
SK-logic,

19
allora la tua esperienza deve essere alquanto limitata. I singleton sono necessari e inevitabili, purché facciano parte di un modello di dominio. E come costruire un modello di dominio è un problema matematico, niente di più. E sì, coloro che sono ignoranti nella teoria dei linguaggi formali stanno producendo modelli orribili e linguaggi terribili.
SK-logic,

10
@dave: il pericolo in questo metodo è che chiunque possa distoglierti da una posizione ragionevole e ben ragionata dichiarandone una selvaggiamente diversa, non importa quanto stupida. Prendere le medie non è un utile sostituto per la valutazione degli argomenti.
Michael Borgwardt,

4
@ SK-logic: è possibile che voi due stiate semplicemente parlando di nozioni diverse su cosa sia esattamente un "Singleton"? Mi sembra che la logica SK stia parlando dell'idea astratta di avere solo un'istanza di una certa entità in un sistema, che a volte è esattamente ciò che è richiesto. Sfortunatamente questo concetto astratto è stato strettamente associato al dettaglio orribilmente negativo dell'implementazione di un metodo pubblico statico di fabbrica perché il libro GoF lo ha fornito come esempio di come si possa accedere a un tale Singleton.
Michael Borgwardt,

5
Per favore, non di più Off Discussione sull'argomento con Singtons
mattnz,

20

La matematica e la programmazione sono correlate in due modi.

Uno è che la matematica può essere usata per ragionare sui programmi per computer. Può aiutare a rispondere a domande come "Come cambierà il tempo di esecuzione del mio programma man mano che cambiano i dati di input?", "Il mio programma è sicuro di trovare una risposta al mio problema?", "Il mio programma è il più efficiente possibile? "," Come devo riorganizzare il mio programma per renderlo più veloce o usare meno memoria? ". In genere si trattano argomenti come questi nei corsi di divisione superiore sulla teoria del calcolo, la progettazione di algoritmi e la progettazione del linguaggio informatico.

Il secondo modo in cui la matematica e il programma sono correlati è che la programmazione viene utilizzata per risolvere problemi matematici. Questo è importante perché molti problemi della "vita ordinaria" possono effettivamente essere rifusi come problemi matematici e quindi risolti (forse approssimativamente) su un computer. Questo tipo di argomenti verrà mostrato in una certa misura in quasi tutti i tuoi corsi, ma in particolare nei corsi su matematica discreta e modellistica matematica.


La matematica non può aiutarti a garantire che il tuo programma troverà una risposta. Ciò risolverebbe il problema dell'arresto, il che è impossibile.
DeadMG

6
@DeadMG È impossibile per programmi arbitrari. È possibile dimostrare che un determinato programma termina o non termina, in alcuni casi.
Luc Danton,

6
@DeadMG, Questo è un malinteso comune sul problema di Halting. Il problema di Halting non dice che non puoi provare se un determinato programma si ferma o meno, dice che non esiste un singolo algoritmo o prova che può essere applicato a tutti i programmi per decidere se si fermano o meno. Vedi ad esempio en.wikipedia.org/wiki/Halting_problem e programmers.stackexchange.com/questions/125882/… .
Charles E. Grant,

Aaaah. Il mio errore, quindi. Blocco del voto stupido ... se potessi modificare il tuo post in modo che io possa annullare la votazione?
DeadMG

4
@DeadMG, siete a conoscenza del fatto la maggior parte dei compiti di programmazione tipiche non hanno bisogno di un linguaggio Turing-complete a tutti ? E per il resto dei casi, esiste quasi sempre una prova di arresto specializzata.
Logica SK

12

Due esempi specifici in cui un'educazione matematica è importante per l'informatica sono:

1) Database relazionali in cui viene utilizzato il calcolo relazionale .

Il calcolo relazionale è costituito da due calcoli, il calcolo relazionale tupla e il calcolo relazionale del dominio, che fanno parte del modello relazionale per i database e forniscono un modo dichiarativo per specificare le query del database. Ciò in contrasto con l'algebra relazionale che fa anche parte del modello relazionale ma fornisce un modo più procedurale per specificare le query.

L'algebra relazionale potrebbe suggerire questi passaggi per recuperare i numeri di telefono e i nomi dei negozi di libri che forniscono alcuni esempi:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

Il calcolo relazionale formulerebbe un modo descrittivo e dichiarativo:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Alcuni esempi.

L'algebra relazionale e il calcolo relazionale sono essenzialmente logicamente equivalenti: per ogni espressione algebrica, esiste un'espressione equivalente nel calcolo e viceversa. Questo risultato è noto come teorema di Codd.

La prossima area è l'intelligenza artificiale (AI) e l'apprendimento automatico .

Per un esempio di come vengono utilizzati, dai un'occhiata alla classe CS 373 di udacity: PROGRAMMAZIONE DI UN'AUTOMOBILE ROBOTICA .

Descrizione: questa lezione, insegnata da uno dei massimi esperti di intelligenza artificiale, ti insegnerà i metodi di base dell'intelligenza artificiale, tra cui: inferenza probabilistica, visione artificiale, apprendimento automatico e pianificazione, tutti incentrati sulla robotica. Vasti esempi di programmazione e incarichi applicheranno questi metodi nel contesto della costruzione di auto a guida autonoma. Avrai la possibilità di visitare, tramite video, i principali laboratori di ricerca sul campo e incontrare gli scienziati e gli ingegneri che stanno costruendo auto a guida autonoma a Stanford e Google.

Prerequisiti: l'istruttore assumerà una solida conoscenza della programmazione, tutta la programmazione sarà in Python. Sarà utile la conoscenza della probabilità e dell'algebra lineare.

SETTIMANA 1:

Nozioni di base sulla probabilità Localizzazione delle auto con filtri antiparticolato

SETTIMANA 2:

Gaussiani e probabilità continua Tracciamento di altre auto con filtri Kalman

SETTIMANA 3:

Elaborazione delle immagini e apprendimento automatico Ricerca di oggetti nei dati dei sensori

SETTIMANA 4:

Pianificazione e ricerca Determinare dove guidare con A * search Trovare percorsi ottimali con la programmazione dinamica

SETTIMANA 5:

Controlla il controllo dello sterzo e delle velocità con PID

SETTIMANA 6:

Mettere tutto insieme Programmazione di un'auto a guida autonoma

SETTIMANA 7:

Esame finale Esame che verifica le tue conoscenze


Immagino che questo rientri nel regno dell'IA ma la maggior parte delle persone ha in mente questa torta nella foto del cielo quando viene usato quel termine. Comunque, quasi tutti i programmi che simulano il mondo reale richiedono quasi sempre una qualche forma di matematica più avanzata. Inoltre, qualsiasi sistema con sensori richiede quasi sempre una qualche forma di matematica avanzata.
Dunk il

11

Per lo sviluppo di applicazioni scientifiche, la programmazione di giochi, i sistemi in tempo reale, i sistemi di simulazione e tali applicazioni, è richiesta la matematica. Dopo tutto, la programmazione utilizza la matematica e la scienza per risolvere i problemi. D'altra parte, per programmare un'applicazione che acquisisce le informazioni degli utenti per la loro registrazione nel database, non richiede alcun alto livello di matematica. Tuttavia, tutti i programmatori trarrebbero beneficio dalla teoria dei numeri di base, dall'algebra, dalla teoria degli insiemi di base e dall'analisi numerica elementare.

Dal punto di vista del professionista in matematica, diversi argomenti in matematica (così come molte altre branche della scienza) potrebbero trarre notevoli benefici dalla programmazione.


Sono d'accordo. Faccio molto sviluppo aziendale e non mi sono trovato a dover usare molta matematica avanzata, anche se è sicuramente utile sapere come può sicuramente aiutare. Direi che ogni programmatore avrebbe dovuto prendere almeno il calcolo 1. Altri tipi di programmi possono utilizzare cose come trasformazioni di Fourier, modelli statistici e programmazione 3D che usano spesso matrici.
Makotosan,

@Makotosan, grazie per il tuo commento. La matematica è comunque molto interessante, dato il breve tempo che ha un programmatore, è meglio dedicare uno sforzo a ciò che aumenta realmente la produttività. Le informazioni extra diventano lusso per chi se lo può permettere.
NoChance,

Penso che la matematica sia solo la conoscenza del dominio necessaria per il tuo programma, allo stesso modo in cui la comprensione della finanza è importante per gli sviluppatori di Excel.
sixtyfootersdude,

9

Penso più di ogni altra cosa, è la somiglianza del processo di pensiero utilizzato che fa sembrare i due così simili.

Ad esempio, entrambi sono estremamente logici. Se segui la stessa serie di passaggi o la stessa formula, otterrai sempre lo stesso risultato. Ad esempio, 1+1sarà sempre uguale a 2, e set a = 1significa asarà sempre 1 (fino a quando non lo imposti su qualcos'altro)

Un altro esempio è la necessità di pensare spazialmente. In matematica, ho scoperto che spesso dovevo tenere i numeri nella mia testa e visualizzare ciò che stavo facendo. Come esempio molto semplice, analizzerei i problemi di matematica in modo che qualcosa del genere 13x13diventi 13x10 + 13x3, il che è molto più facile per il mio cervello con cui lavorare, e ho bisogno di tenerne traccia 13x10=130 + 13x3=39, quindi 130+39 = 169. La stessa capacità di visualizzare qualcosa di non visibile o di scomporre un problema in problemi minori viene spesso applicata alla programmazione.

Quindi ritengo che, sebbene non sia necessario avere un background matematico da programmare, in cui la matematica è definita come l'esecuzione di calcoli con numeri, è necessario disporre di un processo di pensiero e comprensione simile a quello che si userebbe per risolvere i problemi di matematica.


E un po 'di matematica di base è il solito trampolino di lancio per ottenere quel processo sistematico e logico di risoluzione dei problemi. La struttura linguistica, qualcosa che non viene più insegnato a scuola è anche un altro trampolino di lancio. C'è una ragione per cui un compilatore ha un parser e migliore è la tua analisi e attenzione alla struttura del tuo codice, più è probabile che sarai in grado di programmare bene.
Fiasco Labs,

5

Suppongo che ad oggi ti siano stati insegnati elementi di calcolo e un po 'di trigonometria . E si chiama quel Matematica. È come chiamare un paio di gambe "un essere umano".

Il calcolo ha poco a che fare con la programmazione ed è più strettamente correlato alla fisica e all'ingegneria. Avrai bisogno di fisica per i motori di gioco e di calcoli per analisi statistiche . (L'analisi statistica guida più posti di lavoro che è comodo ammettere)

Calculus, per noi, riguarda più la relazione con la programmazione con il mondo reale. Il calcolo computazionale è la branca che studia quanto è andata male quella relazione. (spoiler: sta andando piuttosto male, ma possiamo tenerlo sotto controllo indefinitamente )

La trigonometria è un pazzo jack in the box che viene fuori quando meno te lo aspetti e quindi l'analisi del segnale , la generazione audio e molte altre cose dipendono da esso.

Attraversa Algebra 101 e Logic 101 , studia la storia di Pascal, Leibniz, (sì, ha quasi inventato il calcolo, ha sbagliato a metà, ha discusso con Newton fino a quando tutto ha iniziato a dare quasi senso - e ancora ha concepito la cosa di codifica binaria) e Babbage e molti dei tuoi dubbi svaniranno. (la tua definizione di matematica sarà cambiata per sempre, però)


4

La programmazione attraversa molte discipline accademiche tradizionali.

La matematica, in particolare la matematica applicata , è importante per la programmazione perché gran parte di ciò che chiediamo ai computer di fare sono numeri ridotti. Comprendere i metodi numerici e come applicare il calcolo in modo efficiente e appropriato è una delle cose che molti programmatori fanno quotidianamente.


4

Qui ti dirò cose pratiche in cui ho incontrato la matematica nel risolvere alcuni problemi informatici (in particolare nel dominio Internet):

  1. Motori di ricerca utilizza il calcolo vettoriale per la ricerca di dati.
  2. La fattorizzazione a matrice può essere utilizzata per molte cose come l'analisi dei sentimenti.
  3. Devi conoscere Calcolo, Riepiloghi per capire la complessità del codice che scrivi.
  4. La probabilità è ampiamente utilizzata nel recupero / ricerca probabilistica delle informazioni
  5. Il teorema di Naive Bayes viene utilizzato in Predictive Analytics.
  6. Devi conoscere cose come l'iperpiano ecc. Per un concetto chiamato SVM che viene nuovamente usato in Machine Learning per risolvere i problemi di categorizzazione.
  7. Devi comprendere Entropy per fare cose sull'elaborazione del linguaggio naturale.
  8. L'indicizzazione semantica latente / analisi dei componenti principali utilizzata dai motori di ricerca si basa fortemente sull'algebra matriciale. & presto......

3

Un problema con la tua domanda è che "matematica" e "programmazione" sono argomenti molto ampi e profondi su cui c'è più da sapere di quanto chiunque possa padroneggiare in una vita (nessuna esagerazione). Personalmente ho conseguito una laurea in matematica. Durante il mio periodo universitario, sembrava che più imparassi, meno sapevo rispetto ai miei coetanei; mi sembra che se diventassi meno intelligente nel corso degli anni. Quando ho presentato la tesi del mio maestro a un gruppo di professori, anche la maggior parte di loro sembrava non avere familiarità con ciò che ho studiato.

Allo stesso modo, ora sono uno sviluppatore di applicazioni web basato su database. Se mi paragonassi a qualcuno che fa la programmazione del linguaggio assemblatore incorporato, potresti pensare a noi come due professionisti di grande talento, ma avremmo competenze molto diverse anche se siamo entrambi "programmatori".

Man mano che avanzi nel tuo studio della matematica superiore (al di là del calcolo delle matricole), scoprirai che la matematica instilla una disciplina per il ragionamento astratto che ti servirà bene durante la programmazione. Penso che questa disciplina sia molto importante perché affronterai preoccupazioni astratte mentre programmi.

Certo, nella programmazione matricola, probabilmente imparerai l'aritmetica del puntatore. Scriverai brevi programmi per illustrare questo concetto e la tua comprensione di come guida il tuo computer obbedisce alla tua volontà. Tuttavia, apprendere come l'aritmetica dei puntatori funziona in astratto non ti renderà bravo a usare i puntatori in un programma reale. Quando arriva il momento di affrontare un pasticcio di 10K righe di codice e apportare alcune modifiche all'aritmetica del puntatore, dovrai essere in grado di ragionare a un livello molto astratto, prendere decisioni strategiche per bilanciare le diverse preoccupazioni su come le modifiche influiranno il codice.

Come programmatore, devi bilanciare la "leggibilità" del tuo codice, le prestazioni del tuo codice, la facilità d'uso dei programmi risultanti, tra molte altre preoccupazioni. Devi essere in grado di fare confronti molto astratti per bilanciare queste preoccupazioni l'una con l'altra. Farai molti di questi confronti ogni giorno. Non ho nemmeno iniziato a gestire il tempo. Ragionerai astrattamente sulla probabilità che qualcosa che fai influenzerà la tua capacità di svolgere i tuoi compiti in tempo e, ancora una volta, prenderai molte decisioni ogni giorno che influenzeranno il tuo lavoro.

Infine, è necessario mantenere la propria disciplina filosofica per essere in grado di assimilare nuove idee e concetti al fine di poter continuare mentre le vecchie metodologie e pratiche cadono in disuso. Ancora una volta, dovrai essere in grado di valutare le idee che arrivano e fare un confronto astratto con ciò che già conosci.

In breve, la programmazione, come molti di noi lo sanno, non ha molto a che fare con la matematica, come molti di noi lo sanno; ma quando lo guardi a un livello astratto, hanno molto in comune.


Mi piace particolarmente la parte "come molti di noi lo sanno". Questa è la difficoltà che vedo nel leggere la maggior parte delle risposte qui: la "mano sinistra" non sa cosa sta facendo la "mano destra".
Loop Space,

Immagino che "la mano sinistra non sappia cosa stia facendo la mano destra" la riassume. L'OP ha affermato che sta "partendo dal basso" con Java. Programmare in Java è un po 'come costruire qualcosa da bulloni e legname dal negozio di ferramenta, al contrario di lavorare quei bulloni e fare alberi vivi nel legname (che sarebbe più come programmare in Assembler)
Rice Flour Cookies

2

La matematica descrive (diciamo) un'equazione cubica.

Un algoritmo descrive come risolvere quell'equazione cubica.

Costruire quell'algoritmo (o qualsiasi altro) in un modo che può essere eseguito da una macchina sta programmando .

L'informatica è l'analisi dell'algoritmo - la sua efficienza teorica tempo / spazio, limiti di errore, ecc. Questo potrebbe essere considerato un ramo della matematica. Si noti tuttavia che l'informatica e la programmazione non sono in realtà la stessa cosa. È importante avere una base nell'informatica se vuoi essere un buon programmatore, perché ti aiuta a progettare meglio e ragionare sugli algoritmi che sviluppi. Ma non è un requisito.

Un buon programmatore potrebbe non essere (in realtà, spesso non lo è) un buon matematico e viceversa. Sono abilità identificabili separate.


3
Dipende dal tuo dominio. Se vuoi solo essere un programmatore, non hai davvero bisogno di conoscere la matematica. Se vuoi diventare una parte fondamentale del business (in molti settori), è essenziale riuscire a trovare soluzioni ai problemi del dominio. Molto spesso tali soluzioni possono essere derivate solo da un solido background matematico. Potrebbe non essere necessario essere un esperto in una specifica area matematica, ma dovresti sapere come applicare una vasta gamma di matematica in modo da poter capire quale matematica potrebbe risolvere il tuo particolare problema del momento.
Dunk il

2

Ho visto molte domande su questi tipi di forum negli anni in cui il vero problema stava nella scarsa comprensione matematica del poster. Ad esempio, chiunque abbia una buona base in algebra capisce che non puoi dividere per zero. Ma ho visto molte domande in cui il poster non lo capiva e successivamente non capiva il messaggio di errore che diceva sostanzialmente "non puoi dividere per zero". Ho visto molte domande in cui era chiaro che il poster non capiva la logica di base. Ho visto troppe domande in cui i concetti di algebra booleana erano chiaramente non compresi.

Solo perché non stai scrivendo prove matematiche o risolvendo direttamente equazioni come nel libro di matematica non significa che non hai bisogno di capire i concetti dietro di loro. Per inciso, in molti anni di esperienza lavorativa, non ho mai incontrato un cattivo programmatore che avesse una solida conoscenza della matematica.

In alcuni campi si utilizza direttamente molta matematica, come la programmazione di giochi, la programmazione statistica, la programmazione finanziaria, alcuni sistemi integrati. In alcuni di questi casi ti vengono fornite le equazioni di cui hai bisogno nei requisiti e talvolta non lo sei. Tuttavia, anche quando ti viene data l'equazione, tradurre correttamente queste equazioni nel codice di programmazione richiede di capire l'equazione per cominciare.

Mentre puoi farcela con poco più dell'algebra di base nella tua applicazione CRUD di base, la maggior parte dei problemi più interessanti e il lavoro più avanzato implica la comprensione matematica. Quindi perché dovresti limitarti fin dall'inizio non imparando la matematica in profondità?


2

Due esempi che vengono subito in mente sono:

funzioni - L'idea di applicare una trasformazione alle variabili di input per produrre una variabile di output è fortemente radicata nella matematica. L'idea di passare una funzione come parametro a un'altra funzione ancora di più. In generale, la nozione di pensiero astratto associata alla programmazione è molto simile alla matematica.

bitMasks - Questo approccio di programmazione comune per risolvere i problemi richiede almeno una comprensione di base dell'algebra booleana per comprendere anche il concetto.


1

Dal punto di vista dei programmatori: la matematica è un sottoinsieme della programmazione.

Matematica applicata nella programmazione:

Quando si lavora con collezioni (matrici, elenchi, mappe, ecc.) In programmazione, si ha a che fare con implementazioni nel mondo reale di astrazioni matematiche.

Programmazione senza matematica:

Se lo fai println("Hello World"), allora il fatto che alcuni calcoli vengano usati per calcolare la posizione sullo schermo, la lunghezza della stringa, ecc., È in gran parte irrilevante.

Utilizzo della programmazione per la matematica:

L'implementazione della matematica e della fisica in un linguaggio di programmazione rende possibili cose come la progettazione assistita da computer.


C'è un'intersezione di cose che sono sia legate alla matematica sia alla programmazione. Né è un sottoinsieme proprio dell'altro. Se tu conoscessi più MATH, lo sapresti. Disegniamo un diagramma di Venn e vediamo se riusciamo a trovare un oggetto in ogni area. L'algebra è legata alla matematica e alla programmazione. I principi della programmazione orientata agli oggetti non sono strettamente correlati alla matematica, ma sono astrazioni, poiché la matematica è un'astrazione. La matematica discreta è incredibilmente utile per i programmatori, così come la statistica. I calcoli raramente arrivano per la maggior parte dei programmatori, mai per me da 30 anni.
Warren P

0

La programmazione si basa generalmente su un modello che di solito è un modello matematico.

Facciamo un esempio della creazione di un calcolatore di ipoteca. Per questo è necessario sapere quali sono gli interessi, cos'è un interst composto e così via. Se non hai la comprensione della matematica sottostante, qualcun altro deve fornirti tali informazioni. Di solito è il lavoro del programmatore fare tutto. Puoi sempre chiedere aiuto, se necessario.

Esistono concetti semplici in matematica che sono ampiamente utilizzati nella programmazione. Ad esempio espressioni, equazioni, variabili, sono profondamente utilizzate nella programmazione. Se non lo ottieni in matematica, potresti non essere il miglior programmatore.

Avere una matematica forte, darti più cose su cui modellare il tuo lavoro. Questo alla fine ti rende un programmatore migliore. Ad esempio potresti voler disegnare un'equazione quadratica in uno dei tuoi progetti, in questo modo impari più cose solo perché sei forte in matematica. Oppure scrivi un programma per trovare l'area di un cerchio, per darti più esperienza.

Nella mia breve carriera di insegnante, ho scoperto che se gli studenti non avevano un background matematico, si perdono quasi quando fanno un problema finanziario. Se si perdono il modello, l'apprendimento della lingua stessa diventa più difficile e onestamente molto frustrante.


3
Il fatto che qualcuno sia in grado di risolvere un problema finanziario ha o meno a che fare con la competenza o meno in quel settore quasi nulla a che fare con l'attitudine alla programmazione. Lavoro con un software di elaborazione del segnale che contiene molta matematica che è molto al di sopra della mia testa. Il mio lavoro non è fare la matematica, sta trasformando ciò che viene prodotto da matematici e ingegneri, per i quali la programmazione non è nel loro settore di competenza, in un buon software. Perché quello è il mio dominio.
Blrfl,

Nella maggior parte dei campi pratici, i due sono separati: qualcuno ha il modello e qualcuno deve programmarlo. Quindi sì, hai ragione. Ma affinché qualcuno apprenda la programmazione dall'inizio, deve conoscere la matematica. Altrimenti sarà difficile. Devono conoscere variabili, espressioni e diverse proprietà matematiche. Ho lavorato con il team di ottimizzazione. Stavano lavorando su solutori. Se non avessero avuto conoscenza della matematica, non ci avrebbero mai lavorato. Ho risposto basandomi sul punto di vista dell'apprendimento e sapendo che è solo un nuovo studente che sta entrando nella programmazione.
Noname,

Dal punto di vista dell'apprendimento è indispensabile avere un background matematico, altrimenti gli altri non impareranno.
Noname,

I risolutori sono un problema di dominio matematico, il che farebbe supporre che sarebbe necessaria una comprensione della matematica coinvolta per lavorare su di essi. Non sto dicendo che non ci sono nessun concetti matematici coinvolti nella programmazione, ma come @DeadMG ha sottolineato nella sua risposta, ci sono un sacco di aspetti molto pratici del processo in cui la matematica fornisce alcun aiuto.
Blrfl,

1
@Birfl, DeadMG è, beh, un po 'ignorante (e quasi sempre sbagliato). La matematica aiuterebbe sempre in tutte quelle aree "morbide". La psicologia si basa fortemente sulla matematica. La sociologia è ancora più matematica. E nel caso della progettazione di sistemi, è meglio non toccarlo senza un ottimo background in semantica (che proviene da matematica discreta). Non ci sono aspetti nella programmazione che non siano matematici. Sono inclusi il design della GUI e il codice CRUD.
Logica SK

0

Il fondamento teorico dell'Informatica (che è molto più della semplice programmazione) è di natura matematica. Tutto, dalla definizione stessa della calcolabilità all'analisi e all'espressione degli algoritmi, alle specifiche dei linguaggi di programmazione, sono tutti basati su un'ampia varietà di matematica. Vedi questa pagina di Wikipedia per un assaggio del tipo di matematica coinvolto.

La maggior parte dei quali non è davvero necessario sapere se tutto ciò che si desidera fare è il codice di imbracatura. Per quanto riguarda la matematica applicata, a meno che tu non entri in un campo che richiede serie abilità di scricchiolio dei numeri (simulazioni fisiche dettagliate, analisi del segnale, analisi e previsione finanziaria, ecc.) Probabilmente non utilizzerai nulla di più coinvolto dell'algebra di base su base giornaliera.


0

Dipende onestamente dal tipo di programmazione che stai facendo.

Se stai realizzando app Web leggere con una certa logica, probabilmente non hai bisogno delle classi matematiche più avanzate che richiedono molti gradi. Se stai lavorando con cose che sono un po 'più pesanti del processore, allora avrai bisogno di più matematica. Se stai lavorando con qualsiasi tipo di campo scientifico, vorrai davvero tenere a portata di mano i tuoi riferimenti calc.

Un altro posto dove avrai bisogno di matematica è se vuoi scrivere giochi. Nel secondo in cui vuoi muoverti in diagonale, dovrai iniziare a fare alcuni calcoli accurati in modo da non finire con caratteri che accelerano se il passaggio a un blocco verso NE.

Detto questo, non devi necessariamente imparare la matematica, quindi imparare la programmazione. È perfettamente valido per imparare la programmazione, quindi prendere un po 'di matematica avanzata. Ho iniziato a scrivere codice prima di mettere piede in una classe Calc o Trig e ho fatto bene. Quando ho iniziato a studiare matematica avanzata, ho scoperto che la programmazione mi ha davvero aiutato, in quanto ho potuto esplorare l'argomento più cambiando le variabili in uno script veloce di quanto non potessi fare con carta e penna.


Avrai sicuramente bisogno di conoscere i tuoi trigth e la matematica vettoriale per i giochi.
Alan B,

Assolutamente. Ho anche scoperto, tuttavia, che la scrittura di giochi può essere un modo fantastico per riapprendere la matematica che potresti aver dimenticato dal liceo, purché non sia in scadenza.
kcunning

0

Non sono affatto un esperto di matematica! Ho fatto bene con HS Geometry, che per me era tutto logico. Trovo che la programmazione e la geometria siano molto simili. La logica booleana si lega molto bene nella mia mente alle prove geometriche.

Quindi ci sono piccole cose come sapere che puoi controllare quante colonne sono in fila usando l'operatore modulo.

Favorisco fortemente l'idea di essere un buon programmatore che ha un amico (o un collega / consulente) che è un buon matematico.

Ovviamente se sei fortunato ad avere entrambi gli skillset, corri con esso!


0

Risposta semplice; La matematica ti rende veloce . Certo, puoi google / se / wikipedia via i tuoi problemi di codifica, ma ottenere abbastanza matematica e non sarà necessario . Che ci crediate o no, il cervello umano adeguatamente addestrato è più veloce di Google . Inoltre, più matematica conosci, più velocemente sarai in grado di comprendere i risultati che google / se / wiki ti offre e meno avrai bisogno di approfondire per capire cosa ti dicono le persone. Nel processo di risoluzione dei tuoi problemi di programmazione finirai comunque per imparare la matematica, ma se ti concentri sulla matematica sarà un processo molto più efficiente.

La tua domanda è un po 'come se un musicista rock chiedesse perché avrebbero bisogno di un addestramento musicale formale. È possibile avere successo senza di essa? Sicuro. Ti rende molto più tosto se lo segui? Assolutamente.

Risposta leggermente più complicata - Quando matematici e programmatori usano la parola "soluzione" (per problemi, cioè non equazioni - cioè non "radici") - significano praticamente la stessa cosa. Imparare a risolvere i problemi di matematica ti aiuta a imparare a risolvere i problemi di programmazione.

A proposito - e senza offesa per nessuno - chiunque dica di essere un buon programmatore ma odia la matematica è un grande bugiardo. Quello che è successo è che sono stati esclusi dalla matematica formale da un cattivo insegnante o insegnante del college e da allora si sentono come "non sono bravi in ​​matematica". Chiunque non abbia una disabilità di apprendimento (cioè chiunque sia in grado di apprendere una lingua OO) è in grado di fare tutto, compreso il calcolo di Sophomore.


0

Le azioni di matematica e il 99% della programmazione hanno ben poco in comune. La matematica non è richiesta per essere un grande programmatore. Ho seguito diversi corsi di matematica a livello universitario, inclusi ma non limitati a Calcolo I, II, III elementi di algebra lineare e molti altri.

Sono stato un ingegnere del software per oltre 10 anni e solo raramente ho dovuto usare qualcosa di più della matematica di base. Ci sono alcune eccezioni in cui è necessaria la matematica: come la grafica e altre aree. Ma il 99% della programmazione e ingegneria del software non richiede matematica. Richiede pensiero logico, algoritmi, OOP, funzioni, problemi di decomposizione, ecc.


0

1) Man mano che impari la programmazione, ti imbatterai in un gergo tecnico (cioè un algoritmo). Per analizzare l'algoritmo, bisogna avere un'idea della natura delle funzioni polinomiali, logaritmiche ed esponenziali.

2) Basato su un'applicazione informatica, bisogna avere un'idea su matematica discreta e matematica continua per scrivere una soluzione significativa. Si può capire di più su questo andando attraverso tali corsi come-

---> Matematica per l'informatica

---> Coding the Matrix: Linear Algebra tramite Computer Science Applications .

Per un principiante, sento che i linguaggi tipizzati dinamici come python/ schemesono i primi migliori linguaggi per la programmazione. Le lingue tipizzate statiche come Java/ C++non sono le migliori per iniziare. Opencourseware pubblicato da "MIT / UOC-Berkeley / Stanford" può guidarti meglio di un normale curriculum universitario. Ci scommetto !!!


-1

Personalmente direi, dipende dal livello di programmazione che è coinvolto. I modelli di dati e le correlazioni tra questi, gli algoritmi di programmazione coinvolti. Ad esempio: per scrivere un programma che produce "Hello World", non vedo alcun requisito per familiarizzare qualcuno con matematica superiore. Il livello di coinvolgimento matematico dipende dal livello di complessità del problema che deve essere risolto programmaticamente.


-2

Solo la mia esperienza, non di più:
non sono un matematico. Non sono un genio, solo un autodidatta.
... e dopo molti anni, mi rendo conto di lavorare con l' intuizione

Prima ho imparato Pick (sistema morto) da zero (solo con documentazione cartacea e campioni),
... dopo C, C ++ per divertimento e Java per lavoro.

Come hai detto, posso dire che l'apprendimento di questa lingua non è un problema matematico (anche se l'algebra di base / minimalista ti aiuta,) ma una logica .

Ora molti strumenti (come Eclipse) ti aiutano e ti correggono: devi concentrarti su ciò che vuoi fare , con solo 52 parole riservate ... e molte librerie che hanno down down per te.

Quindi, se ti piace la lingua, scegli un progetto Java, studia Pattern Design, UML, capisci JVM e come usarlo con Bigloo e Scala, capisci ancora e ancora per 10 000 ore.

L'esperienza in Java ti dà posti di lavoro ben pagati e per molto tempo in grandi progetti industriali e sarai in grado di passare a un altro ambiente perché sei in grado di parlare di informatica , non di matematica .

Se la comprensione del linguaggio (parole, significato, concetto e altre scienze logiche nascoste come semantica, ontologia, ..) è un buon obiettivo per la tua persona umana, per tutta la tua vita, puoi iniziare ora .

Altrimenti, sperimenta in un altro modo.

Cordiali saluti
Claude


Ancora una volta, vedi sotto post. Stai facendo matematica, scegli di non ammetterlo.
Jamesson,

1
Ho visto, ma ho trovato anche altri post che rispondono alla prima domanda sull'interesse matematico per uno studente (che conosce la base, non le specialità) con -1 ^ n quando parlavano di logica in latino, filosofia, lingua ... reale vita. La mente matematica è così limitata che tutto ciò che non è in equazione viene rifiutato, senza comprendere la vita intorno e dimenticando che Newton inizia con un'intuizione data da una mela? Forse è moderatore aprire le menti agli altri mondi, quando possibile, ciò arricchirà entrambi i lati della discussione. Tuttavia, starò attento nella mia scrittura.
cl-r,

-2

Qualcuno ha quasi colpito l'unghia sulla testa sopra. La programmazione è matematica. Più specificamente, la programmazione è un ramo della logica matematica chiamata teoria della calcolabilità o teoria della ricorsione.

Altri rami della matematica sono coinvolti direttamente, in particolare il linguaggio formale e la teoria degli automi. Questi aiutano a descrivere le espressioni regolari, utilizzate nella corrispondenza dei modelli e le grammatiche formali, utilizzate per descrivere e analizzare i linguaggi di programmazione.

Chiunque dica che la programmazione non è matematica o non sa di cosa stanno parlando, o ha un ulteriore motivo, come un massimalista della "Proprietà intellettuale", che spera di trarre profitto ottenendo un brevetto su un algoritmo o qualche altra matematica di base fatto o scoperta.

Alcuni riferimenti per la programmazione come matematica e il corollario che non sa di cosa stai parlando:

Il programma prevede prove: la logica del XIX secolo e il calcolo del XXI secolo

I programmi sono prove: modelli e tipi nel calcolo Lambda

Articolo sulla corrispondenza Curry-Howard di Wikipedia

Sull'insolita efficacia della logica nell'informatica

L'irragionevole efficacia della logica

Sì, quelli sono pesanti nella parte "logica" della logica matematica, ma la matematica è generalmente riconosciuta come alcuni assiomi e le loro conseguenze logiche sono sviluppate attraverso la logica del primo ordine.

Per quanto riguarda il dire il contrario ed essere un massimalista "IP" per soldi:

Come brevettare un algoritmo negli Stati Uniti . Gli algoritmi non sono brevettabili, ma i brevetti sono concessi sugli algoritmi non riferendosi ad essi come algoritmi. Non è difficile trovare molto materiale sul web che evidenzi o cerchi di spiegare questa contraddizione.


6
-1 per l'ominem della pubblicità alla fine.
Charles E. Grant,

@charles ad hominem contro chi? Il poster originale? Penso che il punto sui brevetti sia approfondito (anche se avrebbe potuto essere formulato meglio).
gcbenison,

@gcbenison, "Chiunque dica che la programmazione non è matematica ... o ha un ulteriore motivo" è un classico attacco ad hominem: non devo rispondere alla tua discussione perché sei una persona cattiva. L'ho trovato irritante perché non penso che la programmazione sia matematica e penso che i brevetti sul software siano un abominio. Ho un MS in Applied Math, anche se so di cosa sto parlando è certamente aperto al dibattito.
Charles E. Grant,

@commentatori: grazie. Uso per ignorare quei comportamenti perché sono miseria autoproiettata imputata su altri. --- a Bruce Ediger: in dubbio segno di riflessione in corso.
cl-r,

@ cl-r: stavo pensando a esempi molto specifici, come la campagna anti-Linux di SCO, e nature.com/news/… Se noi come programmatori lasciamo che gli avvocati definiscano la matematica a beneficio dell'avvocato, allora facciamo un grande disservizio a tutta la civiltà .
Bruce Ediger,

-2

La matematica ha tutto a che fare con la programmazione. Ad esempio, nella programmazione del gioco devi usare i matyh per la fisica e fare di più meno tutto. Per spostare la posizione x del giocatore in Java lo faresti int x = x + speed * deltaTimeo int x = x - speed * deltaTimeMa potresti dire che si tratta di matematica di base, quindi passiamo a cose più avanzate. C'è un algoritmo per classificare i giocatori di scacchi chiamato Algoritmo Elo.

Questo è l'algoritmo Elo spiegato

Se pensi ancora che questo sia di base, prova questo. Come calcoli l'età di qualcuno quando ti viene dato un giorno di nascita, mese e anno. Sottrai l'anno di nascita da quest'anno e poi controlla se il mese è inferiore a questo mese e se non è sottratto 1.

Non è magico, è un duro lavoro e una buona matematica.


-4

Ok, probabilmente otterrò un sacco di voti negativi per questo, ma la programmazione e la matematica sono due cose completamente indipendenti. Qualcuno può essere uno sviluppatore straordinario conoscendo solo le basi come addizione, moltiplicazione e operazioni logiche di base.

La maggior parte degli sviluppatori non risolverà una singola equazione durante la loro carriera professionale e cose come la grande notazione O possono essere colte anche in modo non matematico. Pensi solo alla roba, immagini i pezzi capovolti nella tua testa, e voilà, puoi dire che tipo di O grande è la roba, se qualcuno spiega cos'è il log e il potere.

A volte la matematica può renderlo semplice o può farti sentire orgoglioso di aver dimostrato qualcosa, dal momento che puoi estendere il significato della programmazione a un dominio matematico nominandolo matematica discreta e simili, ma imparando molte equazioni differenziali e integrali, e come dimostrarlo, IMHO non è esattamente la migliore idea di cosa fare se si vuole avere successo come programmatore.

Almeno non ho toccato la matematica per 10 anni, ho sempre avuto discussioni con i miei professori di matematica e quando avevo bisogno di una matematica per il rendering in tempo reale, ho imparato tutto dal punto di vista dei programmatori, senza provare alcun teorema e per me è stato semplice e facile da capire rispetto a tutte le cose che i professori di matematica ci hanno messo in testa con un commento di "non puoi essere un buon programmatore se non conosci la matematica". Sicuro che puoi, facile!

Ora conosco le cose matematiche, in modo da poter parlare con i programmatori di matematica con tutti i differenziali e le cose del registro, ma solo per la ragione in modo che non sveniscano. Perché quella roba è inutile il 99,9% delle volte, e quando lo è, può essere appresa 1000 volte più efficace dal punto di vista dei programmatori.

Diamine, i programmatori hanno bisogno di almeno 5 anni per padroneggiare un linguaggio di programmazione + framework + best practice. Perché mai dovrebbero imparare a provare i teoremi? Gli studenti di matematica fanno le cose in matematica, i programmatori fanno funzionare quelle cose, ecco come dovrebbe funzionare.


8
Un bambino dice a sua madre che non avrà bisogno di matematica perché crescerà e diventerà un giocatore di baseball milionario. Sua madre gli dice "Avrai bisogno di matematica per contare i tuoi milioni".
Nav

2
Scusa, non sono d'accordo. Studiare la matematica ti insegna a pensare in modo logico. Se non riesci a pensare logicamente, tutto ciò che stai per scrivere è un mucchio di codice che non si ridimensiona. Non sto dicendo che devi essere un esperto di matematica o anche come la matematica, né devi usarlo nella tua vita quotidiana. Ma devi studiarlo se vuoi risolvere veri problemi di programmazione.
jmort253,

2
@ jmort253: Studiare la matematica non ti trasforma in una persona che pensa logicamente. O è qualcosa che ti viene in mente, oppure no. Ho odiato la matematica da quando ero a scuola, ma sono una persona molto logica. La programmazione non è matematica, mi occupo di programmazione di sistemi da oltre 10 anni e posso dirlo con la sicurezza del 100%, e puoi aspettarti ancora meno matematica quando sei nello sviluppo web o nell'amministrazione SQL. Il tuo compito non è quello di sviluppare nuove teorie matematiche, il tuo compito è far funzionare le cose usando risorse limitate in modo sostenibile usando algoritmi e contenitori più efficienti.
Coder

2
@Nav: ha senso per ogni persona per la matematica di base, fino alle equazioni con xey. Ma contare i tuoi milioni di solito è ciò che fanno i contabili e gli avvocati, perché altrimenti ti mancherà qualche legge statale che deve fare qualcosa con una dichiarazione e perdere tutto in entrambi i modi. Dovresti essere abbastanza intelligente da capire cosa sta succedendo, ma una volta che eccelli in qualcosa, è più conveniente utilizzare servizi specializzati che faranno le cose per te in modo corretto, veloce e puntuale, mentre ti mantieni in forma in palestra, per mantenere quel 5 ° posto guadagnato duramente.
Coder

10
La matematica non è il processo di risoluzione delle equazioni. Se l'unica matematica che tu abbia mai visto è la matematica insegnata a scuola, non hai mai visto la matematica reale .
doppelgreener,
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.