I have been talking about deficiencies of graduate studies before, here and here. Now, in order to partly fix some of the problems, I strongly suggest all students, particularly, those in science and engineering to gain some experience in one low level, one high level, and one database scripting language. First to understand the distinction between low level and high level computer programming language, I like to invite you the following youtube video by Feynman in which he explains (in layman term) what exactly a computer does.
I am not an expert in this field, but since this my blog, I try to suggest something which I think is useful for everyone (every student at least) to follow. I suggest to learn C++ or Java as an object-oriented language and Python as an easy, fast, and reliable programming language. Meanwhile, learning MATLAB and Mathematica is very useful for everyday math and simulations. Latex and Lyx are pretty useful for writing your documents and making presentations. Gnuplot is a useful tool for plotting data, and inkscape is useful software for making figures. For those who work with large data analysis, working with library scripting language such as SQL is desirable. Learning these materials during course of study, is proven to be extremely useful for your program of study and after that for finding a job. This is like a premium package in addition to your expertise in your field of study.
Additionally, I suggest every student (particularly graduate student) to take at least a course in statistical data analysis, since I can not imagine someone in science and engineering can work properly without understanding tools from statistical data analysis concepts (it is like basic algebra and calculus).