Este curso tiene como objetivo desmitificar como funciona una computadora.
Para eso, construimos en 14 proyectos (6 en la parte I del curso y 8 en la
parte 2) una computadora de uso general.

¿Con qué materiales? Este no es un curso de electrónica, asi que la
parte de Hardware del curso la hacemos en un simulador, donde
construimos chips en un lenguaje específicamente creado para diseñar hardware (Hardware
Design Language – HDL) y luego los testeamos.

De esta manera, a partir del un chip Nand, que tomamos como dado,
vamos construyendo una jerarquía de chips (logic gates, ALU, CPU) hasta
construir una computadora (HACK computer). De ahí viene el concepto del curso, que es que a partir de un solo chip podemos construir una computadora arbitrariamente compleja.

En la segunda parte del curso, se construye una máquina virtual, un
lenguaje de programación orientado a objetos (JACK) y un compilador para
traducirlo a HACK, el lenguaje assembler de la computadora.

Hay que decir que es uno de los cursos mejor diseñados en los que participé
(como los cursos de Rice de Rixner y Warren también en Coursera) por lo
bien pensados que están desde el punto de vista de la experiencia del
alumno, y el cuidado que ponen en darnos todas las herramientas conceptuales para resolver los ejercicios.

Shimon Schocken, uno de los instructores del curso, tiene un paper sobre las ideas que tuvo en cuenta para diseñar el curso. Obviamente le puso mucha cabeza al tema, y los resultados lo demuestran.

Los primeros 4 Homeworks son relativamente simples, hay que diseñar los chips usando HDL. De esta manera, construimos una jerarquía de los chips que componen la computadora. El primer problema lo tuve en el Assignment 5, donde hay que construir una CPU, y me di por vencido antes de terminar.

CPUDiag

 

Este es el diagrama del chip, lo único que hay que hacer es implementarlo. Lo complicado es ver como los bits de control entran a cada chip.

El Homework 6 también es relativamente simple, requiere implementar un programa que traduce del lenguaje simbólico a binario. Lo podemos implementar en cualquier lenguaje (yo elegí Ruby). Mi programa and básicamente bien, salvo por un pequeño problema con los comments. Debería aprender algo más de Regular Expressions para solucionarlo bien.

Este repo tiene todo el código que escribí para el curso.

 

Sobre la nueva política de Coursera

Un comentario aparte merece la nueva política de Coursera de cobrar por los assignments que llevan nota. Esta política parece aplicarse a algunos cursos (los de Rice por ejemplo). Los cursos originales merecen una mención especial: Cryptography, Design and Analysis of Algorithms (Stanford), Algorithms (Princeton) siguen siendo gratis.

Gregor Ulm tiene un post sobre esto. La primera vez que lo leí me pareció un poco excesivo, pero empecé a prestar atención y estoy bastante triste. Obviamente Coursera y las universidades tienen que recaudar para justificar el esfuerzo que hacen en producir el contenido. Cada vez parece más claro que la época dorada de los MOOCs llegó a su fin.

Nand2Tetris requiere pagar para enviar los Homeworks, pero los scripts para testear tu código estan disponibles en el sitio web del libro, así que no hay problema!

 

Anuncios