Desde la perspectiva de un reciente graduado en Ciencias de la Computación de la Universidad de Waterloo, creo que el departamento de Ciencias de la Computación (técnicamente la "Escuela de Ciencias de la Computación David R. Chariton") ofrece un excelente conjunto de cursos desafiantes que enseñan tanto la ciencia de la computación teórica como las técnicas de programación práctica. Además, la escuela es muy conocida en la industria, y sus graduados están muy bien considerados.
Durante mi carrera universitaria tomé 18 cursos de "especialización en ciencias de la computación". Los cursos de primer y segundo año están diseñados para introducir conceptos generales de matemáticas y ciencias de la computación, como la recursividad, las estructuras de datos, la complejidad computacional y las ideas de la lógica. Los cursos del último año suelen dividirse en dos categorías: teoría de la informática y programación de sistemas.
Los primeros cursos, que suelen ser obligatorios para todos los estudiantes de informática, dedican mucho tiempo a asegurarse de que todo el mundo está en la misma página. Por lo tanto, son un éxito y un fracaso dependiendo del profesor y del grupo de estudiantes en particular. Los cursos de segundo año, que son en su mayoría optativos, suelen ser impartidos por profesores especializados en el campo específico, y son de muy alta calidad.
Un ejemplo de curso teórico de segundo año es el CS466 "Diseño y Análisis de Algoritmos", que aborda la complejidad amortizada, los algoritmos aleatorios, y el algoritmo de aproximación para problemas NP-completos (en tiempo polinómico). El material del curso consistía principalmente en pruebas de complejidad computacional y tiempo de ejecución.
Un ejemplo de curso de sistemas es el CS452 "Programación en tiempo real" que trata del diseño e implementación de sistemas de tiempo real duros. Se trata de sistemas en los que las operaciones deben completarse en una ventana de tiempo específica: ni demasiado pronto ni demasiado tarde. La mayor parte del curso consistió en un proyecto que consistía en escribir un núcleo de sistema operativo en tiempo real desde cero y utilizarlo para construir un sistema de control para una maqueta de tren eléctrico. Se le conoce cariñosamente como el "curso de los trenes".
Otro curso interesante es el CS475 "Algrabra lineal computacional", que se centra en las pruebas de corrección y tiempo de ejecución en las clases y los exámenes, pero que ofrecía la oportunidad de implementar algunos algoritmos en las tareas.
Más allá de las aulas, la escuela cuenta con algunos de los mayores defensores de la informática del país. Llevan a cabo el mayor concurso de ciencias de la computación para estudiantes de secundaria en Canadá - eso es lo que me interesó en esta escuela en primer lugar. La escuela también entrena al equipo canadiense para el concurso de programación de la Olimpiada Internacional de Informática (IOI) de la escuela secundaria y cuenta con uno de los mejores equipos en el Concurso Internacional de Programación Colegial de la ACM.
Los graduados de la escuela se pueden encontrar en muchas de las principales organizaciones de desarrollo de software en América del Norte y en todo el mundo. Como resultado, muchas empresas saben qué cursos buscar en el expediente académico y qué preguntas hacer durante las entrevistas.
Hablando de trabajos, cualquier discusión sobre la Universidad de Waterloo está incompleta sin mencionar el impresionante programa de Educación Cooperativa. En este programa, alterné 4 meses en la escuela y 4 meses en el trabajo. Pude hacer una carrera de 4 años en 5 años con 2 años de experiencia laboral. Pude aplicar lo que aprendí en la escuela a problemas de programación de la vida real y, a su vez, mi experiencia laboral me ayudó a poner en perspectiva lo que aprendí en los cursos posteriores.