De NAND a Tetris (2017)
(nand2tetris.org)- O Nand2Tetris fornece materiais para estudantes que querem entender sistemas computacionais do zero, construindo eles mesmos um sistema computacional de uso geral e as camadas modernas de software
- Aulas, materiais de projeto e ferramentas estão reunidos em um só lugar e podem ser usados gratuitamente como open source em ambientes sem fins lucrativos
- Este curso é usado em mais de 400 universidades, escolas de ensino médio e bootcamps, com alunos que vão de estudantes do ensino médio a doutorandos e engenheiros sêniores
- Quem estuda por conta própria pode seguir as notas de aula e a seção Projects no site, e no Coursera é possível fazer o curso pago e obter um certificado oficial
- A estrutura atende tanto ao aprendizado individual quanto a aulas em instituições de ensino, e instrutores podem receber materiais adicionais mediante contato separado
Materiais de estudo para construir um computador do zero
- O site oficial dos cursos Nand to Tetris reúne os materiais necessários para construir do zero um sistema computacional de uso geral e as camadas modernas de software
- Os materiais são compostos por aulas, materiais de projeto e ferramentas, voltados para estudantes, instrutores e autodidatas
- O livro relacionado é The Elements of Computing Systems, de Noam Nisan e Shimon Schocken
- Os materiais do CACM relacionados ao curso são oferecidos em texto e vídeo
Caminhos de estudo e uso em contextos educacionais
- O curso Nand to Tetris é ensinado em mais de 400 universidades, escolas de ensino médio e bootcamps
- Os participantes incluem desde estudantes do ensino médio até doutorandos e engenheiros sêniores
- É possível ver o plano de ensino expandido de uma versão acadêmica típica do curso
- O estudo livre pode ser feito seguindo as notas de aula e a seção Projects no site
- O curso no Coursera é pago e oferece certificado oficial
- Materiais adicionais para instrutores podem ser obtidos entrando em contato por nand2tetris@gmail.com
1 comentários
Comentários do Hacker News
Quando tentei pela primeira vez, 7 anos atrás, depois de me formar na faculdade, só fui até o capítulo 2; foi muito gratificante, mas larguei por causa de outros projetos paralelos
Recomecei há 3 meses e agora estou no capítulo 8, tendo concluído portas lógicas, a ALU, a CPU, o assembler e metade da máquina virtual; em cada capítulo eu pensava “como isso pode funcionar?”, mas quando de fato funciona é extremamente satisfatório
Como projeto paralelo puramente de aprendizado, foi o mais gratificante que já fiz, e tenho bastante orgulho de mim mesmo por ter seguido até aqui, então recomendo fortemente
No outono/inverno passado, fiz em paralelo a excelente série do Ben Eater montando um computador de 8 bits em breadboard, e passei alguns meses comprando peças da China e montando subsistemas ao longo do inverno conforme elas chegavam
Vale a pena fazer isso depois; também é muito gratificante, e é muito legal ver LEDs piscando e entender o que está acontecendo por dentro
Por exemplo, o mecanismo real pelo qual circuitos integrados transformam entradas em saídas úteis; nunca encontrei um material que explicasse direito como até o circuito integrado real mais simples, como o TI SN7400, realmente funciona
Gostei muito desse curso e recomendo fortemente para quem trabalha com computadores sem nunca ter feito uma disciplina de ciência da computação de baixo nível
Ele dá uma compreensão intuitiva das partes centrais de como computadores funcionam que afetam programas de alto nível e linguagens de programação; pessoalmente, meu maior insight foi realmente entender a diferença entre stack e heap
Também parece quase mágico como circuitos simples continuam sendo empilhados até formar as máquinas complexas que usamos, e os professores conseguem fazer você captar rapidamente a essência de temas como linguagem assembly sem simplificar demais um conteúdo que facilmente daria vários semestres
Se você tiver tempo, recomendo muito; a parte 1, do gate NAND até construir uma CPU, é divertida e relativamente fácil, mas a parte 2, do computador até um sistema operacional completo, dá muito mais trabalho
Estou tentando decidir se preciso dos dois ou se um só basta
Recomendo fortemente esse curso/livro
É muito gratificante ir até o fim
Depois de terminar a excelente série de computador de 8 bits do Ben Eater (https://eater.net/8bit/), a transição para nand2tetris pareceu muito natural
Isso realmente ajuda a entender conceitos fundamentais de projeto de computadores que muitas vezes são tratados de forma superficial, e é um projeto perfeito para começar num feriado
Gosto dos vídeos dele, especialmente os episódios sobre introdução de loops e introdução de interrupções
Foi muito satisfatório ver o código que ele escreveu sendo refeito de forma bem mais elegante com esses conceitos
Agora preciso dar uma olhada no NAND to Tetris também
Os dois combinaram muito bem
Existe um jogo de NAND divertido inspirado neste curso: https://nandgame.com/
Ambos usam uma espécie de linguagem parecida com assembly, e são muito divertidos de aprender
Se você está tentando entender computadores em um nível mais baixo, também recomendo o curso Digital Design and Computer Architecture da ETH Zürich
https://www.youtube.com/playlist?list=PL5Q2soXY2Zi-EImKxYYY1...
Fiz uma disciplina introdutória de arquitetura de computadores, mas infelizmente ela não foi muito longe e não cobriu em nada a mágica de CPUs modernas, como execução fora de ordem
Acho que este feriado vai ser dedicado a essa playlist
Tenho boas lembranças deste livro e da época em que o peguei para ler
Eu estava tomando café com minha namorada quando disse que tinha lido que era possível fazer todas as portas lógicas usando apenas NAND; isso despertou nossa curiosidade, e passamos por vários guardanapos rabiscando NAND para ver se conseguiríamos derivar todas elas
No fim conseguimos, e foi muito divertido
Cada vez que derivávamos uma nova porta a partir de NAND, eu escrevia o nome dela no guardanapo; levei esses guardanapos e essa diversão para casa e, alguns dias depois, tentei combinar essas portas para finalmente descobrir uma ALU inteira
Nisso apareceram multiplexadores e várias outras coisas interessantes, e no fim eu travei, mas como já tinha ouvido falar desse livro, resolvi encomendá-lo
Os capítulos seguintes realmente me ajudaram a entender o nível mais baixo, que sempre me pareceu misterioso por eu só ter experiência com software
Mas na prática nunca cheguei a construir tudo até o fim
Quando entrou na parte de software de baixo nível, senti que já entendia o suficiente, então o trabalho em si perdeu um pouco do apelo para mim, mas mesmo só lendo já valeu muito a pena
Também existe este repositório do george hotz, e é bem interessante
https://github.com/geohot/fromthetransistor
Não há material, só um esboço geral de um curso hipotético, mas olhando os commits iniciais fica mais claro
“Escrevi isso alguns anos atrás e queria colocar online. Contratar é difícil, grande parte da educação moderna em ciência da computação é realmente ruim, e é muito difícil encontrar pessoas que entendam a stack moderna de computadores a partir dos primeiros princípios. Talvez algum dia, se eu tiver 12 semanas livres de novo, eu ofereça isso como um curso para fazer em casa. Eu também quero brincar.”
Na graduação eu não fiz CS, e sim engenharia da computação, e cobrimos algo como 80% dos tópicos daquela lista
Fiz várias disciplinas de Verilog e sistemas operacionais, e também mexi bastante com microcontroladores/FPGAs
O grande destaque foi construir uma CPU em Verilog e depois escrever um assembler/compilador
Foi um curso difícil, mas quando me formei senti que tinha uma compreensão bem boa da stack inteira
Talvez ele simplesmente não conheça muito bem o lado de engenharia da computação
Fico curioso se a prequela, “sand2nand”, também seria viável como projeto DIY
Fiz esse curso meio sem compromisso quando trabalhava como analista de dados, e ele acabou sendo o gatilho para uma mudança de carreira
É um curso realmente excelente, então se você tiver tempo, vale muito a pena fazer
Fico curioso se você migrou para um caminho mais voltado a programação de baixo nível