Nand2Tetris Engine Curriculum
公告板 Bulletin Board
公告板使用说明：(How to use the Bulletin Board)
逻辑模型 Logic Model
For now, we will use textual description to present the Logic Model. Overtime, this will be changed to a graphical model.
Consciousness is the only object that can go between any distances and time in without much directional restrictions. Try to cope with consciousness is an inevitable exercise for all living creatures. However, the degree and scope of consciousness can vary dramatically. The vast variation of consciousness is both a blessing and a curse. A blessing, because variation in conscious entities implies freedom. A curse, because variation in conscious engagement, would cause tremendous efforts to ensure a consistent delivery of knowledge content, therefore create tremendous inconsistencies in the effectiveness and outcome of known educational practices.
I must mention the term consciousness while describing the background of this evolving course, or my extension to the course, Elements of Computing Systems, also known as TECS, and Nand2Tetris. I must use the term consciousness, because I believe that Nand2Tetris is the first course that I know, started to present a systematic approach to engage learners' conscious behavior with a matching operational framework. The two original authors, Prof. Noam Nisan and Prof. Shimon Schocken, did explicitly stated that they want to create a course that can lead self-guided learners to be mindful of the forest while working with the trees. The curriculum structure and the content integrated in their course, provides an operational learning experience that forces learners to become aware of the interactive effects of a Turing complete system. The same Turing complete system, is re-visited with multiple layers of abstraction. Each layer shows the Turing complete expressive power, while allowing a different vocabulary to present it for another pragmatic way of utilizing the Turing complete system. As most computing scientists would assert, Turing completeness is a condition for reaching infinite complexity by recombining a finite set of well-defined, and fixed building blocks. This well-known connection between finite elements and infinity, the translation between space and time resources, is an objective platform to support the study and examination of consciousness.
To help myself and my fellow researchers to better understand our own consciousness, I propose to study crowd consciousness using a pedagogical framework and grounding vocabulary found in the TECS course. Overtime, I plan to invite many other participants to help organize other fields of sciences, including genetic biology, law, literature, mythology, architecture, art history, and economics, as parallel tracks to enrich this learning experience. More importantly, we will use these well known fields or scientific disciplines to examine our earlier hypothesis, seeing whether our work is well-grounded, and supported by these other fields or not.
I must give credits to the The Elements of Computing Systems course, not only because it is a course about all layers of computing systems, but because the lectures, guide books, and test scripts developed by the two original creators and their research assistants, have intentionally kept the course highly interactive and full of careful considerations. To ensure interactivity, it even provides a Nand2Tetris Q&A website to provide real-person feedback, and answer questions submitted by any participants on the web.
After trying the first three weeks of the course in person, I found that some of the tools that TECS used needs to be refined. More importantly, to enable the kind of "collective" consciousness that we mentioned in the beginning of this article, we need to add a few more tools. For example, we should encourage participants to use networked version control tools to manage their projects and share files. To manage progress of individual or group assignments, we should introduce some well-known project management tools. More over, for students to help each other, we can introduce some kind of social currencies, even use Blockchain or even Bitcoin as a common transaction record repository. With these additional tools, I am confident that some form of collective consciousness can be further witnessed, and therefore helping us to reach another level of collective learning.
Another feature worth highlighting of this course, is that Prof. Nisan and Schocken designed as set of hands-on exercises that works like little puzzles or games. The tools and languages that the course requires you to use are like little video games. This gamification of learning is exciting and worth replicating and extending in any other operational settings. While "playing", you are developing real and serious skills.
One of most serious skill that anyone must learn out of this course is the skill of abstraction management. In this course, one uses the abstraction layers of computing systems to build up a set of grounding metaphors and consistent vocabulary about space, time, and decision procedures for logical functions. This vocabulary can be arbitrarily defined by anyone, but this one we will be using is grounded in the field of computing science and digital circuit engineering. This vocabulary set is useful, because these two fields are rather mature and well-grounded, so that students can always use this vocabulary set to find analogies with out complex systems. To ensure that everyone must have learned the concepts, unit test, verification and validation tools are always available immediately for use. This vastly improves both the learning experience by giving immediate and logically precise feedback to learners. This test-driven engineering approach is profoundly pragmatic and we will ensure that we follow this philosophy and build this habit for our students in their engineering practices.
To expand on this framework, we hope to integrate the notion of machine learning, or learnability as a computational process as a part of this program. To support this program, we will use ideas borrowed from PAC Learning theory, and Tensforflow's word embedding problems as a way to dynamically identify vocabulary in a crowd learning process.
It is reasonable to believe that there are few other courses ever reached this level of comprehension. This comprehensiveness motivates us to model other courses after this one. This is the background of why we want to devote our times to develop this course.
长期目标 Long Term Goal
To provide a generalized course framework that allows learners to incrementally build up their understanding of arbitrary systems or fields using layers of abstractions and general purpose computational tools. The essence of computation and its implication on how the mind works, at least how mind can be assisted to work, can be repeatedly examined using many lenses throughout this course. We believe that this course can provide a set of basic vocabulary for thinkers, such as the logic gates, as Frege and George Boole originally proposed in the way logicians and mathematicians think. Clearly, Nand2Tetris course is about building a multi-layered computing system, with concrete tools and computational infrastructures, we also hope that we can leverage its layers of abstraction to show that many other fields of sciences can borrow these technical tools and engineering approaches to improve the thought processes of other disciplines.
However, using Logic Gates as the most primitive building blocks may not be our ultimate goal. We believe that logic gates in this book are the grounding metaphors of this version of a concrete computing system. We intend to elevate the primitive building blocks to something more generic, say "metaphors" themselves. How "metaphors" or just "functions" can be used as a way to relate to this course, will be incrementally established, starting by a mythological metaphor. This is to be developed with this wiki website as we learn that logic gates are also a kind of "function" which is a simple kind of metaphor between boolean values.
学习目标 Learning Objectives
There are some basic learning objectives
- Have participants build some systems in the process of learning new concepts. Eventually building a functional, Turing Complete computer. This computer should be able to do a lot, a lot of practical things.
- We will also use this course to depart knowledge about a number of engineering and knowledge management tools to participants. This include MediaWiki, Project Management, Version Control tools, Testing Tools and Procedures, and many others. These tools should help participants eventually acquire the a set of social contracts.
- Try to extend this learning to other disciplinary areas, such as biology and language learning.
We will store all these content in a wiki-based knowledge repository, and will try to use other tools such as Tensorflow and natural language processors to manage learning results.
预期效果 Desirable Outcomes
Four essentiall learning outcomes should come out of this course:
- FIrst and foremost, the outcome is to enable learning participants to see both the Forrest and the Trees throughout this course. Technically speaking, leaners must start appreciating in an operational manner, the power of decomposition and synthesis. By using very simple logic gates, one may compose many simple functions to create a very complex, functional computational machine. One may even create a number of machines that interact with each other. The immediate outcome is that every session of the course, should guide learners to understand a particular way of decomposing and re-combining these primitive building blocks of different abstraction levels to create desirable behavior.
- As we implement each component of this course, each activity will be guided by a Design Contract. This concept should lead to how everything will be organized in the following courses. The notion that interfaces or implementation specification must be prescribed before finding a solution is exactly the logic we must follow. Every person or team completes this course, should obtain an operationally, and logically consistent vocabulary. Once learners starts knowing the power of synthesis of decomposable building blocks, they should become aware that they can eventually develop a fully functional computer systems. The completed ones should likely reveal at least the persistence of the student teams. We will also use this as a gauge to determine the quality of dedication and knowledge coverage of the participant.
- The second part of the the learning outcome is that one must learn to use the key concepts in computation to search for supporting materials, and eventually identify useful learning support materials for their own learning experience. By learning under the guidance of building a complete computing system, and searching for material the relate to these terms, it is more likely than learning other concepts, that one will quickly acquire the skill and become accountant about the way computing scientists and mathematicians talk about complex ideas, and how to handle them with rigorous tools and methods. This is the third critical outcome of this course. Learn to search using a set of rigorous terms commonly used by computing scientists.
- The last important outcome is that learners must learn to acquire the skill of documenting their own learning experience using various presentation formats. We also expect as we have many people working on this website, as they work toward the same set of design challenges, we will gain increasingly higher quality documentation and pedagogy about how to lead new comers to learn more about multi-layered computing systems.
- As learners starts to document their own learning experience, learned to search for answers, and write intelligible questions to be posted on other supportive websites, one should start recognize that learning is not a lonely venture, it can be full of surprises, especially once you learned to reach out on the Internet, and you will gather friends from a far. This is the ultimate point of learning about computing in a crowd.
The output should be categorized into three items:
- A wiki-based website that continuously document the new experienced produced by learning participants.
- A number of statistical reports the summarizes how people learn. This should reveal how individuals and team-based participants work and think.
- An increasingly mature set of templates that shows how data content, testing scripts, technical ideas, and guiding principles of a living systems should be documented and presented.
- A list of relevant websites, videos, books, and papers that help anyone to learn by themselves.
- Preparatory Work for the whole course (current follow what has been done by Nand2Tetris Community)
- Learners' feedback
- Nand2Tetris Notes by Instructor (Ben Koo)
- Demonstration Platform (Including the Digital Sandbox)
-  A Robot that runs and swims like a salamander, a TED Talk
-  Intro to Biology at MITx
-  Learn Genetics at University of Utah
- How to Bake Pi by Eugenio Cheng
- Metaphors we live by by George Lakoff
- Where Mathematics Comes From by George Lakoff and Rafael E. Núñez
- Mathematics, Form and Function by Saunders Mac Lane
- The Grammar of Science by Karl Pearson
- Grammar as Science by Richard K. Larsen
From NAND to Tetris, Building a Modern Computer From First Principles
Nand2Tetris Q & A Website
 Logisim: a graphical tool for designing and simulating logic circuits
How a 2-1 MUX Work on Electronics Stack Exchange
 A very good explanation of how to implement MUX and DMUX
 Simple Logic Solver
All About Circuits Website
PyroEDU:Get started learning to build your own electronics by following our FREE online courses below!
 Reverse Engineering Machines with the Yoneda Lemma
 Vagrant Website (Development Environment Made Easy)
 Docker Official Website (Build, Ship, Run)
 DIY Computer Science Master Degree by Parag Shah
 DIY Physics Website
 Text Adventure Games