I want to know which language should I learn or reinforce so that i won't be caught off-guard. Let's assume that I'm an Electrical Engineer major and i want to go into the field of Power Systems ( Electric Power Engineering). Also, how can i become really good at using labVIEW.
1) The "C" langauge, because it is extremely common in embedded systems.
2) A hardware describption language (Verilog, VHDL) possibly with analog extensions, to describe circuits (if you are just starting you career, you'll be around for a long time and you will eventually be involved in large-system design which will use these).
3) The Scheme language, because it contains a vast number of foundational ideas about what should be in programming languages. If you study Scheme well (the book "Structure and Interpretion of Computer Languages, MIT press is ideal), you'll understand what is in essentially every other programming language in use.
4) Any symbolic mathematics system (Mathematica, Macsysma, ...) so you understand not only how to use a computer algebra system, but how to program manipulation of symbolic formula.
0) Matlab. Especially since there is a power System toolbox available.
EE was my major (and MS too), and I had Fortran and some Pascal (which was in fashion then -- in the '70s). Oh, and APL (ditto, as some parts of the dept were an IBM mainframe shop)... and some Scheme (a CSish course I couldn't wiggle my way out of;-). And assembly langs of course (HP1000 and Z80, as it happened; I learned 6502 asm on my own as I had PCs using that and was keen to use them well;-). AHPL was in fact what my thesis was about;-).
Had no real trouble, once parchment'd and part of the workforce, picking up what else I needed as and when I needed it -- C, C++, common Lisp, Prolog, Rexx, Java, Perl, Python, &c. My daughter just got her own EE major (telecom engineering actually -- focus on advanced radio systems) -- MS actually, she's staying on for her PhD now. Java and C seem to be the mandatory languages now in EE (her fiance, in civil engineering, still got Fortran;-), but what she works in, day by day, is actually matlab.
So my advice would be, one static language (modern Fortran, or Java, etc), one dynamic language (matlab, Python, scheme, Ruby, ...), one assembly language (any one) -- and let the chips fall where they may beyond that. I never planned to be a SW developer, neither are you, but life WILL take you in directions you can't foresee at this time!-)
During my time getting my EE degree, I learned C and both intel and motorola assembly.
Now...I spend most of my time working with the linux kernel, writing driver code and what not...and having a hardware background is a absolute must. Its much easier to trouble shoot kernel level code knowing how the hardware (is supposed) to work.
Working as a sysadmin for one of the major EDA software firms for over four years I found that there's a pervasive use of TCL in the EDA industry. Many EDA products, from a variety of vendors, have embedded TCL functionality.
Given that TCL is a fairly easy language to learn (comparable to shell scripting or awk, considerably easier than Perl or C, not quite a easy as Python) I would suggest starting with TCL.
Although it's not used by the EDA software much one of the more practical flavors of TCL is the 'expect' language by Don Libes. This is popular among sysadmins as a way of automating interactive terminal sessions. For example if you need a way to automate the process of logging into a remote legacy system over telnet (one that doesn't support ssh, for example ... like some old phone switchgear) then 'expect' would be the tool to use.
Also note that TCL/Tk is another "flavor" of TCL. In this case the command interpreter is named 'wish' (WIndowing SHell or possibley "WIdgets SHell"). Tk is short for "toolkit" the term traditionally applied to graphics programming libraries for the X windowing system. So TCL/Tk is a toolkit of graphical widgets linked to a TCL interpreter.
The Tk toolkit has also been bound to a number of other scripting languages. So Perl/Tk was the most common way to provide GUI features to Perl for quite a few years (and perhaps still is). Python has included Tkinter in it's standard libraries for probably close to a decade.
In other words the concepts you might learn from using TCL/Tk ... at least in regards to it's means of creating windows, dialog boxes, menus, button, checkboxes, and other GUI elements ... would be transferable to other scripting languages.
As others have suggested it's useful to learn C since its syntax has strongly influenced that of Verilog and there are emerging tools (SystemC(*)) which are designed to facilitate hardware description and verification using a C++ syntax.
*(http://www.systemc.org/about)
Fortran & C & Perl. Fortran cannot be beat for math, which as an EE is important (well, it used to be, in the old days).
Here's an overview of the programming languages that will be encountered in a typical undergraduate electrical engineering (EE) degree program:
- A compiled language (typically C or C++). Often this is the language used to introduce EE's to programming. Fortran falls in this category, but it has pretty much been replaced by MATLAB (see below).
- An interpreted language (typically MATLAB). This language may or may not appear in the introductory programming course. MATLAB commonly appears in signal processing courses, at least one of which is required for most undergraduate EE programs, and it also appears in control theory, which is closely related to modern power systems engineering. Other languages in this category include Tcl (which was created to help automate tasks in the VLSI design tool Magic) and Python (which has many of the capabilities of MATLAB thanks to libraries like NumPy and SciPy)
- A hardware description language (typically Verilog or VHDL). Every EE program I've seen has required an introductory course in digital logic design, and this course usually introduces one or more hardware description languages.
- An assembly language (optional). For most EE's, C(++) suffices as a low-level programming language, but for EE's with interests in computer architecture or embedded systems, knowing an assembly language can be useful.