The question of teaching quality is a part of the problem. Almost no university in the US judges professors based on teaching. They claim to do so, but the tenure decision is primarily a judgement of publications and external funding. In my case the quality of publications was largely irrelevant. I assume that better universities judge quality of research, but I haven't been there. We need to seriously consider having teaching positions for PhDs in addition to research positions. I am not sure if the institutional motivation is money or prestige, but I think that many schools short-change students to pursue research. Expecting research and funding degrades teaching. Better teaching will help to produce better research.
I also like the idea of researchers not being under such huge pressure to survive. Pressure, along with incentives, contributes to the willingness to take shortcuts and to publish made-up results.
My last comment is that publicly funded research should not result in private wealth. If the public pays for the research, we should get cheaper prices on the goods. Perhaps there could be a system where such products are public domain and available for all to develop and market competitively.
Your best bet is to use C. It is highly efficient. If possible use computational code like the Atlas BLAS package. This code will run circles around your own code no matter what language you use. You already know C and moving to C++ is a major problem. All the other languages are distractions from your purpose.
If possible run multiple, independent processes rather than writing parallel code. That can be a major ordeal.
If your goal is to process data as opposed to learning elaborate programming techniques, keep simplicity in mind. C is a very powerful language and you can reach maximal efficiency for many problems using Atlas BLAS and multiple processes. If you goal is to get a degree in CS, ignore what I've suggested.
Nothing succeeds like the appearance of success. -- Christopher Lascl