Learn and master C, as above is saying! Seriously, I try hard as possible to stay away from .NET/Mono/Java/bytecode apps as much as possible. Why? Speed, obviously!
The worse argument I have seen is that when we have computers that are faster in the future, the speed will not be a problem.
I will always prefer to program in C (or C++) and have the program be native. I am very supportive of the GCJ project, which turns Java source into native. Soon Swing will be implemented, making the case for using bytecode INCREDIBLY impossible to justify. Mono should do this with C# and the like. I do not even see why Microsoft did not do this anyway. All it involves is making new libraries. What is the difference in making C# native as making MFC API native back in 96? Instead we get more bloat. How does this make any sense?
I have much better things to do than wait for Java AND your app to initialise. Furthermore, I have better things to do than wait for Java AND your app to de-initialise at exit. Same goes for .NET and Mono.