OK, I'll bite.
By what metric is the preferred practical language of the world ARM Assembly, rather than, say, Java, C, C++ or C#?
C is a good language, C++ with out templates is a good language, Never bothered to look at C#.
Though as a practical language for a computer as being EXPLICITLY ARM based, you have to look at the large of pool of software that was created SPECIFICLY for ARM based computers. Especialy when the question is What programing language for SPECIFICLY ARM based system.
Now if we consider C:
The mass majority of Programms written in C that currently run on ARM based computers were written for other systems, or to be independant of the HW. There is nothing wrong with this if you do not care about the underlying system, though the repeated mention of a very strongly ARM based system shows more interest in the system. The same goes for C++, and C#.
So C and its direvites do not realy fit the request. Since OP specified C++, C, or Python with out any exception I said: C.
So we look at the two languages that many many of the applications targeted to the ARM were written in:
**** BBC BASIC V: ****
Good modern language. Most programs written in it are distributed as simple tokenized files to be run in the Interpreter. Nothing wrong with this as it is probably with in the three fastest pure interpreters around. Still does not help to understand the ARM.
Though since it does provide things like the ability to directly call SWIs, as well as directly call binary executable code, it is a better option than the C derived languages to get in touch with the ARM Architechure.
Allso remember that BBC BASIC V is a modern structured language with pointers, it can be compiled, and I can not think of any advantage that C has over BBC BASIC V (Other than better currently available compilers).
**** AND THEN THERE IS : ARM ASSEMBLY: ****
Many greate programs have been written in ARM Assembly and many tutorials are available for ARM assembly. So there is plenty of example code, and hand holding available. Furthere Assembly is the core of everything, you can not write a compiler for C if you do not know the architechure to which you are compiling.
ARM Assembly is fairly easy to learn and understand completely. The instruction set is simple and orthogontal, the standardized calling conventions are easy to understand. And it is easty to do anything you want.
ARM assembly is not complicated like x86/IA32/AMD64, M680x0, PPC, or Sparc assembly. Everything is fairly straight forward in ARM assembly. And you get to learn how to optimize, and make system calls. Something that would require Inline assembly to do in the other languages (Make system calls that is).
As for optimization:
It is not dificult to figure how your code is going to execute, and even take advantage of the superscalar architechure of the ARMv6/7. Not to mention once you understanding the caching model, you can do even better with this.
I personally have a strong disslike for COBOL, though that is a different story.
How far are you attempting to get away from the ARM? These do not seem to address the issue of specificaly learning an ARM based system at all. Just my opinion.
I happen to think Haskell is a beautiful language, but I wouldn't call it "practical" in the general sense. Much less recommend it to a beginner.
Well I would agree with you on that. It is not practical.
I did not relize that OP is a complete beginer. In that case I would amend my recomendation and say to start with BBC BASIC V, and then move to ARM assembler (like the 8 and 9 year olds that I am aware of are doing on there RISC OS equiped RPis).
Though personaly I feel that C is better learned after Assembly.