views:

211

answers:

9

I know basic C++ like about classes and other basic stuff what are the things which i need to know so that i can understand the source code of some advance open source projects and be able to make one too.

Like if i read the code of vlc or some other projects I can't understand many things moreover i am just a beginner have not worked on even multi file programs so please suggest which are the books and what are the basic projects from where i can start.

+3  A: 

Well, what you could do is start to work your way backwards from the project that you actually do want to contribute to. See a construct that you don't understand? Try to understand that. Work it out. Google for parts that you don't understand. Find somebody more into the flow of things and ask them (kindly, carefully) to explain. But not in broad sweeps; find a specific, concise question that you do want to ask. One that might take a bit to explain, but not hours.

And the best way to learn to program is to program. Not by getting into the big picture right away; first, give yourself little assignments to write. Read programs that are written well (I am not a native of c++, so I can't be of any help telling you of things worth your time), emulate their style. And then find your own.

Konrad Neuwirth
A: 

The best thing you can do is find a project where you actually know how to use it (such as MySQL, Apache or your favourite open-source application.) Look through the feature list of the application (or the bug list) and find a feature/bug that seems small to develop/fix, or that nobody seems to care about fixing/implementing, and fix/write it yourself.

Present the patch to the developers for review and (if they're half-decent) they'll give you some good feedback/pointers on what you've done well/incorrectly. I found it useful to register on the developer mailing lists (like pgsql-hackers) and just watch the kinds of issues the developers come across.

I did this with a project that only supported POP3 e-mails, but I needed it to work with IMAP. The developers didn't see any need for it, so I did it myself, committed a patch and it was accepted.

Andy Shellam
+1  A: 

Many open-source project also are in need of team members to work on documentation. This could be a great way to contribute to an open source project that interests you while learning more about how it works, as Konrad suggested.

Eric Schweichler
+1  A: 

Start following an open-source project first (like reading their mailing lists).

Do it on a daily basis.

Then start watching commits.

Even for big projects, there are relatively small commits.

You'll look at such a commit and say "hey, I understand it!".

You'll learn a lot from other people.

At some point you might spot a bug in a commit, you might see that you know a better way to do the same, you might want to implement a new small feature that would be useful to you (and eventually to other people).

At this point you pop up with your own code.

Alex_coder
A: 

VLC is not a project for a beginner. VLC is really the GUI layer on top of libvlc which also uses ffmpeg for decoding. There are too many complex layers for you to dive in and understand it.

I would suggest finding a simple but interesting project. Sourceforge has a help wanted page for example.

A: 

First, be patient. You're probably not going to be able to figure it out overnight.

Second, keep doing what you're doing--ask questions, look at source code, create your own programs. Eventually you'll figure it out and the more you do, the more you'll (probably) get better.

Any complex program will be somewhat difficult to understand, regardless of your skill level.

I recommend these books on C++: C++ Primer Plus, 5th Edition, Stephen Prata, http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/ The C++ Standard Library: A Tutorial and Reference, Nicolai Josuttis, http://www.amazon.com/Standard-Library-Tutorial-Reference/dp/0201379260/

I would read both of these books in pieces, and use them as a reference otherwise.

Nathan McDaniel
+3  A: 

I am a developer of some open source projects. There are plenty of things I get from other people and a lot more I could use.

  • Bug Reports: These are not negative at all. I usually did not realize that something is a problem. So far most bug reports were correct.

  • Feature Requests: If I know what people want I can better develop for it.

  • Documentation: Most developers hate to write documentation although we all value it when it's there.

    • Presentation: You could write in a blog about the project or help with the web presentation of it spread the word about it.
  • Translations: My Japanese and Spanish translations are done by natives of that language.

  • Bug Fixes: Never occurred in my projects. I would love that naturally but the points above are great.

  • Praise: If the project you want to contribute is small just letting the developers know that you like their work is great feedback for them and might lead to more good stuff.

My advice is to select a project you like and see what you can do. You might want to mail the developers for hints. On bigger projects (linux kernel) you might have work hard to get your contributions accepted but even there are topics were help is required.

openCage
+2  A: 

http://www.kegel.com/academy/opensource.html this may help you

FosterZ
Thanks FosterZ it was of great help.
Rajan Walia
A: 

Check Ingres RDBMS , always looking to have people like you involved, even at testing, docs, coding http://community.ingres.com/wiki/Engineer

Dean