views:

225

answers:

4

While at university I started my first programming with ANSI C, before we moved onto Java later in the course. Now I would like to go back to (re)learning C and C++ again to allow me to contribute with open source projects and also to expand my CV and improve my career prospects.

Currently I mostly program in VB.net (I know I know, I try to not do things the nasty way you can with this) and am slowly picking up C# as I get some time at work. I also use a bit of java for Android dev.

While I realise just doing it is the best way to learn, my exercise ideas are usually either trivial or beyond my current skills. What are some good sources for this initial relearn, I intend to possibly start helping with Chromium as other people seem to think this a good place to get started in OS.

Basically any help getting back into this would be appreciated.

+1  A: 

I recommend taking a look at the list available here: http://stackoverflow.com/questions/22873/language-books-tutorials-for-popular-languages and the answers people have submitted for some excellent suggestions of books and tutorials for just about every major programming language. It does help to do, check the reference text for the whys, and do again.

Beyond that, it is learning by doing / getting it wrong / searching / posting on here / improving.

Ninefingers
+2  A: 

I'm always a fan of Project Euler. You can freely browse the problems they present and find ones that sound interesting to you. That way you'll be learning C++ on motivating problems.

fbrereto
While I appreciate Project Euler as a fun excercise I think it lacks when it comes to demanding designing and thinking in C++. I think it doesn't suit his requirement to prepare him for FOSS coding.
pmr
I too like project Euler but I think it's mostly about math and less about programming
AntonioCS
Yeah I don't think Project Euler is much use for learning a language beyond learning basic looping constructs and syntax.
Peter Alexander
If you go into Project Euler with the mindset that you want to solve a general problem rather than get to a correct answer to a specific problem quickly, I'd argue that you are effectively learning the foundations of a given language.
Joey
A: 

A good way to learn would be to challenge yourself to build various STL components. Start with simple things like std::min and std::swap and move onto more difficult things, like implementing std::list and std::map. Once you can do that you'd be pretty well versed in template programming.

To learn general software development skills, just make software. Make fun stuff to keep you interested; perhaps write Tetris using OpenGL and GLUT.

The way I keep pushing myself is to make a list of things that I want to learn, stuff that I know that I don't know, and I make projects out of them. For example, I'm currently working on an evolution simulator, then I'm going to try playing around with OpenCL, then some advanced graphics in OpenGL. There's always more things to learn and it's not very difficult to come up with tasks for yourself.

Peter Alexander
A: 

C is very much a different language to C++, but if you were using C++ and want to get up to speed on the latest developments, check out the upcoming C++0x standard. There's a good page on Wikipedia for it here.

AshleysBrain