Love watching this. It makes you realize that the process of discovery and trial/error during programming is universal to everyone and what makes you feel sometimes stupid should never stop you carrying on.
Also shows the celebration of the minor successes ('yeah! it's working'), followed by the 'what the... ?' is something even the greatest experience.
I can't help but think of how much money this guy has and how he's still at it, hacking away and streaming his program-a-thon. Seems like a good role model not only for creative programming but also surviving success.
Listening to notch umming, ahhing and changing stuff at random in a desperate effort to get his program to work makes me feel so much better about my own (similar) programming process.
Funnily enough he was referring to the fact that doubles are proper nullable objects, the inverse of a common reason for people saying that Java sucks.
Do people really say "I wish that all my doubles were actually Maybe<double>s, which could cause my program to explode at any arithmetic operation?" I have never heard this complaint.
No object/primitive distinction, but you have to explicitly make objects and methods nullable, and the dereference operator is null-safe. (You use the dereference operator on a null object, you get null. You use the dereference operator to call a nullable method on a null object, you get null. It is a compile-time error to call a non-nullable method on a nullable reference where the compiler cannot prove that it won't be null. Pure functions are implicitly nullable.)
It is a compile-time error if you assign a nullable reference to a non-nullable reference and the compiler cannot prove that it won't be null.
I've also had an idea for what I call a "pseudo-statically typed" language: instead of checking types at compile time, it checks that you implement all functions called on the parameter at compile time. Public variables are just syntactic sugar for getX/setX, operations are just syntactic sugar for addX/subX/etc. If you define a method with an input type of X, the compiler checks that you only call methods that are defined in X, and then replaces the type with the methods actually called.
But nullable "primitives" can actually be useful occasionally, for caching, for example. Having a separate boolean flag works, but can be inefficient (you can store null internally as NaN with a specific payload, for example, whereas a boolean flag generally requires at least a byte, more with alignment. This also allows easier atomic updates.)
Google's Closure JS Compiler has exactly what you are describing as an optional layer on top of Javascript inside jsdoc comments. In that, primitives are default non-nullable unless you include ? in the type (eg @type {number} is non-nullable, {?number} is nullable), whereas Objects are nullable by default unless you specify otherwise (eg @type {Object} is nullable, {!Object} is non-nullable).
It's a pretty good system that does what it can, but you can still pretty easily get code that violates your specified types at runtime if you go out of your way.
I sympathize, I think checked exceptions are a good idea overall, just poorly used in Java, but the current trend of languages is clearly showing that we're moving away from the idea. None of the languages that came out on the JVM these past ten years (Scala, Groovy, Clojure, Kotlin, Ceylon, etc...) support checked exceptions.
Now, they say "I wish Java had a unified type system, and did not have the Object/primitive type distinction".
Which is also a goal for a future Java release, as announced by Oracle (don't know if they'll follow through):
Java 9 and 10 will tackle big data, multi-language interoperability, cloud and mobile and ship in 2015 and 2017 respectively, Oracle said Wednesday. For the Java Development Kit (JDK) 10 or after, a fundamental change is being discussed: making the Java language Object Oriented. This might see the introduction of a unified type system that turns everything into objects and means no more primitives.
I heard him saying it when a double value was not initialized and gave no such method exception. But again, anyone can curse any language during coding, that is natural. He would have not use Dart for this contest if he had not liked it. He is in the process of learning it.
Notch his success has nothing to do with being good at programming. It's about being creative and able to create good game play.
Because he programmed game play routines a lot and dealt with everything involved (i.e graphic rendering and such) more than the average Joe it looks like he is a good programmer because he just shakes it out live on some streaming website. Those concepts are language-agnostic and you can remember them.
To me, your comment is a strong implication that Notch is a gifted programmer. If you meant "at least kind of okay" literally (he is better than average), then feel free to ignore me. Otherwise, read on.
I know tons of people, myself included, that have coded something of similar, if not bigger scope than Minecraft. The only difference between Notch and everyone else is that Notch ended up creating a game that became extremely popular. It is a combination of skill and luck. Thinking it is all skill, and even worse, thinking that you are "gifted" because of such a happenstance is very unhealthy.
I don't care who he is. And it seems that you missed the whole point of my previous comment. He is not gifted. He indeed is very good but he is not gifted.
> Notch his success has nothing to do with being good at programming.
To me, being able to sell (not give away, charge) thirteen million applications that you write is a testament that you are good at programming.
Now, "programming" has many different dimensions, but Notch achieved something that very, very few developers will ever able to achieve in their lifetime (I'd argue he's actually the only solo programmer who's ever been able to achieve such a goal, beating even icons such as John Carmack).
To me that means you are good at creating something fun.
Let's be perfectly honest, after Quake 3, nothing id put out was really fun despite all the technical achievements Carmack made with the subsequent engines
I'm not saying Notch is a bad programmer, I admire him very much, but you need to keep the success / marketing / fun factor separate from the actual code
I'd have a hard time writing code knowing someone is watching me, judging every step. I'm so used to the cycle of making something that passes the tests -> refactor loop, and the code produced in the first iteration is so bad compared to what it will end up like.
If not caring about being judged were a tangible resource, and I had larger reserves of it, I know I'd be more successful. Fear of judgement makes me do all kinds of dumb things, and often subdues me into inactivity. It's something I'm working hard to combat.
Isn't Dart an easier language to work with than JavaScript. Notch is probably being practical and thinking long term. At 100,000 lines of code, you want the "cleaner" language.
I sincerely doubt that long-term maintainability was a factor unless Notch has said that it was. For a game jam you generally want to get something running as fast as possible. Of course, Notch has done it often enough that may have been motivated by more whimsical reasons, like trying out a language on a new project.
Hmmm. I guess the question is why he chose Dart over JavaScript for the web? He must have had another reason for going with the web other than to try something different than Java.
I bet big deciding factors were that the IDE is eclipse-based and it's a statically-typed language that is "close" to Java. That limited his choices quite a bit.
Just spent about 5 minutes watching him program and test a game... Can't watch anymore, do people actually enjoy this sort of thing? I think its more fun to program than to watch someone program...
I've spent a lot of time pair programming, and my normal tolerance for pure watching is 10 minutes or so. I think that's pretty typical; seasoned pair programmers have a lot of tricks to make sure control shifts frequently so that people don't get board and mentally disengage.
That said, I really enjoyed watching this stream for a while, and will come back later. One of the best parts of pairing is picking up tricks. Watching Notch work on the graphics was amazing. I've never done video games with modern tools, and seeing how somebody quickly iterates, always coming back to a running demo to see how it feels was great. In 90 seconds he added snow.
As somebody else mentioned, it was also great to be reminded that even legends are human. He's constantly making little mistakes, trying little experiments, being puzzled by something. If anything distinguishes him from the people I've paired with, it's his cheeriness in the face of adversity.
Also, I love this bit I just heard: "Does Santa shoot? Does Santa shoot? No. I think Santa swings his mighty sword. A sword? Yes. Santa wields a sword." It's so easy to think that well-tuned games spring full-formed from the minds of their creators, but real creativity is like that: continuous exploration and experimentation.
Some people might find it educational to watch an expert create, especially if they are new to game programming ... Don't have to be dismissive. :) now if watched for 24 hours that might a bit much.
He just scrapped the whole game he had been working on for 6 hours (it was some kind of endless runner in a 3D forest setting) and started on a new one.
The concept of streaming such a thing is great. Except that twitch.tv seems to be for gamers and windows only. And I can't find any description on their website of how to download and run even the Windows software that would stream the video.
If you're interested in streaming more general programming, check out twitch's sister site, justin.tv - more specifically the new Creativity category (http://www.justin.tv/directory/creativity). We have a bunch of awesome people doing live coding already, and we're very interested in helping more people get started. Feel free to email me - bill@justin.tv - if you need any help.
For some reason, I really like having these live streams (both the Notch one and the George Broussard one) on in the background when I'm programming. Something about hearing other people hacking away helps me get in the zone, and periodically checking the video helps me get re-motivated if I happen to lose focus.
I'd love a site like Twitch but specifically for coding sessions (seems to me like Twitch is primarily for gaming sessions?).
It looks like Java, classes, super, static, the editor shows the little red error decorations so you can quickly resolve a new edit and test. This looks like Java? Maybe DART is worth giving a try.
OK, I can't go to the Marketplace in Eclipse and install it, Strike 1, Perspectives are removed (HUGE) Strike 2, the entire Window menu has been removed Strike 3.
So far he's been alternating between.. di.fm's Electro House channel: http://www.di.fm/electro .. his own Autechre playlist, and the latest Boards of Canada album.
If it sounds like upbeat ravey house music, it's electro house. If it sounds like a headache waiting to happen, Autechre. If it's pretty dreamy stuff, Boards of Canada.
The theme this time, IMHO, is not very easy to pick a standout idea to work on. Almost everything you can make will fit that theme, and thus, is hard to create a unique or fun one.
I believe he uses a Das at work(saw it mentioned in a story about Mojang a while ago) but he mentioned on stream that he's currently using an old IBM Model M.
Both are nice mechanical keyboards with a wonderful sound though :)