I can’t address Java, but I do have experience with C++.
Thanks to ucpp, you no longer need a Windows PC for any part of the toolchain. If you can get a new gcc and libstdc++ (I’ve had issues with the cross compile for the latter :/) you don’t even need to worry about memory management thanks to std::shared_ptr<T> and std::unique_ptr<T> if you don’t want to.
C++ is also the anarchist’s programming language. It gives you plenty of power, but also the ability to do not-so-good things with that power, and it doesn’t try to stop you like Java (think pointer casts, crazy macros, abusive operator overloading, etc). In the hands of a good programmer, you can do amazing things in C++ incredibly succinctly and efficiently. In the hands of a bad programmer, C++ yields bug-ridden spaghetti code.
Lastly, you can also fall back to the raw VxWorks APIs in C++ if you want very, very easily.
LabVIEW
Advantages
- Data flow is more intuitive than object-orientation in other languages.
- Arguably easiest to teach among the three major supported languages.
- Has access to the most NI vision libraries.
- Very quick debugging tools. You can probe wires in the code while you’re running it to see what the problem is very quickly.
- Garbage collection means no explicit memory management.
Disadvantages
- It’s likely you know text-based languages already, so it could be harder to learn the data flow paradigm.
- Only runs on Windows PCs.
I would say that for new programmers, LabView encourages some bad design practices. It makes it harder to define new functions (you have to make a new file, add terminals to that file, make a meaningful pixel art icon, etc. just to get a new function), the object orientation for the embedded target is incomplete (which forced us to use structs in C style OO), and those nice wires can quickly become mean when you have lots of connections and you can’t tell what goes where. Yes, I’m biased
I will say it DOES have the BEST parallel processing of any of the languages though.
Also, since it’s not text based, it’s not as friendly with version control.
Python
Advantages
- You do NOT need to restart the cRIO to upload code, which is great for rapid development.
- Uses the C++ cRIO image, so you can switch between the two if need be.
- Simplest syntax of all of them. It’s quite beautiful, and it’s very easy to teach.
- You can develop on any platform in any IDE.
- Access to all of Python’s fantastic modules.
Disadvantages
- Depending on your IDE, a syntax error can go unnoticed, so you have to run tests that execute every line of code.
- This language is not supported, so you won’t get much help at the competition.
Python is an AWESOME programming language. That said, those disadvantages are two HUGE disadvantages, so tread carefully.
Honestly, write your programs in the language with which you are most comfortable. If you’re caught between two or more, figure out which is the best for what you’re trying to do. LabVIEW is much better for vision tracking than say Java, but if you need Java’s higher level features, go for that.
+1: The biggest factor in determining which programming language to use is honestly the human factor. If the mentors and students on your team have the most experience with a given language, chances are that that’s the best language to use regardless of the language’s inherent strengths and weaknesses.