Cosa devo studiare per "imparare" Comp Sci? [chiuso]

6

[Questa domanda è stata originariamente richiesta su Stack Overflow, ma è consigliabile spostare qui la domanda.]

Non riesco a trovare nulla di simile alla domanda che sto per chiedere, quindi per favore perdonami se c'è già qualcosa di simile, ti prego, sentiti libero di indicarmi la giusta direzione. Ci vorrà un po 'di retroscena, per favore perdonami per questo.

[retroscena]

Fondamentalmente, mi sono laureato all'Università circa 18 mesi fa con una laurea in Business Information Systems e giapponese. I giapponesi hanno preso metà della laurea, quindi la BRI era solo unita. Ho solo imparato PHP in termini di lingue e fondamentalmente nessuna teoria dell'informatica - tutto era professionale (Networking, basi di programmazione, sviluppo CMS, Office e VBA e poi molti corsi di teoria aziendale).

Da quando ho deciso di insegnare a me stesso C # e ASP.Net e cercare di ottenere una posizione come programmatore. Ho creato un sito web in stile negozio online e una piccola applicazione CRM in Windows Form per insegnare a me stesso e creare un portfolio, e fortunatamente sono riuscito a ottenere una posizione sviluppatore.

Pessimo? Sono l'unico sviluppatore della mia azienda. Ora non fraintendetemi, nell'ultimo anno ho imparato carichi e carichi, ho fatto un po 'di devozione. prima che Uni conoscesse le basi comunque, ma era un lavoro molto "apprendi dai libri" ogni notte.

Ora poi ... Ora sono a un punto in cui sto costruendo software su base regolare, formando buoni giudizi su scale temporali, e mi è stato persino detto che il mio codice e la mia metodologia sono buoni per altri professionisti che sono stati in il gioco è più lungo di me e mi hanno offerto un lavoro.

[/ retroscena]

Ciò a cui tutto questo si riduce, è che ora voglio approfondire gli argomenti che mi mancheranno non facendo CS. Ancora più importante, potresti consigliare libri / corsi online gratuiti? Voglio conoscere la teoria dell'informatica, non solo una migliore codifica.

Grazie!

    
posta David Archer 07.11.2010 - 22:16
fonte

6 risposte

5

La chiave qui è cercare di assorbire i concetti, piuttosto che le specifiche. Ad esempio, anziché imparare Java, scopri la Macchina Virtuale che porta alla tabella e in che modo differisce da, ad es. il C # CLR.

Il tipo di argomenti che vuoi trattare sono (in nessun ordine particolare):

  • Algoritmi . In che modo Bubble Sort si confronta con QuickSort (QS non è sempre il più veloce), che cos'è una ricerca binaria, ecc.
  • compilatori . Tutti i moderni linguaggi di programmazione hanno un concetto di compilazione da sorgente a codice byte o codice macchina. Aiuta a capire come scrivere codice efficiente se si conosce il dolore che attraversa il compilatore. Una certa teoria dell'architettura del processore può aiutarti a capire - vedi il libro di Andrew Tanenbaum.
  • Scala . Esistono alcune differenze tra la programmazione per es. un supercomputer contro un telefono, anche se entrambi possono eseguire lo stesso sistema operativo. Scopri le differenze e le sfide, ad esempio, perché / comportamento quando malloc () fallisce.
  • Concorrenza . Con più core, i PC desktop possono ora eseguire contemporaneamente diversi pezzi di codice. Ciò causa tutti i tipi di problemi: blocco, condizioni di gara, fame, ecc.
  • Debug . Fai buon uso degli strumenti o del codice degli strumenti per trovare il modo migliore per sistemare le cose quando va male, in particolare quando è in diretta e non puoi riavviare / riavviare
  • Database . Non importa quale database, ma una comprensione dell'organizzazione di database e il modo in cui funzionano aiuta. I capitoli introduttivi della maggior parte dei libri di database offrono una buona panoramica: pagine, righe, blocco, ottimismo, indici, piani di esecuzione, ecc.
  • SDLC . Impara i requisiti > Specifiche tecniche > Progetta > Codice > Build > Test > Impegna > QA > Distribuisci > Mantenere il ciclo di vita, indipendentemente dalla metodologia reale del progetto.
  • Metodologie . Guarda tradizionale BUFD, Cascata, Agile, Scrum, XP, ecc.
  • Strumenti . A parte un editor e un compilatore, ci sono molti strumenti usati nelle pratiche di SE, dai generatori di codice alle analisi statiche.
  • Funzionale vs Procedurale . Sempre più costrutti di programmazione funzionali si stanno facendo strada nei linguaggi procedurali ultimamente, a ragione. Scopri perché Lisp / Prolog / Haskell sono ancora in uso e come cose come F # stanno portando avanti i concetti.

Ci sono un sacco di risorse là fuori - Canale 9 di MSDN, Yahoo! / Google video, YouTube, VideoJug, ecc.

Se vuoi stare al passo con una persona Comp Sci, dai un'occhiata al prospetto dei corsi universitari, per avere un'idea di quali argomenti trattano nel loro corso CS. Personalmente, presterei più attenzione ai corsi di Ingegneria del software che alla Computer Science poiché hai una storia di programmazione, ma forse non ho bisogno di imparare la microelettronica per comprenderli (nel Regno Unito, CS = programmazione + hardware, SE = programmazione + teoria).

    
risposta data 08.11.2010 - 15:21
fonte
9

Math.

Devi essere veramente bravo in matematica. Non tanto perché è probabile che tu abbia la necessità di risolvere equazioni differenziali per scrivere il tuo codice, ma perché hai bisogno delle stesse competenze necessarie per risolvere i problemi matematici per essere veramente bravo nell'ingegneria del software. Consiglio di frequentare alcuni corsi di matematica della leva superiore presso il tuo college locale. Forse prima un metodo numerico o una classe di matematica discreta.

Ho preso una lezione di ingegneria del software per la mia laurea in informatica pochi anni fa che il professore ha utilizzato parte del materiale di MIT's open course-ware . Ha usato il corso 6.170. Raccomando di passare attraverso quella classe e un buon corso sulla programmazione orientata agli oggetti e in particolare sui modelli di progettazione. Se hai ancora tempo e vuoi saperne di più, passa all'intelligenza artificiale e alla teoria degli studi di calcolo. Se dovessi scegliere un corso unico che fosse più utile nella mia carriera di sviluppatore, sarebbero gli studi sui modelli di design.

Poiché ho una reputazione bassa, non posso pubblicare più link. Fai una ricerca su Google per "una banda di quattro schemi di progettazione" per il libro che è usato classicamente per insegnare quell'argomento.

Buona fortuna!

    
risposta data 07.11.2010 - 23:01
fonte
3

Se puoi permetterti, ricevi un abbonamento illimitato a Libri in linea di Safari . Avrai accesso a migliaia di libri relativi al computer (e altri tecnici). Scegli un argomento: gli algoritmi sono un buon punto di partenza. Quindi qualcosa sulla struttura dei dati e sulla progettazione del programma. Programmazione orientata agli oggetti. Scegli una nuova lingua, diversa da quella che già conosci, come Ruby o Python. Sfoglia alcuni libri su ogni argomento e quelli che ti piacciono, leggi in profondità.

Da lì, scegli alcuni argomenti che ti interessano, come i sistemi operativi, i compilatori, la crittografia, l'elaborazione delle immagini, ecc.

    
risposta data 08.11.2010 - 00:03
fonte
3

Ecco un post sul blog che ho appena saputo oggi. È molto interessante. La lettera che vorrei poter scrivere al mio ex sé, e ho trasmesso a luce-velocità attraverso una sorta di tubo a vuoto e consegnato nel momento preciso in cui ho finalmente deciso di imparare a programmare.

Prima di tutto, congregulazioni per ottenere voti così alti da professionisti esperti in così giovane età.

Penso che la cosa che stai veramente cercando possa essere trovata rispondendo a questa domanda?

Dove vorresti essere tra cinque anni?

Rispondi a questa domanda e poi traccia un percorso che ti porta lì.

Come direbbe il signor Miagi " Focus Danielsan ".

    
risposta data 08.11.2010 - 02:11
fonte
2

Leggi la struttura e l'interpretazione dei programmi per computer, alias SICP

Per costruire la tua conoscenza fondamentale degli argomenti di CS, probabilmente non c'è libro migliore di SICP. L'acronimo da solo è quasi sempre riconosciuto dai migliori diplomati CS, come un classico da cui hanno imparato, o sanno che hanno bisogno di leggere. :) I grandi nomi in CS e la programmazione conoscono e consigliano il libro, ad es. Peter Norvig's lodando SICP come la più grande introduzione all'informatica mai scritta.

SICP copre i fondamenti della computazione in modo soddisfacentemente profondo, sollevando molte prospettive e domande sulla natura del calcolo - alcuni dei quali rimangono problemi aperti - mentre porta il lettore a vedere oltre gli aspetti superficiali del dire alla macchina cosa da fare, o come farlo.

alt text http: //ecx.images-amazon. com / images / I / 41CPGEDXMDL._SL500_AA300_.jpg

Clicca sull'immagine per arrivare al testo libero online. Puoi anche trovare prontamente le lezioni video degli autori , complete di " Stile anni '80 e abbigliamento non meno.

    
risposta data 08.11.2010 - 16:54
fonte
0

La cosa migliore che riceverai dall'apprendimento degli argomenti di Informatica è la capacità di risolvere i problemi e l'attenzione ai dettagli.

Queste cose sono certamente la spina dorsale di un eccellente programmatore, ma tieni presente che non imparerai molto in termini di abilità tecniche e abilità pratiche di codifica.

Gran parte della matematica e della teoria saranno gettate a modo tuo e se pensi che dovresti migliorare le due aree che ho elencato in alto, penso certamente che non perderai il tuo tempo.

Quindi, per rispondere al meglio alla tua domanda, dovresti studiare gli argomenti di matematica specificatamente Algebra lineare, Matematica discreta e Teoria computazionale. Questi ti miglioreranno in modo significativo.

    
risposta data 08.11.2010 - 18:06
fonte

Leggi altre domande sui tag