I would argue that starting from scratch, it is easier for a student programmer to use Java (for FRC) than C++ (for FRC).
I cannot count the number of times I have been asked to help a team with C++ and seen problems like the following...
Code:
Victor myVictor(1);
myVictor->set(0.0); // Error!
Code:
Victor *myVictor = new Victor(1);
myVictor.set(0.0); // Error!
Code:
Victor *myVictor;
myVictor->set(0.0); // Error! You declared, but did not substantiate, your Victor!
Code:
void SomeFunction(Victor victor)
{
victor.set(0.0);
}
Victor *myVictor = new Victor(1);
SomeFunction(myVictor); // Error!
Code:
void SomeFunction(Victor victor)
{
victor.set(0.0);
}
Victor myVictor(1);
SomeFunction(myVictor); // Still an Error! You are making a copy of your Victor!
In Java you don't have to worry about objects on the stack vs. the heap (they are all on the heap), pass by reference vs. pass by value (always pass by value, even if your "value" is itself a reference to an object), memory leaks, C++ name mangling in compiler errors, initializing static class members outside of the class declaration, etc.