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

The most refreshing part of this story is that it's not about the Apple / Google / etc App stores.

Shows that exceptional indie products can get huge traction on a traditional platform, sort of like Braid on XBOX / PC / etc.

That said, also excites me for the future when MSFT's & Apple's standard OS come with a servicable app store baked in.




On a similar note, Minecraft is written in...

get this

...

Java

Which seems to be the dorkiest and most uncool language on the planet if you were to ask HN.


It's not the language, it's what you do with it.

Everything else is just hot air.


Sure, but nonetheless submissions containing "java" in the title will get less upvotes then many other submissions with language names in the title, i think.


Java as a langauge is generally uninteresting to talk about. There are vary few "wow, that's a clever hack" constructs to be made in the language. But certainly, that doesn't mean software created with it can't be great.

See also: PHP


I think you actually wanted to say something like "most of javas libraries are uninteresting". The language itself is interesting, i think. It lacks some modern and no-oop concepts for sure, but that don't make it actually bad.

The verbose libraries and configuration addiction of many java library vendors, including nearly all Sun libs i know, is the real problem.

You can, on the other hand, find a massive amount of really nice and concise libraries that make java feal great for many tasks. Even custom compiler extensions for language simplifications or cross breeding with groovy etc. aren't uncommon.

Also if you look at the JVM as a platform and java as the beginning of learning to work with a platform, you've got a great pool of languages to choose from, too. That wouldn't be possible without java.

I sometimes dislike java myself, but then i abstract the verbose parts behind some static builder methods, for example and write a lot less with great outcome in java.

The real shortcomings in the language design itself can suck hard. By ignoring these parts and using libraries for it and knowing what to watch out for, you can really get proficient with java. Keep Blochs "Effective Java" in reach and everything will be fine.

Actually i'm not programming in java that long. But I've written some desktop apps and some little JSP pages. Besides that i enjoy learning and following frameworks like the Play framework, because i think it's really promising and valuable for web development. Also getting to know many open source libraries is nice.


That there are not many clever hacks to be made in the language is a feature, not a bug.


And therefore not that interesting to read about on a news site. You don't see that many articles about factoring quadratic equations, either.


To the extent that's actually true (and I'm not convinced it is, because Java can mean a few different things) that's largely because there's not a whole lot that's interesting or new in the Java Language compared to many others, and Java does not lend itself well to "cure heart disease in 20 lines of Python" style blog entries.

But the JVM is an important platform and Java is the native language. There are lots of interesting applications written in Java.


This has more to do with Java being uninteresting than with Java being the best tool for certain situations.


Except in dzone. Almost all java-related submissions get high upvotes.


It will be fun to crawl Hackernews and find out "average score" for each language :)


Absolutely agree. Language is the medium, not the expression. What matters is how we use it to express our ideas.

Java is too verbose? So what's Eclipse for? Sometimes, a bit too verbose can be good in terms of maintenance and readability.


Well, it's more that Java lacks certain functionality that's intrinsic to more sophisticated languages. It's often harder to express ideas in Java because it has a more limited vocabulary (to stretch an analogy).


I suspect that the Lightweight Java Game Library is seeing a spike in downloads.


I hate Java and I haven't done any game development since I was a kid, and I thought, "Hmm...I should check that out!"


If you hate Java check out SFML: Simple Fast Multimedia Library

It's in C\C++\.NET but also has bindings for Python, D, and Ruby. http://www.sfml-dev.org

If you want to do 3D but aren't up for writing OpenGL, check out OGRE3D. Open-source and former Diablo 2 developers from Bizzard North released a game called Torchlight with it recently. http://www.ogre3d.org/


I am just using this now. It seems very nice - cleaner than SDL.

One thing to watch out for if you use the unreleased 2.0 branch of the library, is that the OS X port is not quite there yet. So if you want to target that platform it may be better to use the stable 1.x branch.

http://www.sfml-dev.org/forum/viewtopic.php?t=3214


If you get the ball rolling on a crossplatform game project and don't want to go public, private gitfarm it and I'm sure you could find some HNers to join in.


It's a well written library, however it's not an engine or a framework. All it does is enable OpenGL, OpenAL and game pads in Java. The LWJGL team just calls it an "enabling" library.


Derelict is an enabling library for D which provides more bindings than LWJGL, on Linux, Mac OS and Windows. You get native code and no plugins are needed. Just sayin'.


Thank you for pointing this out, I had no idea. I've always been curious about D and at the same time am looking for the ideal toolset for cross platform game dev. Definitely going to look into this.


Color me unsurprised. I dislike Java as much as the next person, but for a certain class of problems -- particularly in game programming -- it is a tool I often reach for.

Java is a painfully verbose language that does not trust me with any power tools. When I work in it I wind up cursing its name approximately twice per hour. But the combination of Extreme Portability and Libraries For Absolutely Everything and maybe a little bit of Everybody Understands It often draws me in anyway.

I don't love it, but sometimes it is the right tool for the job.


And if you don't like Java you can still target the JVM with a fast but more expressive JVM language - Clojure or Scala.


Forget Valve or Bungie, pretty soon Oracle will come knockin' on his door. ;-)


His Swedish door. I'm pretty sure the pirate party would have a field day were that to happen.


Oracle?


For using Java. The joke being that Oracle are suing Google for the Java in Dalvik/Android -- next they'll be after Minecraft.

Dear HN: If someone asks a serious question in the comments -- there isn't a need to downvote them. Downvote crap like "f1rst p0st" - leave questions as they are.


I don't think there is another language out there that could have given Minecraft the kind of success that it's had (The same applies to Runescape). Many Windows users have a JVM + the Java plugin installed already, and the only other widely-known plugin that gives the kind of 3D performance that you can extract out of Java is Unity3D. While Unity is easy enough to install, it's been around for a lot less long and it's less widely known and developed for. Most users would have experienced a jarring "please install this plugin" moment before they got to play, and I'm pretty sure that the immediacy with which players have been able to get into Minecraft has been a big part of its success.

Contrary to what you repeatedly hear about Java, it actually has very decent performance. Sure, the ME edition is horrible (if that was somebody's only exposure to Java game programming I'd forgive them for never wanting to touch the language again), and some years ago applet performance was awful (which seems to have left a bad taste in the mouths of a significant number of hackers), but these days if you avoid Swing (and why would you want such a toolkit for a 3D game like Minecraft anyway?) and use a library like LWJGL then you can produce a game with decent performance and graphics. Minecraft is a bit of a mixed bag when it comes to scaling down to older machines, but it still runs reasonably well on quite a lot of older hardware (up to about 5 yrs old, or thereabouts). That leaves you with a very large potential userbase.

Also contrary to what you might hear, Java's actually not that shabby of a language either. Sure, you sacrifice some of the features and syntactic sugar found in higher-level languages like Python & Ruby (in return for performance), but garbage collection and higher-level features like reflection that are not found in C/C++ mean that development speed is still pretty good. There are a wide variety of available libraries to help you out too.

Lastly, much of Java's reputation for verbosity doesn't apply to games development. You don't have to use any of the libraries that require XML-heavy configuration like Spring or Hibernate, nor any of horrifyingly verbose stuff like EJBs or JDBC (actually there's nothing forcing you to use those for enterprise stuff either). Once you've taken care of the performance-intensive graphics stuff, you're "only" left with the core game logic. While a higher-level language like Python, Ruby or Lua could reduce the amount of code you need to write by a certain amount, the difference is not as pronounced as it is between, say, C++ and Lua, due to Java's automatic memory management.

And seriously, who gives a toss about whether something's dorky and uncool? I didn't care back in high school that people thought I was a dork for programming or even just for using computers (this was before the internet and Apple made computers cool!) and nobody should have to give a shit what programming language snobs think of their choice of language either, as long as they're getting the job done.


Java is still much better language, than antiquated Objective-C. And you know how many apps are written in ObjC.

When you show a real programmer the path to financial independence, he will code even in brainfuck.


I wonder if this will get more people doing 3d games in Java. It certainly is a ringing endorsement. Java has some nice features over C and C++ and the performance is good enough as demonstrated by the game. Plus it has a very good collection of libraries.


Uncool when it comes to up-voting, but quite cool when it comes about hiring, it seems.


In this case Java also greatly simplified distribution. Want to serve an OpenGL game over the web with Python, Ruby? Until HTML 5 Audio and WebGL take hold - good luck with that.


The main problem with Java for games is that you have to do graphics through a wrapper written in another language (AFAIK Minecraft uses LWJGL's OpenGL wrapper) and working from a language like Java, you lose some fine control of memory management.

On the upside, it allows him to do rapid development, and you can even try Minecraft in the browser.


..so that's why it renders like a hog ;)


While I agree that this should be downvoted, just be aware that there is some truth to this: Minecraft makes my current generation (well, technically last, but the 13" model barely changed) MacBook Pro run hot enough that I cannot leave it on my lap. The only other thing that makes it do this is encoding video; I'm not really sure why, exactly. There is a decent amount of background processing going on, but it's limited to a 300x300x128 (I think? in Z? 300x300 XY for sure) block area, so...

You wouldn't be able to guess this from the graphics style.

EDIT: Upvotes for both responses. My love of command line is showing; I know next to nothing about graphics and what it takes to make them perform well.


It's pretty difficult to do language performance comparisons based on a single game. Dwarf fortress, another great indie game involving mining and crafting, is written in C++, has no 3D (it's simply a 2D grid), and uses up a lot of CPU.

That doesn't mean that C++ is slow. It means we have no idea how much these custom indie game engines have been performance tuned, and how much logic is being performed in the background (DF is a hugely deep game). They are both written by a single programmer, not a team of game engine developers.

Edit: I don't doubt that performance tuned C++ is faster than Java. But for a small development team, who aren't building a graphically taxing game, performance optimisation is well down the list of priorities. They are usually better off spending the time expanding their game.


Dwarf Fortress simulates a 3D environment just like Minecraft, though it has much more advanced fluid flows, amongst other things. Most of the CPU use appears to be down to pathfinding, which ends up recalculating a lot when the environment changes.


On the contrary — it's enterely because of the graphics style and atomically destructible environment. Voxels are hard.


Caveat - I've not played minecraft - but I suspect that the graphics are not the problem, but the simulation (the atomically destructible environment and also AI).

Modern 3d games involve using both the CPU and GPU, and most intensive graphic computation is done on the GPU.

Graphical elements like having complex models, shader effects, filter passes etc. all put strain on the GPU, but don't touch the CPU too much.

Game logic elements like destructible terrain, AI, pathfinding, physics, and generally extensive game rules all put strain on the CPU.

Different games have a different balance between the two (but eventual framerate and performance is determined by the slowest side), a highly detailed FPS (say, Halo) is likely to be GPU-bound, whilst a complex strategy or simulation (eg. Minecraft) is more likely to be CPU-bound.


From http://www.reddit.com/r/Minecraft/comments/djlsz/notchs_answ...

4. Shock-value asks- How do you like Java as a language? In what ways is it a positive and in what ways is it a negative compared to a lower level language like C/C++, especially as related to the development of Minecraft? Alphakamp asked a wonderful followup question- Do you think you will stay with java or will you ever restructure the code base with a different language?

I love java! I'm a bit worried now that Oracle owns it, and they haven't exactly shown any great interest in the client side of it. Sun used to speak to me all the time, even way back when me and Rolf made Wurm Online, but Oracle hasn't said a word to any game developer as far as I've seen. The biggest technical advantages with java is that the development speed is extremely fast with almost no compilation times and an excellent code hot-swapping in debug mode. The disadvantages is a slightly lower speed than C/C++, and less than perfect support for OpenGL. The LWJGL guys have done a great job with the binding, but java still suffers from rather large per-call overhead in JNI. Or in English; OpenGL calls are slow in java.


Meh, Java is just fine, and if you really like it, I'm happy for you. (I find it an interesting but somewhat cumbersome language. Still, if it's the right tool for the job ...)

Maybe this guy's amazing success will serve to change some minds here, tho.


Eh, a good programmer can just treat Java as an object code format, compiling it in their heads from something like Scala or Clojure.

The real problem isn't that Java is spent, it's that (most) Java programmers are dorky. I avoid the language mainly to avoid associating with the community.


Funny, the java community is one of the best and most helpful I've encountered.

Much better experience than I've had with the supposedly enlightened lisp community.

Also, Markus programs in straight java, not scala or clojure.


I didn't mean to imply that Notch doesn't program directly in Java—just that, like a C programmer writing assembler will write assembler with C conventions (like almost always passing parameters on the stack, etc.), a programmer who knows [any other non-Blub language] writing Java will think of things in terms of higher-order functions, duck-types, etc., then just type it in in a way java understands (many small anonymous classes, wide hierarchies supporting simple interfaces, etc.)

Let me restate the problem another way: there are many more programmers who only know Java, than programmers who only know [other language X]. Single-language programmers usually aren't familiar with very much theory, and don't know any design-pattern-like abstractions, borrowed from intrinsic features of other languages, that they can put in place instead of just writing tedious, repetitive, dorky (er, I mean, "enterprise") code. 90% of Java's libraries are very, erm, "enterprise."


> 90% of Java's libraries are very, erm, "enterprise."

Are they? Apache's Commons collection of libraries such as ArrayUtils, StringUtils, IO, and the like, along with JSON-Simple/jvYAML, the servlet API, any database driver, Log4J, and just about every other library I use on a daily basis has a clean, focused, well-designed, and impeccably well-documented API.

I'm sure there are no shortage of "enterprise-y" libraries and APIs, but could you offer a few examples of common, popular libraries used in a large portion of J2SE (not EE) projects whose APIs are poor on a level beyond that which may offend your aesthetic sensibilities? Some that come to mind for me might be Swing (I don't write GUI apps), but am curious to hear what you've encountered.


    Let me restate the problem another way: there
    are many more programmers who only know Java, 
    than programmers who only know [other 
    language X]. 
Is this little bit of personal opinion by any way confirmed by evidence?

I know many more programmers who only know php, actionscript, or perl than programmers who only know java.

I know you're not one of the cool kids around here if you don't build compilers in haskell, erlang or some dialect of lisp but this unsubstantiated anti-java sentiment is ridiculous.

I've programmed in a dozen+ languages (including scheme and python, which seem to be considered acceptable with the cool language crowd) and consider myself proficient with 4 of them (as in - I would have no problem starting a new project in those languages and will not often need to look up language docs) and for many uses I still prefer Java.

I suspect I am not the only one who shares that sentiment.


Again, I'm not saying Java-the-language is bad. Java can be the best tool in a programmer's toolbox for many things. But, overwhelmingly, Java schools make Java programmers that only wield the Java hammer on every nail they find.

If your first language is PHP, or ActionScript, or Perl, it is very likely that you picked it up on your own—and thus are interested in the topic of programming in general, and will continue to learn from there, picking up bits of programming theory and new languages as you go. However, if your first language is Java, you learned it in school, because that's what they taught—you didn't yearn for anything more—and then there was a big bubble of EE employers ready and waiting to insulate you from the rest of the programming universe. Straight out of school, you start work for one Java company, and then transition to another, and pretty soon you're 32 and don't know what a combinator is or how you could possibly implement something like the JVM.

Having attended one of these Java schools for a semester, I can guarantee you that no one who graduated from there will ever learn another language. They know what they know, and they're happy with that. That what they know is Java is immaterial, except that that means that only knowing Java, by Bayes' law, becomes a positively-weighted-feature in the detection of these work-a-day programmers who need to be avoided at all costs if one wants to hire in a startup.


You know, lately I've been thinking about the languages I learned this past few years. As of now, I'm nowhere nearly good in any environment thanks to my stupid brain following the "language love boat" preaches.

Couple days ago I decided to shut my eyes off articles that compares programming languages and decided to stick with Java and Ruby. I don't plan to learn 10 different programming languages for the rest of my life unless I happen to get an offer in a company where they would want to train me in their technology. I have no plan to be a software developer for the rest of my life because that is a bottom-line job. It's useless really. Especially when there are too many effing opinions in our industry such as:

- We prefer young people (remember, y'all going to get old at some point, you'll be out of the game soon)

- We prefer TDD, Scrum, and Agile (those of you who dislike TDD will be crossed out from this list)

- We only do games (those web developers are out)

- We only do web-development (don't know HTML/CSS/JS? get out)

- We only do internal IT (you're a software product guy, you won't last long here)

- We do "Digital Social Media Marketing Branding SEO" (you're just a PHP developer, go make something)

- We do SAP, PeopleSoft, and Oracle Financial (you're not qualified even though you know .NET)

- We do embedded (web developer and enterprise developer, the door is right there)

- We only use Apple (not an Apple fanboy? doesn't worship Jobs? out please)

I'd rather spend my time learning the business domain, leadership, management, networking and how to live a life and achieve happiness than learning LISP, C, C++, HTML, CSS, Python (I know a few things about Python but by no means I can be qualified to work in a startup that uses Django).

I don't want to be 50 years old hacker unemployed (due to age) and have no social skill to convince people that I'm still worth. Besides, I want to have a retirement that doesn't bother my kids's financial situation.

Do you have any idea how long it takes to learn and master a programming language and the ecosystem (libraries, tools, the community, etc)?

It's a life choice that I decided and I don't think you should look down at other people choices.


This also works out great for me since I can easily avoid the sort of startup that allows language prudishness to guide its hiring decisions.


I don't know how you're managing to read this as any form of language-prudishness. I'm not saying "startups should not hire Java programmers." I'm saying "startups should not hire programmers who have only ever programmed in one language," because they will either be inexperienced, or remaining willfully ignorant of the breadth of the field available to them.

By coincidence—not by any flaw of Java or the generalist programmers who happen to know it and like it—the language that will most frequently appear on the resume of a single-language programmer is Java. This means—in the same way that given races of people get tested for given congenital diseases because they are statistically more likely to be afflicted by them—that if you're interviewing a programmer and all the previous projects listed on their resume are Java projects, it becomes more important to ascertain whether they know any other languages, because they are statistically less likely to.

This point is just a combination of the famous and well-received "programmer vs [language X] programmer" rant, and a bit of Bayesian analysis to determine which people applying for "programmer" jobs (i.e. generalist jobs, of the kind needed in startups) are most likely to actually be "[language X] programmers" instead. If you trained a spam filter on generalist-y-ness, it would flag Java as having a high correlation[1] with non-generalist-y-ness—that's all I've been trying to say.

[1] ...which is very explicitly not causation, I think I have to remind everyone at this point.


I quote: "if your first language is Java, you learned it in school, because that's what they taught—you didn't yearn for anything more".

That's language prudishness, right there.

I also find your assertion that if someone learns PHP as a first language they're likely to end up a "better" programmer than someone who learns Java as a first language absurd. There are good schools teaching Java, and smart, inquisitive people studying it. Many of the best programmers I know still use Java for pretty much everything since it allows them to get their jobs done. Some know other languages, some don't. It's a purely pragmatic choice, but to say that those people would not be valuable to a startup is crazy.

Maybe the process you use when interviewing is good enough to separate these people from others who really don't know how to program, but it seems like they're going to be starting at a significant disadvantage if you're interviewing them.


Most of the pain of java comes from its library and developer culture. It tends to so much verbosity and unnecessary stupidity. Look at the nightmare of the Java Calendar/Date classes. If you got the right libraries and code base it isn't that horrible. The game industry standard is mostly C++/C with content scripting in lua/python.


A plumber climbs out of a manhole, and his arms are covered with - guess what? - excrement! A beautiful little girl in a beautiful white dress happens to pass by. The plumber seizes the opportunity and quickly, but firmly sweeps his hands over the girl’s white dress.

Little girl (appalled): AAAH!!

Plumber (outraged): Oh yeah? I bet you love to take a shit though.

http://www.yosefk.com/blog/the-cardinal-programming-jokes.ht...

So yeah, Java is dorky and uncool, but I bet we love to play Minecraft (I don't know, since I haven't played a video game in at least a decade).


20 years later, the girl is still in therapy.


The poop leaves my bottom and goes into the toilet. I never touch it. Do you?


Actually, you do touch it.


With your arms?


I'm not sure 'huge traction' is really accurate. While this is definitely serious cash for an individual, most successful big-budget games earn orders of magnitude more. And with AAA budgets approaching 100mm, you couldn't sustain even a small team on these profits.

Notch - please don't blow your money on trying to rent a fancy office and hire a lot of people. You'll be surprised at how quickly that money goes.


To be fair, I think for a price per person ratio, he's doing well. =)


>most successful big-budget games earn orders of magnitude more.

They also cost orders of magnitude more to create. Also, at this rate it could possibly get to be a 100 million dollar title over its lifetime.


iOS basically is Apple's standard OS at this point. I wouldn't be surprised if Mac OS X was renamed to "iOS Development Environment" at the next WWDC.

It seems pretty clear that at some point iOS (and a desktop version of its touch paradigm) will be the future on Mac desktops.


Apple created iOS because lightweight devices with a touch screen demand entirely different solutions and paradigms than mouse driven desktop applications do. They're not converging any time soon.


Let's revisit your comment in June 2011, shall we?


Absolutely, and yours as well. One of us will admit that they are terrible at understanding Apple's direction.


It's not hard to understand their direction looking at their patent filings and incremental UI updates (such as multitouch) to Mac OS X.

Although Steve Jobs isn't yet standing on stage gushing about it yet, Apple clearly plans to bring the touch paradigm to the desktop.

Interesting links: http://www.appleinsider.com/articles/10/08/23/apple_filing_s... http://www.appleinsider.com/articles/10/10/01/apple_rumored_...


Adding multi-touch to the trackpad is one thing, assuming OS X will become touch-oriented is quite another.

iOS isn't just about touch, it's first and foremost about direct manipulation — touching the very thing you want to interact with. This paradigm does not translate well to OS X, which is mouse driven — there's a pointer between you and the thing you want to manipulate.

As for patterns, well, most of the stuff they patent never sees the light of day. Some of them are probably just red herrings, Apple prefers when nobody knows what they're doing.

But hey, let's check back in June of 2011. Looking forward to it!


Yesterday's Apple event in summary:

* Multi-touch gestures via trackpad and mouse.

* No touching the screen.

* No iOS apps coming to the Mac, instead bringing some ideas and concepts over.

* iOS and Mac OS X stay separate, ideas converge.

My take on the future of OS X; not converging with iOS. Direct manipulation touch interfaces demand different solutions than mouse/pointer-driven interfaces do.

Love the ideas they're bringing over to OS X from iOS; like instant-on, apps that resume from the state you left them in, autosaving, etc. Also love the new way you manage apps as previewed in Mac OS X Lion.


I'm curious as to why this has been downvoted so much?

It seems clear to me that if iOS device sales haven't already outsold Mac OS X computers, they will shortly, both in terms of both dollars and # of units.

It also seems pretty clear, and insiders everywhere seem to agree, that the paradigms introduced in iOS will (and already have, see multitouch) trickle into what is now known as Mac OS X.

Apparently, there are some people who strongly disagree, so what's your viewpoint?


You realize that iOS is just a stripped down OS X right?


Actually it's based on a somewhat stripped down and ARM-ized version of Mac OS X with additional frameworks (UI*) that aren't present on what's currently known as Mac OS X.


...which is exactly why the "iOS Development Environment" metaphor works! Think of it the other way round: OS X is just iOS with a lot more exposed to the user.


I think we're going to see Xcode for Windows before we see iOS running on Macs. In other words, I wouldn't be surprised if there was no more Mac in five years.


So, I know Apple is making a lot of money off of iPods, iPads, and iPhones, but they still had 33% year-over-year growth in Mac sales last quarter.

I don't think the Mac is going anywhere soon. I do think we'll see substantially changes to Cocoa with a lot of things (coughbindingscough) being effectively deprecated in 10.7. I expect the next revision of AppKit to look a lot more like UIKit.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: