Hacker News new | ask | show | jobs
by credit_guy 1452 days ago
My son is 12 y/o, and he's into Minecraft.

Yesterday he discovered the server mc.openredstone.org. He spent all day yesterday and about one hour today, and he ended up building a 4-bit adder.

On this server players learn how to build logic gates, and mix them so they eventually build CPUs. It's fully gamified, so beginners are called "students" and more advanced players are called "builders". To become a "builder" you need to pass some trials. The "builders" probably have their own challenges (not sure, my son is still a student), in any case, they behave like teachers. So a student will find a builder who will give them instructions, and guide them through more and more complex designs.

So, yesterday my son had no idea what XOR or NAND is, and today he already built a 4-bit adder, and has dreams of building an ALU.

I'm quite excited to be honest. By the way, I'm not in any way connected with whomever put together this Minecraft server. I don't even think it's a for-profit thing, as far as I can tell, it's fully non-profit.

4 comments

My kid has been into Minecraft for years, even before he had permission to play videogames. This year (he's 9) he started making 3d models and textures with Blockbench, and added them into his MCreator mod. It's a great gateway to learn stuff.
I've been programming for 15 years and had to google what NAND was. Had a sense of XOR
To be fair, AND, OR and NOT are enough to compute any function, and you can make all the other operators out of a combination of those three. For example A XOR B is just (A OR B) AND (NOT (A AND B)). Knowing things beyond AND, OR or NOT is useful, but not strictly necessary. XOR has useful properties though: with random inputs you get TRUE 50% of the time, allowing you to chain it without trending to 0 or 1; also it's the opposite of bitwise equality.

The others aren't that interesting if you aren't dealing with hardware, and their function is obvious if you know the naming convention.

Nah, all you need are nand gates. Everything else can be implemented from those.
Yeah, similarly in mathematics they often like to build everything up from ‘implies’ where the rule is implies(a,b) = or(not(a), b) = nand(a,nand(b, b)).
You only need one of {AND, OR} too.

((a or b) is (not ((not a) and (not b))), and vice versa.)

You would be surprised how much more relevant info programmers miss...

Example, most programmers I know have no idea when a variable gets allocated on the stack and when it's on the heap.

Let's not talk about how many dont even know what a (stack overflow)[https://en.m.wikipedia.org/wiki/Stack_buffer_overflow] is...

I remember being shocked to discover that a recent CS grad could not implement a factorial function using recursion. I can understand why you wouldn’t want to do that, but to not be able to do it?
a lot of CS undergrads compress out recursion knowledge. They learn that most recursion is best skipped in favor of iteration/dp, and they learn that they should implement things efficiently.

It’s possible the undergrad assumed you were referring to an efficient recursive algorithm or simply forgot most recursion.

No, I was quite explicit, and seriously, is it really that hard to write something along the lines of

    if (i<=1) 
       return i;
    else
       return factorial(i-1)*i;
It wasn't meant to be a trick or trap, it was the simplest recursive function I could think of and it’s not like I was asking him to implement a stack.
Heh, I just did the DS+A section of a Faang interview, and got the time and space complexity of an optimal solution more or less correct, as well as most of a recursive binary search implementation, but not quite there. I stumble with recursion because syntactically it's something you either have to use a lot or deliberately practice to have a keen sense of return values imo.

Probably won't get an offer because of that. Do I feel like as a frontend engineer I really need that knowledge? Not really. I could work it out for work purposes if I needed to tho. I'd be practicing it just to pass interviews.

I'd venture 95% of JS and Python devs don't even know what the stack is. They might have some vague understanding of a reference type vs. a value type, but that's probably it. Even in something like C# or Java I'd guess it's less than half that know what they are.
Diving into reverse engineering taught me just how little I know about assembly/call conventions and such. But it is highly educational.
If you want to learn more about logic gates, you might like the book "Bebop to the Boolean Boogie". It's aimed at kids but someone with a CS background could fly through it pretty quickly.
All the Ns are just the opposites.
That's not something you should be so quick to tell people.
Oh come on! There are a lot of types of programming and most of them exist pretty far from logic gates. The previous poster probably understands the concepts from their work but doesn’t relate them to logic gates.
Ya that's basically what I meant. The concepts are arguably unavoidable if you've done enough.
Heh, roasted. I know you're being a bit facetious, but it's not like I haven't used them, but in terms of the acronyms and maybe actually using them as bitwise operations, it's something I've rarely needed in JS programming. If you aren't being facetious, then you might need to work on humility
Redstone is fun, and some people do amazing builds with it, but it gets tedious fast; like building your own computer from transistors - fun … once! :-) But Minecraft has an incredible amount of richness once you get into modding and command blocks (although it’s a shame that they don’t have a proper lua built in.) Speaking of which, there’s powder toy, which DOES have built in Lua.
Well, there's Minetest[1] if you want a voxel block game with Lua built in.

[1]: https://www.minetest.net

mazbe this could be to your sons liking?

https://nandgame.com/