
Nand to Tetris 1 - luu
http://experiments.oskarth.com/nand-to-tetris-1
======
barking
A great book and accompanying software imo lacks just 2 things.

1:the building of the Nand gate itself and 2: the building of a flip flop.

Both these tasks can be easily accomplished with reference to the book 'Code'
by Charles Petzold ([http://www.amazon.com/Code-Language-Computer-Hardware-
Softwa...](http://www.amazon.com/Code-Language-Computer-Hardware-
Software/dp/0735611319))

and software such as this [http://logic.ly/](http://logic.ly/)

~~~
sepeth
I haven't read 'Code' yet, but I think starting from NAND gates is right; it
has to stop at some level. I feel CMOS, MOSFETs, semiconductor physics.. are
all interesting topics, but this book is already too broad.

~~~
arundelo
_Code_ actually starts with relays.

------
late2part
I often imagine how smart folks would rebuild the technology of the earth from
scratch. It's cool you're doing this and looking at fundamentals!

~~~
agumonkey
I often imagine how we could make average folks rediscover it :)

~~~
thaumasiotes
Rediscover it? Average folks never discovered it in the first place.

~~~
agumonkey
Good semantic point, but you get my message. I really wish we would find ways
to enlighten people of any level and not rely on 'genius' and talent.

~~~
thaumasiotes
In that world, what would it mean to have talent?

~~~
agumonkey
Something not very important anymore. Do we want to stay blindly in love with
those who can do things we cannot or should we try to make people able to
learn how to learn ? it's a bit antisocial and un-binding but also the
opposite.

~~~
thaumasiotes
I didn't mean "what would be the social significance of having talent". I
meant "how would you know if one person was more talented than another
person?"

Do you think what you want is achievable while humans vary in their abilities?

~~~
agumonkey
I understood, and socially insignificant words don't really have a place
(aren't most words crafted from social interactions?). And thus I would know
nor care to know as long as people are given ways to reach new level of
understandings.

I believe something can be done, otherwise I wouldn't bother talking about it.
This is only from personal experience, I experienced both feeling of being
very talented as a kid, and the complete lack of it, all of a sudden, when
going to college. Since then a lot of things that seemed impossible to
understand started to click. It feels like experiencing both extremes of the
ability spectrum. And in the end talent/innate-ability, or its absence,
doesn't really matter. It's mostly desire and patience to unfold your own
misconceptions.

And I strongly believe that the school system and society supports that notion
that you either get something in a short timespan or you'll never because it's
the way society can function; individual well being / growth jailed for this
purpose.

~~~
thaumasiotes
What is the social significance of positive vs negative electric charge?

~~~
agumonkey
I was speaking in an hypothetical future where talent wouldn't be a
discriminating concept. In that future, objective concepts like electricity
would still matter, and have a very concrete effect on people and society.
Compared to nowadays where people are seeking "talents" for instant profit.

------
smoyer
I love the boolean identity and proof that was hinted at by item #1 - namely
that any truth table can be built from NAND gates. This is a case where
several boolean identities build to form the equivalence. And it's these rules
that let you assert #2 from the OP.

A NAND gate is defined as:

a x b = 0

So if both a and b are 1, the output will be zero. You need an inverter to
form any other logic functions, but you also know that:

a x b = 0 when a = 1 and b = a

In other words, wire both inputs to one signal to get an inverter. Next we
need an or gate, so we can use the identity:

!(a x b) = !a + !b

So to build the other necessary gates from a NAND gate, we simply combine
these rules:

AND - invert the output of a NAND. NOT - wire both inputs to the same signal.
OR - invert both inputs of the NAND gate NOR - invert both the inputs and
output of the NAND gate.

One tip for the aspiring logic designer (and those who would rather calculate
a result than create giant if-then-else structures in their code - learn
Gray's Code and Karnaugh Maps. You can easily minimize almost any truth table
into a sum-of-products form.

~~~
shawndumas

         const logicGates = {
            nand(a, b) {
              return !(a && b);
            },
            not(a) {
              return this.nand(a, a);
            },
            and(a, b) {
              return this.not(this.nand(a, b));
            },
            or(a, b) {
              return this.nand(this.not(a), this.not(b));
            },
            nor(a, b) {
              return this.not(this.or(a, b));
            },
            xor(a, b) {
              return this.and(this.nand(a, b), this.or(a, b));
            },
            xnor(a, b) {
              return this.not(this.xor(a, b));
            }
        };
    
        Object.keys(logicGates)
          .map(gate => {
            return [
              { gate, a: false, b: false },
              { gate, a: false, b: true },
              { gate, a: true, b: false },
              { gate, a: true, b: true },
            ];
          })
          .forEach(x => {
            x.map(y => {
              const desc = JSON.stringify(y).replace(/(gate)|:|"|\{|\}|,/g, ' ') + '=>';
              console.log(desc, (({ gate, a, b }) => logicGates[gate](a, b))(y));
            });
          });
    

[http://blog.shawndumas.com/post/119694815258/logic-gates-
es6...](http://blog.shawndumas.com/post/119694815258/logic-gates-es6-version)

~~~
abecedarius
The NAND To Tetris book requests people not post spoilers for their problem
sets. (I violated this myself in putting my code on github, but with a big
spoiler warning at the top, at least. I put it up there because my Python HDL
might be useful to some others who didn't want to use their language.)

It's nice to start seeing ES6 code in the wild, though.

------
ColinWright
It appears that some people don't know about the book/course:

    
    
        From NAND
          to Tetris
    

So here's the link:
[https://news.ycombinator.com/item?id=9593189](https://news.ycombinator.com/item?id=9593189)

~~~
zokier
Previous discussion:
[https://news.ycombinator.com/item?id=5888705](https://news.ycombinator.com/item?id=5888705)

~~~
ColinWright
There are _many_ previous discussions, and let it still seems that people
don't know of this. I'll get some cross-references shortly, but here are two
searches that show some of the discussions:

[https://hn.algolia.com/?query=nand2tetris&sort=byDate&prefix...](https://hn.algolia.com/?query=nand2tetris&sort=byDate&prefix=false&page=0&dateRange=all&type=story)

[https://hn.algolia.com/?query=nand%20tetris&sort=byDate&pref...](https://hn.algolia.com/?query=nand%20tetris&sort=byDate&prefix&page=0&dateRange=all&type=story)

 _Edit:_ Here are previous submissions - none have any significant discussion:

[https://news.ycombinator.com/item?id=6963338](https://news.ycombinator.com/item?id=6963338)

    
    
        From NAND to Tetris: The Elements of Computing Systems [repost]
        (nand2tetris.org)
    

[https://news.ycombinator.com/item?id=7109860](https://news.ycombinator.com/item?id=7109860)

    
    
        Building a Modern Computer from First Principles
        (nand2tetris.org)
    

[https://news.ycombinator.com/item?id=8203302](https://news.ycombinator.com/item?id=8203302)

    
    
        Building a Modern Computer from First Principles
        (nand2tetris.org)
    

[https://news.ycombinator.com/item?id=9062220](https://news.ycombinator.com/item?id=9062220)

    
    
        Class in building a computer from "first principles"
        (coursera.org)
    

[https://news.ycombinator.com/item?id=9255258](https://news.ycombinator.com/item?id=9255258)

    
    
        Coursera: From nand to tetris
        (coursera.org)
    

[https://news.ycombinator.com/item?id=9256157](https://news.ycombinator.com/item?id=9256157)

    
    
        From Nand to Tetris [Coursera online course starts next month]
        (coursera.org)
    

[https://news.ycombinator.com/item?id=9288093](https://news.ycombinator.com/item?id=9288093)

    
    
        From Nand to Tetris / Part I
        (coursera.org)
    

[https://news.ycombinator.com/item?id=9362022](https://news.ycombinator.com/item?id=9362022)

    
    
        From Nand to Tetris - Part 1
        (coursera.org)
    

[https://news.ycombinator.com/item?id=9590845](https://news.ycombinator.com/item?id=9590845)

    
    
        Nand to Tetris 1, with Dan Luu
        (oskarth.com)
    

[https://news.ycombinator.com/item?id=9593114](https://news.ycombinator.com/item?id=9593114)
(in progress ...)

    
    
        Nand to Tetris 1
        (oskarth.com)

------
tantalor
What does this have to do with Tetris?

~~~
ColinWright
Quoting:

    
    
        In the last few weeks I’ve been working my way
        through the excellent book Elements of Computing
        Systems - building a modern computer from first
        principles as part of the equally excellent Nand
        to Tetris MOOC.
           ^^^^^^
    

I guess you're not aware of the "From NAND to Tetris" book and series.

