Ok ... for what's worth: I'm an academic turned game programmer. I've written a C compiler and multiple Scheme compilers. I've programmed large programs (1,000 lines) in C, C++, Java, Scheme, Haskell, Pascal, BASIC and Actionscript (Flash). I've also programmed to a lesser extent with Fortran, ML, Python and a few flavors of assembly. I've done things like study the type safety proofs for Java -- both the language and the JVM. I've had many an argument with people doing performance sensitive work in Java, C, C++ and Fortran. Oh, and I make a living programming Java (J2ME) games and I actually do like Java as a language. That said, it saddens me to see so much blind support for Java. A lot of the Java proponents seem to think that just because you program Java a certain way, that things like memory allocation are efficient or that RTTI is somehow "free". Nope. Uh uh. Java is a nice OO language, but it IS inefficient. Most of the things that it seems like you "get for free" do have a cost. Comparing results on loop/array intensive code it is common to have Java code run at 1/10th to 1/5th the speed of similar C code and the memory footprint, beyond loading the JVM, is amost always going to be much larger. Since I don't have these benchmarks on me at the moment I'll just refer you to the win32 language shootout: http://dada.perl.it/shootout/java.html http://dada.perl.it/shootout/vc.html Java is a good language for the things it is designed to do. Performance just doesn't happen to be the primary goal of Java. It is an afterthought. A lot of research has gone into how to get acceptable performance out of Java and it still is quite a bit off the mark of C/C++. Meanwhile, garbage collection, type safety, security and other features of java are very nice things. To echo some of the thoughts of Fabio: I too have seen a lot of poor programmers come out of learning programming from Java only. Just like the link he posted indicates, it's not that there aren't good programmers that learned how to program with Java, it's just harder to find them among lots of poor programmers. Java holds your hand a lot and to learn Java you don't have to understand a lot about what goes on under the hood. That has its place. Not everyone wants to be the end-all of programming. But I think that those who do will be very well served by learning a low-level language such as C or by learning a higher level language or language with greater abstractive power like ML, Haskell, Lisp or Scheme. WYSIWYG programming can be powerful but when it is an excuse to not understand what your program is doing it can get in the way of becoming a good programmer. Not all games need a lot of power under the hood. Right now with my freetime I am making casual games in Flash, a language I consider to have a lot more performance issues than Java. But a lot of games do need that power. And when you need to get every ounce of performance or keep your minimum specs as low as possible you'r going to have to program in C. Use the right tool for the right job. As far as efficiency of programming, I know Java and C both very, very well and I can program efficiently with either. Sometimes Java has a feature that is particularly useful and often C does. Java allows quick abstraction but is often lacking the power and control I want to do something. C gives me that control which at times can let me take rather large shortcuts but also gives me more room to "shoot myself in the foot". If I need an abstraction in C like some of the things that Java or Haskell allow me I just build it myself. Function pointers are fabulous creatures if you learn how to use them. It took me a while to get to where I'm at as a C programmer but I also consider myself a much better programmer, even when using Java, for having learned C. I also learned a lot from going the other direction and programming with Scheme and Haskell. So my conclusion is that neither programming language is better. They just have different strengths and weaknesses. One of Java's weaknesses IS performance and it is foolishness to assume that just because you don't even have the option to do some of the optimizations that C/C++ are capable of that you aren't losing any performance because of the issues that require those optimizations in the first place. And I also think that anyone who wants to be a good programmer will be well-served by learning as much as they can about all the programming languages that are available to them.