La matematica è necessaria per la programmazione? [chiuso]


117

Mi è capitato di discutere con un amico durante i giorni del college se la matematica avanzata è necessaria per qualsiasi programmatore veterano. Era solito argomentare ferocemente contro questo. Ha detto che i programmatori hanno bisogno solo delle conoscenze matematiche di base delle scuole superiori o della matematica del nuovo anno universitario, né più né meno, e che quasi tutte le attività di programmazione possono essere eseguite senza nemmeno bisogno di matematica avanzata. Ha sostenuto, tuttavia, che gli algoritmi sono una risorsa fondamentale e indispensabile per i programmatori.

La mia posizione era che tutti i progressi dell'informatica dipendessero quasi esclusivamente dai progressi della matematica, e quindi una conoscenza approfondita della matematica aiuterebbe notevolmente i programmatori quando lavorano con problemi impegnativi del mondo reale.

Non riesco ancora a stabilire su quale lato degli argomenti sia corretto. Puoi raccontarci la tua posizione, dalla tua esperienza?


7
Ho chiamato il mio insegnante di matematica dieci anni dopo solo per dirgli che non ho mai usato matematica avanzata per tutta la mia carriera. Dick si muova, lo so, ma bella domanda! Più uno.
Chris McCall,


Si prega di vedere la risposta più votata a questa domanda .
Boris Stitnicky

Piuttosto che. Chiudi, questo dovrebbe essere migrato ai programmatori.
Chris Cudmore

Risposte:


111

Per rispondere alla tua domanda così come è stata posta, dovrei dire: "No, la matematica non è necessaria per la programmazione". Tuttavia, come altre persone hanno suggerito in questo thread, credo che ci sia una correlazione tra la comprensione della matematica e la capacità di "pensare algoritmicamente". Cioè, essere in grado di pensare in modo astratto a quantità, processi, relazioni e prove.

Ho iniziato a programmare quando avevo circa 9 anni e sarebbe una forzatura dire che avevo imparato molta matematica a quel punto. Tuttavia, con un po 'di sforzo sono stato in grado di capire le variabili, per i cicli, le istruzioni goto (perdonami, ero Vic 20 BASIC e non avevo ancora letto alcun Dijkstra) e la geometria delle coordinate di base per mettere la grafica sullo schermo .

Alla fine ho conseguito una laurea con lode in matematica pura con una laurea in informatica. Anche se mi sono concentrato principalmente sull'analisi, ho anche studiato un po 'di matematica discreta, teoria dei numeri, logica e teoria della computabilità. Oltre ad essere in grado di applicare alcune idee dalla statistica, alla teoria della probabilità, all'analisi vettoriale e all'algebra lineare alla programmazione, ho studiato poco di matematica che era direttamente applicabile alla mia programmazione durante la mia laurea e alla programmazione commerciale e di ricerca che ho fatto in seguito.

Tuttavia, credo fermamente che i metodi formali di pensiero richiesti dalla matematica - ragionamento accurato, ricerca di controesempi, costruzione di basi assiomatiche, individuazione di connessioni tra concetti - siano stati di enorme aiuto quando ho affrontato progetti di programmazione grandi e complessi.

Considera il modo in cui gli atleti si allenano per il loro sport. Ad esempio, i calciatori trascorrono senza dubbio gran parte del loro tempo di allenamento sulle abilità calcistiche di base. Tuttavia, per migliorare la loro forma fisica generale, potrebbero anche trascorrere del tempo in palestra in bicicletta o vogatori, fare pesi, ecc.

Lo studio della matematica può essere paragonato all'allenamento con i pesi o al cross-training per migliorare la tua forza mentale e la resistenza per la programmazione. È assolutamente essenziale che tu pratichi le tue abilità di programmazione di base, ma studiare matematica è un incredibile allenamento mentale che migliora le tue capacità analitiche di base.


6
Vorrei aggiungere che la matematica non è solo allenamento con i pesi per la tua forza mentale, ma apre anche la porta a nuovi problemi e soluzioni. Ad esempio, durante il mio tirocinio di elaborazione delle immagini, non sarei in grado di implementare i nostri algoritmi di rimozione del rumore senza una conoscenza approfondita delle PDE. Il codice risultante era semplice, ma molto preciso. E la matematica è ciò che ci ha portato lì. Ancora più sorprendente è la bellezza di queste formule. Una piccola espressione PDE può essere tradotta in poche pagine di codice. Senza la formula iniziale è difficile vedere come ci si ritroverà mai.
Joe

La matematica non è necessaria per la programmazione, perché la programmazione è matematica. Può essere una buona matematica o una cattiva matematica (come quando la lunga chiamata dell'orangutan è traslitterata in linguaggio Ook ), ma ogni volta che un programmatore progetta un modello a oggetti di qualcosa, ze sta (di solito inconsapevolmente) eseguendo un atto di matematica. Quindi, ancora una volta, non è necessario leggere libri di matematica per programmare, ma questo non cambia nulla sul fatto che la programmazione è matematica e che (come ha detto Euclide) non esiste una strada maestra per arrivarci.
Boris Stitnicky

56

Sebbene la matematica avanzata possa non essere richiesta per la programmazione (a meno che non si stia programmando capacità matematiche avanzate), il processo di pensiero della programmazione e della matematica sono molto simili. Inizi con una base di cose note (assiomi, teorie precedentemente provate) e cerchi di arrivare a un posto nuovo. Non puoi saltare i passaggi. Se salti i passaggi, ti viene richiesto di riempire gli spazi vuoti. È un processo di pensiero critico che rende i due incredibilmente simili.

Inoltre, matematici e programmatori pensano entrambi in modo critico in astratto. Le cose del mondo reale sono rappresentate da oggetti e variabili. La capacità di tradurre dal concreto all'astratto collega anche i due campi.

C'è una buona possibilità che se sei bravo in uno, probabilmente sarai bravo con l'altro.


E quindi potresti dire che qualcuno che fa molti cruciverba o gioca a Scrabble ha più probabilità di essere bravo a programmare rispetto a qualcuno che non lo fa. La relazione sembra riguardare la probabilità piuttosto che una stretta dipendenza.
Liam

Il rigore e la disciplina di risolvere un problema in matematica si traducono in programmazione. Devi avere la capacità di decostruire un problema e affrontarlo prima dalla direzione ovvia, e poi da direzioni più creative in entrambe le discipline.
Bramha Ghosh

4
Due grandi programmatori che ammiro molto non hanno studiato informatica, ma si sono formati come matematici e hanno semplicemente cambiato percorso di carriera: Miguel de Icaza e Alexander Stepanov. A proposito, Stepanov una volta ha affermato che mentre si lavora in matematica "non si inizia con gli assiomi: si finisce con gli assiomi". : D
Joe Pineda

@Liam - Si tratta di abbinare modelli e destreggiarsi tra le cose nella memoria a breve termine. Entrambe le attività richiedono quelle abilità.
jcolebrand

+1 per "C'è una buona possibilità che se sei bravo in uno, probabilmente sarai bravo nell'altro".
Thorbjørn Ravn Andersen

39

informatica! = programmazione

OK, seriamente, conosco programmatori buoni e cattivi che erano laureati in inglese e psicologia e alcuni che erano laureati in informatica. Alcuni personaggi molto famosi che ammiro come sviluppatori non avevano un background CS. Larry Wall (Perl), ad esempio, era un linguista. D'altra parte, è utile sapere qualcosa sul dominio su cui stai lavorando perché così puoi almeno vedere se i tuoi dati hanno senso e aiutare i tuoi clienti / utenti a visualizzare ciò che vogliono veramente. E sì, c'è il problema della complessità computazionale, delle strutture dati efficienti e della correttezza del programma. È roba che impari in Informatica e che è utile sapere in quasi tutti i domini, ma non è né necessaria né sufficiente.


12
Penso che la migliore citazione che ho sentito sia "L'informatica non riguarda i computer più di quanto l'astronomia riguarda i telescopi". (Dijkstra)
tloach

5
Penso che stackoverflow.com sia stato creato fondamentalmente per superare questo tipo di risposte di una riga, ma ci sono 15 persone che la pensano allo stesso modo che hanno sollevato questa risposta inutile in cima. Non ho nulla di personale con te, tuttavia ho contrassegnato la tua risposta come "offensiva". È così almeno per me.
simsim

2
@simsim: Trovo offensivo che la gente pensi che una laurea in scienze informatiche riguardi in qualche modo la programmazione.
tloach

3
@simsim: Non importa cosa avevano in mente Joel e Jeff quando hanno creato questo sito. Si tratta di creare una comunità in cui i programmatori si aiutano a vicenda. Penso che la risposta breve di David sia quella giusta. +1
Scottie T

@ Scottie: se si trattasse di "creare una comunità in cui i programmatori si aiutano a vicenda", allora i forum e le mailing list sarebbero stati sufficienti. Forse sono stato un po 'duro nella mia risposta, ma è stato sorprendente vedere 15 utenti votare per una "risposta" completamente incapace, beh, prima di modificare ovviamente. :-)
simsim

29

Immagino di essere la prima persona a dirti di bisogno matematica. Come altri hanno detto, la matematica non è poi così importante per alcuni aspetti dello sviluppo, ma i fondamenti del pensiero critico e dell'analisi strutturata sono molto importanti.

Inoltre, la matematica è importante per comprendere molti dei fondamenti che riguardano cose come utilità di pianificazione, ottimizzazioni, ordinamento, gestione dei protocolli e numerosi altri aspetti dei computer. Sebbene la matematica coinvolta da un livello di calcolo non sia complessa (è principalmente algebra delle scuole superiori), le teorie e le applicazioni possono essere piuttosto complesse in quanto una solida comprensione della matematica attraverso il calcolo sarà di grande beneficio.

Puoi cavartela senza, assolutamente, e non dovresti lasciarti trattenere da una conoscenza meno approfondita della matematica, ma se ne avessi la possibilità, o l'inclinazione, studierei più matematica possibile, calcolo, teoria numerica, lineare algebra, combinatoria, applicazioni pratiche, tutto ha applicazioni sia pratiche che teoriche in un'ampia gamma di scienze informatiche.

Ho conosciuto persone che hanno avuto molto successo su entrambi i lati del recinto (quelli senza una forte attenzione alla matematica e quelli che sono andati a scuola per fisica o matematica), ma in entrambi i gruppi hanno apprezzato i problemi numerici e l'apprendimento di algoritmi e teoria matematica .


Sono d'accordo con questo. Anche se si può cavarsela senza, si rimpiangerà la sua decisione? Se ti aspetti di avere anche un lavoro moderatamente eccitante / stimolante, le abilità matematiche che hai acquisito ti aiuteranno sicuramente.
Andras Vass

Giusto! GrayWizardx e altri: come autodidatta, cosa consigli in termini di materiale di lettura? Sono stato enormemente spento dal modo micidiale in cui la matematica mi è stata insegnata quando ero più giovane. Non voglio dare la colpa altrove, ma la matematica è stata presentata in modo brutale. Ora è il momento di riscattare. Quanto è FACILE imparare la matematica qui delineata (calcolo, algebra lineare, matematica discreta, ecc.) Da soli? Esiste una serie particolare di libri di testo consigliati per questo approccio? Una laurea non è più un'opzione!
Emmel

1
@Emmel, in realtà ho visto "The Manga guide to Math" e "The Manga guide to Calculus" a Barnes and Noble là fuori, e so di aver visto una "Guida completa per idioti all'algebra lineare" l'altro giorno. Per quanto riguarda le risorse effettive, ci sono alcuni ottimi siti Web di matematica (per studenti, ecc.) Ma non sono sicuro di quanti di essi siano ancora in circolazione. Una cosa che faccio ogni tanto è andare in un college della comunità e "controllare" le lezioni di matematica (prendilo per superato / non superato) e ottenere semplicemente un aggiornamento. Non l'ho fatto in 5-6 anni, ma l'ultima volta è stato molto utile.
GrayWizardx

26

Ho una laurea in matematica, ma non ricordo di averla richiesta una sola volta nella mia carriera. È stato utile in termini di addestramento della mia mente per il pensiero logico, ma non ho scritto alcun codice utilizzando la dinamica dei fluidi, la teoria quantistica o le catene di Markov. (L'ultimo è il più probabile che venga fuori, sospetto.)

La maggior parte degli sviluppatori line-of-business non avrà bisogno di matematica avanzata per la maggior parte del tempo. A volte la conoscenza della trigonometria può aiutare, e certamente essere in grado di comprendere abbastanza matematica per implementare algoritmi descritti matematicamente può essere importante, ma oltre? Nah.

Non dimenticare che la maggior parte dei programmatori non sta facendo progressi nell'informatica: stanno creando applicazioni. Non ho bisogno di conoscere l'ingegneria avanzata per guidare un'auto moderna, anche se quell'auto è stata quasi certamente migliorata attraverso l'ingegneria avanzata.


Sono d'accordo con la maggior parte di ciò che hai detto, tuttavia, non si potrebbe dire che molti aspetti della programmazione possono essere notevolmente più facili dalla comprensione dei principi matematici comuni? A volte una formula per qualcosa è molto più facile da programmare rispetto all'algoritmo per raggiungere lo stesso valore ... fintanto che conosci quella formula
BenAlabaster

@balabaster: A volte, ma direi che non accade molto spesso. Allo stesso modo, non hai davvero bisogno di conoscere una formula in anticipo per usarla. Essere competenti in matematica è una buona cosa, quindi puoi capire le formule quando le vedi, ma raramente hai bisogno di matematica a livello di laurea stessa IMO.
Jon Skeet

11
Laurea in matematica? Allora sai che non sono solo numeri. Ho due lauree in matematica e uso spesso il contenuto: algebra booleana per analizzare / semplificare la logica, teoria degli automi / del linguaggio per la costruzione di DSL, algebra per l'analisi delle prestazioni del grande O, ecc.
joel.neely

14

Direi che avere matematica logica avanzata (discreta) può davvero aiutare. Questo insieme alla teoria degli insiemi. Quando si ha a che fare con programmi per computer comuni, queste discipline possono aiutare molto. Tuttavia, molta altra matematica che ho preso all'università era il calcolo, che per quanto posso vedere, aveva un utilizzo molto limitato. Dato che il 90% (o qualcosa del genere) della programmazione sta facendo app aziendali con matematica molto semplice, direi che per la maggior parte puoi cavartela con pochissime conoscenze di matematica. Tuttavia, una buona comprensione dell'algebra booleana, della logica, della matematica discreta e della teoria degli insiemi può davvero portarti a quel livello successivo.


14

Andrò controcorrente qui e dirò "Sì"

Passo dall'ingegneria civile alla programmazione (Concrete Sucks!). Il mio background in matematica consiste nelle solite cose del primo anno, calcolo del secondo e terzo anno (Diff EQ, integrazioni di volume, serie, trasformate di Fourier e Laplace) e un corso di analisi numerica.

Trovo che la mia matematica sia incredibilmente carente per la programmazione del computer. Ci sono intere aree di matematica e logica discreta che mi mancano e sopravvivo solo grazie a una vasta libreria di libri di testo, Wikipedia e Wolfram. La maggior parte degli algoritmi avanzati si basano su matematica avanzata e non sono in grado di sviluppare algoritmi avanzati senza fare ricerche approfondite (essenzialmente l'equivalente di un mezzo corso di lavoro.) Non sono certamente in grado di inventare NUOVI algoritmi, dato che indosso hanno le basi matematiche come le spalle dei giganti su cui stare.


Quanti algoritmi fondamentali scrive davvero un programmatore medio? Immagino che l'80% dei lavori di programmazione non implichi matematica oltre all'algebra di base.
dbkk

@dbkk: l'attività più comune di un programmatore medio è la progettazione del modello a oggetti, la "logica di business" di alcuni domini. E tale processo non è altro che matematica, sebbene non sia comunemente riflesso da coloro che svolgono il compito.
Boris Stitnicky

14

Dipende da cosa stai facendo. Se fai molta programmazione 3D, la conoscenza della geometria 3D è sicuramente necessaria, non sei d'accordo? ;-) Se vuoi creare un nuovo formato immagine come JPG o un nuovo formato audio come MP3, sei anche abbastanza perso se non riesci a capire una trasformazione del coseno o di Fourier, poiché queste sono le basi su cui si basa la compressione più con perdita . Molti altri problemi possono essere risolti meglio se conosci abbastanza bene la matematica.

Ci sono anche molte altre attività di programmazione che scoprirai che non richiedono molta matematica.


13

Se trovi l'argomento abbastanza affascinante per pubblicarlo, vai avanti e inizia a imparare. Il resto verrà naturalmente.


9

Sì, non c'è bisogno di matematica avanzata - se stai programmando commerciale - software standard.

Tuttavia, quando si ha a che fare con cose hardcore come:

  • Calcolo delle traiettorie per controllare un robot
  • Creazione di applicazioni simili all'intelligenza artificiale per supportare l'incertezza e il ragionamento automatico
  • Giocare con animazione e grafica 3-D

Alcune conoscenze matematiche avanzate potrebbero tornare utili. E non è come se fossero problemi "fuori dal mondo".

Ho dovuto creare un software per cercare di "prevedere" la quantità di carta necessaria per un ufficio (ed è stato un inferno solo per trovare il modo migliore per approssimare i valori).

Devi stare attento, però, perché è facile perdersi quando si usano cose avanzate - c'è un mio amico che ha fatto ricorso a Turing per memorizzare lo stato di un menu dinamico solo per visualizzarlo correttamente - humm ... forse era troppo lontano nella sua immaginazione.


potresti aggiungere cose come la compressione di file o la modifica di file MP3 o qualsiasi cosa che richieda la comprensione effettiva di ciò che il computer sta facendo, piuttosto che mettere insieme un sito web.
tloach

4
Come ha usato Turing per farlo? Una tavola ouija o una seduta spiritica?
Jared Updike

8

Che tipo di programmazione?

Nella mia esperienza commerciale, non ho avuto bisogno di matematica avanzata, ma questo dipende fortemente dal campo in cui ti trovi.

La computer grafica richiede una grande quantità di matematica avanzata. Un sacco di programmazione informatica accademica richiede matematica avanzata.

Quindi dire che tende a esserci una correlazione tra persone brave in matematica e persone brave in programmazione.

Spero che questa risposta scialba aiuti.


6

La matematica è necessaria per gli sviluppatori in alcuni campi, ma è quasi inutile in altri.

Se sei uno sviluppatore di giochi e devi lavorare molto con la fisica, la comprensione della matematica è fondamentale. Se stai lavorando con controlli visivi avanzati, non potresti fare molto senza la geometria. Se hai intenzione di fare alcuni calcoli finanziari, sarebbe DAVVERO di aiuto avere una solida conoscenza delle statistiche.

D'altra parte negli ultimi 5 anni ho avuto solo 2 o 3 progetti in cui era richiesta QUALSIASI quantità di matematica. Di questi si è verificato solo 1 caso in cui una ricerca su Google non ha aiutato.

Alla fine della giornata anche i calcoli finanziari sono molto spesso qualcosa che i tuoi clienti fanno per te e ti danno formule da implementare.

Quindi, se ti occupi di "software applicato", è probabile che non utilizzerai mai la tua laurea in matematica. Se ti occupi di software accademico, la matematica è fondamentale.


A "sviluppatore di giochi" aggiungerei "sviluppatore di simulazioni". Ricordo che nel '93 guidavo per tutta la città cercando di trovare un libro di matematica sufficientemente avanzato per spiegarmi come funzionano i quaternioni, in modo da poter codificare correttamente un algoritmo di ricognizione morto. Grazie a Dio per Internet oggi!
TED

6

Sono d'accordo con Chris. Direi anche "Sì". Ma questo dipende dal tuo mercato come indicato sopra. Se stai semplicemente creando alcune applicazioni di base "pronte all'uso" o strumenti di scrittura per aiutare il tuo lavoro quotidiano ... allora la matematica non è altrettanto importante.

La progettazione di soluzioni software personalizzate richiede molta risoluzione dei problemi e pensiero critico. Competenze che sono decisamente migliorate quando è presente una formazione in matematica. Ho studiato in matematica con la mia laurea in ingegneria informatica e do credito a tutto il mio background orientato alla matematica sul motivo per cui sono dove sono oggi.

Questi sono i miei 2 centesimi, posso dire dalla lettura sopra che molti non sarebbero d'accordo. Incoraggio tutti a considerare che non sto dicendo che non puoi avere quelle abilità senza un background in matematica, sto semplicemente affermando che le abilità sono effetti collaterali di avere un tale background e possono avere un impatto positivo sul software.


6

Nella mia esperienza la matematica è necessaria nella programmazione, non puoi farne a meno. L'intera programmazione è basata sulla matematica.

La questione non è in bianco e nero, ma più colorata. La domanda non è se hai bisogno o meno di matematica, ma quanto. I livelli più alti di matematica ti daranno più strumenti e apriranno la tua mente a diversi percorsi di pensiero.

Ad esempio, puoi programmare se conosci solo addizioni e sottrazioni. Quando è richiesta la moltiplicazione, dovrai eseguire molte aggiunte. La moltiplicazione semplifica le aggiunte ripetitive. L'algebra consente di semplificare la matematica prima di implementarla nei programmi. Algebra lineare fornisce strumenti per trasformare le immagini. L'algebra booleana fornisce i meccanismi per ridurre tutte queste ifistruzioni.

E non dimenticare il fratello di matematica, logica e filosofia. La logica ti aiuterà a fare un uso efficiente di caseo switchdichiarazioni. La filosofia ti aiuterà a capire il pensiero del ragazzo che ha scritto il codice che stai modificando.

Sì, non hai bisogno di molta matematica per scrivere programmi. Alcuni programmi potrebbero richiedere più matematica di altri. Una maggiore conoscenza della matematica ti darà un vantaggio rispetto a coloro che hanno una comprensione minore. In questi tempi, le persone hanno bisogno di tutti i vantaggi che possono ottenere per ottenere quei lavori.


6

Programma da 8 anni professionalmente e da quando ne avevo 12 come hobby.

La matematica non è necessaria, la logica lo è. La matematica però è terribilmente utile, dire che non è necessario è come dire che per uccidere un uomo non serve una pistola, puoi usare un coltello. Beh, è ​​vero, ma quella pistola lo rende molto più facile.

Ci sono un paio di minimi minimi, che dovresti già soddisfare. È necessario conoscere le espressioni e la notazione algebriche di base e gli equivalenti comuni del computer. Ad esempio, è necessario sapere cos'è un esponenziale (da 3 a 3 è 27) e l'espressione comune del computer è 3 ^ 3. Le notazioni comuni per l'algebra cambiano tra le lingue, ma molte di esse utilizzano una metodologia in qualche modo unificata. Altri (guardandoti LISP) no. È inoltre necessario conoscere l'ordine delle operazioni.

Devi capire il pensiero algoritmico. Prima questo, poi questo, produce ciò che viene utilizzato in questo calcolo. È probabile che tu lo capisca o no, ed è un ostacolo abbastanza difficile da superare se non lo capisci; Ho scoperto che questo è qualcosa che "ottieni", e non veramente qualcosa che puoi imparare. Al contrario, alcune persone non "capiscono" l'arte. Non dovrebbero diventare pittori. Inoltre, ci sono stati studenti nel curriculum CS che non riescono a capire perché questo non funziona: x = z + w; z = 3; y = 5; Non è che non capiscano l'addizione, è che non stanno afferrando il requisito di un espresso inequivocabile. Se lo capiscono, dovrebbe farlo anche il computer, giusto? Se non riesci a vedere cosa c'è che non va nelle tre righe precedenti, non diventare un programmatore.

Infine, devi sapere qualunque matematica sia sotto il tuo dominio di programmazione. Il software di contabilità potrebbe fermarsi all'algebra di base. Se stai programmando la fisica, avrai bisogno di conoscere la fisica (vagamente) e la matematica nella geometria tridimensionale (euclidea). Se stai programmando un software di architettura, dovrai conoscere la trigonometria.

Questo va oltre la matematica però; qualunque sia il dominio per cui stai programmando, devi comprendere bene le basi. Se stai programmando un software di analisi del linguaggio, dovrai conoscere probabilità, statistiche, teoria grammaticale (più lingue), ecc.

Spesso, alcuni domini necessitano o possono trarre vantaggio da conoscenze che penseresti non siano correlate. Ad esempio, se si sta programmando un software audio, è effettivamente necessario conoscere la trigonometria per gestire le forme d'onda.

Anche la magnitudine cambia le cose. Se stai ordinando un set di dati finanziari di 1000 elementi, non è un grosso problema. Se si trattasse di 10 milioni di record, tuttavia, si trarrebbe grande vantaggio dalla conoscenza effettiva della matematica vettoriale e dalla conoscenza approfondita dell'ordinamento a livello binario (come fa un sistema a ordinare alfabeticamente? Come fa a sapere che "a" è minore di "b '?)

Scoprirai che come programmatore, la tua base di conoscenze generali esploderà, perché ogni progetto richiederà più apprendimento al di fuori della sfera diretta della programmazione. Se sei schizzinoso o pigro riguardo all'autoapprendimento e non ti piace l'idea di passare più di 10 ore a settimana a fare essenzialmente "compiti a casa", non diventare un programmatore.

Se ti piacciono gli esercizi di pensiero, se ti piace imparare, se riesci a pensare a cose astratte come la matematica senza una calcolatrice o il design senza un blocco per schizzi, se hai gusti ampi nella vita e negli hobby, se sei autocritico e puoi buttare via ' idee preferite, se ti piace perfezionare le cose, diventa un programmatore. Non basare questa decisione sulla matematica, ma piuttosto sulla capacità di pensare in modo logico e imparare. Quelle sono le cose importanti; la matematica è solo un sottoprodotto.


5

Ovviamente dipende dal tipo di programmatore che vuoi essere, o meglio dal tipo di programmatore che i tuoi datori di lavoro vogliono che tu sia. Penso che il calcolo e l'algebra siano essenziali, la programmazione statistica e lineare è davvero un buon strumento da avere nella tua valigetta, forse l'analisi (derivata, integrali, funzioni ...) potrebbe essere fatta senza. Ma se vuoi sapere come funzionano le cose in profondità (elettronica, per esempio, o alcuni algoritmi non banali) la matematica "avanzata" è qualcosa che faresti meglio a non rinunciare da nessuna parte.


5

La maggior parte della programmazione che ho fatto ha coinvolto simulazioni fisiche per la ricerca, comprese cose come l'elettromagnetismo, la meccanica quantistica e la meccanica strutturale. Dato che i domini del problema hanno una matematica avanzata associata ad essi, sarebbe difficile risolverli senza utilizzare la matematica avanzata.

Quindi la risposta alla tua domanda è: dipende da cosa stai cercando di fare.


5

La conoscenza avanzata della matematica è fondamentale se intendi scrivere un nuovo linguaggio di programmazione. Oppure devi scrivere i tuoi algoritmi.

Tuttavia, per la maggior parte della programmazione quotidiana, dai siti Web alle applicazioni di elaborazione assicurativa, sono necessari solo calcoli matematici di base .


5

Qualcuno con un solido background matematico (che non è semplicemente aritmetico) o logico farà fronte ad algoritmi, uso di variabili, ragionamento condizionale e strutture dati.

  • Non tutti possono progettare un'interfaccia utente.
  • Non tutti possono creare codice efficiente.
  • Non tutti possono commentare e documentare chiaramente.
  • Non tutti possono fare un buon algoritmo

La matematica ti aiuterà fino a un certo punto, ma solo fino a un punto.


5

Non credo che la conoscenza avanzata della matematica sia un requisito per un buon programmatore, ma sulla base dell'esperienza personale penso che i programmatori che hanno una migliore conoscenza della matematica avanzata siano anche programmatori migliori. Ciò può essere semplicemente dovuto a una mente più logica o a una visione più logica dovuta alle loro esperienze di risoluzione di problemi matematici.


5

Il concetto fondamentale della matematica è il seguente, ideazione, comprensione, implementazione e utilizzo di algoritmi. Se non puoi fare matematica, allora è perché non puoi fare queste cose, e se non puoi fare queste cose allora non puoi essere un programmatore efficace.

Le attività di programmazione comuni potrebbero non richiedere alcuna conoscenza matematica specifica (ad esempio, probabilmente non avrai bisogno di algebra vettoriale e calcolo a meno che tu non stia eseguendo attività come la grafica 3D o le simulazioni fisiche, ad esempio), ma gli skillset sottostanti sono identici e mancano di capacità in un dominio corrisponderà una corrispondente mancanza di capacità nell'altro dominio.


5

La matematica è una cassetta degli attrezzi per creare programmi. Raccomando l'introduzione di Cormen agli algoritmi. Tocca le cose più "mathy".

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Non penso che la matematica più alta sia un requisito per essere un buon programmatore, come sempre dipende da cosa stai codificando.

Ovviamente se sei nella programmazione grafica 3D, avrai bisogno di matrici e cose del genere. Come autore di software aziendale, probabilmente avrai bisogno di matematica statistica.

Ma essendo un programmatore professionista per quasi 10 anni (e altri 10 anni dilettante) "matematica superiore" non è qualcosa di cui avevo bisogno regolarmente. In circa il 99,8% di tutti i casi è solo più, meno, divisione e moltiplicazione in alcune combinazioni intelligenti - nella maggior parte dei casi si tratta di algoritmi, non di matematica.


4

Imparare la matematica superiore, per la maggior parte dei programmatori, è importante semplicemente perché piega il tuo cervello a pensare in modo logico, in modo graduale per passare da una cosa all'altra.

Pochissimi lavori di programmazione, tuttavia, richiedono qualcosa al di sopra della matematica delle scuole superiori. Ho usato l'algebra lineare una volta. Non ho mai usato il calcolo. Uso l'algebra ogni giorno.


4

La conoscenza matematica è spesso utile a un programmatore, così come l'abilità di progettazione grafica, la capacità di risolvere enigmi, l'etica del lavoro e una miriade di altre abilità e tratti. Pochissimi programmatori sono bravi in ​​tutto ciò in cui un programmatore può essere bravo. Non sarei d'accordo con alcuna dichiarazione del modulo "non sei un vero programmatore a meno che tu non possa { inserire qui le capacità di programmazione preferite }".

Ma diffiderei di un programmatore che non sa fare matematica. Più di uno che non sa disegnare.


4

Penso che dipenda davvero da cosa stai cercando di fare, ma IMHO, la teoria CS e OS sono più importanti della matematica qui, e hai davvero bisogno solo della matematica che implicano.

Ad esempio, c'è molto background CS sulla teoria e l'ottimizzazione della pianificazione che sta dietro a molti programmatori nei sistemi operativi moderni. Questo è un esempio di qualcosa che richiederebbe un po 'di matematica, anche se non qualcosa di super complicato.

Ma onestamente, per la maggior parte delle cose, non hai bisogno di matematica. Quello di cui hai bisogno è imparare la capacità di pensare in base 2 e 16, come la capacità di OR / AND mentalmente. Ad esempio, se hai un byte e all'interno di quel byte ci sono due campi a 3 bit e 2 bit sprecati, sapere quali bit sono in quali campi sono attivi quando il valore del byte è qualcosa come 11 renderà le cose leggermente più veloci del doverlo usare carta e penna.


Hai mai studiato la teoria delle code? Hai mai studiato i gestori della memoria e i modelli statistici che fanno sì che gli sviluppatori scelgano uno rispetto all'altro? Non sono necessariamente in disaccordo con il peso della tua risposta, ma la tua semplificazione eccessiva.
San Jacinto

@San: Sono sicuro di semplificare eccessivamente, ma penso che la maggior parte degli sviluppatori di sistemi non abbia mai bisogno di sapere queste cose a questo livello. L'ho studiato a livello base nei miei primi due lauree, e un po 'più a fondo durante il mio dottorato di ricerca, ma non è mai stato il mio forte, preferisco lasciarlo agli esperti. Le persone del sistema operativo che conoscevo avevano abilità matematiche che mi hanno lasciato senza fiato.
Uri

che penso sia molto valido. Penso che sia necessario differenziare la programmazione dei sistemi dalla programmazione del sistema operativo. Concetti fitti, ma comunque diversi.
San Jacinto

4

Ho iniziato a programmare più o meno nello stesso periodo in cui sono entrato nel mio corso di pre-algebra .. Quindi non direi che la matematica è così importante, anche se può aiutare in alcuni tipi di programmazione, soprattutto funzionale.

Non ho ancora preso Discrete Math, ma vedo molte cose teoriche con la programmazione scritte in una notazione matematica insegnata in questa classe.

Inoltre, assicurati di sapere come calcolare qualsiasi cosa in qualsiasi base, specialmente la base 2, 8 e 16.

Inoltre, una lezione che mi ha davvero portato a casa alcuni concetti è stata questa lezione di pre-programmazione. Ci hanno insegnato unioni, intersezioni e tutta quella roba felice ed è quasi esattamente parallela alla matematica bit per bit. E abbiamo trattato la logica booleana in modo molto approfondito. Quello che ho considerato il più utile è stato quando abbiamo imparato a ridurre le complesse istruzioni booleane. Questo è stato molto utile:

(x|y) & (x|z) & (x|foo)

può essere semplificato in

x | (y & z & foo)

Che in precedenza non avevo capito bene.


4

Ebbene hai generato una serie di risposte e no, non le ho lette tutte. Sono nel bel mezzo di questo, no di certo non hai bisogno di matematica per essere un programmatore. L'assemblatore vs i driver di dispositivo in Linux non sono più o meno complicati degli altri e non richiedono nemmeno la matematica.

In nessuna forma o forma hai bisogno di prendere o superare un corso di matematica per tutto questo.

Sono d'accordo che la mentalità per la risoluzione dei problemi per la programmazione è abbastanza simile a quella delle soluzioni matematiche, e di conseguenza la matematica probabilmente viene facilmente. o al contrario, se la matematica è difficile, la programmazione potrebbe essere difficile. Una classe o una laurea o qualsiasi pezzo di carta o trofei non sono richiesti, andarsene e imparare cose, certo.

Ora, se non riesci a convertire rapidamente da esadecimale a binario a decimale né nella tua testa, sulla carta o usando una calcolatrice, avrai difficoltà. Se vuoi entrare nel networking e in altre cose che richiedono tempismo, cosa che i driver del kernel spesso fanno ma non devono. Stai per lottare. Conosco un elenco molto lungo di persone con lauree in matematica e / o informatica e / o in ingegneria che lottano con i calcoli della velocità, i bit al secondo, i byte al secondo, la quantità di memoria necessaria per fare qualcosa, ecc. in una certa misura può essere considerato una sorta di abilità che alcuni hanno e altri devono lavorare.

La mia conclusione è che credo nella forza di volontà, se vuoi imparare queste cose puoi e lo farai, è così semplice. Non è necessario frequentare un corso o spendere un sacco di soldi, linux e qemu ad esempio possono tenervi occupati per un bel po 'di tempo, diversi linguaggi asm, ecc. Ambienti crashable per lo sviluppo del kernel, embedded, ecc. , ma non credo che tu debba scappare e prendere lezioni se non vuoi. Se vuoi quindi prendere alcune lezioni di ee, alcune lezioni di cs e alcune lezioni di matematica ..


Questa non è un'esca infuocata, ma la realtà. Tutto ciò che devi sapere sull'elettronica digitale e l'ingegneria del software dal punto di vista della programmazione può essere riassunto con. 0, 1 e, o, no. queste cinque cose sono ciò su cui operano l'elettronica digitale e tutti i programmi. Puoi costruire qualsiasi cosa con una grande scatola di veloci cancelli nand.
old_timer

4

Hai bisogno di matematica. La programmazione non è altro che matematica. Qualsiasi risultato di fisica teorica non diventa un'implicazione pratica (applicabile), a meno che non venga spiegato in termini di soluzioni matematiche. Nessuno di questi può essere risolto computazionalmente se non possono essere interpretati sui computer e più specificamente sui linguaggi di programmazione. Lingue diverse sono quindi progettate per risolvere problemi specifici. Ma per i linguaggi di programmazione generici e diffusi come java, c, c ++, molte delle nostre attività di programmazione implicano soluzioni ripetitive (continue) agli stessi problemi come l'estrazione di valori dal database, file di testo, il loro inserimento su Windows (desktop, web), la manipolazione stessi valori, a volte accedendo ad alcuni dati da dispositivi simili (ma dati nomi di marchi diversi, porta diversa e un mal di testa) ecc. che non coinvolge più di un metodo unitario,


3

IMO, probabilmente hai bisogno di un'attitudine per la matematica, senza necessariamente avere molta conoscenza nel campo. Quindi le cose di cui hai bisogno per essere bravo in matematica sono simili a quelle che ti servono per essere bravo a programmare.

Ma in generale, non riesco a ricordare l'ultima volta che ho usato un qualsiasi tipo di matematica avanzata nella programmazione quotidiana, quindi no.

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.