C/C++ is good, for userland homebrew (.3dsx, etc.). If you want to do some lower-level programing, i.e. exploiting ARM processes, you should also learn ASM.
You should probably get someone else's opinion on this, though; I'm still learning how to write code (and I'm quite horrible at it, to be honest), so I'm most likely wrong.