C++/C# and C++ books
QUESTION: Dear Joseph:
I am an expert in plain C language mainly used in embedded systems.
Took object oriented prgramming courses (C++) while I was in college but it was in DOS and I don't remember anything (back in 1995).
I want to learn C++ and C# but don't know where to start. I already have installed on my PC Microsoft Visual Studio 2008.
Can you point me in the right direction? Maybe some starting books?
ANSWER: Hi, Bob.
This is a tough question to answer, honestly. When it comes to learning a new language, everybody has their own needs and learning style, so no one method will work for everyone.
Since you already know C, most C++ books on the market would bore you to tears (mostly). The problem with most books about C++ is that they assume you have zero knowledge of C, so teach everything involved in C along with C++.
That said, a little bit of research and I found this little gem: http://oreilly.com/catalog/9781565921160/
. Now, I have no personal experience with the book, but it seems to review well and it's specifically intended for people who already know C, so it may be right up your alley.
Personally, I have on my bookshelf next to me, a few C++ books, but I can honestly say I never reference them and have only read bits and pieces of them in the past. If you can get your hands on a C++ text book or similar, one that has exercises at the end of each chapter, that can be a good route to go. I find it best and easiest to learn a language by simply using it, and these exercises can be a great way to do that.
Additionally, I like to point people to Project Euler (http://projecteuler.net/
), which is a site that has numerous little algorithm challenges intended to be coded in any language of your choosing. Completing these is a great way to learn the semantics of a new language as well as test your math knowledge. In fact, I'm presently going through them (again) with Python, since I am teaching myself Python now.
Now, it isn't required, but I would recommend waiting on C# until you have a better grasp of C++. While C# isn't exactly like C++, it borrows enough from it to really make it worth your while to be comfortable in C++ before embarking on C#. Java is much the same way. In fact, where Java is a language built from the ground up for C++ programmers, I'd say C# is Microsoft's take on Java.
Again, I don't know that I can really recommend one book over another here, simply because I so rarely use books (aside from looking for things to code such as the exercises in some books). I generally find enough information in help documentation or online sources to avoid purchasing books.
I hope I have helped you in some way here. If you have further questions, feel free to let me know.
---------- FOLLOW-UP ----------
QUESTION: Dear Joseph:
As I have never programmed in Windows before, is there something special I should know about before starting to learn about C++?
Like something that is universal to all Windows programming languages (Visual Basic, C, C++, etc.).
If you're looking to design Windows applications, I suggest you start by learning the Win32 API. This is the original interface for making Windows forms and the like. It's very well documented, both in Microsoft's official MSDN documentation and all over the web. It's pretty easy to understand and you can get something workable fairly quickly.
Once you are comfortable with the Win32 API, move on to MFC -- Microsoft Foundation Classes. MFC is a robust set of classes built on top of the Win32 API. MFC is perhaps even better documented than the basic Win32 API. It requires a bit more setup than the basic Win32 API, but it has a lot of advanced classes set up for building very nice Windows applications.
You will also want to investigate the .NET API. The .NET API is the newest addition to Windows programming and contains numerous classes that are language-independent (CLR -- common language runtime).
If you are interested in more than just basic Windows applications, you may want to look into OpenGL. It is possible to build a Windows application that uses OpenGL as a base rendering system for certain objects. For example, I built an MFC-based map editor once time which used OpenGL for the drawing of all of the map pieces. This allowed for easy scaling, rotating, clipping, etc. and was much faster than using the basic drawing methods.
OK, I hope this all helps you on your way to learning Windows programming. Use the MSDN, it's incredibly helpful. Let me know if you have further questions.