don't waste your time leaning visual basic or C# unless you plan on only developing apps for windows. if you want a cross platform language Qt is C++ based,can be used w/ java and python. and has most the features that people like about vb (i.e ez gui design) also its GPL free.i highly recommend that everyone here learn and use qt for their projects. again C# and visual basic are a WASTE of time unless you only want to program for windows.
There's another reason non-MS platforms are convenient, too - closed standards / file formats are a b**** to reverse engineer. Open standards don't have to be. Besides, I'm a fan of the two unofficial tenets of GNU philosophy: write distinct tools that each do one thing well, and output everything that moves to text streams. It will save you headache in the end.
Java is a good choice for cross-platform, too. Java 'compiles' to bytecode, which is a bit like a generic low-level language which can quickly be interpreted via a virtual machine. MS is obsessed with virtualization at the moment, too. They seem to think it helps with security and means different engineers can maintain distinct parts of the system. I think it's another layer of crap to debug. But that's an issue for another time.
as for good c++ books, i can't really remember any, in school we used C++ for You ++ (love that title). basicly if i book is going to force you to use microsofts api's or AP headers its not a good book, since you will find that once you try to make a program with out them you have to relearn all the api calls.
The issue with .NET is the issue with many things: it takes time out of learning, but the loss of power will bite you in the ass eventually. You can get simple GUIs up and running quickly with VB and its many ActiveX controls, but once you run into the crippling deficiencies of the language (I'll admit, my experience is with VB *6*), you'll spend far more time trying to find workarounds. And the result, a complicated, Frankenstein's monster of an app held together with string, is going to be a nightmare to maintain.
As Sithlord suggests, it's far easier to move from generic, vanilla C++ for *nix platforms to MS stuff than the other way around.
Here's an analogy for you. It's like the difference between relying on Lattimore's translations of
Agamemnon rather than reading the originary Greek (or at least cribbing from Loeb with a Greek dictionary, in my case). Sure, you'll get a basic essay that covers some trivial points early on, but you'll miss the power soon enough. Lattimore's translation will never teach you about
dike. It never marks up Agamemnon-as-sacrifice, and it butchers Cassandra. And unless you understand them, your essay is mid 2:2 standard at best. Thus with C# and the like.
for wii homebrew get devkitpro, and learn C not c++ most of the wii stuff is done in C. (very similar to C++ but lacking some features of C++)
C++, to make clear, is just a superset of C. C code works in C++, but C++ adds new features (which you could often define in C libraries yourself anyhow).
p.s for gfx don't bother w/ directX again unless you only want to code for windows , learn openGL
It also helps that the industry by far prefers to work with openGL. Want to write for Nintendo or Sony hardware? Good luck with DX. openGL will also open up idTech engines etc, as id and most other FPS devs by and large prefer it as a platform.
Of course, it's also well-known that DX tends to be 18 months behind OGL from a technological standard. There's really few compelling reasons to choose DirectX, unless you specifically want to write for the XBox 360.