Presentazione della programmazione a un matematico [chiuso]


30

Attualmente sono un programmatore, ho quasi 16 anni e ho praticamente ristretto le mie carriere a qualcosa che coinvolge una laurea in informatica o una laurea in ingegneria elettrica (so che sono abbastanza diverse ma questa domanda riguarda il mio amico) ma il mio amico non è così sicuro.

È molto interessato alla matematica ed è molto bravo a farlo e penso che gli piacerebbe programmare ma non è disposto a provarlo ( modifica che è disposto a provare ma non ha mai fatto prima). Qualcuno può darmi un suggerimento per un linguaggio o uno strumento che potrebbe dilettarsi nella programmazione (a un livello ragionevolmente presunto) per risolvere i problemi di matematica o coinvolgere un qualche tipo di matematica.

Come ho detto, gli piace molto la matematica, ma penso che gli piacerebbe programmare, il problema è che non voglio che venga scoraggiato da cose che non sono rilevanti ai livelli introduttivi come l'allocazione della memoria e altri. So che è molto importante, ma il punto è che voglio che impari un po 'di programmazione con la matematica, quindi spero che se è abbastanza interessato da poter iniziare a imparare la programmazione come programmazione.

Modifica: Non è che non sia completamente disinteressato - più che non abbia esplorato attivamente l'area prima, forse perché non ne è informato. Non vorrei costringerlo a fare qualcosa che non vuole, lo vedo come una piccola spinta in modo che possa imparare a programmare. Se non gli piace - abbastanza onesto, non posso controllarlo e non voglio ma se si scopre che si diverte - questa spinta sarà stata la cosa giusta.


17
Perché vuoi spingere il tuo amico in una direzione a cui non è interessato?
HLGEM

3
Per la cronaca, molti programmatori con cui ho lavorato hanno una laurea in matematica. Inoltre, sono abbastanza buoni.
AngryBird,

1
Sono d'accordo con @HLGEM. Lo odierei se qualcuno mi spingesse verso la matematica pura e teorica. Allo stesso modo, chi vorrebbe quella roba lo odierebbe se fosse spinto verso la noiosa roba applicata.
Giobbe

4
Per mettere un po 'di prospettiva sulle cose: sei 16. Non sei un programmatore, sei uno studente che ha programmato. Il tuo amico non è un matematico, è uno studente a cui piace (e ha imparato alcuni) matematica. Mentre mi piace la risposta di @ perl.j, penso che tu possa avere una risposta eccessiva su questo.
Joel Etherton,

2
@ perl.j: Fino a quando qualcuno non ha la laurea necessaria per mostrare la "zona di studio primaria" necessaria come prova che non è un matematico. Persino qualcuno all'università il cui maggiore è la matematica non è ancora un matematico.
Joel Etherton,

Risposte:


60

Logo matematico

Se vuoi un linguaggio "simile alla matematica", Haskell è il tuo migliore amico (per il tuo migliore amico). Puoi facilmente creare nuove funzioni senza problemi. È la migliore raccomandazione linguistica che posso darti per te amico. Ecco alcuni link:

matematica

La Mathematica di Wolfram è un altro interesse che potrebbe avere.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

Sebbene sia costoso, ne vale la pena. Ecco alcuni link:

algoritmi

Gli algoritmi sono importanti per qualsiasi programma, ma il tuo amico dovrebbe iniziare con questi quando si sente a suo agio con una lingua. Ecco alcuni altri link:

Spero che sia di aiuto! Se hai domande o feedback, non esitare a commentare! A proposito, tutti questi collegamenti sono a risorse gratuite . Se vuoi un libro stampato, ho alcuni consigli, lascia un commento!



2
Sono un insegnante di matematica e posso consigliare Haskell come fantastico dal punto di vista matematico. Mi piace anche leggere alcune delle cose teoriche che ne derivano, molto più della maggior parte delle lingue.
Theo Belaire,

2
Se impara Haskell, in seguito può anche passare ad Agda , una lingua tipicamente dipendente adatta per fare prove.
Peter C,

4
@ SK-logic Come puoi dirlo? La matematica si basa sull'apprendimento di nuovi sistemi logici e sul loro ragionamento (non dimenticare che i matematici hanno inventato la macchina di Turing). Pensi sinceramente che qualcuno in grado di gestire la matematica non possa gestire l'idea della mutazione variabile? E il mio punto è, fare qualcosa di semplice come una mutazione variabile in Haskell richiede una monade in negozio! Dire che è più facile di quanto x = x + 1sia semplicemente ridicolo.
JeremyKun,

2
@Bean, quella fu in realtà la mia prima reazione a una dichiarazione di assegnazione (e non sapevo nulla oltre alle equazioni lineari primitive della matematica di allora). Da allora ho visto ripetutamente la stessa reazione. Ho deliberatamente cercato di introdurre concetti di programmazione funzionale a quelli che non avevano precedenti esperienze di programmazione, passando gradualmente alle cose imperative. Prima era sempre facile, e tutto quel "WTF?!?" sembra sempre iniziato solo con l'introduzione dei concetti imperativo e OOP.
Logica SK

18

La programmazione funzionale e i linguaggi della famiglia ML o Haskell tendono ad adattarsi abbastanza bene alle menti dei matematici.


Verissimo! Elenchi infiniti e tutto ciò che è ottimo per le menti della matematica.

14

Se si specializzerà in matematica, finirà sicuramente per fare un bel po 'di programmazione, se non in linguaggi di basso livello come il C ++, quindi in livelli più alti, specifici per la matematica, linguaggi come Maple o Mathematica a seconda di ciò che sta facendo.

Inoltre, a seconda della sua area di ricerca, potrebbe finire per fare matematica applicata o analisi statica, entrambe le quali richiederanno una notevole quantità di programmazione. Ora è meglio che si abitui alla programmazione, indipendentemente da ciò che decide.


1
Puoi anche provare a intrufolare Python nella sua mente con Sage ( sagemath.org ).
Anton Barkovsky,

Ecco un altro linguaggio di livello superiore, specifico per la matematica: math.uiuc.edu/Macaulay2
RyanTM

Ti suggerisco di permettergli di scoprire la programmazione. Quando è esposto ad esso, e certamente gli sarà richiesto di fare qualcosa che gli impone di fare qualcosa in un linguaggio specifico matematico, gli piacerà o lo odierà. Se gli piace quando succede, sarà in grado di selezionare le lingue più adatte a lui. Non è che non dovresti aiutare il tuo amico, se non ha mostrato alcun interesse, quindi dovresti lasciarlo cadere.
Ramhound,

12

Insegnagli Haskell. È una lingua in cui puoi pensare come in matematica:

  • Una funzione è qualcosa che mappa l'input all'output
  • Le cose vengono valutate secondo necessità
  • Inferenza del tipo e un sistema di tipo folle
  • Sintassi conveniente
  • Ottima comunità (ad esempio su StackOverflow )
  • monadi

Ti suggerirei di mostrargli http://learnyouahaskell.com , uno dei migliori tutorial per Haskell.


11

Come qualcuno che ha studiato matematica (ho una laurea in matematica pura e ho appena conseguito la laurea in matematica applicata / statistica) e in seguito ho capito il divertimento / la praticità / l'importanza della programmazione più avanti nella mia carriera, apprezzo molto questa domanda. Vorrei avere un amico come te 10 anni fa per spingermi verso la programmazione.

Dovresti dare un'occhiata a Project Euler . Che cos'è?

Project Euler è una serie di impegnativi problemi di programmazione matematica / informatica che richiedono più di semplici approfondimenti matematici per risolvere. Sebbene la matematica ti aiuti ad arrivare a metodi eleganti ed efficienti, per risolvere la maggior parte dei problemi saranno necessari l'uso di un computer e capacità di programmazione.

Sebbene non sia un suggerimento specifico per la lingua, sarebbe un grande motivatore per iniziare a programmare (specialmente se esiste già un interesse per la matematica). I problemi iniziano molto facilmente e si avvicinano ma diventano rapidamente molto difficili e / o difficili. Una buona sfida e motivazione che probabilmente apprezzerete entrambi.

Per quanto riguarda quale linguaggio usare, ho esperienza con C ++, R, Matlab e Mathematica che sono tutti fantastici e ampiamente utilizzati all'interno della comunità matematica. Ma più specificamente, suggerisco fortemente di imparare Python che è molto utile per la matematica ma non è così limitato alla matematica come alcuni degli altri (nel caso in cui voglia più opzioni più avanti nella vita). È facile iniziare con Python ma ci sono tonnellate di cose da imparare. È anche gratuito a differenza di alcuni degli altri. Anche il C ++ potrebbe essere una buona scelta, ma potrebbe avere più ostacoli dall'inizio.


+2 per Project Euler, stava per aggiungere un commento sulla domanda principale fino a quando non ho visto la tua risposta. OP e il suo amico dovrebbero assolutamente affrontarlo insieme.
cobaltduck,

10
  • Per i matematici, L'accensione più grande è Algorithms. Il tuo amico deve iniziare a implementarli in Python (è amichevole).

  • Ambienti di calcolo numerico come MATLAB saranno utili per manipolazioni di matrici, grafici di funzioni e dati, implementazione di algoritmi.


10

Dipende dall'area della matematica a cui è interessato.

Se è più interessato all'Algebra Astratta o alla Combinatoria, probabilmente vorrebbe Haskell in quanto il complesso sistema di tipi consente la programmazione diretta di una varietà di matematica. ATS potrebbe anche essere un'opzione.

Consiglierei Learn You a Haskell per un ottimo prodotto per un'esercitazione introduttiva e Strutture dati puramente funzionali per algoritmi.

Se è più interessato all'analisi delle matrici, alle equazioni differenziali o ai sistemi dinamici, consiglierei Matlab , NumPy o Octave . APL è tramite Dyalog potrebbe anche essere di interesse; anche se non l'avrei iniziato su questo. Ricette numeriche , mentre in C ++ possono essere adattate per servire come una buona guida agli algoritmi.

Se vuole fare statistiche, allora R è la scelta naturale.


5

Sono uno studente laureato in matematica e ho conseguito la laurea in informatica. Tengo un blog chiamato Math ∩ Programming in cui esploro le applicazioni della matematica alla programmazione (e viceversa), e devo ammettere che trovo la maggior parte degli aspetti meno matematici dell'informatica piuttosto asciutti e senza ispirazione (in sostanza, la mia opposizione a tutti gli hack ridicoli che vanno nella programmazione di sistemi nella mia esperienza nel settore).

D'altra parte, sul mio blog guardo a problemi come il riconoscimento facciale (un po 'di algebra lineare), metodi di crittografia, macchine di Turing e automi cellulari, modelli per prevedere l'attività di serial killer, motori di ricerca e un sacco di altri concetti matematici . La parte migliore è che riesco ad attuare le idee, e tutte le mie!

Per convincere il tuo amico ad amare la programmazione come tutti noi, trovalo davvero interessanteprogetto. L'aspetto della programmazione non si attaccherà senza il suo lavoro verso un prodotto che trova bello. Per quanto riguarda le lingue, consiglio Mathematica, Racket (un derivato di Scheme molto amichevole, ma comunque potente), Python e Haskell. Mathematica è probabilmente il migliore, perché può implementare selettivamente le proprie funzioni matematiche e utilizzare le librerie integrate di Mathematica per completare il progetto (ad esempio, scrivere una funzione che calcola i coefficienti di Fourier e quindi utilizzare Mathematica per fare il resto dell'analisi, ad esempio come filtro, generazione di immagini, ecc.). Anche gli argomenti di base come l'integrazione offrono alcuni progetti affascinanti (regole di quadratura diverse, integrazione di Monte Carlo, una transizione delicata all'apprendimento automatico con grandi set di dati).

Inoltre, sembra che molte delle risposte qui provengano da persone che non fanno matematica o che non hanno usato le lingue che stanno suggerendo di fare software matematico. Il motivo per cui le persone raccomandano Haskell è perché è il più vicino possibile all'implementazione letterale della teoria delle categorie e si adatta bene con alcune definizioni matematiche di alcuni concetti di base. Ma se il tuo amico è vicino alla tua età, allora non è pronto per la teoria delle categorie matematicamente (quella maturità è più o meno inutile fino alla scuola di specializzazione e malvagia difficile da insegnare a te stesso), e come prima lingua Haskell ha il più ripidocurva di apprendimento delle lingue suggerite (forse Prolog è più ripido). Ho usato Haskell per implementare un compilatore Javascript e ho finito con un bellissimo ed elegante pezzo di codice, ma per cose intuitive come la mutazione variabile, devi già dilettarti in monadi non banali.

Python e Mathematica saranno molto più amichevoli e Mathematica ha la curva di apprendimento più superficiale semplicemente perché tutte le librerie sono impacchettate in una bella interfaccia utente con una fantastica documentazione (basta premere F1!). D'altra parte, c'è un libro di cui ho sentito parlare (ma che non ho letto) che fornisce contemporaneamente una transizione alla matematica avanzata e un'introduzione a Haskell . Sembra avere recensioni Amazon positive, quindi potresti voler dare un'occhiata. Può passare a linguaggi come C # e Java se mai vuole fare cose del settore, ma molto probabilmente non avrà mai bisogno di entrare in quella giungla (e molte cose di matematica del settore sono comunque pure Matlab).

Ma come ho detto, con l'apprendimento del progetto giusto la lingua diventa una gioia, qualunque sia il progetto.


3

Se il tuo amico ama la logica formale e ritiene che l'intelligenza artificiale sia interessante, potrebbe dare un'occhiata a Prolog .

Con questo linguaggio, dichiari i tuoi predicati (ipotesi iniziali, "fatti") e le regole di inferenza ("relazioni"), e poi fai domande.

Prolog poi si spegne e capisce se è possibile rispondere alla domanda utilizzando solo i fatti e le relazioni, e in tal caso, ti dice la risposta.

Quindi dici che "Tom è un gatto" e "tutti i gatti sono animali" e chiedi "Tom è un animale?" e otterrai la risposta "vera".

Oppure puoi chiedere di "elencare tutti gli animali che conosci" e otterrai il singolo elenco di articoli "tom".

Naturalmente la sintassi è un po 'più complicata di così, ma hai l'idea generale.


Prolog è frustrantemente vicino alla logica del primo ordine, ma è davvero incompatibile, dal momento che non ha modo di distinguere "non dimostrato" e "falso". È un linguaggio pulito per certi versi, ma non lo spingerei su un matematico e non lo chiamerei logica di programmazione.
David Thornley,

Non puoi semplicemente testare la negazione?
Bill Michell,

2

Il modo migliore per incoraggiare il tuo amico a provare potrebbe essere quello di iniziare a programmare senza pensare troppo al fatto che sta programmando.

Una volta che è pronto per affrontare di più la "programmazione", puoi iniziare con lo stesso libro e imparare la programmazione da una base più matematica. Due dei miei libri preferiti attuali sono:

SICP è liberamente visualizzabile sul sito web del MIT Press .

Se il tuo amico è matematicamente incline, Lisp non presenterà alcuna difficoltà e ti libera dal dover imparare qualsiasi sintassi speciale. Penso che Lisp sia più facile da imparare di Haskell.


1

Sono d'accordo con l'Haskell, ma da un punto di vista pratico, dovrebbe anche imparare una lingua su una macchina astratta ampiamente usata. Intendo un linguaggio JVM o ovviamente .NET.

Ci sono lingue su queste piattaforme che sono un po 'più interessanti delle lingue di punta. Sulla JVM dai un'occhiata a Clojure e Scala. Sulla piattaforma .NET dai un'occhiata a F #.

C'era anche un linguaggio .NET di Microsoft Research chiamato c-omega che era molto interessante, ma era solo un progetto di ricerca.


1

Matlab è comunemente usato per la programmazione matematica e scientifica. È un linguaggio basato su script, non difficile da imparare e tutti i problemi di memoria sono nascosti all'utente.

Ingegneria del software e ingegneria elettrica possono essere combinati in ingegneria informatica.


0

Se il tuo amico non è disposto a provare la programmazione, non vedo perché vuoi forzare il problema. Penso che una chiave per essere un programmatore sia la volontà di imparare, e se non è disposto a imparare, probabilmente la programmazione non fa per lui

Detto questo, la soluzione migliore potrebbe essere quella di creare un piccolo programma e mostrarglielo. Forse lascia alcune parti incompiute e vedi se riesci a convincerlo ad aiutarti a finirlo. Lo so per me, gli algoritmi e la logica dietro un programma sono molto più interessanti che scrivere la sintassi, quindi forse prova ad aiutarlo con la logica del programma, e poi vai a scrivere codice e fargli vedere il risultati di esso.

Se mostra qualche interesse per il codice sorgente, allora mostragli come scrivere le sue cose. Personalmente penso che la lingua stessa non abbia importanza, purché sia ​​facile da imparare e abbia molta documentazione.


0

C'è un'intera libreria e comunità matematica gratuite costruite attorno a Python. Comincerei con "Sage", dovrebbe davvero divertirsi ad usarlo e imparerà incidentalmente la programmazione in Python.


0

Penso che dovresti mostrare al tuo amico alcune varianti diverse, come:

  • C
  • LISP / Scheme
  • DI BASE
  • bourne-shell
  • Prolog

Penso che C e LISP siano buoni punti di partenza, dimostrando che lingue diverse possono essere più adatte a compiti diversi. Non credo nell'uso di Haskell o Erlang per tutto.

Anche il codice macchina (o assemblatore) per un semplice processore potrebbe essere interessante. Sono sempre stato felice di aver iniziato con il codice macchina sul mio primo C64 . ( MOS 6510 ) Esperienza pratica che è difficile ottenere da adulti con un tempo limitato da "sprecare".


Non sono d'accordo. Perché un bambino, interessante in matematica, sarebbe attratto dal codice macchina? E perché C? L'assemblea presuppone troppe conoscenze sui processori. C fa anche molti requisiti che sono meglio lasciare a qualcuno che vuole imparare una programmazione seria: puntatori, registri, scoping, tipi. Per una prima introduzione alla programmazione per una persona simile, qualcosa che si concentra sugli algoritmi o sulle applicazioni di idee matematiche (probabilità, casualità, simulazioni) è molto meglio. Python, Lisp / Forth, Basic anche. Bourne-shell ?? Perché? ...
Assad Ebrahim,

0

Per me, la programmazione parte dal voler "fare qualcosa", un "what if?" domanda:

  • "Vorrei creare il mio sito Web", quindi scopri HTML, ecc.

  • "Odio dover fare clic su X o vedere Y su questo sito Web ogni volta che visito. Non c'è modo di automatizzarlo?" Quindi impari a conoscere bookmarklet o scrivere estensioni del browser.

  • "Voglio catalogare tutta la mia musica e nessuno degli strumenti che ho visto farlo nel modo che voglio", così impari a conoscere i database.

  • "Voglio tenere traccia delle spese per il mio Math Club", così impari a conoscere i fogli di calcolo, le macro di programmazione o forse anche i database.

Affinché l'unità sia davvero lì, il problema di fondo deve venire da lui . Vorrei provare a trovare un problema che vuole risolvere e quindi scegliere uno strumento / lingua / sistema che gli consenta di automatizzare / programmare la soluzione.


-2

Secondo me, Haskell e Mathematica sono la strada da percorrere. La maggior parte dei linguaggi funzionali sono utili anche per la matematica. Anche Python è buono, controlla la documentazione matematica .

Questo modulo è sempre disponibile. Fornisce accesso alle funzioni matematiche definite dallo standard C.

Queste funzioni non possono essere utilizzate con numeri complessi; usa le funzioni con lo stesso nome dal modulo cmath se hai bisogno di supporto per numeri complessi. La distinzione tra funzioni che supportano numeri complessi e quelle che non lo fanno viene fatta poiché la maggior parte degli utenti non vuole imparare la matematica necessaria per comprendere i numeri complessi. La ricezione di un'eccezione anziché un risultato complesso consente il rilevamento anticipato del numero complesso imprevisto utilizzato come parametro, in modo che il programmatore possa determinare come e perché è stato generato in primo luogo.

Le seguenti funzioni sono fornite da questo modulo ...

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.