Discussione La matematica serve per programmare?

nollew

Utente Gold
27 Aprile 2015
511
81
67
264
Ehylà, ciao a tutti. È da molto tempo che non posto più argomenti e volevo ritornare parlando proprio di un argomento che mi passa per il cervello da qualche settimana. Fin da bambino sono stato sempre appassionato al mondo di Internet, soprattutto quando vedevo che c'erano persone così capaci che riuscivano a fare grandi imprese, come entrare all'interno di alcuni database importanti eccetera.

PS: Non ho detto che eticamente sia giusto, sia chiaro.


Tralasciando questo, avevo intenzione anche io di studiarmi qualche linguaggio di programmazione. Volevo iniziare con il Python perché ho sentito che è uno dei più semplici, per poi espandere le conoscenze con C e via dicendo. La domanda che mi sorge però, è quella scritta in alto nel titolo. Non sono mai stato un genio in matematica, chiaramente conosco le basi ma niente di più. Avrò difficolta nell'imparare i linguaggi di programmazione dopo questa premessa oppure non ci saranno molti problemi? Chiaramente il mio scopo non è quello della programmazione 3D o di videogioci complessi in cui anche i capelli del personaggio si muovono al millimetro. Mi piacerebbe soltanto essere un buon programmatore di script e sapere qualcosa su reversing, DDos, hacking, sicurezza informatica eccetera. Grazie per eventuali risposte e buone feste.
 
Io la penso cosi': non e' la matematica a farti programmatore, ma e' la mentalita' matematico-scientifica.
Mi spiego:
In informatica ogni cosa deve essere ragionata, dalla scelta della struttura dati in uso, al numero di funzioni e classi al tipo di classi a tante altre cose.
I calcoli servono a volte, ma non e' detto che servano nel tuo specifico caso. Es: devi calcolare la complessita' di un programma/script? Allora c'e' qualche formula da sapere e saper applicare.
Io al momento sto creando un Bot, ma per esso non mi e' servita la matematica, ma un approccio logico per riuscire a prendere determinate decisioni per gestirlo. (Poi ovvio che qualcosa avro' cannato eh hahah)
L'importante e' saper ragionare sulle cose secondo me, non un rapporto "stretto" con la matematica
 
Sicuramente le basi di matematica servono, ma nulla che non ti insegnino nei primi anni di scuole superiori. Poi ovviamente dipende molto anche da cosa devi programmare.
Comunque anche io non ho un buon rapporto con la matematica, ma sono un programmatore, ci lavoro tutti i giorni e lo faccio bene.
 
Devi giusto saper fare le addizioni, sottrazioni, moltiplicazioni e divisioni.

E avere almeno compreso il concetto di vettore (array) e matrice (utile nel C/C++).

Poi ovviamente se vuoi occuparti dell'ottimizzazione del codice e delle performance del programma devi avere delle basi di informatica (che é una branca della matematica) e sapere qualche algoritmo.
 
Da studente di ingegneria informatica, posso dirti che sapere la matematica di da una grande grande mano nell'avanzamento delle problematiche.
Tutti coloro che ti dicono "No la matematica non serve a programmare" non hanno capito niente.
Non sto assolutamente dicendo che non si può programmare se non si padroneggia la matematica, ma invece sto dicendo che affrontare la risoluzione di un problema appoggiandosi alla matematica rende possibile ciò che a volte non si può fare altrimenti.
Basta pensare a dove siamo arrivati, ovvero le reti neurali. Una rete neurale la si può programmare sia con linguaggi di programmazione, sia con programmazione strutturale, ovvero formule matematiche le quali rappresentano un determinato andamento nel tempo.
Anche nello studio degli automi si ritrovano spesso concetti vicini all'informatica ma strettamente connessi al mondo matematico.
Per farla breve, se vuoi imparare a programmare come si deve, hai bisogno di conoscenze matematiche non troppo banali.
Personalmente consiglio geometria e combinatoria prima di tutto, per poi introdursi un poco nell'analisi matematica.
Nulla ti leva il diritto di scaricarti un pdf da 30 pagine sul python ed iniziare a fare i tuoi primi programmi, ma presto incrementando la complessità dei problemi ti renderai conto che una rappresentazione analitica della situazione fa risparmiare veramente molto tempo, oltre che garantire il corretto funzionamento dell'algoritmo prodotto.
Spero di esserti stato d'aiuto :)
 
da quando informatica sarebbe una branca della matematica????
non è neanche più una scienza.
è una cosa a sé.

Da quando lo dice la Treccani:
Ma in realtà l'informatica è prima di tutto una branca della matematica e della logica, quella che studia come si possono trasformare procedure complesse in una serie di calcoli elementari, tali da poter essere eseguiti da un sistema automatico, che si tratti di un telaio meccanico o di un computer.

E da quando come ti hanno già detto si studia anche al dipartimento di Matematica.

Se poi vogliamo fare i pignoli e dire che ogni cosa è una materia a sè stante allora anche la Fisica non è una branca della Matematica.
 
  • Mi piace
Reazioni: VER1X e Kunnow
Ultima modifica:
Dipende da cosa vuoi fare e da come vuoi farlo. Se vuoi diventare tipo un ingegnere informatico, lavorare con la crittografia, capire a fondo gli algoritmi, la complessità ecc... la matematica diventa fondamentale, se invece vuoi fare il programmatore magari per hobby e sviluppare applicazioni relativamente "semplici" non è fondamentale. Ovviamente in molti programmi e applicazioni la matematica non è richiesta, dipende da cosa vuoi fare.
Quindi a parer mio puoi essere comunque un ottimo programmatore conoscendo poco la matematica, ovviamente conoscerla non fa male. Più la conosci meglio è.

PS: Personalmente ho sviluppato diverse app per Android, script PHP, ho lavorato con MySql e scraping Web, la matematica non mi è servita molto. Però studiando a fondo i vari algoritmi di ordinamento, ricerca, complessità, notazione O, omega, ecc... la matematica e soprattutto la notazione matematica come la sommatoria, ecc... diventa fondamentale.
 
  • Mi piace
Reazioni: ad3a e driverfury
Da quando lo dice la Treccani:

E da quando come ti hanno già detto si studia anche al dipartimento di Matematica.

Se poi vogliamo fare i pignoli e dire che ogni cosa è una materia a sè stante allora anche la Fisica non è una branca della Matematica.


Visto che citi la treccani (enciclopedia per ragazzi, tra l'altro, e del 2005), ti incollo quello che trovo sempre sul sito treccani nell'enciclopedia di matematica (2013):
L’informatica, oggi autonoma disciplina di studio, nasce dal convergere di differenti campi disciplinari che, per vie diverse, si sono posti il problema di come automatizzare il calcolo, cioè la manipolazione di simboli attraverso determinate regole, rendendolo eseguibile da una macchina.

Se invece preferisci proprio l'enciclopedia Treccani online, questo è l'incipit:
informatica Scienza che studia l’elaborazione delle informazioni e le sue applicazioni; più precisamente l’i. si occupa della rappresentazione, dell’organizzazione e del trattamento automatico della informazione. Il termine i. deriva dal fr. informatique (composto di INFORMATion e automatIQUE, «informazione automatica») e fu coniato da P. Dreyfus nel 1962.

La Fisica NON è una branca della matematica, infatti.

Mi sembri sinceramente un po' confuso... o forse un Pitagorico... non saprei...
Comunque direi che il pignolo qui sei tu.
Un conto è la pignoleria, un altro voler fare di tutta l'erba un fascio, o proprio generalizzare.

Se non sai le cose, ed evidentemente non sei del campo, puoi evitare di appellarti ad un'enciclopedia per ragazzi piuttosto obsoleta.

Non credo che voler correggere un errore sia pignoleria sinceramente.
Se mi dici che le mele sono pere, ti dico di no, e punto.
Si chiama tassonomia.
 
Visto che citi la treccani (enciclopedia per ragazzi, tra l'altro, e del 2005), ti incollo quello che trovo sempre sul sito treccani nell'enciclopedia di matematica (2013):


Se invece preferisci proprio l'enciclopedia Treccani online, questo è l'incipit:


La Fisica NON è una branca della matematica, infatti.

Mi sembri sinceramente un po' confuso... o forse un Pitagorico... non saprei...
Comunque direi che il pignolo qui sei tu.
Un conto è la pignoleria, un altro voler fare di tutta l'erba un fascio, o proprio generalizzare.

Se non sai le cose, ed evidentemente non sei del campo, puoi evitare di appellarti ad un'enciclopedia per ragazzi piuttosto obsoleta.

Non credo che voler correggere un errore sia pignoleria sinceramente.
Se mi dici che le mele sono pere, ti dico di no, e punto.
Si chiama tassonomia.

Ok ho citato una fonte a tuo avviso obsoleta.

Io intanto continuerò a pensare che l’informatica è basata almeno per il 90% sulla matematica e la logica.

Forse non al 100% e per questo viene considerata autonoma.

Poi, ovviamente, la Treccani va “aggiornata” e sulla versione nuova c’è scritto che OGGI l’informatica è una disciplina autonoma.

Se è per questo la OOP viene spacciata come il santo graal della programmazione dalla maggior parte degli informatici (non tutti ovviamente).

P.S. Sembra che tu ti sia offeso anche se io non ho mai scritto che tu non sai le cose o che non sei del settore. Nè che sei confuso.

Se d qualche parte ho fatto intendere un’offesa velata mi scuso ma non era mia intenzione.

Inoltre non ho generalizzato nè fatto di tutta l’erba un fascio.

Evidentemente tu sei del settore, come me.

Abbiamo un’opinione diversa su un’etichetta che viene affibbiata ad una materia. Ci può stare.

Ognuno ha le sue opinioni, è buona norma non discriminare in base ad esse.
 
  • Mi piace
Reazioni: DShimoda
Problema:
Calcolare la complessità in termini di O, Omega e Teta di un dato algoritmo nel caso migliore, medio e peggiore.
Tip: master theorem

Chi ci riesce senza usare la matematica?
 
Problema:
Calcolare la complessità in termini di O, Omega e Teta di un dato algoritmo nel caso migliore, medio e peggiore.
Tip: master theorem

Chi ci riesce senza usare la matematica?

Capisco cosa intendi ma ahimè c’è una falla in questa logica che vorrei portare a galla tramite un esempio.

Problema:
Calcolare il tipo psicologico dell’utente tramite un questionario di Jung letto da tastiera e mostrato in stdout.

Chi ci riesce senza usare la psicologia?

Ergo: per programmare serve la psicologia.

Mi scuso per l’esempio banale ma è il primo che mi è venuto in mente. Spero tu abbia capito il senso della mia risposta.
 
Premessa non ho letto le altre risposte perchè non ho voglia.
La matematica serve (traiettorie proiettili ecc per farti un esempio)quindi serve anche la fisica ; in sostanza tutte o quasi le materie di indirizzo scientifico.

p.s l'unica cosa ho letto è il suggerimento di un utente quando fa riferimento alla mentalità ....
è l'informatica fa parte della matematica quindi vedi tu.
 
Capisco cosa intendi ma ahimè c’è una falla in questa logica che vorrei portare a galla tramite un esempio.

Problema:
Calcolare il tipo psicologico dell’utente tramite un questionario di Jung letto da tastiera e mostrato in stdout.

Chi ci riesce senza usare la psicologia?

Ergo: per programmare serve la psicologia.

Mi scuso per l’esempio banale ma è il primo che mi è venuto in mente. Spero tu abbia capito il senso della mia risposta.
Non penso il paragone regga. Il tuo esempio con la psicologia è bene o male un o-piccolo rispetto alla necessità che si ha nell'ottimizzare oggi giorno il codice. Poi ovviamente è situazionale, ma con l'andare del tempo sempre più si sente la necessità di esplorare quantità di dati con crescita esponenziale e senza un codice ben ottimizzato ci si rivede tra 20 anni per trovare un risultato.

Con questo non voglio dire che tutti devono sapere tutto, ma dire che l'utilità della matematica nella programmazione è strettamente legata a casistiche numericamente infime è una balla.
 
Non penso il paragone regga. Il tuo esempio con la psicologia è bene o male un o-piccolo rispetto alla necessità che si ha nell'ottimizzare oggi giorno il codice. Poi ovviamente è situazionale, ma con l'andare del tempo sempre più si sente la necessità di esplorare quantità di dati con crescita esponenziale e senza un codice ben ottimizzato ci si rivede tra 20 anni per trovare un risultato.

Il ragazzo del thread ha chiesto semplicemente se la matematica fosse essenziale per programmare.

La risposta è chiaramente no.

A meno che non vuoi cimentarti nello sviluppo di software in cui le prestazioni sono un fattore critico (tipo i videogames).

È un settore in cui ti specializzi, stop.

Al 90% dei programmatori non serve conoscere gli argomenti matematici citati.

Ti serve conoscere la Fisica qualora tu volessi sviluppare un engine fisico.

Ti serve conoscere la Psicologia se vuoi programmare il questionario di Jung.

Serve a quella piccola percentuale che vuole fare questo tipo di programmi.

Non serve di “default”.
 
Ho sempre visto ed interpretato la programmazione da questo punto di vista:
Ho un algoritmo ( cito definizione di algoritmo da Treccani [quella vera] ) e lo codifico in un linguaggio tale da essere interpretato ed eseguito da un calcolatore.

Effettivamente per programmare, se si intende programmare esclusivamente come fase di codifica, no, la matematica non serve.
Ma se per una qualsivoglia ragione, dovrai scrivere tu l'algoritmo, allora diventa necessaria.



Vorrei condividere, per chi non la conosce già, la DFS ( Deep First Search ), un famoso algoritmo di ricerca in un grafo. ( fonte: wikipedia )
Realizzazione
La realizzazione dell'algoritmo consiste di due procedure: una procedura che avvia la ricerca e che si occupa di colorare di white tutti i vertici del grafo, di azzerare il contatore globale del tempo e di selezionare ogni singolo nodo del grafo. Per ogni singolo nodo selezionato si avvia una seconda procedura che ha il compito di effettuare la visita vera e propria.

DFS(G)
for each vertex u in V[G] do
color ← white
π ← nil
time ← 0
for each vertex u in V[G] do
if color = white
then DFS-Visit(u)


La procedura per la visita del nodo si occupa di colorare opportunamente tutti i vertici visitati a partire da
c3e6bb763d22c20916ed4f0bb6bd49d7470cffd8
(i vertici nella lista di adiacenza
3993cc37bd9784dfb11f90b7bff21795c1fce575
), di aggiornare i valori temporali e costruire la foresta DFS.


DFS-Visit(u)
color ← grey
d ← time ← time + 1
for each vertex v in Adj do
if color[v] = white then
π[v] ← u
DFS-Visit(v)
color ← black
f ← time ← time + 1

Con la DFS penso sia evidente l'impronta matematica nella procedura.
 
Qua si parla come se tutti i programmi avessero bisogno di algoritmi strettamente matematici, non penso che tutti si occupino di data science, deep learning, machine learning o AI. Il programmatore medio o si occupa di sviluppo web e quindi fa back-end o fa applicativi di contabilità, insomma la maggior parte è roba del genere. Non tutti si occupano di lavorare strettamente a basso livello o con una mole da dati tali da dover scrivere degli algoritmi matematici che diano la massima efficienza possibile, quindi al programmatore medio non servono conoscenze matematiche che vadano oltre quelle che ti può fornire un normale istituto industriale con indirizzo informatico. Mi ripeto, dipende tutto da quello che devi programmare.
 
Qua si parla come se tutti i programmi avessero bisogno di algoritmi strettamente matematici, non penso che tutti si occupino di data science, deep learning, machine learning o AI. Il programmatore medio o si occupa di sviluppo web e quindi fa back-end o fa applicativi di contabilità, insomma la maggior parte è roba del genere. Non tutti si occupano di lavorare strettamente a basso livello o con una mole da dati tali da dover scrivere degli algoritmi matematici che diano la massima efficienza possibile, quindi al programmatore medio non servono conoscenze matematiche che vadano oltre quelle che ti può fornire un normale istituto industriale con indirizzo informatico. Mi ripeto, dipende tutto da quello che devi programmare.

Sono d'accordo. Il programmatore medio, il quale non inventerà nulla di testa sua, si troverà benissimo con le nozioni di matematica apprese alla scuola superiore.
Il programmatore medio, realizza script che stampano "hello world" in console, e segue un tutorial su internet per trovare la soluzione al proprio problema.
Mi rattrista non poco pensare che il programmatore medio dia quest'impressione di se, in quanto conosco parecchi "programmatori medi" laureati in informatica/ing informatica che lavorano in grandi aziende come Capgemini o Almaviva.

Peccato soprattutto che dalle risposte che leggo, emerge solamente la totale assenza di criteri su cui poi valutare una soluzione.

Nel corso di informatica, ci sono svariati esami di matematica, tra i quali calcolo integrale e altri non banali.
Nel corso di Ingegneria Informatica, la matematica non finisce mai, e lo dico per esperienza personale.

Questa è la mia ultima risposta in questo topic, in quanto non trovo più un senso al rispondere a persone che non accettano il fatto che il 90% dei problemi sia ricorrelabile ad un modello matematico.

PS: A tutti coloro che leggono questo post e sono ancora in tempo, studiate la matematica, fatevi un regalo che col tempo apprezzerete.
 
  • Mi piace
Reazioni: ad3a e Versus_