Introduzione alla programmazione per un matematico [chiuso]

30

Attualmente sono un programmatore, ho quasi 16 anni e ho praticamente ristretto le mie carriere a qualcosa che riguarda una laurea in Informatica o Ingegneria Elettrica (so che sono molto diverse ma questa domanda riguarda il mio amico ) ma il mio amico non ne è così sicuro.

È molto interessato alla matematica ed è molto bravo in questo e penso che gli piacerebbe programmare, ma non è disposto a provarlo ( edit he è disponibile provare ma non ha mai fatto prima). Qualcuno può darmi un suggerimento per un linguaggio o uno strumento che potrebbe dilettarsi nella programmazione (ad un livello ragionevolmente di base presumo) per risolvere problemi di matematica o coinvolgere qualche tipo di matematica.

Come ho detto, si diverte molto con la matematica, ma penso che gli piacerebbe programmare, il problema è che non voglio che sia scoraggiato da cose che non sono rilevanti a 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, speriamo che se è abbastanza interessato da poter iniziare a imparare la programmazione come programmazione.

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

    
posta ell 08.07.2014 - 23:45
fonte

17 risposte

60

Sevuoiunlinguaggio"matematico", 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:

Mathematica

Wolfram's Mathematica è un altro interesse che può 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.

Anche se è costoso, ne vale la pena. Ecco alcuni link:

Algoritmi

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

Spero che questo aiuti! Se avete domande o commenti non esitate a commentare! A proposito, tutti questi link sono per le risorse gratuite . Se vuoi un libro stampato, ho alcuni consigli, lascia un commento!

    
risposta data 11.05.2014 - 17:50
fonte
18

La programmazione funzionale e i linguaggi nella famiglia ML o Haskell tendono ad adattarsi abbastanza bene alla mente dei matematici.

    
risposta data 14.11.2011 - 20:42
fonte
14

Se si è laureato in matematica, allora senza dubbio finirà per fare un bel po 'di programmazione, se non in linguaggi di basso livello come il C ++, quindi in livelli superiori, matematica specifica, linguaggi come Maple o Mathematica a seconda di cosa sta facendo.

Inoltre, a seconda della sua area di ricerca, può finire per fare matematica applicata o analisi statistica, entrambe richiedono una quantità significativa di programmazione. È meglio abituarsi alla programmazione ora, indipendentemente da ciò che decide.

    
risposta data 14.11.2011 - 20:31
fonte
12

Insegnagli Haskell. È un linguaggio in cui puoi ragionare proprio come in matematica:

  • Una funzione è qualcosa che associa l'input all'output
  • Le informazioni vengono valutate in base alle esigenze
  • Immissione del tipo e un sistema di tipo pazzo
  • Comoda sintassi
  • Grande community (ad esempio su StackOverflow )
  • Monadi

Ti suggerisco di mostrargli link , uno dei migliori tutorial per Haskell.

    
risposta data 23.05.2017 - 14:40
fonte
11

Come qualcuno che ha studiato matematica (ho un B.S. in matematica pura e appena ho ricevuto il mio M.S. in Applied Math / Statistics) e più tardi ho realizzato il divertimento / la praticità / 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 controllare entrambi Project Euler . Che cos'è?

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

Sebbene non sia un suggerimento specifico per una lingua, sarebbe un grande stimolo per iniziare a programmare (specialmente se c'è già un interesse per la matematica). I problemi iniziano in modo molto semplice e accessibile, ma diventano rapidamente difficili e / o difficili. Una buona sfida e motivazione che entrambi probabilmente apprezzeranno.

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

    
risposta data 17.11.2011 - 21:34
fonte
10
  • Per i matematici, la più grande accensione è Algoritmi. Il tuo amico deve iniziare a implementarli in Python (è amichevole).

  • Gli ambienti di calcolo numerico come MATLAB saranno utili per manipolazioni di matrici, tracciamento di funzioni e dati, implementazione di algoritmi.

risposta data 14.11.2011 - 20:18
fonte
10

Dipende dall'area della matematica a cui è interessato.

Se è più interessato ad Abstract Algebra o Combinatorics, probabilmente gli piacerebbe Haskell dato che il sistema di tipi complessi consente la programmazione diretta di una varietà di matematica. ATS potrebbe anche essere un'opzione.

Consiglierei Imparare un Haskell per un grande bene per un tutorial introduttivo e Strutture dati puramente funzionali per algoritmi.

Se è più interessato all'analisi Matrix, alle equazioni differenziali o ai sistemi dinamici, ti consiglio Matlab , NumPy o Octave . L'APL può essere di interesse anche tramite Dyalog ; anche se non lo comincerei a farlo. Ricette numeriche , mentre in C ++ può essere adattato per fungere da buona guida per gli algoritmi.

Se vuole fare statistiche allora R è la scelta naturale.

    
risposta data 15.11.2011 - 00:08
fonte
5

Sono uno studente laureato in matematica e ho fatto il mio laureando 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 secca e priva di ispirazione (in fondo, la mia opposizione a tutti i ridicoli hack che entrano nella programmazione dei sistemi nella mia esperienza nell'industria).

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

Per far sì che il tuo amico ami programmare come tutti noi, trovalo un progetto interessante davvero interessante. L'aspetto della programmazione non si attaccherà senza il suo lavoro verso un prodotto che trova bello. Per quanto riguarda le lingue, raccomando Mathematica, Racket (una derivata Scheme molto amichevole, ma comunque potente), Python e Haskell. Mathematica è probabilmente il migliore, perché può implementare in modo selettivo le proprie funzioni matematiche e utilizzare le librerie incorporate di Mathematica per completare il progetto (ad esempio, scrivere una funzione che calcoli i coefficienti di Fourier, quindi utilizzare Mathematica per eseguire 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 nell'apprendimento automatico con grandi set di dati).

Inoltre, sembra che molte delle risposte provengano da persone che non fanno matematica, o che non hanno usato le lingue che suggeriscono di fare software matematico. La ragione per cui le persone raccomandano Haskell è perché è il più vicino possibile a un'attuazione 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 è matematicamente pronto per la teoria delle categorie (che la maturità è più o meno inutile fino alla scuola di specializzazione, e malvagiamente difficile da insegnare), e come prima lingua Haskell ha il la più ripida curva di apprendimento delle lingue suggerite (forse il Prolog è più ripido). Ho usato Haskell per implementare un compilatore Javascript, e ho finito con un pezzo di codice elegante molto bello, ma per cose intuitive come la mutazione variabile, devi già dilettarti in monade non banali.

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

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

    
risposta data 20.12.2011 - 02:05
fonte
3

Se il tuo amico gode di una 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 regole di inferenza ("relazioni"), quindi fai domande.

Prolog quindi si attiva e risolve se è possibile rispondere alla domanda utilizzando solo i dati e le relazioni forniti e, in caso affermativo, ti dice la risposta.

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

Oppure puoi chiedere di "elencare tutti gli animali che conosci" e otterrai la lista "tom" di singoli elementi.

Ovviamente la sintassi è un po 'più complicata, ma hai un'idea generale.

    
risposta data 15.11.2011 - 13:13
fonte
2

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

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

SICP è liberamente visualizzabile sul sito web MIT Press .

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

    
risposta data 13.12.2011 - 18:08
fonte
1

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

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

    
risposta data 14.11.2011 - 23:17
fonte
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.

    
risposta data 17.11.2011 - 16:27
fonte
0

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

Ma detto questo, la soluzione migliore potrebbe essere quella di creare un piccolo programma e mostrarlo a lui. Forse lascia alcune parti di esso incompiute e vedi se riesci a farlo interessare ad aiutarti a finirlo. Lo so per me, gli algoritmi e la logica di un programma sono molto più interessanti della scrittura della sintassi, quindi forse prova a fargli assistere con la logica del programma, e poi vai a codificare la cosa e fagli vedere la risultati.

Se mostra qualche interesse nel codice sorgente, mostragli come scrivere le sue cose. Personalmente penso che il linguaggio in sé non sia importante purché sia facile da apprendere e abbia un sacco di documentazione.

    
risposta data 14.11.2011 - 21:35
fonte
0

C'è un'intera libreria e comunità matematica libera costruita attorno a Python. Comincio con "Sage", dovrebbe essere davvero felice di utilizzarlo e apprenderà la programmazione in Python.

    
risposta data 15.11.2011 - 00:32
fonte
0

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

  • C
  • LISP / Scheme
  • 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 di Erlang per tutto.

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

    
risposta data 15.11.2011 - 13:27
fonte
0

Per me, la programmazione parte dal voler "fare qualcosa", un "e se?" domanda:

  • "Mi piacerebbe creare il mio sito web", quindi informati sull'HTML, ecc.

  • "Detesto dover fare clic su X o che io veda Y su questo sito Web ogni volta che visito. Non esiste un modo per automatizzarlo?" Quindi scopri i bookmarklets o le estensioni del browser.

  • "Voglio catalogare tutta la mia musica e nessuno degli strumenti che ho visto lo fa nel modo in cui voglio", così apprendi i database.

  • "Voglio tenere traccia delle spese per il mio club di matematica", in modo da conoscere fogli di calcolo, macro di programmazione o anche database.

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

    
risposta data 21.11.2011 - 06:16
fonte
-2

Haskell e Mathematica sono la strada da percorrere, secondo me. La maggior parte delle lingue funzionali è utile anche per la matematica. Python è anche buono, consulta la documentazione matematica .

This module is always available. It provides access to the mathematical functions defined by the C standard.

These functions cannot be used with complex numbers; use the functions of the same name from the cmath module if you require support for complex numbers. The distinction between functions which support complex numbers and those which don’t is made since most users do not want to learn quite as much mathematics as required to understand complex numbers. Receiving an exception instead of a complex result allows earlier detection of the unexpected complex number used as a parameter, so that the programmer can determine how and why it was generated in the first place.

The following functions are provided by this module...

    
risposta data 25.05.2013 - 11:33
fonte

Leggi altre domande sui tag