It's interesting to see such a prominent and talented coder do his work on (what looks like) a totally stock Eclipse install. Not that there is anything wrong with it at all, but it puts into perspective all the time "wasted" by thousands of programmers (myself included) around the world tweaking their vimrc to perfection, obsessing over tiling vs traditional window managers, and in general worrying a great deal about the "optimal" workspace.
It's rather refreshing to see someone that just does his work with tools that are sufficient to do the job.
Come to think of it, I see this phenomena quite often at the university I attend. The "average" guys have regular flamewars on what language is best or whether vim or emacs or some IDE is the ultimate tool, MacBook Pro versus Thinkpad and so on, while the actual top guys keep churning out quality code in whatever language fits the task on whatever machine available at the time with whatever OS is on that machine.
This is obviously a great simplification and a single anecdote, but I think there is some truth to it. Masters of art obsess over the artwork itself, not the tools used to create it.
I see the same data and come to the opposite conclusion. People with 10x my brain power can deal with dumb tools, verbose languages, a malicious codebase, architecture astronauts. I'm too stupid to do what they do, so I try to pick my battles and live where it's simple.
I'm not arguing for obsessing over tools, or for flamewars. But perhaps the dumber you are the more you should pay attention to foundations.
Books on pool and billiards will teach you how to execute a proper billiards shot. Every one of them, from Willie Mosconi's book of the 1940s to the very latest, will tell you that you should stroke the cue forward and back along a straight path, as if it were running in a groove, avoiding swerves, which will be difficult to control. You should particularly avoid swerving your cue and hand during the final delivery and follow-through.
But there are a few rare and precious films of Willie Hoppe, possibly the greatest billiards player of all time, who won fifty-one world titles at a time when billiards was one of the most popular sports in America and was played in every U.S. city by every gentleman of taste. Check out Willie Hoppe's billiard stroke, starting at about 1:10 in this YouTube video:
From this evidence, it would appear that Willie Hoppe ruled the world of billiards with the worst stroke ever known to man. His cue literally skews through a ten-degree angle between the start of his delivery and the end, and his hand twists too. Wikipedia sheds some light on this:
Hoppe's peculiar style of stroke was a result of his career as a child prodigy. He barely reached the table and had to stand on a box. In [his book] Hoppe emphatically advised players not to use his way of directing the cue.
The moral of this story is that grandmasters will take lousy tools and build amazing things, because they are grandmasters. We, on the other hand, are probably not grandmasters, may not want to invest tens of thousands of hours before we get some decent results, and will not actually be harmed if, at the start of our quest for grandmastery, we do ourselves a favor and get the best tools we can afford.
---
(Having said all that: I may not personally like Java or Eclipse, but I can't believe they rank as bad tools. Tens of thousands of people are productive in them, many voluntarily. And consider that people used to write great games for the Atari 2600, for god's sake; Java on modern hardware is a dream come true by comparison.)
The best part of a good grad school is that, when it comes time to procrastinate, you'll have a card to a very good library.
Billiards is actually easy to learn about: Pick up any book by Robert Byrne (the canonical one is Byrne's Standard Book of Pool and Billiards; it can be found all over the place) and he'll be telling you all about it by the second half of the book; he can't help himself. Hoppe got name-dropped in there somewhere.
I should emphasize that my judgement of Hoppe's stroke quality is entirely my own (though it does jibe with the anonymous editors of Wikipedia) and is based on one or two videos like this one on YouTube. It is entirely possible that Hoppe was exaggerating his sloppy-looking stroke for the cameras; this was an exhibition after all.
(I can't actually play billiards, by the way, and I'm a bad pool player. You know how there are things which are more fun to read about than actually do? Billiards turns out to be like that for me: I'm not driven to practice. So many hobbies, so little time...)
There's also maybe a similar point to be made about him using Java to code his games.
Java gets a lot of bashing these days, and there's so many "hot" languages to mention during those bashing sessions. But in the end, the guy creates games people have a strong desire to play. And then he uses the technologies he's comfortable with to get whatever job done.
I heard that, once asked about which guitar model was his favourite, Keith Richards said "give me five minutes and I'll make 'em all sound the same." [1]
The same theory applies for pro PC gamers, an unusually high amount use $10 microsoft optical mice. Then there's the majority of casual players arguing over the details of the latest $90+ mice with bells and whistles.
microsoft-branded optical mice tend to be of very high quality; besides my (steel) keyboard, it is the only peripheral that I have used for more than 10 years.
I use a $60 logitech mouse for everyday use. I love the sensitivity (5000 dpi laser mouse) and find it awkward do use other peoples mice. Of course, I'm no pro gamer, so your statement is probably backed up by this.
I used to play WoW at a relatively high level (no server firsts or anything, but end game raiding). I didn't always have the "best" UI add-ons installed and did some things that were considered beginner mistakes (keyboard turning), but I knew what I was doing and I knew the game well so I still performed well.
I actually had a good reason for keyboard turning, for those familiar with the game. I was a healer and used Healbot to let me click on player names to cast healing spells. Thus, I preferred to have my mouse free for this and used the keyboard for turning, which was minimal.
And with Eclipse having something like "hot code reloading", the style of coding is pretty much the same as one folk programming Lisp with Emacs+Slime (edits and sees results immediately).
I'm a card-carrying Java-hater (haha only serious) and Lisper, I was pretty damn impressed by this the last time I watched Notch working on a LD thing. I looked it up this time and found out that Eclipse calls it "hot code replacement"
There are some limitations (can only change the body of an existing method) so it's not quite as dynamic as Lisp + Emacs + SLIME, but it's still pretty cool. I wish Dalvik supported it somehow because from what I can tell, you can't do this with code running on an Android emulator.
You can absolutely modify the body of not only an existing method but the very method you are currently breakpointed in. When you do that, Eclipse drops the frame, which means it restarts the method from scratch.
The DCEVM is a patched version of JDK 7 that allows the code reloading mechanism in the JVM to swap nearly arbitrary changes. I'd highly recommend it if you're trying to do any dynamic reloading of Java code during development. http://java.net/projects/dcevm
I learned programming with Eclipse default settings and Java, on a PC with a classic AZERTY straight keyboard with 105 keys layed out in the classic way. At some point there's not debate, yeah Java is crap, yeah Eclipse is laggy, etc, but my hands, brain and code work completely in concert when all those are united and there's no question that I can get anything done much, much faster with these. I actually gave up on using a macbook after a year and a half of constant practice because it still felt far too tiring to build my android apps compared to the PC, even though it was still Java and Eclipse.
It would be the equivalent of speaking your mother language (or native tongue or first language, whatever you english-speaking people call it :P) vs speaking a language with which you're "only" fluent when you just have to express a point very fast.
I'm not saying Notch is in the same situation (or anyone else actually), just that there are reasons, beyond being able to get things done using just the available tools, to use a setup that is often seen as suboptimal.
I use vanilla Eclipse on a 3 year old Dell Studio laptop (2.53Ghz C2D, 4GB RAM, 2x320GB 7200RPM HDD, AMD Mobility Radeon 3650 HD, Windows 7 Ultimate SP1 x64) and it runs perfectly smooth. Just as smooth as in Notch's video. I have no idea what people load their computers with to make them run so poorly :-/
Eclipse being laggy has a lot to do with what extensions and editors you install. If you know how to configure your setup correctly (ie. not install a huge all-in-one package with tons of crap you will never need, compare different extensions that are similar in functionality and choose for performance), it will be smooth. For me, coding in PHP is a good example - I tried a handful of editors and settled on the dinosaur PHPeclipse instead of some flashy PDT. It has better highlighting (to me, at least - probably only because it's the kind of highlighting I'm used to) and runs fast as a cheetah (I have a shameful couple of files that rank in the 20k+ lines and PDT would stutter on those... when I was moving the cursor). The final issue most people cite is startup time and so far, the only remedy I have found for that is keeping your workspace folder tidy and using an SSD.
To be honest I don't know either. Eclipse has always runned fine until the rare day when some plugin goes overboard and destroys all hope.
Last year for instance I've had bad issues with autocompletion on some huge classes (GLES20 I'm looking at you), but 1) that was when I was struggling on the macbook already, and 2) Someone fixed the problem somehow while I was busy downgrading to a stable version.
Eclipse kicks ass. I only said it was laggy out of mercy for the people who can't get productive with it.
Used to do the same thing with my electric guitar. I kept buying new pedals thinking that I would sound great once I found the perfect combo. Never made me a better player though.
I'm not intending to troll you :) I swear. But actually your comment might miss the point of the OP. Give Jimi Hendrix or Slash the worst guitar and the worst amp and he'll make much better music than 99.99% of the population. Same with cooking. Have you watched Top Chefs do the gas station challenge? They can take the shittiest ingredients and run circles around most chefs who have unlimited budgets to spend on organic, fresh, whatevers.
I'm curious--how is he able to make coding fast enough to be interesting to watch? It seems almost sped-up. I spend so much more time thinking than typing. Yet somehow he seems to be coding at a speed which would preclude a lot of think-time. I am confused, and a bit in awe.
And where is the part where strange crap happens that surprises you, and you spend 10 minutes staring at something and debugging it?
You have to realise that quite a lot of the ground work he is doing at this point is probably very familiar code. The fundamental code which scrolls the screen about, renders the sprites and moves the objects around the screen will be something he's written so many times it's instinctive.
I am so envious - if what you say is the case, how does he still manage to do it? I find it extremely hard to do routine tasks that I have done loads of times before. It is an extreme struggle for me to get enough motivation together.
I think what notch does really well is keeping the task at hand interesting to himself. Even looking at videos of him programming minecraft, you see that he does it to entertain himself. If a certain amount of time passes where he isn't liking what he's doing, he probably switches over to something interesting and keep the hard stuff in small bites for later.
It's a very good concept to work by, keeping things flowing and neither bore yourself to death nor skip on the hard things.
I don't disagree, but when I watched for about 15 seconds he was inserting printlns, trying to debug something related to sprite collisions. So I'd guess he still does some of that.
But the better answer is probably that he's been making games for two decades, according to wikipedia. Presumably he's long since worked through much of what you or I would need to think about when putting together a 2d tile game.
In fairness to you, I'd guess you, too, would code like a demon with such a short and hard deadline. I've watched previous of his codestreams and strange crap does happen, but instead of sitting and thinking for ten minutes, he codes and re-codes for ten minutes. Sort of thinking out loud.
I've noticed that a lot in this current stream. Instead of stopping to think and plan out how to do something, he keeps reiterating until he's satisfied.
He's satisficing. He's producing something quickly, rather than some optimal solution that takes much longer.
I too am amazed by this. I watched him program NoiseMap (which I assume is a random map generator, all trial and error. he went from double = double * double; to double = double * double * double * double;) and now he is applying it to the actual game world. Pretty amazing.
I don't know the exact rules of Ludum Dare, but if possible, I would have sketched out on paper (and if no prepared materials are allowed, memorized the important points) the general structure of the game, so that all I'd be doing during the 48 hours would be the actual programming.
Actually, he didn't do this. Part of the LD is that the theme/topic for the Dare isn't revealed until the game starts. He actually spent about twenty minutes staring at a 5-line text file labelled "ideas," just thinking out loud while he tried to come up with a game type.
That doesn't mean he didn't have a lot of prepared material. For example, when I was in school, I would have an essay planned out days in advance of an english exam, despite not knowing what topics were available until actually sitting the exam. With practice, its possible to bend and twist the given topics so your prepared material fits nicely. I imagine you could do the same with LD - plan the gameplay and art style and how different aspects should be coded in advance and then tweak it to suit the theme/topic once its been announced.
Oh, I see. I thought that the individual contestants came up with their ideas entirely on their own. I suppose this approach makes it much easier to judge, and more competitive as well.
You say "iterate" but from what I observed it was mostly used for shotgun debugging -- not necessarily a bad idea when doing graphics programming on a strict time limit.
Drawing is mostly a trained skill. People highly over-estimate the actual innate talent needed. They just need to work for it to get results. Of course if you don't enjoy it, you will not most likely be able to learn. The trick is to enjoy it.
I couldn't find the link but there was this middle-aged guy who was only able to draw stick figures and then got some training and now has an art studio and is a renowned painter.
I think it was actually a forum thread where the guy publicly showed his learning by posting a lot of his pictures as he kept practicing. Don't have the link off the top of my head though.
I watched this for several hours today, cool stuff watching him. His reactions when the code misbehaves are funny. How he remembers which sections of code do what and is not afraid to cut out whole sections to achieve the effect he wants is cool.
Has anybody here had any experience entering Lundum dare?
For many years I have thought about the idea of building a game from scratch and even have a few half (or probably quarter at best) finished engines/demos.
Of course it is easy to become a perfectionist and compare your work to the best AAA titles which means you will never finish.
Perhaps a strict 48 hour deadline is what is needed to really force me to get something completed. Although since I haven't done any games programming for years I would just end up spending all the time reading the docs and correcting simple mistakes.
I noticed that he switches between the keyboard and mouse so fast it seems like he always has one hand on the keyboard and one on the mouse. How is he so fast at switching? For me, touching the mouse is the slowing thing I do in a text editor.
The trick I use is to set the mouse sensitivity low and throw grab the mouse in the general direction I need the pointer to go. Then a switch costs me the time to my hand 20 centimeters.
I don't know the technique in this case, but personally I use a ThinkPad with a mouse on home row and buttons right next to the spacebar. I can go from typing to mousing almost instantly, though I still prefer to do everything possible with the keyboard unless I truly need an analog input device.
He seems to use a lot of "magic numbers" at first, but later on replacing those with proper variables. Is that common? I can't keep track of the meaning of such numbers while programming, so I tend to use variables straight away.
Historically, he's posted a timelapse version on YouTube, but you can't really see anything specific he's doing.
justin.tv, and by extension TwitchTV, which he's using to stream, archives everything, so you should be able to view it from this same link once he's done.
It's rather refreshing to see someone that just does his work with tools that are sufficient to do the job.
Come to think of it, I see this phenomena quite often at the university I attend. The "average" guys have regular flamewars on what language is best or whether vim or emacs or some IDE is the ultimate tool, MacBook Pro versus Thinkpad and so on, while the actual top guys keep churning out quality code in whatever language fits the task on whatever machine available at the time with whatever OS is on that machine.
This is obviously a great simplification and a single anecdote, but I think there is some truth to it. Masters of art obsess over the artwork itself, not the tools used to create it.