For someone who has a significant background in electrical engineering (as you do), the best language is probably C or C++.
That which drives programmers to to other languages has more to personal predisposition than relative merit of the languages. For example, there is nothing wrong with using Laplace transforms to analyze linear circuits, but there are some people whou would swear that Laplace transforms are busted, and hunt in vain for something simpler that lets them get all the benefits of Laplace transforms without performing any complex manipulation or polynomial factoring. This difference in perspective has been raging non-stop since Java was born about a decade after C++ in the mid-1990s, so if someone tries to convince you that Java is better, you should pay more attention to their personal predisposition than the content of what they are saying
- without insight that can only be gained after years of using multiple languages, the former will reveal truth more quickly than the latter.
Between C and C++, I would use C++, as it is a superset of C, but herein lies another problem. Within the C++ community, there are many different styles of programming, so you have be weary of libraries that you download off the net. Some of them are good. Some of them are bad. In general, most people think what they make is good (i'd say99%). Software engineers (the professional one's) are far more sloppy in their thinking/design than EE's, IMO. If they make a board that overheats in one region because layout was just bad, their first instinct, often, is to go hunting for an active cooling component to slap on hot spot than to redo the layout. The space of creativity in this area is HUGELY WIDE OPEN, despite claims of "best practice." To anyone who knows just how much waste and bad design goes on in software development and get away with it, it should come as no suprise that richest man in the world made his billions in software.
Currently, the Textronix CSA7404B of Integrated development Environments is Microsoft Visual Studio 2005. The Professional version of this software is not cheap (few hundred bucks), so they have a free, downloadable Express version which is *more than enough* to develop sinficant applications, though you will have to get the non-free package if you want the IDE to assist you in doing things like making icons and helping do buttons and such. You can still do these things by hand (without help of IDE), but it will be tedious.
MFC is Microsoft's first, public, significant "forward" (cough) migration from C to C++. It is an abomination as far as good C++ design goes. I would say many expert C++ MFC users have agreed to this, but they use it anyway. If you want to protect your "how I think" , stay away from it, at least initially. My own preference has been to continue using the C interface they provide to Windows, as the MFC is so ugly, I'd rather have raw-and-ugly than fat-but-still-ugly.
Stay away from C#. It is the latest in a serious of Microsoft lies to try to accomplish several things at once that would hugely benefity their market dominance:
- Kill Java, or disable it.
- Get programmers to stop writing code that is too portable for comfort (in C++)
- Provide a platform that will lock in programmers so that when Microsoft decides to make heavy pushes to Linux/Unix, they still control the software budgets of the customers who made transition, as all the software will require engine sold by Microsoft.
- Alleviate the problem of supplying multiple libraries in multiple spoken languages and multiple written languages even though the matrix of libraries do the same thing (put list box on screen for example). With the .NET crap, and C#, this dream of their's is closer to reality. The only drawback is that it comes with a giant diaper to garbage collect all the crap that is made by programmers who were lead into thinking that they no longer have to think about memory management. This is why C# is so popular, To get my to my Laplace transform example
- memory management is the one area where many, many programers bitten in their trek through the programming land, so they want to believe that there is a silver bullet to let them not think about it. But in fact, there is none, yet the need to believe there is so strong, everytime a language comes out and purports "with us, you don't have to think about memory management!!!' you get probably 5-10% of the eyeballs automatically.
To summarize, C or C++, Microsoft Visual Studio Express, no C# or .NET.
Note that you *have* to download the Platform SDK and you will have to tweak the IDE to get it work for writing Windows apps (they explain this after you install theh IDE).
-Le Chaud Lapin-