You can program the lego NXT in any language you wish! What is really the question is if you want the mindstorms brick to perform the decision making, or if you want some other device to do that for you. This works in two ways:
You download a program onto the NXT that it can run in its native format. Based on sensor input and the program which you've written, the NXT can operate by itself. This is how the mindstorms modules are primarely designed to operate out of the box - where you use their "visual" programming interface to create a program and then download it to the NXT.
As listed above, there are various other types of programming languages and interfaces you can use to write programs for the NXT. Eventually they require you to download them to the NXT - which will again be performing all the necessary calculations to run the program on-bard of the brick. These tend to offer you more control over your program however ultimately rely on the computing power available on the NXT.
The second scenario is to use the NXT as sort of a "slave" to another device with more computing power. This device - such as a PC or MAC, can be used to send down real-time direct commands to the NXT device to operate on. Based on feedback transfered back to the host computer, you can send down other commands. Using this method, you can use any programming language you are comfortable with - and simply use the NXT as a "dumb" device. This offers you the most verstility, and you can use virtually any programming language you are comfortable with.
What's nice about the NXT is that it allows you to use such a wide array of different techniques to control it - which makes it a great platform. One great walk-through of sending these direct commands over bluetooth to the NXT can be found here:
http://www.robotappstore.com/Knowledge-Base/Programming-LEGO-NXT-Mindstorms/92.html
I would recomend checking it out, since its a great introduction to getting started. If your computer supports bluetooth, you can easily download realterm (free) and get your robotic project working quickly!
I will admit that sending these direct commands to the NXT is a bit more advanced than say the type of visual programming used with the supplied Lego software, but it will allow you to use any language you wish, and with slight modification you can use your code for un-related projects too!
Hope this helps!
-Ryan