ossu / computer-science

Open Source Society University (OSSU)

Open Source Society University

Percorso verso un’educazione gratuita da autodidatta in Informatica!

FantasticoOpen Source Society University - Computer Science

  • Summary
  • Community
  • Curriculum
  • Codice di condotta
  • Team

Summary

Il curriculum OSSU è una formazione completa in informatica utilizzando materiali online.Non è solo per la formazione della carriera o lo sviluppo professionale.E’ per coloro che vogliono un’adeguata e completa base di concetti fondamentali per tutte le discipline informatiche, e per coloro che hanno la disciplina, la volontà e (cosa più importante!) le buone abitudini per ottenere questa educazione in gran parte da soli, ma con il supporto di una comunità mondiale di compagni di apprendimento.

E’ progettato secondo i requisiti di laurea dei laureati in informatica, meno i requisiti di istruzione generale (non CS), in quanto si presume che la maggior parte delle persone che seguono questo curriculum sono già istruite al di fuori del campo della CS.I corsi stessi sono tra i migliori al mondo, spesso provenienti da Harvard, Princeton, MIT, ecc,

I corsi devono:

  • essere aperti alle iscrizioni
  • eseguire regolarmente (idealmente in formato autodidattico, altrimenti eseguiti più volte all’anno)
  • essere generalmente di alta qualità nei materiali didattici e nei principi pedagogici
  • soddisfare gli standard curriculari del CS 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science

Quando nessun corso soddisfa i criteri di cui sopra, il lavoro del corso è integrato con un libro.Quando ci sono corsi o libri che non rientrano nel curriculum ma sono altrimenti di alta qualità, essi appartengono a extra/corsi o extra/letture.

Organizzazione. Il curriculum è progettato come segue:

  • Intro CS: per gli studenti di provare CS e vedere se è giusto per loro
  • Core CS: corrisponde approssimativamente ai primi tre anni di un curriculum di informatica, prendendo le classi che tutte le major sarebbero tenute a prendere
  • Advanced CS: corrisponde all’incirca all’ultimo anno di un curriculum di informatica, prendendo elettivi secondo gli interessi dello studente
  • Progetto finale: un progetto per gli studenti per convalidare, consolidare e mostrare le loro conoscenze, per essere valutati dai loro coetanei in tutto il mondo

Durata. È possibile finire in circa 2 anni se si pianifica attentamente e si dedicano circa 20 ore/settimana ai propri studi. Gli studenti possono usare questo foglio di calcolo per stimare la loro data di fine. Se ne fai una copia personale puoi inserire le tue date di completamento del corso nel foglio Curriculum Data e ottenere stime aggiornate di completamento.

Costo. Tutto o quasi tutto il materiale del corso è disponibile gratuitamente. Tuttavia, alcuni corsi possono far pagare per incarichi/test/progetti da valutare.Nota che sia Coursera che edX offrono aiuti finanziari.

Decidi quanto o quanto poco spendere in base al tuo tempo e al tuo budget; ricorda solo che non puoi comprare il successo!

Processo. Gli studenti possono lavorare attraverso il curriculum da soli o in gruppo, in ordine o fuori ordine.

  • Si consiglia di fare tutti i corsi in Core CS, saltando un corso solo quando si è certi di aver già imparato il materiale in precedenza.
  • Per semplicità, si consiglia di lavorare attraverso i corsi (soprattutto Core CS) in ordine dall’alto verso il basso, in quanto sono già stati topologicamente ordinati dai loro prerequisiti.
  • I corsi in Advanced CS sono elettivi. Scegli un argomento (per esempio programmazione avanzata) in cui vuoi diventare un esperto e prendi tutti i corsi sotto quella voce. Puoi anche creare il tuo argomento personalizzato, ma ti raccomandiamo di ottenere la convalida della comunità sull’argomento scelto.

Politica dei contenuti. Se hai intenzione di mostrare pubblicamente alcuni dei tuoi lavori, devi condividere solo i file che ti sono permessi.NON mancare di rispetto al codice di condotta che hai firmato all’inizio di ogni corso!

Come contribuire

Per ottenere aiuto (Dettagli sulle nostre FAQ e chatroom)

Community

  • Abbiamo un server discord! Discord Questa dovrebbe essere la tua prima tappa per parlare con altri studenti della OSSU. Perché non ti presenti subito? Unisciti alla OSSU Discord
  • Puoi anche interagire attraverso i problemi di GitHub. Se c’è un problema con un corso, o un cambiamento deve essere fatto al curriculum, questo è il posto per iniziare la conversazione. Leggi di più qui.
  • Sottoscrivi la nostra newsletter.
  • Aggiungi Open Source Society University al tuo profilo Linkedin!
  • Nota: C’è un’applicazione firebase non mantenuta e deprecata che potresti trovare quando cerchi OSSU. Potete tranquillamente ignorarla. Leggi di più nelle FAQ.

Curriculum

Versione curriculum: 8.0.0 (vedi CHANGELOG)

  • Prequisiti
  • Intro CS
    • Introduzione alla programmazione
    • Introduzione all’informatica Science
  • Core CS
    • Core programmazione
    • Core matematica
    • Strumenti CS
    • Core sistemi
    • Core teoria
    • Core applicazioni
    • Sicurezza
  • CS avanzato
    • Programmazione avanzata
    • Sistemi avanzati
    • Teoria avanzata
    • Applicazioni applicazioni
  • Progetto finale

Prerequisiti

  • Core CS presuppone che lo studente abbia già frequentato il liceo in matematica, inclusi algebra, geometria e pre-calcolo.
  • Advanced CS presuppone che lo studente abbia già preso la totalità del Core CS ed è abbastanza informato ora per decidere quali elettivi prendere.
  • Nota che i sistemi avanzati presuppongono che lo studente abbia preso un corso di fisica di base (es.

Intro CS

Introduzione alla programmazione

Se non hai mai scritto un ciclo for, o non sai cosa sia una stringa nella programmazione, inizia qui. Questo corso è autodidattico, permettendoti di regolare il numero di ore che dedichi alla settimana in base alle tue esigenze.

Temi trattati:simple programssimple data structures

Corsi Durata Sforzo Prequisiti Discussione
Python per tutti 10 settimane 10 ore/settimana nessuna chat

Introduzione all’informatica

Questo corso ti introdurrà al mondo dell’informatica. Gli studenti che sono stati introdotti alla programmazione, sia dai corsi precedenti o attraverso lo studio altrove, dovrebbero seguire questo corso per avere un assaggio del materiale che verrà. Se finisci il corso desiderando di più, Computer Science è probabilmente per te!

Temi trattati:computationimperative programmingbasic data structures and algorithmsand more

Corsi Durata Sforzo Prequisiti Discussione
Introduzione all’informatica e alla programmazione con Python (alt) 9 settimane 15 ore/settimana algebra algebra scolastica chat

Core CS

Tutti i corsi del Core CS sono obbligatori, se non diversamente indicato.

Core programming

Temi trattati:functional programmingdesign for testingprogram requirementscommon design patternsunit testingobject-oriented designstatic typingdynamic typingML-family languages (via Standard ML)Lisp-family languages (via Racket)Rubyand more

I corsi How to Code sono basati sul testo How to Design Programs. La prima edizione è disponibile gratuitamente online e include serie di problemi e soluzioni. Gli studenti sono incoraggiati a fare questi compiti.

Corsi Durata Effetto Pre-requisiti Discussione
Come codificare – Dati semplici 7 settimane 8-10 ore/settimana nessuna chat
Come codificare – Dati complessi 6 settimane 8-10 ore/settimana Come codificare: Dati semplici chat
Linguaggi di programmazione, Parte A 5 settimane 4-8 ore/settimana Come codificare (sentire istruttore) chat
Linguaggi di programmazione, Parte B 3 settimane 4-8 ore/settimana Lingue di programmazione, Parte A chat
Lingue di programmazione, Parte C 3 settimane 4-8 ore/settimana Lingue di programmazione, Parte B chat

Math Electives

Gli studenti devono scegliere uno dei seguenti argomenti: calcolo, algebra lineare, logica o probabilità.

Calcolo

Corsi Durata Sforzo Pre-requisiti Discussione
Calculus 1A: Differenziazione 13 settimane 6-10 ore/settimana Matematica del liceo chat
Calculus 1B: Integrazione 13 settimane 5-10 ore/settimana Calculus 1A chat
Calculus 1C: Sistemi di Coordinate & Serie infinita 6 settimane 5-10 ore/settimana Calcolo 1B chat

Algebra lineare

Corsi Durata Sforzo Prequisiti Discussione
Essenza di algebra lineare Matematica del liceo chat
Algebra Lineare 14 settimane 12 ore/settimana Essenza di Algebra Lineare chat

Logica

Corsi Durata Effetto Prequisiti Discussione
Introduzione alla logica 10 settimane 4-8 ore/settimana teoria del set chat

Probabilità

Corsi Durata Fatica Prequisiti Discussione
Probabilità 24 settimane 12 ore/settimana Differenziazione e Integrazione chat

Matematica di base

In aggiunta alla loro matematica elettiva, gli studenti devono completare il seguente corso di matematica discreta.

Temi trattati:discrete mathematicsmathematical proofsbasic statisticsO-notationdiscrete probabilityand more

Corsi Durata Fatica Note Prequisiti Discussione
Matematica per l’informatica (alt) 13 settimane 5 ore/settimana Una versione alternativa con le soluzioni dei problemi è qui. Gli studenti in difficoltà possono considerare prima la specializzazione in matematica discreta. E’ più interattiva ma meno completa, e costa denaro per sbloccare la piena interattività. Calculus 1C chat

Strumenti CS

Comprendere la teoria è importante, ma ci si aspetta anche di creare programmi. Ci sono un certo numero di strumenti che sono ampiamente utilizzati per rendere questo processo più facile. Imparali ora per facilitare il tuo futuro lavoro di scrittura di programmi.

Temi trattati:terminals and shell scriptingvimcommand line environmentsversion controland more

Corsi Durata Sforzo Prequisiti Discussione
Il semestre mancante alla tua educazione CS 2 settimane 12 ore/settimana chat

Sistemi core

Temi trattati:procedural programmingmanual memory managementboolean algebragate logicmemorycomputer architectureassemblymachine languagevirtual machineshigh-level languagescompilersoperating systemsnetwork protocolsand more

Corsi Durata Fatica Testo aggiuntivo / Assegnazioni Pre-requisiti Discussione
Costruire un computer moderno dai primi principi: Da Nand a Tetris (alt) 6 settimane 7-13 ore/settimana Linguaggio di programmazione simile al C chat
Costruire un computer moderno dai primi principi: Da Nand a Tetris Parte II 6 settimane 12-18 ore/settimana uno di questi linguaggi di programmazione, Da Nand a Tetris Parte I chat
Sistemi operativi: Tre pezzi facili 10-12 settimane 6 ore/settimana algoritmi, è utile la familiarità con il C chat
Introduzione al Computer Networking 8 settimane 4-12 ore/settimana Assegnazione 1
Assegnazione 2
Assegnazione 3
Assegnazione 4
Problemi interattivi
algebra, probabilità, CS di base chat

Teoria di base

Temi trattati:divide and conquersorting and searchingrandomized algorithmsgraph searchshortest pathsdata structuresgreedy algorithmsminimum spanning treesdynamic programmingNP-completenessand more

Corsi Durata Fatica Prequisiti Discussione
Dividi e conquista, Ordinamento e Ricerca, e Algoritmi Randomizzati 4 settimane 4-8 ore/settimana qualsiasi linguaggio di programmazione, Matematica per l’informatica chat
Ricerca di grafici, percorsi più brevi e strutture di dati 4 settimane 4-8 ore/settimana Dividere e conquistare, Ordinamento e Ricerca, e Algoritmi Randomizzati chat
Algoritmi Greedy, Alberi a Spansione Minima, e Programmazione Dinamica 4 settimane 4-8 ore/settimana Ricerca Grafica, Percorsi più brevi e strutture dati chat
Percorsi più brevi rivisitati, problemi NP-completi e cosa fare al riguardo 4 settimane 4-8 ore/settimana Algoritmi Greedy, Alberi a scansione minima, e Programmazione Dinamica chat

Core Security

Temi trattatiConfidentiality, Integrity, AvailabilitySecure DesignDefensive ProgrammingThreats and AttacksNetwork SecurityCryptographyand more

Nota: Questi corsi sono provvisoriamente raccomandati. C’è una richiesta aperta di commenti sulla selezione dei corsi di sicurezza. I contributori sono incoraggiati a confrontare i vari corsi nella RFC e ad offrire un feedback.

Corsi Durata Fatica Pre-requisiti Discussione
Sicurezza Informatica: Contesto e Introduzione 5 settimane 3 ore/settimana chat
Principi di Codifica Sicura 4 settimane 4 ore/settimana chat
Identificazione delle vulnerabilità di sicurezza 4 settimane 4 ore/settimana chat

Scegli uno dei seguenti:

Corsi Durata Sforzo Prequisiti Discussione
Identificazione delle vulnerabilità di sicurezza nella programmazione C/C++ 4 settimane 5 ore/settimana chat
Sfruttamento e sicurezza delle vulnerabilità nelle applicazioni Java 4 settimane 5 ore/settimana chat

Applicazioni principali

Temi trattati:Agile methodologyRESTsoftware specificationsrefactoringrelational databasestransaction processingdata modelingneural networkssupervised learningunsupervised learningOpenGLraytracingand more

Corsi Durata Sforzo Prequisiti Discussione
Basi di dati: Modellazione e Teoria 2 settimane 10 ore/settimana programmazione di base chat
Basi di dati: Database relazionali e SQL 2 settimane 10 ore/settimana programmazione di base chat
Base di dati: Dati Semistrutturati 2 settimane 10 ore/settimana programmazione core chat
Apprendimento della macchina 11 settimane 4-6 ore/settimana algebra lineare chat
Grafica per computer 6 settimane 12 ore/settimana C++ o Java, algebra lineare chat
Ingegneria del software: Introduzione 6 settimane 8-10 ore/settimana Programmazione di base, e un progetto considerevole chat
Sviluppo Software Progetto Capstone 6-7 settimane 8-10 ore/settimana Ingegneria Software: Introduzione chat

CS avanzato

Dopo aver completato tutti i corsi richiesti in Core CS, gli studenti dovrebbero scegliere un sottoinsieme di corsi da CS avanzato in base agli interessi.Non è necessario seguire tutti i corsi di una sottocategoria, ma gli studenti dovrebbero seguire tutti i corsi che sono rilevanti per il campo in cui intendono entrare.

Lo studio della CS Avanzata dovrebbe poi terminare con una delle Specializzazioni sotto Applicazioni Avanzate.Il Capstone di una Specializzazione, se preso, può agire come progetto finale, se permesso dal Codice d’Onore del corso.Se no, o se uno studente sceglie di non prendere il Capstone, allora un progetto finale separato dovrà essere fatto per completare questo curriculum.

Programmazione avanzata

Temi trattati:debugging theory and practicegoal-oriented programmingparallel computingobject-oriented analysis and designUMLlarge-scale software architecture and designand more

Corsi Durata Sforzo Prequisiti
Programmazione parallela 4 settimane 6-8 ore/settimana Programmazione Scala
Compilatori 9 settimane 6-8 ore/settimana nessuno
Introduzione a Haskell 14 settimane
Impara Prolog ora! (alt)* 12 settimane
Debug del software 8 settimane 6 ore/settimana Python, programmazione orientata agli oggetti
Software Testing 4 settimane 6 ore/settimana Python, esperienza di programmazione
Architettura software & Progettazione 8 settimane 6 ore/settimana ingegneria software in Java

(*) libro di Blackburn, Bos, Striegnitz (compilato dalla fonte, ridistribuito sotto licenza CC)

Sistemi avanzati

Temi trattati:digital signalingcombinational logicCMOS technologiessequential logicfinite state machinesprocessor instruction setscachespipeliningvirtualizationparallel processingvirtual memorysynchronization primitivessystem call interfaceand more

Corsi Durata Effetto Prequisiti
Strutture di calcolo 1: Circuiti digitali 10 settimane 6 ore/settimana Nand2Tetris II
Strutture di calcolo 2: Architettura del computer 10 settimane 6 ore/settimana Strutture di calcolo 1
Strutture di calcolo 3: Organizzazione del computer 10 settimane 6 ore/settimana Strutture di calcolo 2

Teoria avanzata

Temi trattati:formal languagesTuring machinescomputabilityevent-driven concurrencyautomatadistributed shared memoryconsensus algorithmsstate machine replicationcomputational geometry theorypropositional logicrelational logicHerbrand logicgame treesand more

Corsi Durata Sforzo Prequisiti
Teoria del calcolo (lezioni) 8 settimane 10 ore/settimana matematica discreta, logica, algoritmi
Geometria computazionale 16 settimane 8 ore/settimana algoritmi, C++
Teoria dei giochi 8 settimane 3 ore/settimana pensiero matematico, probabilità, calcolo

Applicazioni avanzate

Queste specializzazioni Coursera terminano tutte con un progetto Capstone.A seconda del corso, potresti essere in grado di utilizzare il Capstone come tuo progetto finale per questo curriculum di Informatica.Nota che fare una Specializzazione con il Capstone alla fine costa sempre soldi, quindi se non vuoi spendere soldi o usare il Capstone come finale, potrebbe essere possibile prendere i corsi della Specializzazione gratuitamente cercando manualmente, ma non tutti lo permettono.

Corsi Durata Sforzo Prequisiti
Robotica moderna (specializzazione) 26 settimane 2-5 ore/settimana fisica a livello di matricola, algebra lineare, calcolo, equazioni differenziali lineari ordinarie
Data Mining (Specializzazione) 30 settimane 2-5 ore/settimana apprendimento della macchina
Big Data (Specializzazione) 30 settimane 3-5 ore/settimana nessuna
Internet delle cose (Specializzazione) 30 settimane 1-5 ore/settimana programmazione forte
Cloud Computing (Specializzazione) 30 settimane 2-6 ore/settimana Programmazione C++
Fullstack Open 12 settimane 6 ore/settimana programmazione
Data Science (Specializzazione) 43 settimane 1-6 ore/settimana nessuna
Programmazione funzionale in Scala (Specializzazione) 29 settimane 4-5 ore/settimana Un anno di esperienza di programmazione
Game Design e Sviluppo con Unity 2020 (Specializzazione) 6 mesi 5 ore/settimana programmazione, design interattivo

Progetto finale

L’UniversitàOSS è incentrata sul progetto.Sei incoraggiato a fare i compiti e gli esami per ogni corso, ma ciò che conta veramente è se puoi usare le tue conoscenze per risolvere un problema del mondo reale.

Dopo aver superato tutto il Core CS e le parti di Advanced CS rilevanti per te, dovresti pensare a un problema che puoi risolvere usando le conoscenze che hai acquisito.Non solo il lavoro su un progetto reale fa un figurone sul curriculum, ma il progetto convaliderà e consoliderà anche le tue conoscenze. Puoi creare qualcosa di completamente nuovo, o puoi trovare un progetto esistente che ha bisogno di aiuto tramite siti web come CodeTriage o First Timers Only.

Un’altra opzione è quella di utilizzare il progetto Capstone di una delle Specializzazioni in applicazioni avanzate; se questo ha senso o meno dipende dal corso, dal progetto, e se il codice d’onore del corso vi permette o meno di mostrare il vostro lavoro pubblicamente.In alcuni casi, potrebbe non essere permesso; non violate l’Honor Code del vostro corso!

Mettete il badge OSSU-CS nel README del vostro repository!Open Source Society University - Computer Science

  • Markdown: (https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)
  • HTML: <a href="https://github.com/ossu/computer-science"><img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>

Valutazione

Una volta completato il tuo progetto finale, invia le informazioni del tuo progetto a PROJECTS tramite una richiesta di pull e usa i nostri canali comunitari per annunciarlo ai tuoi colleghi studenti.

I tuoi compagni e mentori della OSSU valuteranno informalmente il tuo progetto, non sarai “valutato” in senso tradizionale – ognuno ha le proprie misure per quello che considera un successo.Lo scopo della valutazione è quello di agire come il tuo primo annuncio al mondo che sei un informatico e di fare esperienza ascoltando il feedback – sia positivo che negativo – e prendendolo al volo.

La valutazione finale del progetto ha un secondo scopo: valutare se la OSSU, attraverso la sua comunità e il suo curriculum, ha successo nella sua missione di guidare gli studenti indipendenti ad ottenere una formazione informatica di livello mondiale.

Lavoro cooperativo

Puoi creare questo progetto da solo o con altri studenti! Amiamo il lavoro cooperativo! Usa i nostri canali per comunicare con altri borsisti per combinare e creare nuovi progetti!

Quali linguaggi di programmazione dovrei usare?

Amico mio, ecco la parte migliore della libertà! Puoi usare qualsiasi linguaggio che vuoi per completare il progetto finale.

L’importante è interiorizzare i concetti fondamentali ed essere in grado di usarli con qualsiasi strumento (linguaggio di programmazione) che desideri.

Congratulazioni

Dopo aver completato i requisiti del curriculum di cui sopra, avrai completato l’equivalente di una laurea completa in Informatica. Congratulazioni!

Che cosa ti aspetta? Le possibilità sono illimitate e si sovrappongono:

  • Cercare un lavoro come sviluppatore!
  • Cercare tra le letture i classici libri che puoi leggere per affinare le tue abilità ed espandere le tue conoscenze.
  • Entrare in un meetup locale per sviluppatori (ad esempio tramite meetup.com).
  • Presta attenzione alle tecnologie emergenti nel mondo dello sviluppo del software:
    • Esplora il modello dell’attore attraverso Elixir, un nuovo linguaggio di programmazione funzionale per il web basato sulla collaudata Erlang Virtual Machine!
    • Esplora il prestito e i tempi di vita attraverso Rust, un linguaggio di sistema che raggiunge la sicurezza della memoria e dei thread senza un garbage collector!
    • Esplora i sistemi di tipi dipendenti attraverso Idris, un nuovo linguaggio ispirato a Haskell con un supporto senza precedenti per lo sviluppo guidato dai tipi.

mantenere l'apprendimento

Codice di condotta

Codice di condotta diOSSU.

Come mostrare i tuoi progressi

  1. Crea un account su Trello.
  2. Copia questa bacheca nel tuo account personale.Vedi come copiare una bacheca qui.

Ora che hai una copia della nostra bacheca ufficiale, devi solo passare le carte alla colonna Doing o alla colonna Done man mano che procedi nel tuo studio.

Abbiamo anche delle etichette per aiutarti ad avere più controllo nel processo.Il significato di ciascuna di queste etichette è:

  • Main Curriculum: le carte con questa etichetta rappresentano i corsi che sono elencati nel nostro curriculum.
  • Extra Resources: le carte con questa etichetta rappresentano corsi aggiunti dallo studente.
  • Doing: le carte con questa etichetta rappresentano corsi che lo studente sta facendo.
  • Done: le schede con quell’etichetta rappresentano i corsi finiti dallo studente.
  • Section: le schede con quell’etichetta rappresentano la sezione che abbiamo nel nostro curriculum.Le schede con l’etichetta Section servono solo per aiutare l’organizzazione della colonna Fatto. Dovresti mettere le schede del Corso sotto la scheda della rispettiva Sezione.

L’intenzione di questa scheda è di fornire ai nostri studenti un modo per seguire i loro progressi, e anche la possibilità di mostrare i loro progressi attraverso una pagina pubblica per amici, famiglia, datori di lavoro, ecc.Puoi cambiare lo stato della tua scheda per renderla pubblica o privata.

Team

  • Eric Douglas: fondatore di OSSU
  • hanjiexi: lead technical maintainer
  • waciumawanjohi: lead academic maintainer
  • Contributors

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *