¿Vale la pena tomar CS 153 (compiladores) en Harvard?

Si te gustó CS51, te encantará CS153 . Llamo a los compiladores simplemente “CS51, parte II” . Esta clase es Greg Morrisett en su elemento. CS51 te enseña todo lo que necesitas saber para tomar esta clase. Compiladores es la combinación perfecta de teoría del lenguaje y programación de sistemas . Aprende cómo se diseñan e implementan los lenguajes de programación y, a lo largo del camino, adquiere experiencia real en ingeniería de software.

Morrisett lo lleva a través de toda la canalización de compilación desde el lexing y el análisis hasta la asignación de registros, como lo describió Iva. Cada conjunto de problemas se basa en el último. En la primera tarea, los estudiantes escriben un simulador de CPU MIPS y continúan construyendo compiladores de C-ish, Scheme-ish y Ocaml-ish. (Sí, escribes un compilador OCaml en … OCaml). En el camino, aprenderá sobre marcos de funciones, malloc y recolección de basura, verificación de tipos y optimización. Morrisett también explica cómo funcionan realmente los compiladores de hoy, gcc y LLVM. Todo lo que alguna vez pensaste que era magia se reduce a unos algoritmos bastante detallados.

La clase es dura. Los compiladores no son CS161, pero esta clase aún requiere un compromiso de tiempo serio. Su calificación en esta clase está determinada casi por completo por los conjuntos de problemas. El último conjunto de problemas es un compilador completamente funcional que puede analizar y optimizar C (siempre que solo use ints y bool s). Se requirieron más de 50 horas de trabajo y más de 1000 líneas de código. El enfoque en los conjuntos de problemas (en lugar de los exámenes) le permite ensuciarse las manos para comprender lo que realmente está sucediendo bajo el capó de un lenguaje de programación.

CS153 le brinda experiencia en el mundo real en ingeniería de software. Aunque probablemente nunca volverá a utilizar sus compiladores de los conjuntos de problemas , pasará mucho tiempo aprendiendo a codificar con un socio . Necesita un compañero para hacer los conjuntos de problemas en esta clase. Me aseguraría de que usted y su pareja tengan las mismas filosofías sobre las pruebas unitarias y el código funcional. Las habilidades que aprende en CS51 como la abstracción y el polimorfismo se vuelven muy útiles. Aprendí a evitar traducir algoritmos del libro y escribir el código yo mismo. Cuando escribe el código usted mismo, comprende lo que está sucediendo, lo que facilita la depuración. Al igual que CS51, no tengo dudas de que los compiladores me hicieron un mejor programador.

Morrisett y los TF fueron muy útiles durante toda la clase, pero a veces sobreestiman lo que entiendes en la clase. Vaya al horario de oficina y haga preguntas sobre el material en clase. El profesor está más que feliz de explicar algo nuevamente. Por ejemplo, Morrisett fue muy útil para responder todas mis preguntas de OCaml, incluso después de tomar CS51. Obtuve una mejor comprensión sobre cómo los lenguajes funcionales (como OCaml) realmente compilan.

Tomar CS153: Compiladores fue una experiencia extremadamente gratificante. Cambió mi forma de pensar sobre las computadoras, los procesadores, los lenguajes informáticos, la programación funcional y el rendimiento en el mundo real. La clase se mueve rápidamente y abarca una gran cantidad de teoría del lenguaje a la programación de sistemas. ¡Ponte a prueba y toma esta clase! Estoy feliz de haberlo hecho!

¡Realmente me encantaron los compiladores! La clase hace un buen trabajo enseñándole las diferentes tareas que los compiladores pueden hacer (lexing, análisis, verificación de tipos, optimización, asignación de registros). Incluso si nunca vas a volver a escribir un compilador, los problemas que estudias siguen siendo buenos ejercicios y vale la pena aprender a resolverlos.

Los juegos siempre fueron muy relevantes para la lectura, lo que me gustó porque creo que me ayuda a aprender más cuando primero aprendo sobre un tema en clase y luego lo refuerzo a través de una tarea de programación. También me gustó que los conjuntos estuvieran asociados. ¡Mi compañero era Usuario y nos llevamos muy bien! Siempre fue divertido trabajar juntos en conjuntos.

Aprendí mucho y también me divertí mucho. Lo recomiendo mucho!

More Interesting

¿El chip de aprendizaje automático Nervana es un ASIC?

¿Es suficiente Nagios para capturar el estado completo de un sistema distribuido?

¿Cuál es el mejor libro para la estructura de datos y algoritmos: Introducción a los algoritmos de Cormen, Estructura de datos usando C de Shirali Vasudeva, Estructura de datos de Narasimha Karumanchi o el de Tanenebaum?

¿En qué tipo de cosas trabajan los estudiantes de Machine Learning en Berkeley?

¿Cuál es el propósito de tener un curso sobre ingeniería de software? ¿Por qué debería tomarlo en serio?

¿Qué es un regresor de aprendizaje automático que tiene en cuenta la relación entre características?

¿Cuál es una breve explicación de la diferencia entre circuitos combinacionales y secuenciales?

¿Generará una interrupción entre procesadores (IPI) cuando una tarea se migre de una CPU a otra?

Mi amigo fingió los resultados de su investigación. ¿Qué debe hacer?

¿Dónde empiezo a aprender sobre el aprendizaje automático si no tengo ningún conocimiento al respecto?

¿Cómo funcionan las aplicaciones de identificación de música como Shazam, SoundHound y musiXmatch (huellas digitales acústicas)?

¿Cuál debería ser el rango mínimo en el JEE Advanced para obtener un asiento CS en el IIT superior?

¿Por qué un montón de tamaño n tiene altura de piso (log (n))?

¿Es cierto que las personas ricas pueden aprender a programar más rápido porque pueden permitirse un costoso bootcamp de codificación y tener muchos más recursos para acceder?

¿Cuál es el principio de funcionamiento del subespacio aleatorio en el aprendizaje automático?