Dalla prospettiva di un recente laureato in Informatica all'Università di Waterloo, penso che il dipartimento di Informatica (tecnicamente la "David R. Chariton School of Computer Science") offra un eccellente insieme di corsi impegnativi che insegnano sia l'informatica teorica che le tecniche pratiche di programmazione. Inoltre, la scuola è ben conosciuta nell'industria e i suoi laureati sono molto apprezzati.
Nel corso della mia carriera universitaria ho seguito 18 corsi di "computer science major". I corsi del primo e del secondo anno sono progettati per introdurre concetti matematici e informatici generali come la ricorsione, le strutture di dati, la complessità computazionale e idee di logica. I corsi dell'anno superiore tendono a rientrare in due categorie: teoria dell'informatica e programmazione dei sistemi.
I primi corsi, che di solito sono richiesti a tutti i laureati in informatica, passano molto tempo ad assicurarsi che tutti siano sulla stessa pagina. Perciò, sono un successo e un fallimento a seconda del professore e del particolare gruppo di studenti. I corsi dell'anno superiore, che sono per lo più elettivi, sono spesso tenuti da istruttori specializzati nel campo specifico, e sono di qualità molto alta.
Un esempio di un corso teorico dell'anno superiore è CS466 "Design and Analysis of Algorithms" che affronta la complessità ammortizzata, algoritmi randomizzati, e algoritmi di approssimazione per problemi NP-completi (in tempo polinomiale). Il materiale del corso consiste principalmente in prove di complessità computazionale e runtime.
Un esempio di corso sui sistemi è CS452 "Programmazione in tempo reale" che si occupa della progettazione e dell'implementazione di sistemi hard real-time. Questi sono sistemi in cui le operazioni devono essere completate in una specifica finestra di tempo - non troppo presto e non troppo tardi. La maggior parte del corso consisteva nel progetto che consisteva nello scrivere un kernel di sistema operativo in tempo reale da zero e usarlo per costruire un sistema di controllo per un modellino di treno elettrico. È affettuosamente conosciuto come il "corso dei treni".
Un altro corso interessante è il CS475 "Computational Linear Algrabra" che si concentra sulle prove di correttezza e di runtime nelle lezioni e negli esami, ma offre la possibilità di implementare alcuni algoritmi nei compiti.
Al di là della classe, la scuola ha alcuni dei più grandi sostenitori dell'informatica nel paese. Gestiscono il più grande concorso di informatica per gli studenti delle scuole superiori in Canada - questo è ciò che mi ha fatto interessare a questa scuola in primo luogo. La scuola forma anche la squadra canadese per il concorso di programmazione delle scuole superiori International Olympiad in Informatics (IOI) e vanta una delle migliori squadre all'ACM International Collegiate Programming Contest.
I laureati della scuola possono essere trovati in molte delle migliori organizzazioni di sviluppo software in Nord America e in tutto il mondo. Di conseguenza, molte aziende sanno quali corsi cercare sul curriculum e quali domande porre durante i colloqui.
Parlando di lavoro, qualsiasi discussione sull'Università di Waterloo è incompleta senza menzionare il fantastico programma di Cooperative Education. In questo programma, ho alternato 4 mesi di scuola e 4 mesi di lavoro. Ho potuto fare una laurea di 4 anni in 5 anni con 2 anni di esperienza lavorativa. Sono stato in grado di applicare ciò che ho imparato a scuola ai problemi di programmazione della vita reale, e a sua volta la mia esperienza lavorativa mi ha aiutato a mettere in prospettiva ciò che ho imparato nei corsi successivi.