Minecraft shows how bedroom programmers can create global hits (2013)(technologyreview.com)
technologyreview.com
Minecraft shows how bedroom programmers can create global hits (2013)
https://www.technologyreview.com/s/516051/the-secret-to-a-video-game-phenomenon/?
4 comments
Glad I wasn't alone in thinking Speed and lightness seemed odd especially when talking Java
While it's obviously questionable from a technical perspective you can argue that Java, as a fairly good trade-off between abstraction and power, is faster (in terms of development iteration) than a lower level language and lighter than using a full blown engine (like unreal engine).
I don't think he chose Java so much as that was simply what he knew at the time.
I don't think he chose Java so much as that was simply what he knew at the time.
I wonder what are the grand capabilities it lacks? Is C++ a more powerful tool filled with grand capabilities? It does not feel right, although it sure is a Swiss army knife full of sharp and pointy tools in a "Don't look into laser with remaining eye" sort of way.
Is C a more powerful tool? Absolutely not. It's powerful but not that expressive.
Both languages are relatively low level and uses application memory management. I think it's only the latter that really matters when writing 3d games and other low-latency programs to be honest.
But I think the slow part of minecraft is the terrain generation, and I think it's mainly because the world is rather large and the algorithm is complex, not because java is slow or that the gc is a bad idea.
I don't think that the Windows 10 version run noticably faster, but I'm not completely sure that it's C++ and not C# and gc:d.
Is C a more powerful tool? Absolutely not. It's powerful but not that expressive.
Both languages are relatively low level and uses application memory management. I think it's only the latter that really matters when writing 3d games and other low-latency programs to be honest.
But I think the slow part of minecraft is the terrain generation, and I think it's mainly because the world is rather large and the algorithm is complex, not because java is slow or that the gc is a bad idea.
I don't think that the Windows 10 version run noticably faster, but I'm not completely sure that it's C++ and not C# and gc:d.
The biggest thing compared to C and C++ (or even C# and Go) is probably the lack of user-defined value types. So if you want to create an array of Point2D objects, in Java it will be an array of pointers to heap-allocated objects (each with additional per-object overhead), which is really bad for cache misses, memory consumption, GC pressure etc. C# is a pretty similar language that is popular for game development (with Unity) but unlike Java it supports value types.
I agree. It would be good with some kind of fly-weight allocation for a whole array of objects in java.
How is garbage collection for arrays of value objects solved? Is the whole array gc:d, or what? If an individual element is referenced somewhere the array stays in memory?
How is garbage collection for arrays of value objects solved? Is the whole array gc:d, or what? If an individual element is referenced somewhere the array stays in memory?
C# works a little differently from C/C++ in that stack vs heap allocation is decided at the type level (using a 'struct' or 'class' keyword when defining the type). So you can't easily have one object have a reference to an interior Point in a Point[] array, since any Point instance variable will just be copied by-value and not be a reference. A Point in an array can be passed by reference into a function using the 'ref' keyword though, in which case I'd expect the GC to keep the whole array around until the function returns? (It seems hypothetically possible to optimize but kind of a niche case). If you need to, you can also actually use raw C pointers with an 'unsafe' keyword, that's outside of the GC though (useful for working with C libraries).
My kids run it on their X201s. The Windows 10 version is massively faster, providing really fast rendering. Minecraft 1.9 doesn't even seem to support setting the fullscreen resolution, so it's always pushing 720p. I'm not kidding when I say it's literally unusable: 1 frame per several seconds.
Unfortunately the W10 version is very cut down, lacking lots of things. It's possible the main difference is OpenGL v DirectX on the Intel integrated cards. But the graphics are basic enough that there should be some way to render them quickly regardless.
Unfortunately the W10 version is very cut down, lacking lots of things. It's possible the main difference is OpenGL v DirectX on the Intel integrated cards. But the graphics are basic enough that there should be some way to render them quickly regardless.
I must admit that I have not played Minecraft on any computer without a fast nVidia card. It could be the OpenGL driver that makes it slow in your case actually.
I am not sure that the graphics are "basic" in the technological sense - Yes, the graphics have a retro-pixel look and no fancy shader-tricks, but there are a lot of large views and a lot of surfaces, and no cheating with a world box.
I am not sure that the graphics are "basic" in the technological sense - Yes, the graphics have a retro-pixel look and no fancy shader-tricks, but there are a lot of large views and a lot of surfaces, and no cheating with a world box.
Java has quite a bit of memory overhead which exacerbates Minecraft's inherently high RAM requirement. That plus frequent GC pauses make Java a suboptimal choice for Minecraft long term. (But it may have been the right choice for Notch back in the day.)
Yea it's a vague statement for sure. Maybe "more powerful tools" means Unity or a game engine, but it's not certain, and that sentence will just keep looking strange to me.
The point may have gotten lost in translation.
I think the point here is that a lightweight game engine was used (written in LWJGL which is a wrapper for native graphics APIs), rather than something full blown like Unity/Cry/Unreal.
I think the point here is that a lightweight game engine was used (written in LWJGL which is a wrapper for native graphics APIs), rather than something full blown like Unity/Cry/Unreal.
Keep in mind, Notch didn't write the java library that did his rendering, the light weight java gaming library or lwgl. It has reasonable performance and, as advertised, is lightweight.
The key to minecraft is that it stylistically embraced a really blocky rendering style with low resolution textures. That made a game that could be very open vistas, be malleable and run on any modern device.
The key to minecraft is that it stylistically embraced a really blocky rendering style with low resolution textures. That made a game that could be very open vistas, be malleable and run on any modern device.
IMHO Markus Persson wasn't a "bedroom programmer" in the pejorative sense, he programmed as a professional for King.Com for four years before venturing into the land of indy dev.
https://en.wikipedia.org/wiki/Markus_Persson
https://en.wikipedia.org/wiki/Markus_Persson
[deleted]
Yes.
I think he was a rather creative developer that managed to create the game that he wanted himself as a kid.
Maybe we can just sort this article under "slighly uninformed opinons" and carry on with our lives...
I think he was a rather creative developer that managed to create the game that he wanted himself as a kid.
Maybe we can just sort this article under "slighly uninformed opinons" and carry on with our lives...
I am interested in how he learnt about back face culling issues though
[deleted]
s/Minecraft/Stardew\ Valley/ and you get the 2016 version.
Wow. I wasn't aware of this Harvest Moon clone. Brings back memories.
I stumbled a bit while reading that. There is a comment to be made about notch's use of java, both good and bad, but I don't think speed and lightness when I think java, especially in the realm of 3D games.
I do think it was a good choice for cross platform play and modding though.