Risorse teoriche di autoapprendimento informatico per programmatori


14

Sono un ingegnere informatico piuttosto abile, ma non conosco molta teoria. Voglio imparare più teoria. Argomenti particolari che mi interessano sono: complessità computazionale, linguaggi formali e teoria dei tipi. Ma sono perplesso su come iniziare a conoscere questi campi.

Quali risorse consiglieresti a qualcuno che vuole imparare più teoria attraverso lo studio autonomo? Esistono guide teoriche di autoapprendimento informatico per ingegneri del software?


3
Dipende da cosa vuoi imparare. Arora-Barak offre un'introduzione approfondita alla teoria della complessità computazionale (ed è disponibile gratuitamente online). Quindi è un buon punto di partenza.
Thomas supporta Monica il

4
Hai frequentato corsi di teoria al college / università come strutture dati, algoritmi, ecc.? Se non hai seguito corsi di teoria universitaria richiesti in genere, i libri di testo per tali corsi sarebbero un buon punto di partenza. Dopodiché puoi dare un'occhiata agli articoli di Wikipedia, alla nostra lista di libri e alla lista dei video , ai corsi online di Coursera / Udacity / EdX / ... Coursera ha dei corsi di teoria piuttosto carini.
Kaveh,

Cosa hai studiato al college?
Omar Shehab,

In che tipo di lingue programmi? Gran parte del CS teorico può essere appreso insieme a qualcosa di concreto. Ad esempio, se vuoi saperne di più sui linguaggi formali, i linguaggi / espressioni regolari (ad esempio quelli di regexp) sono un buon punto di partenza, così come le informazioni sui compilatori. Per la teoria dei tipi, potresti voler giocare con un linguaggio tipicamente statico come haskell, F # o ML.
Baby Dragon,

prova New Turing Omnibus di Dewdney come sezione introduttiva / sondaggio / introduzione ampia / accessibile. vedi anche libri di scienze pop che ispirano TCS
vzn,

Risposte:


7

È un campo ampio con alcune aree abbastanza diverse.

Vorrei iniziare con alcune delle idee fondamentali su cosa siano i computer: Hopcroft e Ullman, "Introduzione alla teoria degli automi, lingue e computazione".

Il motivo per cui lo consiglierei in particolare è la loro enfasi sulle prove. Ti guidano attraverso un modo rigoroso di pensare. Questa è la differenza tra scrivere programmi ed essere scientifici.


1
Grazie! Non so se questo cambi qualcosa, ma in realtà ho delle basi in matematica basata sulle prove (probabilmente avrei dovuto menzionarlo nella domanda). Ho fatto analisi reali basate su prove, topologia a punti e algebra astratta.
Henry H.

Quindi sarai in grado di risolverlo molto rapidamente :)
Kate F,

è una differenza ma non la differenza. CS implica molti altri principi ecc.
vzn,

Non penso che il bisogno di rigore sia davvero una differenza tra programmazione e matematica. La programmazione e la dimostrazione di teoremi sono compiti molto correlati (cfr. Isomorfismo di Curry-Howard) e quasi nessun compito non matematico richiede più rigore della programmazione. I compilatori perdonano molto meno gli errori degli umani che leggono le prove.
Jan Johannsen,

2
@JanJohannsen Non sono affatto d'accordo - per esempio, vedi Comportamento indefinito per C.
Kate F

9

Esistono diversi modi per conoscere la teoria dei tipi. Per un programmatore che lavora, Tipi e linguaggi di programmazione di B. Pierce è un buon inizio. Anche le basi pratiche per i linguaggi di programmazione di R. Harper potrebbero essere buone. Se vuoi un po 'di facile lettura della semantica operativa, ti consiglio di G. Winskel, La semantica formale dei linguaggi di programmazione: un'introduzione . Con T. Nipkow, G. Klein, Concrete Semantics, una variante del libro di Winskel è stata formalizzata per l'assistente alla prova interattiva Isabelle / HOL. Ho il sospetto che sia davvero difficile fare i conti con un prover solo da questo (o qualsiasi) libro, vorresti che un esperto nelle vicinanze facesse delle domande. Se vuoi un approccio più matematico alla teoria dei tipi, potresti guardare JR Hindley, JP Seldin, Lambda-Calculus e Combinators: An Introduction , o H. Barendregt's, Lambda Calculi with Types . Anche se non consiglierei di partire da Barendregt.

Se vuoi una sola raccomandazione, direi di leggere tutto Pierce tranne la Parte VI (sistemi di ordine superiore) e implementare le lingue dei giocattoli di cui parla il libro. Finirai con una solida base nella teoria dei tipi e probabilmente anche un programmatore migliore.


2

Raccomando computabilità, complessità e lingue di Martin Davis, Ron Sigal ed Elaine Weyuker.


È un bel libro per TCS vecchio stile. Ad eccezione della parte della semantica teorica del dominio, che può essere ignorata.
Martin Berger,

1

Sono un grande fan di Teoria e Algoritmi. Una volta ho avuto l'opportunità di visitare Theoretical Computer Science presso Indian Institute of Technology, Madras (IIT-M), India. Ho conosciuto molti teorici lì all'IIT-M. Quando ci andai non avevo idea di cosa fosse la Teoria, ma oggi ne sono totalmente innamorato.

Grazie a @Kate F per il puntatore, sì Hopcroft e Ullman sono un ottimo punto di partenza.

Tuttavia, ecco come ho iniziato,

  1. Leggi l'Introduzione agli algoritmi di Cormen. <\ Br> Questo è un ottimo punto di partenza. Quando studi, cerca di capire ogni prova il più a lungo possibile. Se capisci bene la prova, prova a codificare la stessa logica in qualsiasi lingua di tua scelta. (Ci vuole un po 'di più ma vale la pena provare)

  2. Segui le principali conferenze in Teoria come
    FOCS
    SODA
    STOC
    EC (Commercio elettronico) - Teoria dei giochi algoritmica
    COLT (Conferenza sulla teoria dell'apprendimento) - Teoria dell'apprendimento
    CRYPTO - Crittografia
    SOCG (Simposio sulla geometria computazionale) - Geometria computazionale
    CCC (Conferenza su Complessità computazionale) - Teoria della complessità

Anche se non capisci molto, prova a leggere e PENSARE il più possibile. Devi fare quante più prove possibili ..

  1. Questo è un posto meraviglioso da vedere se stai pensando alla complessità computazionale in particolare ( Questo è di Stanford ).
  2. Segui il Prof. Sanjeev Arora, Boaz Barak, Jelani Nelson, Madhu Sudan
  3. Ecco una serie di informazioni sintetizzate nel campo della complessità computazionale
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.