Oregon State University's CS 344: Operating Systems I
Questo corso era noto per essere il punto in cui i laureati in Informatica o dichiaravano un'altra laurea, o rifacevano un corso per la prima volta, o lo passavano. E secondo i professori del dipartimento che sono andati in diverse università, questo non era un fenomeno unico alla Oregon State.
Il primo corso di una tipica serie di due corsi, Sistemi Operativi 1 mira ad educare gli studenti su diversi principi di programmazione: chiamate di sistema, utilità di sistema, thread e comunicazione interprocesso. Forse mi mancano uno o due elementi chiave (i suggerimenti sono benvenuti), ma quello che ho appena elencato è essenzialmente il punto principale del corso.
Non è stato il corso concettualmente più difficile che ho seguito; Introduzione all'analisi reale, un corso di matematica di livello junior per studenti di matematica, era molto, molto più complesso. Ma è stato il più impegnativo per una serie di ragioni. Forse posso dare qualche idea per quando tu o altri affronterete questo corso. Fate attenzione ai miei errori in modo da non dover rifare il corso come ho fatto io! :]
Il linguaggio C: Il corso era (ed è tipicamente, da quanto ho capito) interamente in C. Il C++ era quello che avevo imparato nei miei corsi introduttivi di informatica, quindi era quello con cui avevo più familiarità. Alcuni dei nostri laboratori in questi corsi da matricola ci hanno fatto conoscere la programmazione embedded, quindi abbiamo dovuto imparare un po' di C a parte. C e C++ sono abbastanza vicini da poter andare avanti bene, ma non sottovalutate le loro differenze. Sembrerà banale o poco importante come matricola o studente del secondo anno, ma imparerete più tardi che le differenze sono importanti. Ora, il C non è assolutamente una parte significativa della difficoltà del corso, ma fa una differenza notevole se non si conosce già la lingua. Inoltre, se siete come uno degli studenti che si sono trasferiti da un'altra università, è possibile che vi sia stato insegnato Python o Java, il che renderà ancora più difficile non solo imparare gli argomenti del corso, ma anche imparare un linguaggio completamente nuovo allo stesso tempo. Sono abbastanza sicuro che tutte le università con un programma decente di CS (computer science) richiedono almeno un corso di sistemi operativi, il che significa che molto probabilmente utilizzerete Linux; di conseguenza, diventerete MOLTO amichevoli con il linguaggio di programmazione C. Quindi, perché le università dovrebbero insegnare diversi corsi introduttivi di CS in qualcosa di diverso da C++ o C quando il C sarà chiaramente un linguaggio pesantemente utilizzato in un corso difficile più avanti nel curriculum - beh, non lo capisco. Di nuovo, imparare un nuovo linguaggio non è un grosso problema - era l'ambiente in cui si doveva imparare C; quell'ambiente era il rigoroso e lungo corso sui sistemi operativi.
Detto questo, ho qualche semplice consiglio:
Ecco me e la mia abusata edizione internazionale del classico, The C Programming Language di Brian Kernighan e Dennis Ritchie (informatico americano) (il libro è più casualmente chiamato K&R C. Riferitevi al libro in questo modo a un professore o programmatore e vi mostreranno immediatamente un po' più di rispetto). Capisco cosa vuol dire essere uno studente universitario al verde, ma l'edizione internazionale è economica e facile da trovare. Come minimo, prendete in prestito una copia o "trovate" una versione digitale e se non vi piace, non compratela. Ma se vi piace, e lo farete, acquistatelo. È leggero, conciso, non prolisso, ma dettagliato abbastanza bene da farvi imparare rapidamente ciò che dovete sapere. Fidati di me - prendi questo.
Utilizzare il libro di testo del tuo corso e il tuo professore: Questo è probabilmente il punto in cui molti studenti, come me, hanno fallito. A differenza del carico di lavoro, a cui arriverò più tardi, questo particolare argomento è molto critico. Io classifico gli studenti come quelli che di solito eccellono in una forma di apprendimento o nell'altra:
Lecture Learner: Questo significa che sei piuttosto abile nell'apprendimento uditivo. Non solo puoi prendere buoni appunti da un professore che tiene una lezione, ma puoi anche concentrarti su ciò che dicono mentre prendi tali appunti. A causa dei voti soddisfacenti, hai fortificato nella tua testa che non hai mai usato i libri di testo prima, quindi perché iniziare ora? Le lezioni del professore, le ore di ricevimento, i vostri appunti e la vostra arguzia da soli vi hanno salvato prima e vi salveranno ancora. (La metà di voi probabilmente sta sorridendo in modo lupesco perché sa esattamente cosa intendo)
Libro Learner: Che sia per pigrizia o per noia, non vai a lezione. O non puoi alzarti abbastanza presto per andare a lezione o la tua noia deriva dal fatto che non sei in grado di concentrarti su qualcuno che fa lezione per 50-120 minuti. Ma tu sei arrivato fin qui al college, e di solito è perché hai una buona capacità di leggere i libri di testo e di utilizzare internet. I tuoi libri di testo o Stack Overflow hanno sempre contenuto le informazioni necessarie per completare i tuoi compiti e poi fare bene gli esami. Ehi, puoi giocare ad Angry Birds o dormire durante la lezione (o non andarci nemmeno), E ottieni il voto - quindi perché cambiare le cose ora?
Impara ad essere sia uno studente che impara a leggere che uno che impara dai libri: Il libro di testo per molti corsi sui Sistemi Operativi è il seguente:
[ho preso in prestito questa immagine da qui]
Avrei aggiunto una foto della mia copia di questo libro e la mia splendida faccia, ma in realtà non ce l'ho con me al momento, quindi mi dispiace deludervi. Ora, ecco la situazione unica di questa classe in cui sia gli studenti della lezione che quelli del libro si trovano in difficoltà.
Gli studenti della lezione non leggono il libro, o non lo leggono abbastanza. Il problema è che una GRANDE porzione di codice che normalmente richiederebbe ore, se non giorni, per completare i compiti è in realtà in questo libro. Gli studenti delle lezioni hanno anche imparato come, se necessario, scremare efficacemente un testo e trovare ciò di cui hanno bisogno. Il problema è che QUESTO libro di solito ti fa mettere insieme i pezzi del puzzle, quindi non puoi davvero saltare. Il libro è ben scritto, ma il carattere è piccolo e c'è molto materiale. Nel momento in cui gli studenti della lezione hanno capito questo, sono già sprofondati troppo in profondità per recuperare; l'ampiezza della conoscenza è semplicemente troppo per recuperare, anche se solo 2 settimane nel corso.
Gli allievi del libro si trovano a chiedersi perché hanno la sensazione che il codice richieda così tanto tempo per essere scritto. Hanno letto il libro, quindi cosa si perdono? Beh, il libro è scritto in modo tale da presupporre che il lettore non stia seguendo altri 3 corsi e si stia anche destreggiando nella vita. Si tratta di un sacco di informazioni in una volta, e il suo scopo è quello di essere letto lentamente mentre si fanno anche molti piccoli esercizi. I professori, comprendendo questo fatto, in realtà riassumono i capitoli di informazioni in poche lezioni e poi forniscono il codice cruciale durante la lezione. Quindi, se non vi presentate a lezione o vi assentate, per qualsiasi motivo, vi ritroverete a scrivere a mano il codice che ha richiesto un'ora al professore - che probabilmente vi porterà via 8 ore o più. No, copiare il codice dalle diapositive della lezione NON sarà sufficiente. Il codice di questo corso è molto circostanziale e richiede che tu sappia come applicarlo fino ad un livello molto fine di dettaglio, quindi di solito devi prestare molta attenzione alle parole del professore per applicare il codice correttamente.
Quindi, se non capisci come combinare efficacemente le note delle lezioni e i suggerimenti del professore con il codice sorgente e i dettagli di come funzionano le cose dal libro di testo, ti troverai in un mucchio di guai. O stack. Comunque la si voglia vedere.
Gestione del tempo: Dagli studenti che hanno ottenuto A's in questo corso, è stato rivelato che hanno trascorso in media almeno 20 ore a settimana sui loro compiti. Anche tu potresti pensare di passare 20 ore a settimana sui compiti, ma io sto parlando di 20 ore a settimana per UNA classe. E questo è in realtà l'avvertimento che i professori danno agli studenti durante il primo giorno di questo corso (il temuto giorno del sillabo...) Essi consigliano che se uno studente sta prendendo altri corsi tecnici (non elettivi leggeri), che eviti questo corso e lo prenda un altro termine. Questo è un avvertimento standard del primo giorno per questo corso.
Quindi, iniziate immediatamente i progetti per questo corso. Non sto scherzando. Se hai del tempo libero tra le lezioni, leggi il tuo libro di testo. Se ti addormenti durante le altre lezioni, inizia a disegnare idee per il tuo progetto per questo corso. Quando arrivi a casa e vuoi mangiare per prima cosa, mangia mentre pensi a quali sono esattamente i requisiti del compito e, uno per uno, come li risolverai.
Non sei così bravo come pensi di essere: Non è che passerai ore a battere la testa contro il muro perché sei bloccato a cercare di capire come funzionano i puntatori; è perché stai battendo la testa contro il muro cercando di capire perché il tuo programma non funziona. E finisce per non funzionare perché non sapete come funzionano i puntatori così bene come pensate.
Questo è tipicamente il caso di questo corso. Più semplicemente, il vostro programma non si compila o non si comporta in modo appropriato perché c'è qualche principio di programmazione fondamentale che davvero non capite - ma non ne siete consapevoli. Non sono le nuove chiamate di sistema che state imparando. È perché sei un programmatore relativamente nuovo e le tue pratiche di codifica sono sotto la media, e quando scrivi codice per sistemi operativi, sarai messo alla prova.
Detto questo, andate nelle ore di ufficio quando il vostro codice non si compila. Andate da un assistente didattico, un amico, Quora o Stack Overflow. NON fate quello che la maggior parte di noi ingegneri fa, cioè bruciarvi al suolo passando ore a cercare di capire come sfondare qualche muro di mattoni che avete colpito. Se siete ancora bloccati dopo 30 minuti, va bene così! Come un buon programmatore, fate ciò che è più efficiente e cercate l'aiuto di qualcuno che ne sa più di voi. Lo so, è una pillola dura da ingoiare, ma prima lo imparate, più facile sarà la vostra vita! :] Ho una testa dura, quindi mi ci è voluto molto più tempo per impararlo rispetto a molti altri 😛
Dichiarazione conclusiva: Ho avuto una situazione interessante che ha solo amplificato la difficoltà di questo corso. Il mio professore era un duro della vecchia scuola della Hewlett Packard (HP) che, invece di fidarsi del suo TA's per valutare i compiti, scriveva manualmente migliaia di righe di script BASH per testare il vostro codice.
L'avete letto bene, lol. Dove normalmente avresti la pietà di un assistente che butta su qualche punto extra, o a volte hai un assistente che vuole che tu impari dagli errori, così ti chiede perché pensi che il tuo codice sia fallito qui o lì; se ti spieghi bene, di solito guadagni qualche punto indietro. La maggior parte delle volte, gli assistenti non hanno più di 10-15 minuti per studente per valutare, così saltano un sacco di roba e si risparmia sui punti. Ma oh no, non con questo ragazzo. Ha trascorso ore del suo tempo libero scrivendo degli script che avrebbero eseguito il vostro codice come farebbe un TA, ma lo avrebbe fatto in modo impeccabile assicurandosi che NULLA fosse trascurato. Era MOLTO facile perdere punti e inoltre scoraggiarsi.
Ma in ogni caso, spero che qualcuno possa imparare da alcuni dei miei errori e quindi evitarli quando seguirà il corso. Buona fortuna!
Nota: Ho amato questo corso. Fallire mi ha fatto imparare molto su me stesso; come studente, come programmatore e come essere umano. Ho imparato così tanto sull'informatica e anche su me stesso, e questo da solo è un altro post o A2A interamente. Non so se ho effettivamente "fallito" il corso, o se l'ho abbandonato durante l'ottava settimana perché non riuscivo a tenere il passo. In ogni caso, non sono riuscito a completarlo la prima volta, ma mi va bene così :]