Come faccio a studiare completamente l'informatica? [chiuso]

45

Essendo un programmatore completamente autodidatta, mi piacerebbe se potessi migliorare me stesso con l'autoapprendimento del corso di informatica impartito a un tipico CS grad.

Trovare risorse diverse su Internet è stato facile, naturalmente c'è MIT open course ware , e ci sono corsi Coursera da Stanford e altre università. Ci sono numerose altre risorse aperte sparse su Internet e alcuni buoni libri che sono ripetutamente raccomandati.

Ho imparato molto, ma il mio studio è strongmente frammentato, il che mi infastidisce molto. Mi piacerebbe Se da qualche parte, potrei trovare un percorso che dovrei seguire e uno stack a cui dovrei limitarmi, in modo da poter essere sicuro di quali parti essenziali dell'informatica Ho studiato e poi approccio sistematicamente quelli che non ho.

Il problema con Wikipedia è che non ti dice cosa è essenziale ma insiste per essere un riferimento completo.

MIT open course ware per Computer Science and Electrical Engg. ha un enorme elenco di corsi che non ti dicono quali corsi sono essenziali e quali facoltativi in base all'interesse / requisito della persona. Non ho trovato alcun riferimento a un ordine in cui si dovrebbero studiare materie diverse.

Quello che mi piacerebbe è creare un elenco che possa seguire, come questo fittizio

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

Come puoi vedere chiaramente, non ho idea di cosa siano gli argomenti specifici dell'informatica.

Sarebbe estremamente utile, anche se qualcuno indicasse i corsi essenziali del corso del MIT (+ materie essenziali non presenti al MIT OCW) in un ordine di studio raccomandato.

Elencherò i Post che ho già svolto (e non ho ottenuto quello che stavo cercando lì)

link - la risposta migliore dice che non è vale la pena studiare cse

link - punta a MIT OCW

link

link

    
posta Optimus 10.06.2012 - 13:50
fonte

4 risposte

24

Ho visto materiale del corso del MIT, ed era terribilmente cattivo . Avevano materiali didattici che richiedevano VC5, mazzi di variabili globali implicite, passaggi di colori come "Blue" invece di ARGB a 32 bit, per non parlare di 4x [0,1] float, quel genere di cose. Non mi fiderei di un curriculum o codice solo perché proviene da un'università di grande nome.

La mia laurea in CS (da un'università che è la top 10 nel Regno Unito per CS) consisteva in:

Primo anno:

  1. OOP- le super basi
  2. Computer Systems - roba simile, rappresentazioni di interi binari.
  3. Teoria dei database relazionali di base
  4. Matematica per CS - geometria semplice 2D e 3D.
  5. Un po 'di HTML / JS- roba per principianti completa
  6. Un pezzetto di PHP altrettanto piccolo.
  7. Un tocco di programmazione funzionale

Secondo anno:

  1. Problemi legali nell'informatica - roba simile, leggi che ruotano attorno protezione dei dati dell'utente
  2. Linguaggi di programmazione: la gerarchia di Chomsky e il lexing erano coperti
  3. Sistemi operativi, reti e Internet - principalmente cose come memoria virtuale e paging, stack IP
  4. Computer grafica 2D - per lo più solo dimostrando teoremi del sottostante matematica
  5. AI- descrizioni di base di reti neurali, sistemi di credenze bayesiane, ecc.
  6. Analisi dei requisiti- breve panoramica di UML, requisiti funzionali / non funzionali.
  7. Progetto di squadra

Terzo anno:

  1. Analisi dell'algoritmo - teoria della complessità, principalmente
  2. Implementazione di linguaggi di programmazione - tecniche di analisi LL / LR, CFG e cose simili.
  3. Gestione progetti software - uno sguardo ai modelli Waterfall / Agile
  4. International Computing - Unicode e altre localizzazioni divertenti
  5. AI avanzato - non lo so, onestamente, e presto ho un esame
  6. Computer grafica 3D - principalmente, ancora una volta, solo dimostrando teoremi per matrici di rotazione e tali
  7. Sistemi basati su agenti - principalmente sugli agenti asincroni che comunicano, raggiungere decisioni di gruppo, ecc.
  8. Applicazioni a microprocessore - elaborazione del segnale digitale
  9. Robotica - copre cose come la visione artificiale e la decisione del robot fare a un livello elevato

Come noterai, praticamente tutto è "le basi" di qualcosa e quasi nulla è coperto da un'utile profondità.

Le cose che valevano veramente la pena, essenziali:

  1. OOP- e poi ancora un po ', e poi ancora un po'
  2. Programmazione funzionale- anche un po 'di più. Prova a scegliere una lingua come C ++ o C # in cui non devi re-imparare la sintassi e gli strumenti, ecc, per coprire entrambi gli stili.
  3. La memoria virtuale della parte del sistema operativo è buona cosa da sapere, così come la modalità kernel vs la modalità utente. Salta la segmentazione e lo stack IP.
  4. Analisi dei requisiti: deve essere utile per qualsiasi progetto
  5. Analisi dell'algoritmo: sapere quale sia la complessità algoritmica, come ridurla e quale sia la complessità delle operazioni comuni è importante.
  6. Modelli di gestione del progetto software: molti negozi fanno Agile e molti altri ancora eseguono modelli in stile Waterfall.
  7. Informatica internazionale - Unicode è essenziale

Le cose che valeva la pena di fare, opzionalmente:

  1. Linguaggi di programmazione: gerarchia di Chomsky, strumenti di lexing e parsing. Evita la teoria dei parser LL o LR: un parser LR può accettare praticamente qualsiasi CFG realistico non ambiguo e, quando ciò non è possibile, la documentazione del generatore di parser te lo dirà.
  2. Grafica 3D. Non intendo "Dimostrare che questa è una formula della matrice di rotazione", sprechi di tempo, intendo effettivamente "Questo è un vertex shader", o GPGPU. È divertente, interessante e diverso.
  3. Alcuni elementi della IA sono divertenti, come i potenziali campi e il path-finding.

La roba è essenziale ma non l'ho comunque trattata:

  1. Concorrenza: un must, almeno le basi, per chiunque nel 2012.

Il resto era una completa perdita di tempo. Sfortunatamente, la maggior parte di questi nove punti che già conoscevo o raccoglieva le parti utili altrove. Se leggi cose come il problema di FizzBuzz diventa subito chiaro che non hai davvero bisogno di sapere tutto quello che c'è da sapere sul pacco - che è una fortuna, dal momento che la mia laurea e molti dei materiali che ho visto online per altri titoli non insegnano proprio molto.

    
risposta data 10.06.2012 - 14:23
fonte
5

Open Course è solo un elenco di corsi che hanno reso disponibili. Se vuoi sapere che cosa uno studente avrebbe preso, swing dal sito web del MIT (non OCW) e guarda il programma attuale. Hanno una lista di ciò che è richiesto e ciò che è considerato un prereq per cosa. Ecco la loro pagina.

    
risposta data 10.06.2012 - 14:16
fonte
5

Prova i consigli del programma di studio Computer Science 2001 di ACM / IEEE, collegati qui: link

insieme agli aggiornamenti CS 2008.

Pagina 17 del rapporto del 2001 ha una tabella a portata di mano che sottolinea tutte le conoscenze "di base" e elenca ancora gli elettivi.

Un programma di laurea non avrebbe il tempo di coprire anche i corsi considerati essenziali da queste raccomandazioni, quindi raggrupperanno alcune categorie insieme e lasceranno che gli studenti scelgano tra loro (ad esempio, Sistemi operativi, Linguaggi di programmazione e Ingegneria del software entrare in Software e gli studenti scelgono una traccia.

Puoi trovare i corsi richiesti sul sito web del dipartimento CS per quasi tutte le scuole, e dovrebbero essere una versione di questo.

    
risposta data 11.06.2012 - 18:41
fonte
-4

Se posso, vorrei suggerire di unirti a github.com come parte del tuo processo di apprendimento.

Quindi puoi cercare il codice che contiene alcune applicazioni del mondo reale che ti interessano, clonarlo per te stesso, lavorare con esso, codificarlo e conoscerlo, e alla fine iniziare a inviare le patch a il progetto sorgente, e su tutta la linea si sta lavorando su un progetto open source di cui si ha un interesse particolare.

E, naturalmente, acquisirai familiarità con git, che è tanto meglio.

    
risposta data 10.06.2012 - 23:57
fonte

Leggi altre domande sui tag