|
| mikpanko wrote:
| Here is a fun Nand game inspired by the course:
| https://nandgame.com/
| AlchemistCamp wrote:
| Here's an even more fun one with overwhelmingly positive Steam
| reviews!
| https://store.steampowered.com/app/1444480/Turing_Complete/
| aleph_minus_one wrote:
| Here is another game on steam that is nearer to the first
| part of "From Nand to Tetris":
|
| MHRD
|
| https://store.steampowered.com/app/576030/MHRD/
| vintermann wrote:
| While we're recommending programming games, I think Virtual
| Circuit Board is a bit underappreciated. It's a pure
| sandbox, not a game, so you have to bring the ideas
| yourself, but it hits a really sweet spot somewhere between
| Minecraft redstone and Logisim.
|
| You just draw traces and add gates on a grid, with a few
| special IO components like the Nand2Tetris course. But
| there's some kind of compilation of the circuit, and
| simulation can be blazing fast, way faster than other
| programming games/programming friendly sandbox games.
| aleph_minus_one wrote:
| > Virtual Circuit Board is a bit underappreciated.
|
| For the convenience of the reader:
|
| - Website: https://www.virtualcircuitboard.com/
|
| - Steam: https://store.steampowered.com/app/1885690/Virtu
| al_Circuit_B...
| artsi0m wrote:
| There is an emulator on steam called CRUMB.
|
| Rather than being schematic, it is almost too real.
|
| The 3D lab is equipped with a breadboard, power supplies,
| signal generators, various passive and active components,
| and chips such as the timer 555.
|
| I attempted to use it to complete a lab from my
| university, where I had to construct a trigger from a
| chip with 3 NAND gates.
|
| But at this point getting membership at nearest
| hackerspace may be a decent option.
|
| > But there's some kind of compilation of the circuit
| Realistic enough. Back then you could compile your PCB
| project in altium designer, but now this button would be
| called validate.
|
| Sorry, if I wrote too much in this discussion thread.
| artsi0m wrote:
| s/trigger/flip-flop/
|
| I forget that in English it is more often called latch
| and that there are also flip-flops, two different types
| of what is called triggers in the East.
| NanoCoaster wrote:
| Definitely recommend Turing Complete. I've been playing it
| off and on over the last few weeks, just finished the first
| working CPU. It includes small hints and solutions for most
| levels, so if you get stuck, you'll always have a way
| forward. The interesting thing is, for a lot of levels, you
| can just google the component you're trying to build and use
| actual logic diagrams as guidance.
|
| The game makes the whole topic a bit easier to grok with its
| visuals and the ability to step through your circuits when
| they're running. So, great fun. But beware, if you've been
| bitten by Factorio addiction, you might be in danger of
| missing a lot of sleep :)
|
| Also, as some other comments mentioned, I highly recommend
| the Zachtronics games. Exapunks is amazing. But they're quite
| different, they're more like puzzle games about programming.
| artsi0m wrote:
| I played both of them. Turing complete has a more non-linear
| arcade mode. I mean that you can choose which level you want
| to complete first.
|
| There is also soundtrack and a little bit of story line
| present. There is also gog version of this game.
|
| I feel that I learned almost no new skills this semester, but
| I remember asking my circuit design lecturer questions about
| this game (in particular, about the possibility of
| constructing full-adder with fewer elements). That was fun
|
| You can stick to nandgame, if you don't want to pay, you
| loose almost nothing, but playing Turing Complete is more
| handy because it keeps progress on your computer and/or on
| the steam account. So, if you clean cookies every time you
| restart your browser, when using ungoogled-chromium for
| example, you better play Turing complete.
|
| Also one internet friend advised me to play incredible pm
| https://incredible.pm/
|
| It is a similar game, but the main theme is proofs rather
| than digital circuits. Hasn't played yet, unfortunately.
| geoelectric wrote:
| Turing Complete is a great game. Finishing it was a major
| sense of accomplishment for me, particularly since I rarely
| complete games (though Zachlikes are a common exception).
|
| This is from my Steam review (one of two ever, I liked it so
| much):
|
| > Man, what a trip. I've played the NAND game and MRHD, among
| others, but never quite got to the "build a computer"
| endgame. I did with this one. At this point I've built a
| 256-byte RAM system that does six math instructions, six
| conditional jumps, and subroutine calls using its own stack--
| then developed my own assembly language for it which I'm now
| using in the endgame to solve more traditional programming
| puzzles.
|
| > And I designed and built the entire architecture for it
| myself. The initial levels are mostly "one solution only"
| problems that each results in you designing a component. But
| by the time you're at midgame, all the decisions are yours as
| long as the output is correct. Previous problems tend to hint
| towards partial solutions of later problems, but very little
| is given to you outright. That gives you an incredible sense
| of accomplishment for what you put together.
|
| That said, unless they improved the bit where wiring tends to
| merge together and virtually short out during edits, it can
| be a little frustrating once things get very complex. It's
| not enough for me to not recommend it, but there was a point
| where I felt like I was having to master the tricky interface
| quirks as much or more than the logic. Shenzen IO did that
| part much better.
| Night_Thastus wrote:
| It's a bit different, but I also recommend both TIS-100 and
| Shenzhen IO. Both of them involve writing in an assembly-esque
| language, and it's very fun to learn!
| captn3m0 wrote:
| I gave up early on TOS-100, but that was before I did
| nand2tetris. I did Nand2tetris before Shenzhen-IO and really
| enjoyed it.
|
| Yet to finish Shenzhen IO, but I blame it on me stupidly
| doing premature optimisation.
| Night_Thastus wrote:
| Both TIS and Shenzhen are cases where I'd say make
| something ugly that works, then go back and fix it hours
| later when you have new tools and experience.
|
| IE, the very first puzzle gets an easier solution once you
| learn about a hidden command.
|
| There's satisfaction to leaving a solution to come back
| days later and go "whoah, this better solution is so
| obvious" which is easy to miss when you're stuck on it for
| hours.
| 2OEH8eoCRo0 wrote:
| This project helped me get my first job after college.
| ess3 wrote:
| Cannot recommend this course enough
| yoyohello13 wrote:
| I took this course on a lark when I was working as a data
| analyst. It inspired me to change careers. Absolutely excellent
| course. Definitely do it if you've got the time.
| hnthrowaway0328 wrote:
| Congratulations! Did you switch to a lower level programming
| career path?
| yoyohello13 wrote:
| I'm making apps for a local company now. Still valuable info
| though. I use the text parsing knowledge I gained from this
| course quite a bit.
| hnthrowaway0328 wrote:
| That's pretty good. I'm glad that you made the switch you
| wanted.
| Semitangent wrote:
| I found nand2tetris a very natural progression for me after
| finishing Ben Eater's great 8bit computer series
| (https://eater.net/8bit/). It just makes you grok so many basic
| concepts of computer design which are quite often glossed over. A
| perfect project to start over the holidays!
| Night_Thastus wrote:
| Second recommending Ben Eater. I love his videos. Two of my
| favorites are the introduction of loops, and the introduction
| of interrupts. Seeing the code he wrote re-written using these
| to be so much more elegant was very satisfying.
| captn3m0 wrote:
| I did nand2tetris during my time at Recurse, and I spent a lot
| of time watching Ben Eater those days. They paired nicely.
| JKCalhoun wrote:
| Did Ben Eaters 6502 computer this past summer. Can also
| recommend.
|
| Guess I'll have to look into _NAND to Tetris_ now.
| grendelt wrote:
| The book is great - so, so cool seeing the layer upon layer of
| logic (and abstractions) that build up.
| pythops wrote:
| There is also this repo from george hotz, very interesting !
| https://github.com/geohot/fromthetransistor
| jpcfl wrote:
| I wasn't sure what I was looking at at first, since there's no
| material, just a rough outline of a hypothetical course. The
| initial commit makes it a little clearer:
|
| > _Wrote this a few years ago, wanted to put it online. Hiring
| is hard, a lot of modern CS education is really bad, and it 's
| so hard to find people who understand the modern computer stack
| from first principles. Maybe if I ever get 12 free weeks again
| I'll offer this as a play at home course. I want to play too._
| slalomskiing wrote:
| It's funny he says a lot of modern CS education is bad
|
| I did Computer Engineering rather than CS for undergrad and we
| covered like 80% of the topics in that list
|
| Had multiple courses in Verilog/OS and worked a lot with
| microcontrollers/FPGAs. Building a CPU in verilog then writing
| an assembler/compiler was definitely the highlight.
|
| Was a hard program but I felt like I had a really good
| understanding of the full stack coming out of it.
|
| Maybe he just isn't familiar with CE?
| throwaway17_17 wrote:
| Where I'm did you do undergrad. My son is not having much
| success finding a college to shoot for in terms of having a
| goal. I think a curriculum like you describe would at least
| show him some options that exist.
| Jtsummers wrote:
| Georgia Tech has (when I was there at least) a good CMPE
| program.
| bhasi wrote:
| Gatech, UPenn, U Colorado Boulder all have great CompE
| programs at both undergrad and graduate levels.
| jholman wrote:
| Seems to me that CE covers sections 1, 2, 3, 7, and a bit of
| 5, and CS covers 4, 5, and 6. A traditional CS education
| should teach 3, even though doing 3 is absolutely not the job
| of CS grads.
| meter wrote:
| I first attempted this 7 years ago, after I graduated college. I
| got through the first 2 chapters. It was extremely rewarding. But
| regrettably, I abandoned it for other side projects.
|
| I picked it up again 3 months ago, and it's been a blast. I'm on
| chapter 8, having completed the logic gates, ALU, CPU, assembler,
| and half of the virtual machine.
|
| Every chapter is overwhelming -- in a good way. I keep thinking
| to myself, "how the hell is this going to work?" And when it
| does, it's so satisfying.
|
| As a side project, purely for educational purposes, it's the most
| rewarding thing I've done. I've learned so much. It's a damn good
| project. And I'm damn proud of myself for sticking with it.
|
| Highly recommended.
| superfunny wrote:
| We did the whole project as part of a class; it was one of the
| best classes I took in my CompSci program. It was excellent.
| MichaelZuo wrote:
| How did you learn the prerequisite solid state physics
| knowledge in order to fully understand the background behind
| the first two chapters?
|
| e.g. The actual mechanism by which an integrated circuit
| transforms input into useful output. I've never been able to
| find a solid explanation on how even the simplest real world
| integrated circuit, such as a TI SN7400, actually does that.
| jon-wood wrote:
| The course explicitly states that it's not a physics, or even
| really an electronics, course. It doesn't go into the gritty
| details of how all this stuff works in the real world, just
| how once it does work you can string it all together to build
| a computer and then a virtual machine to run on it.
| moritzwarhier wrote:
| I have only faint memories of my beginner's course on this
| topic at university, and absolutely no knowledge.
|
| Somehow I remember the word MOSFET.
|
| I think the wikipedia articles about logic gates should
| provide all necessary cross references.
|
| "Fully understand" is an elusive term though. How do you
| fully understand the solid-state physics of logic gates if
| you don't fully understand all of physics, chemistry, maybe
| even quantum mechanics...
|
| Not meaning to be dismissive though! I love to try to fully
| understand things and hate having to accept black box logic.
| But I also have to admit that I've given up on this approach
| for many things a long time ago.
|
| Skimming the course summary, it sounds as if this "Hardware
| Description Language" might mark the boundary of what this
| course is about.
|
| Makes sense, it's not "from physics to NAND", it's "from NAND
| to Tetris" :)
| FredPret wrote:
| As frustrating as it is to black-box certain domains of
| knowledge, it's an incredibly useful mental shortcut when
| used judiciously.
| bigstrat2003 wrote:
| It's also just plain necessary as human knowledge gets
| more and more complex. The more time you spend on
| learning, the less time you have to actually make use of
| that knowledge. Ars longa, vita brevis.
| jholman wrote:
| You're making a category error, I think. This books/course
| doesn't cover physics. It doesn't even cover signal stuff,
| like stuff about how fast the voltage levels stabilize, or
| even voltages at all.
|
| It's not "silicon wafer to Tetris" or "pile of protons and
| neutrons to Tetris" or "transistors to Tetris". You start
| with nand gates (and later also you get flipflops for free).
|
| This course would work equally well on nand gates made of
| carved wooden gears, or nand gates made with fluidic logic,
| or nand gates made by encoding the whole thing into O-gauge
| hobby railroads.
|
| If that's the level of explanation you seek, this book is
| incredible.
| MichaelZuo wrote:
| > It's not "silicon wafer to Tetris"...
|
| That is a good point, I had just assumed that information
| was available somewhere online, but it doesn't seem likely.
| amenghra wrote:
| https://nandgame.com/ has a cmos level towards the end.
| It doesn't explain the transistor-level physics but does
| let you play with things.
|
| The art of electronics book might be a good place to
| start if you want to learn the physical/electrical layer.
| svnt wrote:
| Something like this will at least get you conversant. You
| only need the first few chapters, and can skip BJTs.
|
| https://archive.org/details/microelectronicc00jaeg/page/n
| 11/...
| alted wrote:
| Lower-level teaching resources definitely exist! Here are
| my favorites:
|
| - The Zero to ASIC course (and Tiny Tapeout) [1] explains
| transistor circuits and teaches you an open source
| software stack---and you get a chip physically
| manufactured! You could make the Nand to Tetris computer
| in actual silicon (if you can get enough transistors).
|
| - To learn how things are manufactured on silicon wafers,
| get textbooks on microfabrication. A decent starting
| point is [2]. There's also a good video series [3] for a
| quick overview.
|
| - To understand how a single transistor or diode works,
| get textbooks on "semiconductor devices". A good starting
| point is the free online [4].
|
| [1] https://www.zerotoasiccourse.com/
| https://tinytapeout.com/
|
| [2] "Introduction to Microelectronic Fabrication" by
| Jaeger
|
| [3] https://siliconrun.com/our-films/silicon-run-1/
|
| [4] "Modern Semiconductor Devices for Integrated
| Circuits" by Chenming Hu,
| https://www.chu.berkeley.edu/modern-semiconductor-
| devices-fo...
| _fizz_buzz_ wrote:
| A "silicon to nand gate" would be a sweet complimentary
| course. However, probably more difficult to make hands on.
| SilasX wrote:
| I vaguely remember someone trying to go the other
| direction, and teach "Tetris to Quake" but I can't find
| substantiation that course ever existed, and might have
| confused it with this article:
|
| http://archive.gamedev.net/archive/reference/articles/artic
| l...
|
| I'd also be interested in anything that extends the stack
| from where nand2tetris left off, because, while I loved
| it[1], it felt unsatisfying that can't actually compile to
| usable binaries for the hardware -- your executable can't
| usually fit in memory and it doesn't teach you how swapping
| (or whatever) would get you to that point. It also doesn't
| cover more common hardware/OS issues like interrupts, or
| having juggle multiple running programs.
|
| [1] most interesting technical project I've ever completed,
| with the possible exception of Microcorruption.com.
| wintogreen74 wrote:
| The book is a great example of how we do pretty much
| everything with computers today: abstraction. You can
| definitely learn how a transistor works but this book/course
| explicitly starts with "you've got a NAND chip - GO!"
| cdcarter wrote:
| Ben Eater does have a handful of early videos on his YouTube
| page that gave me a much better understanding of what's
| happening down at the physical and particle level. But at the
| end of the day, to succeed with this material you just need
| to understand the theoretically digital function of a
| transistor, not the physical properties.
| kragen wrote:
| btw the sn7400 is already a fairly advanced ic; something
| like an uln2003 is closer to 'the simplest real world
| integrated circuit'
|
| probably the best place to start for this, in a top-down
| sequence, is _the art of electronics_ by horowitz and hill.
| it explains how transistors and diodes act in SS1.6, SS2, and
| SS3, initially explaining transistors with the simplified
| 'current amplifier' model (which already goes beyond the
| 'transistor switch' model you're thinking of), then
| quantitatively with the ebers-moll model; they're focused on
| how to use this information to design working circuits from
| discrete components you can put together on a circuit board.
| camenzind's _designing analog chips_ (available free online)
| goes into how to use this information to design actual chips
| (not only does nand2tetris get into things like metastability
| and noise margin, the authors seem to be confused about what
| a chip even is, thinking you can make a chip by assembling
| other chips)
|
| but the ebers-moll model is still not solid-state physics
| knowledge. so far the best overview i've found of that is
| madou's 'fundamentals of microfabrication and nanotechnology'
| which has a couple of chapters about solid-state physics,
| going into the historical development of quantum mechanics.
| but it's not really a quantum mechanics textbook; it's just
| an overview that shows where quantum-mechanical knowledge
| fits into understanding solid-state physics
|
| 'the feynman lectures on physics' is the best quantum
| mechanics textbook i've found so far, but because my
| knowledge of quantum mechanics is even more minimal, please
| don't trust my recommendation on this
|
| hope this helps. good luck in your learning voyage!
| duskwuff wrote:
| > btw the sn7400 is already a fairly advanced ic; something
| like an uln2003 is closer to 'the simplest real world
| integrated circuit'
|
| If the goal is to explain how logic is implemented in
| general, skipping bipolar transistors and TTL and jumping
| directly to MOS may be easier. The behavior of a FET is
| fairly easy to explain, especially if you don't care about
| the ohmic region (which you usually don't in logic ICs),
| and it's straightforward to step from there to a practical
| implementation of a simple gate like an unbuffered NAND --
| the latter of which can be trivially assembled on a
| breadboard with as little as two FETs and a resistor for a
| NMOS implementation.
| 1000100_1000101 wrote:
| Aside from his basic 8-bit CPU, Ben Eater goes into how
| transistors work too:
| https://www.youtube.com/watch?v=DXvAlwMAxiA . Once you've got
| transistors, his videos walk you through making gates. Once
| you've got gates, he switches to the 74xx series and builds a
| CPU.
| wintogreen74 wrote:
| I've done this too, and it also took me multiple (3!) tries to
| get through the entire thing. I interleaved it last fall/winter
| with Ben Eater's amazing series on building an 8-bit computer
| on breadboards. I bought everything over several months from
| China, then built the subsystems as the parts arrived over the
| winter. You should do that next! Aside from being (maybe even
| more) rewarding, it looks damn impressive to see all the
| flashing LEDs _and_ understand what 's happening.
| meter wrote:
| Thanks for the recommendation. I'll definitely look into it!
| sunday_serif wrote:
| Yes! Ben eater's content accompanies nand to Tetris so well.
|
| I did the 6502 project in which you assemble a computer
| system on bread boards (wiring together the clock, cpu, ram,
| etc).
|
| It helped solidify many of the concepts from nand2tetris. For
| some reason doing it all physically with real chips and wires
| made it all a bit more memorable.
|
| I'd love to try his other bread board project in which you
| assemble all the inner workings of a cpu on bread boards as
| well -- I think this is what you were referring to.
| nvy wrote:
| >It helped solidify many of the concepts from nand2tetris.
| For some reason doing it all physically with real chips and
| wires made it all a bit more memorable.
|
| Hang on a second, does nand2tetris not involve real chips
| and wires?
| sircastor wrote:
| No, nand2tetris is done in virtual environments.
|
| This is largely about accessibility. If it's tied to
| hardware, fewer people can do it. Additionally, real
| hardware means there's additional opportunity for error
| due to faults in the hardware or environmental variables.
|
| That said, Nand2Tetris could, in theory, be done with a
| bunch of 74xx NAND chips on a breadboard.
| datameta wrote:
| I intend to pick back up from where I left off about a year and a
| half ago, I believe chapter 6. Super interesting project where I
| learned a lot about using an HDL, computer architecture, and
| gates in general.
| pkilgore wrote:
| I graduated from this and I cannot recommend it highly enough.
|
| If you don't have a computer science or EE background, it
| completely de-mystifies the fundamentals of your machine in a
| deeply engaging way.
| elevaet wrote:
| I wonder if the prequel "sand2nand" would be possible as a DIY
| project?
| samvher wrote:
| Sure: http://sam.zeloof.xyz/first-ic/
| elevaet wrote:
| Are you the same Sam? Either way, nice project wow!
| samvher wrote:
| Different Sam! :)
| kragen wrote:
| different sam, still has a lot of awesome projects
| Two9A wrote:
| Oh goodness, this is the kind of thing I've been trying to
| find for years now: some method of making a computer from
| scratch, as in from raw materials.
|
| Will have to look into your progress, thanks.
| samvher wrote:
| Just to clarify, not my project! :)
| cjpearson wrote:
| > Native oxide is stripped off the wafer with a quick dilute
| HF dip and then they are extensively cleaned in Piranha
| solution (H2SO4:H2O2), RCA 1 (H2O:NH3:H2O2), RCA 2
| (H2O:HCL:H2O2), followed by another dilute HF dip.
|
| Fascinating project, but I'm not going to try this one at
| home
| jackphilson wrote:
| If I'm into web development, how practically useful is learning
| low level stuff like this, factoring in opportunity cost?
| frakt0x90 wrote:
| In my opinion, learning anything in your field is useful
| because it helps you form a better mental representation of
| what you're doing. Will building electronics directly help with
| mundane web dev? Maybe not. But if you think it's cool, do it!
| Have fun! Broaden your horizons!
| gorjusborg wrote:
| I see this question as analogous to 'how useful is building a
| car from scratch?'
|
| The person building a cat from scratch will undoubtedly
| understand more than others, and may be able to fix that home
| brew car. They may, with some difficulty be able to apply that
| understanding to other cars.
|
| But, you definitely don't need to build a car from scratch to
| be a race car driver.
| kjs3 wrote:
| _building a cat from scratch_
|
| That _would_ be an interesting project.
| aleph_minus_one wrote:
| > _building a cat from scratch_
|
| > That _would_ be an interesting project.
|
| Here is the source code of the OpenBSD implementation of
| cat:
|
| > https://github.com/openbsd/src/blob/master/bin/cat/cat.c
|
| and here of the GNU coreutils implementation:
|
| > https://github.com/coreutils/coreutils/blob/master/src/ca
| t.c
|
| Thus: I don't think building a cat from scratch or creating
| a tutorial about that topic is particularly hard (even
| though the HN audience would likely be interested in it).
| :-)
| artsi0m wrote:
| Building a shell from scratch (or some pre-made starting
| point) seems to be an exercise in a lot of operating
| systems courses and also in Tanenbaum's book on Operating
| Systems.
|
| There is this guide, divided in parts:
| https://github.com/tokenrove/build-your-own-shell
|
| I think you right, and implementing core utils is a nice
| exercise in system programming. Maybe, it even can be
| used to create some automated tasks with tests on
| codewars.
|
| Once upon a time I implemented expr(1) but it was too
| simple, without regex part.
| bigstrat2003 wrote:
| I'm 99% sure that kjs3 was joking about building the kind
| of cat that goes "meow", not a program. ;)
| kjs3 wrote:
| 100%. And considering the OP mistyped "car" as "cat", I'm
| really, really hoping aleph_minus_one was making a
| different kind of attempt at humor, but around here you
| never know.
| aleph_minus_one wrote:
| You should then alias "cat" to print "meow" instead of
| concatenating files.
|
| ;-) ;-) ;-)
| kjs3 wrote:
| If opportunity cost is how you decide such things, I'm guessing
| this is not for you. There's undoubtedly some new JS framework
| that's about to be The Next Big Thing.
| jobs_throwaway wrote:
| Understanding intuitively how compilers work, and how the
| various translators to/from VMs and machine code, is, I think,
| pretty useful. Maybe not in day-to-day web dev work, but it
| will help you around the edges.
| brailsafe wrote:
| It depends whether you have any opportunities at the moment
| that are directly attributable to a singular focus on "web
| development". That's not a productive or healthy way to look at
| things imo--though it might seem like it if you're relatively
| knew--but if your prospects are good right now, then this won't
| help you necessarily keep your current job or get another one.
| It will help you reason about code, logic, and computers in a
| way you wouldn't otherwise, but you'll have a hard time if
| you're not enthusiastic about learning for the novelty of it,
| because it will eventually be quite challenging and you'll need
| to allocate significant amounts of time.
|
| I say that it's not a productive way to look at it, because
| intensity and longevity of singular professional focus only
| lasts as long as your intellectual and physical infrastructure
| around it, which means doing things that are somewhere between
| a short and long distance away from your core subject;
| sleeping, learning fundamentals, algorithms, design, hiking
| etc.. (Web Dev, as with anything, can get just as intensely
| unstimulating as it can stimulating)
|
| Also, learning how your language kind of gets compiled is just
| fascinating.
| brailsafe wrote:
| To elaborate on this slightly, when I eventually burnt out
| from just grinding frontend and working a stressful frontend
| job, I spoke to someone much more experienced than me in
| medicine who suggested that basically anything can be
| interesting if you keep going deeper. That's stuck with me in
| the 6 years since, and I don't worry much about drilling web
| stuff as much
| artsi0m wrote:
| As a backend web developer you can learn about the difference
| in pre-fork and polling model in web servers, which
| interconnected with c10k
|
| http://www.kegel.com/c10k.html
|
| This will give you ability to reason about the web server
| configuration you want to use.
|
| But both fork(2) and epoll(7) [kqueue(2), iocp] would stay at
| low level relatively of place where you operate.
|
| Don't know what to say about fronted though, but there are
| probably some new points of view on JS you can get by
| implementing it as an interpreter in courses like crafting
| interpreters.
| kragen wrote:
| opportunity cost is like 100 hours, which is pretty small
|
| usefulness for web development is that probably right now there
| are things you think are 'too hard' or even inconceivable
|
| after those 100 hours nothing will be inconceivable
| huytersd wrote:
| Nothing is going to beat the SAP-1 computer and original textbook
| by Malvino for this experience.
| bmitc wrote:
| Is the book you're referring to _Digital Computer Electronics_
| by Albert Paul Malvino?
| porridgeraisin wrote:
| Cannot recommend it enough.
| emschwartz wrote:
| I loved this course and would strongly recommend it to anyone who
| works with computers that hasn't taken low-level CS classes.
|
| This course does an exceptional job of giving you an intuitive
| understanding of some critical parts of how a computer works that
| affect higher-level programs and programming languages (for me
| the biggest aha! was grokking the difference between the stack
| and the heap). It is also incredibly fun to appreciate how
| magical it is that these complicated machines we use are just
| built from these simple circuits that you keep building up and
| building up through the course. Finally, the teachers did a
| fantastic job of simplifying what could be multiple semesters
| worth of material to quickly give you the gist of things like
| assembly languages, without oversimplifying.
|
| Really can't recommend this enough if you have the time to do it.
| FWIW, the first part of the course (from NAND gates to building a
| CPU) is very fun and fairly easy. The second part (going from a
| computer to a full operating system) is quite a bit more work.
| CWIZO wrote:
| Is the online course and the book the same material? Trying to
| figure out if I need both or either.
| molly0 wrote:
| Im currently taking this course without having the book and
| it works great. I might buy the book later but for me it's
| important to have the imposed weekly deadlines in order to
| not just drift away and do something else instead.
| aleph_minus_one wrote:
| The two online courses at Coursera are based on the First
| Edition of "The Elements of Computing Systems: Building a
| Modern Computer from First Principles":
| https://www.amazon.com/Elements-Computing-Systems-
| Building-P...
|
| The most recent edition of this book is the Second Edition:
| https://www.amazon.com/dp/0262539802/
|
| To quote from the Preface concerning what the difference
| between these two editions is:
|
| "The Second Edition
|
| Although Nand to Tetris was always structured around two
| themes, the second edition makes this structure explicit: The
| book is now divided into two distinct and standalone parts,
| Part I: Hardware and Part II: Software. Each part consists of
| six chapters and six projects and begins with a newly written
| introduction that sets the stage for the part's chapters.
| Importantly, the two parts are independent of each other.
| Thus, the new book structure lends itself well to quarter-
| long as well as semester-long courses.
|
| In addition to the two new introduction chapters, the second
| edition features four new appendices. Following the requests
| of many learners, these new appendices give focused
| presentations of various technical topics that, in the first
| edition, were scattered across the chapters. Another new
| appendix provides a formal proof that any Boolean function
| can be built from Nand operators, adding a theoretical
| perspective to the applied hardware construction projects.
| Many new sections, figures, and examples were added.
|
| All the chapters and project materials were rewritten with an
| emphasis on separating abstraction from implementation--a
| major theme in Nand to Tetris. We took special care to add
| examples and sections that address the thousands of questions
| that were posted over the years in Nand to Tetris Q&A
| forums."
| emschwartz wrote:
| I did the course without the book. I haven't actually looked
| through the book, but the Coursera class was definitely
| enough on its own.
| brailsafe wrote:
| I'd recommend watching the course material and reading each
| chapter. It depends on a little luck which material clicks
| and how quickly, for me it varied from chapter to chapter
| whether or not I could get by with just the videos.
| mnsc wrote:
| Is the estimated hours realistic? 43 hours for part 1 and 89 for
| part.
| jobs_throwaway wrote:
| Sounds about right from my experience. I did this in a 10-week
| academic quarter spending ~10-15 hours a week on the projects.
| Might be a bit more time if you have little background or lack
| someone to explain things to you if/when you get stuck. The
| compiler and OS are by far the most arduous parts.
| brailsafe wrote:
| Much like any software, it depends on how quickly you get the
| hang of it, how many blocks of good time you can allocate, and
| what your existing exposure is to digital logic and circuits.
|
| I'm on the final chapter of the hardware section after probably
| 5 months, where the last 2 months haven't been nearly as
| focused and it showed immediately in my progress, and overall I
| feel like my success rate looks like a bell curve; confusing at
| first and slow, then not confusing and more productive, and
| then the CPU took me like a month of taking periodic goes at
| it. Now at the assembler, I feel like this the easier part of
| any sequential programming involved in the latter half of the
| course, and it'll ramp up significantly.
|
| 89 seems plausible, if you get lucky, have good combinatorial
| logic exposure already, and can really dedicate a decent
| portion of most days to it, but I'd probably say that's a
| generous minimum.
| dbrueck wrote:
| It'll vary a lot by your background and how much you play
| around along the way.
|
| If you're pretty familiar with most of the concepts and stick
| to the requirements, you can do the whole thing in 40-50h.
| OTOH, if you're encountering new concepts and really want to
| internalize them and/or if you take fun detours then I'd plan
| on 100-150h or more.
| bmitc wrote:
| It also varies by how professional you provide your
| solutions. If you start wanting to test things, give proper
| errors, etc., it will start increasing the time needed by
| quite a lot.
| vintermann wrote:
| I only did part 1 so far, but it felt like less than that.
| Whether that was because of experience, or because it was fun
| enough that it felt shorter, I don't know!
| j_m_b wrote:
| I loved and completed this course, just wish I could actually be
| working on this in my day job!
| atulvi wrote:
| I want sand2tetris next.
| JKCalhoun wrote:
| Sand2NAND is the only thing missing.
|
| I'm reminded though of the late Dave Gingery's series of books,
| _Shop From Scrap_ [1] where he tries to take you from building
| a foundry up to machine tools:
|
| [1]
| https://gingerybookstore.com/MetalWorkingShopFromScrapSeries...
| shpx wrote:
| Still waiting for Quantum Mechanics to Tetris
| cadr wrote:
| My favorite thing about the book is that each section builds on
| things, but you don't have to go through the whole thing to get
| there. So, for example, if you did a lot of hardware in the past
| but never got around to writing a compiler, you could in theory
| start there. Or if you did a lot of software before but never
| actually built an ALU, etc, you can get a lot out of just doing
| the hardware sections.
| cushychicken wrote:
| Does this still use a custom hardware description language?
|
| The curriculum here is very solid - my only critique is that it
| uses a custom HDL instead of Verilog, VHDL, or SystemVerilog.
|
| It wouldn't have been a huge stretch to do that, and make the
| skills taught that much more real as a result. Without the
| practical aspect of exposure to real HDLs, it seems more like a
| toy than a tool.
| warkanlock wrote:
| Knowing Verilog, I must disagree. Although it would be more
| beneficial if the book focused on hardware, its primary goal is
| to teach something other than hardware-specific definitions.
| HDL serves as a bridge to illustrate communication with
| predefined logic gates.
|
| The book should include a mention or an appendix to clarify its
| real-world applications. By the end of chapter five, I was
| dissatisfied, feeling a lack of control over the crucial
| aspects of the hardware I just built. However, a book can only
| do justice to some of the missing pieces of information we
| have.
| brailsafe wrote:
| I found Chapter 5 to be quite challenging, largely because it
| took a while to understand the combinatorial way in which any
| of the chip parts would get new inputs and so on, especially
| coming from a traditional sequential programming background.
|
| What specifically did you feel like you were lacking from the
| language?
| bmitc wrote:
| I don't think there's anything to be gained by switching to
| VHDL or Verilog. Their custom HDL is a fine HDL for the uses of
| the course. There's so much commonality that they're
| effectively interchangeable syntactically. If the idea was to
| use VHDL or Verilog such that one could actually make the CPU
| on silicon or an FPGA, then that opens up a whole can of worms
| that is well beyond the scope of the course. I do think it
| would be awesome if they had a sequel that did this, but I
| think it doesn't make sense in the context of the existing
| course.
| sweetjuly wrote:
| This was my experience with the course as well. It was fun but
| not useful.
|
| Learning Verilog later really opened the world of digital
| design for me and has let me build actually useful things. It's
| probably a non-goal though for this coarse to turn people into
| digital designers, this seems more aimed at people with a
| passing interest in HW as opposed to those who really want to
| go deep.
| bannisterjw wrote:
| Very cool article
| skripp wrote:
| I highly recommend you play the game "Turing complete" alongside
| this course. Will give you an additional visual way of looking at
| the problems.
| kebsup wrote:
| What I remember from this course is that the first few homeworks
| can be done in a few hours in one evening, and then you suddenly
| spend your weekend building a compiler.
| artsi0m wrote:
| So, here the question I want to ask someone who dealt with this
| course:
|
| How much of the topic of compilers is covered in this course?
| Have you built an optimizing compiler that creates binaries
| from a [relatively] high-level language such as C? Or you have
| just created an assembly for a specific architecture?
| rmshin wrote:
| Without too much experience in writing compilers beyond this
| course, I'd say that the course focuses on grounding your
| conceptual/intuitive knowledge of how compilers work rather
| than any serious exposition into modern-day production-grade
| compilers.
|
| You write the assembler for the course's own hardware
| architecture called Hack, then a compiler backend that
| converts a stack-based VM intermediate representation (IR) to
| assembly, and finally a compiler frontend that does syntax
| analysis and code generation to translate the book's high-
| level language Jack to the IR.
| Kortaggio wrote:
| This was an amazing course and is one of the most rewarding
| computer science courses I've taken! I loved that there was
| nothing left to "magic" and it was the first time I felt like I
| understood the "full stack" of the Java-like code I was writing
| right down to the transistors.
|
| Self-plug for a full-blown minesweeper game I made for the final
| project: https://github.com/billmei/nand2minesweeper It's a
| complete game with a tutorial, custom RNG, and unit tests, using
| their hardware simulator.
| westurner wrote:
| Similar: "Show HN: Tetris, but the blocks are ARM instructions
| that execute in the browser"
| https://news.ycombinator.com/item?id=37086102
| cubefox wrote:
| I wish there was something like that for computability theory.
|
| Presumably for historical reasons, professors of theoretical
| computer science love to talk about abstract machines like
| finite-state machines, pushdown automata, Turing machines etc.
| Not about logical circuits.
|
| But arguably, logical gates are much more conceptually primitive
| than most of those automata above! They are basically an
| implementation of propositional logic, albeit potentially with a
| dimension of time and delay. And they are nonetheless somewhat
| close to how actual computers work. So why do they ignore them as
| a model of computation?
|
| My guess is that they don't talk about them because they only
| awkwardly harmonize with the classical models of computation:
| FSMs, TMs and the like, and the neat hierarchy of computability
| they place them (what languages in the Chomsky hierarchy they
| recognize).
|
| For example, Turing machines have two kinds of states: Objects
| called "states", and the states of the tape cells. The former are
| finite and the latter are infinite. Pushdown automata make a
| similar distinction into two types of states. Logical circuits,
| on the other hand, don't distinguish two different kinds of
| states in such a way. It's all just circuits.
|
| The classical abstract machines have other problems as well:
| Arguably, among abstract machines, a real CPU is most similar to
| a universal Turing machine, because it can execute arbitrary
| programs. But according to the theory of computation, CPUs are
| merely equivalent to finite-state machines! Because they lack an
| equivalent of an infinite tape. Infinity is a strange detail to
| emphasize here, as logical circuits are merely "potentially
| infinite" in the same way finite-state machines are merely
| potentially infinite. But that doesn't make them similar to each
| other. The relevant difference seems to be that circuits with
| delay allow for "memory" (like flip-flops), while finite-state
| automata don't.
|
| I would like to see a course or book on theoretical computer
| science that tackles this issue: "From NAND to Turing Machines".
| credit_guy wrote:
| Maybe something like this?
|
| https://computationbook.com/
| cubefox wrote:
| Judging from the overview, they seem to implement classical
| abstract machines using Ruby. Implementing something
| relatively simple (an abstract machine) with something
| complex (Ruby) is quite unilluminating. I was asking for
| someone who implements them using logical circuits. While
| also explaining how their different "power" (in terms of
| languages they recognize in the Chomsky hierarchy) is
| reflected in their logical circuits.
| kragen wrote:
| as you say, the chomsky hierarchy is surely an influence, but i
| don't think that's the main thing
|
| i think it's probably because a turing machine can do universal
| computation and can be described completely in a couple of
| paragraphs, while you need at least several hundred logic gates
| to describe something that can do universal computation (if you
| give it infinite memory), and then you still don't have a
| convincing argument that what it does is _universal_ in any
| interesting sense
|
| until you bring in turing machines, anyway
|
| you can write a turing machine in about one line of c; the
| description of a computer in terms of nands doesn't give you
| that
| cubefox wrote:
| That seems to be a somewhat strange comparison. Logical
| circuits are arguably not much more complex than finite-state
| machines, and theoretical computer science professors don't
| have an aversion to those. So it doesn't seem like they find
| logical circuits too primitive. They even seem to strive for
| primitivity, as Turing machines are much more conceptually
| primitive than things like register machines or actual CPUs.
|
| Moreover, a logical circuit itself is actually easier to
| describe than a Turing machine. Both logical circuits with
| delay and Turing machines can do "universal computation" for
| any reasonable sense of the term (demanding an infinite
| element is arguably not reasonable).
|
| And to give a "convincing argument" that they are universal
| is quite difficult even for Turing machines. What would such
| an argument even be? In practice, it's more the fact that
| there are _no known counterexamples_ which causes us to
| believe in the Church-Turing thesis (that any problem that we
| would intuitively consider "computable" is also computable
| with a Turing machine or logical circuit, and vice versa),
| rather than any one (positive) "convincing argument".
| nickpsecurity wrote:
| You might get more mileage out of Abstract, State Machines.
| They operate on structures instead of characters. Quite a few
| tools exist for them, too.
| aleph_minus_one wrote:
| > But arguably, logical gates are much more conceptually
| primitive than most of those automata above! They are basically
| an implementation of propositional logic, albeit potentially
| with a dimension of time and delay. And they are nonetheless
| somewhat close to how actual computers work. So why do they
| ignore them as a model of computation?
|
| Simple: logic circuits for propositional logic are not Turing-
| complete, and in a lecture about theoretical computer science
| one wants to teach such more sophisticated, mathematical models
| of computation.
|
| On the other hand, in basically every beginner lecture about
| computer engineering (in German: "technische Informatik"), they
| will teach you how how the transition function of a finite-
| state machine can be implemented via combinational logic
| (https://en.wikipedia.org/wiki/Combinational_logic), which can
| be transformed into logic gates for implementing a Mealy
| machine (https://en.wikipedia.org/wiki/Mealy_machine) or Moore
| machine (https://en.wikipedia.org/wiki/Moore_machine) in
| hardware.
| cubefox wrote:
| > Simple: logic circuits for propositional logic are not
| Turing-complete, and in a lecture about theoretical computer
| science one wants to teach such more sophisticated,
| mathematical models of computation.
|
| Logical circuits with delay (sequential [1] rather than
| combinational logic) are indeed not Turing complete -- but in
| the same uninteresting sense that a CPU is not Turing
| complete: In a conceptually irrelevant way. As I argued,
| Turing machines are precisely _not_ "much more sophisticated"
| than CPUs or the circuits they are made out of. Turing
| machines merely have infinite rather than potentially
| infinite memory.
|
| You could modify the concept of a Turing machine such that
| its tape is potentially rather than actually infinite, and it
| would change nothing of substance. Yet this machine would
| suddenly only be considered equivalent to a finite-state
| machine.
|
| Apart from that, a perhaps theoretically interesting point
| about combinational logic (circuits without time/delay) and
| finite state machines would be that combinational logic is
| apparently computationally weaker than finite-state machines.
| Wikipedia doesn't say anything about that explicitly, but the
| "classes of automata" image [2] they include in the article
| does suggest it. But that, assuming it's true, should be
| taught in theoretical computer science class, not in computer
| engineering (if the latter mentions it at all).
|
| But, much more importantly, they -- the theoretical computer
| science professors, not the engineering guys -- should
| explain the theoretical relation between circuits with delay
| (sequential logic) and various automata, including Turing
| machines.
|
| The likely fact is that they ignore circuits because they
| don't fit well into their supposedly neat picture of abstract
| machines. In fact, they call their reliance on infinity as an
| important difference between models of computation in
| question.
|
| [1] https://en.wikipedia.org/wiki/Sequential_logic
|
| [2] https://en.wikipedia.org/wiki/File:Automata_theory.svg
| shpx wrote:
| I can also recommend the Digital Design and Computer Architecture
| lectures from ETH Zurich if you're trying to understand computers
| at a lower level:
|
| https://www.youtube.com/playlist?list=PL5Q2soXY2Zi-EImKxYYY1...
| agentultra wrote:
| This is a great course, well put together, and very fun.
|
| I did the second part in Haskell too! I wasn't sure what their
| container environment is like so I stuck with only the `base`
| library and it worked out well enough.
| dang wrote:
| Related. Others?
|
| _Ask HN: What books or courses do you know similar to "From Nand
| to Tetris"?_ - https://news.ycombinator.com/item?id=36853931 -
| July 2023 (29 comments)
|
| _From Nand to Tetris (Building a Modern Computer From First
| Principles)_ - https://news.ycombinator.com/item?id=27030046 -
| May 2021 (1 comment)
|
| _The Elements of Computing Systems, Second Edition_ -
| https://news.ycombinator.com/item?id=26036790 - Feb 2021 (97
| comments)
|
| _July 2021: 2nd edition of The Elements of Computing Systems_ -
| https://news.ycombinator.com/item?id=25329763 - Dec 2020 (1
| comment)
|
| _From Nand to Tetris: Building a Modern Computer from First
| Principles_ - https://news.ycombinator.com/item?id=18519883 - Nov
| 2018 (47 comments)
|
| _Build a Modern Computer from First Principles: Nand to Tetris
| Part II_ - https://news.ycombinator.com/item?id=14526344 - June
| 2017 (35 comments)
|
| _Build a Modern Computer from First Principles: From Nand to
| Tetris_ - https://news.ycombinator.com/item?id=13209452 - Dec
| 2016 (17 comments)
|
| _Building a Modern Computer from First Principles_ -
| https://news.ycombinator.com/item?id=12333508 - Aug 2016 (26
| comments)
|
| _Nand2Tetris: Building a Modern Computer from First Principles_
| - https://news.ycombinator.com/item?id=10369795 - Oct 2015 (1
| comment)
|
| _VHDL implementation of Hack computer from "Nand to Tetris"_ -
| https://news.ycombinator.com/item?id=10021275 - Aug 2015 (4
| comments)
|
| _Nand to Tetris 1_ -
| https://news.ycombinator.com/item?id=9593114 - May 2015 (24
| comments)
|
| _From NAND to Tetris: The Elements of Computing Systems
| [repost]_ - https://news.ycombinator.com/item?id=6963338 - Dec
| 2013 (3 comments)
|
| _Building a Modern Computer from First Principles_ -
| https://news.ycombinator.com/item?id=5888705 - June 2013 (83
| comments)
|
| _Building a Modern Computer from First Principles_ -
| https://news.ycombinator.com/item?id=4643836 - Oct 2012 (1
| comment)
|
| _Online course: Build your own simulated computer, assembler,
| lang, OS, & game_ - https://news.ycombinator.com/item?id=2928973
| - Aug 2011 (29 comments)
|
| _Elements of Computing Systems - Building a Modern Computer from
| 1st Principles_ - https://news.ycombinator.com/item?id=2273098 -
| Feb 2011 (2 comments)
|
| _The Elements of Computing Systems ( "From NAND to Tetris")_ -
| https://news.ycombinator.com/item?id=1834864 - Oct 2010 (2
| comments)
|
| _From Nand to Tetris in 12 steps_ -
| https://news.ycombinator.com/item?id=399141 - Dec 2008 (3
| comments)
|
| _Building a Modern Computer from First Principles_ -
| https://news.ycombinator.com/item?id=205322 - May 2008 (9
| comments)
| AlecSchueler wrote:
| Great memories of this book, and of the period of my life I
| picked it up in. I was at coffee with my girlfriend saying I'd
| read you could make all the logic gates using only NANDs, so we
| got curious and wrote NAND on a bunch of napkins to see if we
| could figure them all out.
|
| We did and it was great fun. For each gate we figured it with
| NANDs we would write the name of the new gate on a napkin.
|
| We took the napkins and the joy of it home and sheet a few days
| we started combining those gates up as well, trying to eventually
| figure out an entire ALU. And so along came multiplexors and a
| bunch of other fascinating stuff.
|
| Eventually we got stumped, but I'd heard about this book and we
| decided to order it. The rest of the chapters really did help us
| get an understanding of the low level that had always been
| mysterious to me as someone with software experience only.
|
| Can't say I ever did make it all the way through in terms of
| building around, though. Once it got more into the low software
| levels I felt I already had enough of an understanding that the
| work didn't seem so appealing, but the read was still fantastic.
___________________________________________________________________
(page generated 2023-12-22 23:00 UTC) |