It will be great to summarize all the discussions about programming languages and using them at programming competitions.
I worked on many languages and in many environments/ides, on some more, on some less, almost in this order:
QBasic, VBasic, VFoxPro, Pascal, ide Delphi, ActionScript(script language in Flash), (books about C++ and Java), PHP+JS+css+xml+html+MySQL, C++, a bit in Java, courseworks in C#, a bit in python, a bit in C++ with QT libraries.
Pascal - very simple language for algorithmization and programming competitions. The most suitable for school programming olympiads, because there(in school) you need efficiency and speed of writing, but not vice versa.
C++ - after Pascal I advice using C++ at school olympiads in informatics(and other programming competitions). And in general, I like C++ more than anything else for its "freedom". However, because of it, in the same time, there are many discussions about possible errors that are not caught by the compiler, etc. In C++ you can write the same things in many ways. This remark is good for every c-like language. And almost all named languages are c-like and it says about C beforehand. Almost everyone knows C or about C. There are many good libraries in stl, but nobody forbids writing it self (eg.: as in Pascal). Speed of coding grows in C++ because you can write many things much shorter. Of course, it depends on the choosen style but this possibility is directly on the surface.
Java - I've read some discussions about Java on CodeForces. And I don't think about using it at olympiad, whatever happened, whatever the task may appear.
I've picked up a couple of books on Java and I've seen, understood for myself that Java is cool language, but it is suitable only for development and maintenance of large projects. I can cite a couple of quotations about Java, they do not contradict my opinion.
VB - I wrote on it very long time before and I'm not eager to continue, because I do not remember the syntax and do not see the benefits.
Python, PHP, ... - A bunch of scripting or other languages with C-like syntax. I don't see any sence in using it at programming competitions. All of them are useful/created for using in different situations.
I worked on many languages and in many environments/ides, on some more, on some less, almost in this order:
QBasic, VBasic, VFoxPro, Pascal, ide Delphi, ActionScript(script language in Flash), (books about C++ and Java), PHP+JS+css+xml+html+MySQL, C++, a bit in Java, courseworks in C#, a bit in python, a bit in C++ with QT libraries.
Pascal - very simple language for algorithmization and programming competitions. The most suitable for school programming olympiads, because there(in school) you need efficiency and speed of writing, but not vice versa.
C++ - after Pascal I advice using C++ at school olympiads in informatics(and other programming competitions). And in general, I like C++ more than anything else for its "freedom". However, because of it, in the same time, there are many discussions about possible errors that are not caught by the compiler, etc. In C++ you can write the same things in many ways. This remark is good for every c-like language. And almost all named languages are c-like and it says about C beforehand. Almost everyone knows C or about C. There are many good libraries in stl, but nobody forbids writing it self (eg.: as in Pascal). Speed of coding grows in C++ because you can write many things much shorter. Of course, it depends on the choosen style but this possibility is directly on the surface.
Java - I've read some discussions about Java on CodeForces. And I don't think about using it at olympiad, whatever happened, whatever the task may appear.
I've picked up a couple of books on Java and I've seen, understood for myself that Java is cool language, but it is suitable only for development and maintenance of large projects. I can cite a couple of quotations about Java, they do not contradict my opinion.
“Fine, Java MIGHT be a good example of what a programming language should be like. But Java applications are good examples of what applications SHOULDN’T be like.”
(pixadel)
“Java is, in many ways, C++–.”
(Michael Feldman)
C# - I wrote only courseworks for students in it, I wont recommend it for olympiads or say smth else.You can find more quotes here: 101 Great Computer Programming Quotes.
VB - I wrote on it very long time before and I'm not eager to continue, because I do not remember the syntax and do not see the benefits.
Python, PHP, ... - A bunch of scripting or other languages with C-like syntax. I don't see any sence in using it at programming competitions. All of them are useful/created for using in different situations.
Sometimes, it's just a personal preference. Sometimes, it doesn't matter as the programming language is just a tools to express what we've done.
Java was *NOT* inherited from C++. It was only marketed as remake of C++ because there were many C++ coders around. C is the divergence point between Java and C++.
and, from here: http://norvig.com/java-lisp.html
The variance for Java was lower than for C or C++. (Cynics could say that Java forces you to write uniformly slow programs.)
So blame the language, not coders. We know many clever people use Java. It would be a lot of good Java apps if it was possible to write them.
About C# : At times, I look at some stats at Topcoder and it looks like picking C# in Topcoder algorithm seems to be superior over C++ and Java. (which, on other hand, might be not statistically significant because sample size is too small and biased because *you-know-who* uses C#).
Maybe Topcoder doesn't gives away stats per languages to avoid holy wars :D
VB.NET is just C# with syntax inherited from VB to ease porting of VB apps. So there is no reason to even think about VB.NET.
allowing to read from uninitialized variables? why would a language allow that?
Sometimes compiler is unable to determine if reading from uninit var will occur.
int foo(int arg) {
int[] x;
if(arg<0) return -1;
if(arg==0) x = new int[1];
if(arg>0) x = new int[2];
x[0]++; // Bogus error here
C was intended for people who are smarter than their compilers. Vice-versa for Java.
if-elseif-else is nothing but just a hint for compiler.
In mathematical notation - intended for humans - it is rarely used.