Hacker News new | past | comments | ask | show | jobs | submit login

Two of the most boring parts of Minecraft, unfortunately. Both are something your average first year CS student could put together in a weekend or two.

If I can indulge in some self-promotion, I have written mountains of code which implements many of Minecraft's behaviors down to the last detail, which may be a more interesting candidate for study:


Seeing Balze3D open-sourced might end up being pretty cool, though.

> Both are something your average first year CS student could put together in a weekend or two.

Sometimes I see people and wonder which of these two things is true:

1. They have no idea what the average developer actually is.

2. They are lying to make it sound like they were elite when they were a freshman in college.

I suspect a bit of both in this case. SirCmpwn unfortunately has done this for many years, and is one of the people that pushed me outside of the Minecraft dev world, he can be really nasty :(.

I was a jerk the first few years I was involved in the Minecraft scene, and I'm still a jerk all too often today. I'm sorry for making you feel that way. If you want to talk, my email is in my profile.

At the end of it all, people won't remember your work - but they damn sure will remember how you made them feel. They'll remember how you treated other people. Ultimately, that will be the judge of your worth in the eyes of whatever community you participate in and society broadly.

Few people do work that transcends awful character. Very very few people. Steve Jobs is an example, but let's be honest neither you nor I will have the same level of impact to excuse ourselves after treating others terribly.

With that being said, I admire your effort to mend things and the bit of self-reflection in your response.

Do you think Steve Jobs made contributions that outweighed him being a jerk? I don't think that ever happens, in that I don't think you ever forget someone being a jerk, but then I don't think we aren't capable of appreciating the good and the bad at the same time. There must be studies around this. Maybe someone is aware of some.

It's amazing how little interactions add up to a reputation. You banned me from a minecraft irc channel when I said that the leap second was causing issues with some minecraft servers. (see https://www.wired.com/2012/07/leap-second-bug-wreaks-havoc-w...) since then I avoided a collaboration opportunity with you for this purpose. (Mediacrush-related)

Bad experiences like this add up, and it's very hard to repair a broken reputation.

"I'm sorry for making you feel that way. If you want to talk, my email is in my profile."

We should all so this more often.

I wouldn't take this as a sincere gesture. So many people say this in the public eye just to save face without any intention to take it further.

I realise I'm replying in context of Sir_Cmpwn specifically (and I have had my own interaction with him in the past on unrelated projects in very sour taste) but it is more common with anybody that promotes an apologetic-but-contact-me attitude. It's an all to familiar trait of people trying to sound good in threads of their topic.

It seems a number of us have had bad run ins with Sir_Cmpwn. I too have had issues, it’s a shame because I think he’s a brilliant guy.

It looks like an apology on the surface but I don't think it is one.

"I'm sorry for making you feel that way."

That's very close to the classical non-apology apology "I'm sorry you felt that way". [1]

He isn't sorry for his behavior, but sorry that his behavior caused certain feelings. The post he's responding to doesn't mention any feelings, so I assume he meant "Sorry for making you feel that you were pushed out of the scene". He's shifting the focus from his actions (for which he is responsible) to other people's feelings (for which he is not responsible, since he can't control other's feelings).

"If you want to talk, my email is in my profile."

Meaning: Please don't continue talking in public about this.

[1]: https://en.wikipedia.org/wiki/Non-apology_apology

> He isn't sorry for his behavior

"I was a jerk the first few years I was involved in the Minecraft scene, and I'm still a jerk all too often today." is the longer sentence preceding it which is 100% a statement about his own behavior. "for making" actually makes the sentence you're quoting about his behavior too, in my interpretation of it.

It's an apology. Maybe you don't think it's a strong one, or a sincere one, or one backed up by corresponding action, but it is one acknowledging damage done, some responsibility for it, and stating a desire to change (unless you have a wildly different interpretation than I do about what, exactly, "I'm still a jerk all too often today" means.)

Usually those type of people had some trauma in the past or had really bad parent-child relationship (probably abused or something). I honestly think SirCmpwn should get professional help. Mental illness should not be ignored.

SirCmpwn was kind of a jerk from what I remember of him in an IRC I was in... but I still liked him (not the guys who ran the channel, unfortunately). He was damn smart and I seem to have a higher tolerance for "smart but jerk" types of people (of which there are many)...

Also, do you remember me? :D

To the contrary you were an inspiration for me, you even joined our small development community and were interested in our development.

Nobody is perfect, you’ll always screw up with one person and succeed with another :)

The problems mentioned here is that it’s obvious a number of people have had meaningfully bad interactions with him, it’s an unfortunate pattern.

> Sometimes I see people and wonder which of these two things is true:

> 1. They have no idea what the average developer actually is.

> 2. They are lying to make it sound like they were elite when they were a freshman in college.

Concerning 1: they might really be living in some kind of filter bubble of really smart people. Smart people often attract and are surrounded by smart people.

A while ago I checked what's the rate at which code gets put down within the organization I'm working at.

I went through a few repos and the result was a weirdly consistent 30-45 LOC(sans tests) daily for a 2-3 person team - at least on the front-end.

Since then I'm sceptical of opinions saying that a 1500 LOC+ project could be put together "within a weekend".

Not saying it doesn't happen, but good projects of this sort have to be rare.

If you sit down for a weekend and write a one shot project that's never going to be used in production 1500 LOC is more than doable, especially as a college student where you sometimes can go many weeks without doing anything productive.

Sitting at a desk for 6-8 hours every weekday with an editor in front of you has this weird demotivating effect. Add to that all the unit tests (and general need for stuff to actually work well the first time), documentation, and not being able to just run off and build what ever you feel like and you get closer to 30-45 LOC.

The numbers you have found are the numbers averaged over all kind of projects (new projects, old projects). It is well known that the average daily LOC output in the industry is not high. Once a project has reached a certain complexity or maturity, people spend more and more time on debugging, refactoring, documenting, profiling etc.

For a new project, 1500 LOC within a weekend sound possible if the goal is to quickly produce some kind of proof of concept. You would probably spend the following days on redesigning the whole thing, though :)

Once I spent 2 days debugging something that got solved be deleting half a line (some hopefully unneeded condition in a long if)...

You can put out a lot more code when you're starting from a blank page than when it has to integrate with thousands of lines of existing code. Not to mention that at the start there's basically no refactoring, debugging or rewriting target, so you can just pump out new code. Whether 1500+ LOC on a weekend is realistic is another matter.

> I went through a few repos and the result was a weirdly consistent 30-45 LOC(sans tests) daily for a 2-3 person team

The "sans tests" metric is in my opinion some kind of cheating to keep the number small.

Let me explain: when I was younger, I was already immensely productive as a programmer. But because I was young and naive, I did not care about testing etc.

When I look at code that I produce today in my free time, I observe that the ratio between test code and normal code is about 6:1. It is similarly hard to produce good test code as it is to produce "ordinary" code.

So by demanding that the code is well-tested, we need a lot more code to solve the same job. If I multiply your upper bound of 45 LOC by my factor of 7 (= 1 + 6), I obtain 210-315 LOC/day. This is much nearer to my experience of 400-500 LOC per day. The remaining difference can be plausibly explained by experience of other team member, time for communication in the team, time for communication with customers, overhead demanded by management, ...

I had to use this metric to account for the, ahem, work ethic of some and the lack of tests resulting from it.

But I agree - a good test suite is going to be much larger than the code it's testing.

Lord. I was reading 30/45 KLOC...

Well programmers are well known for being bad at estimating how much work something is. I’m less sure about datafixerupper but a bunch of the functionality of the command parsing could be done in a few weekends. Making sure it works reliably and adding completion and ensuring a good interface would be harder and more work.

Usually I err on the side of the former (option 1). The more someone becomes an expert their field, the more they tend to underestimate their own knowledge/skill.

It's just simple straight humblebrag.

I did not go to college so I have to admit I'm not actually familiar with the average freshman's skill level. That being said, these are basic and well-understood problems solvable by the average, say, junior developer in the industry. Less of a reach?

Far, far lower than you're envisioning. There are certainly a lot of freshmen who could easily do something at this level, but the average freshman would be hopelessly lost (at least in my (recent) experience).

By the way, excellent work on Sway. I've been meaning to jump to i3 forever, and decided to move to Wayland on my most recent install. I do have some bug reports to send your way, though, I should get on that.

Thanks! Please do send those along, though a patch is worth a thousand bug reports.

Indeed it is. I'm hoping to get the time to dig into it enough to submit a patch, but school has me pretty busy at the moment.

An average CS freshman knows how to write hello world and print Pascal's triangles on the command line.

An above average freshman at an above average university can probably make Sudoku, Tetris or Brick breaker.

Even the smartest students probably won't be able to make.minecraft in a weekend. Maybe as a semester long project. But not a weekend.

I never suggested anyone could make Minecraft in a weekend. Microsoft only open sourced two small libraries that only represent maybe 0.1% of Minecraft.

Just chiming in to say that I agree with what you said. I found the released libraries to be underwhelming to the point of almost uselessness based on the descriptions. I've written stuff like that for projects back when I was in school, and if I needed such tools, making my own would likely take about as much time as implementing someone else's.

At least half my class struggled (heavily) with recursion while implementing seach algorithms e.g. They all still got their degree as well...

Degrees is irrelevant. I have an associates in a related but not quite CS degree and show more quality of work than another junior (and sometimes senior developers) who has a bachelors degree. I have tried to teach him so many things numerous times and its all in one ear and out the other. Seen the same problem with a "senior" developer who claims to love some standards yet his code commits say the opposite.


Ah yes, profunctor optics, an excellent topic for a freshman CS student's weekend project:


DataFixerUpper looks more sophisticated on the surface, but it's egregiously overengineered, and tools accomplishing the same stated purpose could be made by a freshman with a couple of weekends to spare. It's also not particularly relevant to Minecraft, it's more of a general tool - so anyone hoping to learn about Minecraft from this will really learn more about Minecraft's annoying legacy baggage.

I think you underestimate how many weekends it would take a freshman - when I first took a CS course, I spent a solid few weekends working out array syntax, strchr and strncat, and how to best google compiler error messages. I was pretty proud of the text-based 2-player chess game for which I put in some late nights for my final project...a Minecraft renderer would have been a long way out.

This isn't a Minecraft renderer I'm talking about. The Minecraft renderer would be the non-trivial project I said "might end up being pretty cool" if they open source it.

When I went to university it was back in 94, and then people who took CS courses were pretty much self-taught programs already.

Sure "theory-stuff" was often new, because of the self-taught nature of the under-graduates. (I knew what a stack was because I'd done assembly-language coding, but I had no name for something I'd "created" which was a linked-list. Funny story.)

I assume nowadays with the internet people who want to code, can start early if they wish. Even if the lure of the outdoors is strong, and time is short.

With that in mind I'd assume any first-year student could write a system for updating data-files according to simple rules, (i.e. datafixerupper), and manage a simple parsing-class of some kind which would let you tokenize and react to "/send foo bar" input.

Well it depends what that freshman knows. Perhaps not an average freshman but if someone were to read about/see a talk on profunctor optics in (say) Haskell, trying to implement that in Java could be a fun weekend project. I think I saw a recording of some talk about profunctor optics when I was in my second year.

A reasonably large tested and complete library is not a project for a few weekends but I think profunctor optics in Java actually is. And much more suitable for a xs freshman than a typical Java programmer.

What is that even? Google searches just bring up academic papers or Haskell stuff.

Looks like nobody properly understood it yet, if it's so hard to explain what it even is.

The papers define the "profunctor optics" mechanism, so it's not really that it isn't understood: it's really Haskell code that implements lenses and prisms, which previously had less elegant formulations.

Yes, there is also Bartosz Milewski having a go at applying category theory to explain why profunctor optics work. But that's not an essential part of understanding them: they clearly do what they are designed to do. This is programming, not physics.

If I can't roughly explain what something is in 2-3 sentences I don't think I understood it well enough.

Your description didn't really help me either. Lenses and prisms are just glass objects to me.

Just from thinking about lenses, I guess It could be something that bundles and unbundles function calls... But no idea.

I didn't describe them! I just told you what the state of play is.

A lens is a "functional reference". Say you have a data structure of some kind. You can create a lens which points at one of the fields. It lets you get and set that field. Because this is functional programming, when you set the field, you get given a new reference to the whole structure (can't change things in place). So, naturally the way lenses are used involves combinining a reference to a structure of type A, a lens which refers to a field within type A, and, if you are setting the field (not getting it) then you supply the new value as well.

The jury is still out on whether writing programs in this style is wise, but the notion of a lens is fixed now.

It seems more like they wanted to make the rounds on various blogs and news sites which will inevitably display something along the lines of "Minecraft is now open source!" In the end, based on what they've currently released it appears to be more of an advertisement than anything. With a huge mod community creating projects such as MinecraftForge, most of what is currently released by Mojang/Microsoft is largely irrelevant.

If they release their game engine, however, that's a different story...

>If I can indulge in some self-promotion, I have written mountains of code which implements many of Minecraft's behaviors down to the last detail, which may be a more interesting candidate for study

It is an interesting case study. The code has failed to run for myself and the five other people i handed the project to with different configs. There are no tests that validate the project works. Its certainly work to be proud of, insofar as maybe its worked for some subset of people in the past.

Edit: I was excited to work on this code and spent a healthy amount of time reading through all of it to find great places to contribute. After writing a small pr, mostly a throwaway to test the waters, I was greeted with unmitigated assholery by the main devoper and their irc crew. I kept the logs from an irc conversation i had about the pr as a reminder of how not to act towards developers on projects i work on.

Well, the code has been unmaintained for some time now, and only grows more stale (especially considering the .NET ecosystem has been in turmoil during that time).

There are tests, though, but they only focus on the parts which are fragile or complicated:


Edit: oh, I think I remember you. If I'm right, here's your pull request and the corresponding IRC logs:



If there are tests and the project can still fail to run, is the test suite really good?

Blatant and rude sarcasm: you dont need to answer because a freshman cs student would know the answer.

It’s quite amazing how fast kindergarteners gets addicted to Minecraft. Here is a suggestion: create special version of Minecraft for kids below 10yr old. Discourage killings, shootings (even for animals) and encourage building. This “Kids Edition” has great chance of selling hot!

I notice that repo has commits ranging in age from 7 months to 3 years, so it seems to have taken you quite a bit longer than “a weekend or two”. Maybe tone down the arrogant trash-talking a bit.

As I pointed out in a few other comments, the code that Microsoft has open sourced represents a tiny fraction of the Minecraft codebase, is only loosely related to Minecraft at all, and represents basic and well-understood problems in the industry.

> Two of the most boring parts of Minecraft, unfortunately. Both are something your average first year CS student could put together in a weekend or two.

So sad that it's like average second year in my school's curriculum.

Well, when I was in school, it was honestly a toss up whether the median student had ever looked at source code prior to college. Tech company booms and busts do stuff like that.

Sad indeed. In my country, programming at all is taught to preschoolers as a distraction.

I'd really like to learn more about the concepts of this kind of game design. Where can I start?

If it's my advice you're looking for, the only way I've done it is by studying someone else's game and attempting to replicate it 1:1. It's more an exercise in reverse engineering than in game design.

Perhaps a different phrasing of the question (certainly my view) would be "I could go create a (not 1:1 feature) game myself, as a project, and I would learn new stuff, but would I cover all the concepts built into Minecraft?"

I would be interested in the syllabus that building a 1:1 minecraft would teach.

So for example, "Minecraft creates the same world each time from a fixed X Byte salt, and uses these well known algorithms for generative landscape production"

In addition to @Sir_Cmpwn's answer, the developer logs from Voxel Quest (@gavanwoolery on HN) and Seed of Andromeda are both excellent starting points for getting a general overview of what's involved in this sort of undertaking. Both of those games ended up releasing their full source code by the way, so you're also free to pick through every last detail if the logs aren't enough.




Ah, then some useful algorithms and keywords to study would be OpenGL, voxel rendering, A* pathfinding, cellular autonoma, perlin noise, etc.

Red Blob Games has a lot of good articles covering many of these subjects, here's a few:



Creating Minecraft is a lot of work, but creating something that generates psuedorandom worlds and lets you walk around them is a feasible couple-of-months-of-spare-time sort of project, assuming general programming competence but not assuming any particular skills in computer graphics. Odds are good you can find someone blog posting about it in your favorite language if you look. I've seen a number of them. If you cheat and use the Minecraft textures it looks a lot like early Minecraft too.

No way, Beta 1.7.3 is my favourite version. I'm going to have to try this.

It's not like they want to showcase their rocket science.

> Both are something your average first year CS student could put together in a weekend or two.

No unit tests in sight? Sounds about right.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact