views:

501

answers:

9

Hi, I'm starting to work on a Master's in CS right now though my undergrad is in another field. I have never worked on anything other than what I have written myself. I have never even really worked on a group project in college. So what I would like to do now is to start contributing to some open source project, both because it can help the project and because of the experience I can gain. When I check out code for some of what I imagine to be small projects, I am overwhelmed by the amount of classes and code that I have to dig through to begin to understand what's going on. Can anyone suggest a small open source projects that I can get started with that will help me get experience with some bigger code bases and working with others.

I would prefer the following languages (in no specific order, I guess) Python, C#, Java...

Would rather avoid C/C++ for now.

Thanks,

+15  A: 

This is the wrong approach. You have to decide what areas you are interested in in computing, not us. You simply cannot realistically get involved in a FOSS project that you do not personally find deeply interesting - at best the current project contributors will laugh at you.

anon
They're all gonna laugh at you! <insert Adam Sandler voice here>
MattC
+1  A: 

Well:

Python:
- pyQT = http://www.riverbankcomputing.co.uk/software/pyqt/intro
- SCons = http://www.scons.org/

Java:
- ANT
- Nutch
- Lucene

Just some that come to my mind...Sorry I dont know a lot of C#, except maybe work on Mono?

So much for "small"? :)
Jonas Byström
@jonas - yeah, good point..not small, but surely could use the help I am sure. He could find a bug and fix it and submit a patch....
+6  A: 

This answer is unfortunately not going to give you what you want to hear...

While I applaud your effort to getting experience practically, I can't imagine that there are projects as small as you want us to tell you. If it's open source, it's likely written by several people and organized in such a manner as you described. I think you'd be better served by asking the people on a project of your choice how their project is structured and how you may join the efforts. It is my experience that a code base is difficult to learn no matter how small it is (unless it's under 2000 lines or so).

Please also realize that, depending upon your curriculum, a Master's Degree in computer science is much more about VERY advanced data structures, algorithms, proofs, papers, empirical analysis, etc. than it is coding. I did very little coding comparatively in grad. school compared to undergrad... but grad. school was easily twice as hard.

my advice: keep doing what you are doing, but don't place a huge emphasis on it.

San Jacinto
+8  A: 

The best suggestion that can be given is to head over to GitHub (or a similar site) and begin prowling through the Python projects until you find one which INTERESTS you, regardless of the codebase size.

You shouldn't be able to snatch a project's repository and suddenly be able to understand everything. Read the documentation, sign up to the mailing list, use the project.

Begin trying to narrow down how specific aspects of the program are handled within the code base. Once all of that is done, you will have read nearly every file and have understanding of the complexities and flow of the program.

Now find a small, likely-to-not-be-fixed (by the dev team) bug and try to figure out how to fix it. Test it. If you don't know how to write tests, find out how to write tests. Read the guidelines on how to contribute patches and fixes to make sure your fix isn't swiped under the rug.

Best of luck!

iano
+1 github is fabulous. I was going to say something abot looking on github but it did not match the OP's request. Still, it's what he needs.
hughdbrown
+1  A: 

I'm sure this won't be helpful to you but I would absolutely not avoid C/C++ if you can help it. Too many programmers these days rely on languages with garbage collection to do most of their thinking for them. The best way to learn is to jump in with both feet and if you're not fully comfortable with C/C++ the fastest way to learn is to pick apart someone else's code and then attempt to modify it (aka fix bugs)

MattC
+2  A: 

Don't worry so much about the size. Try and find a project that interests you and has an active community (irc channel, mailing list, whatever). Once you've done that, start doing things to help the project: find/fix a bug, add a feature, write a new test, write some documentation, etc.. When you get stuck, ask the community; they will more than likely be happy to help you (and if not, maybe try a different project). You should be doing this because you want to and find it interesting.

Also, for many projects, it is not necessary to understand each and every class to make a contribution. Pick a function or feature and run through it in the debugger. Figure out how it works. Get an idea of what the common code paths are. A good editor (one that lets you easily jump to the definition of data types and functions) is really helpful here.

An open-source project is not something you can learn in a day. It might take a while, but you will get to a point where you can make meaningful contributions. For me, I was able to learn about and make meaningful contributions to a quite large open source project (thousands of source files and dozens of dependencies) in a fairly short amount of time (Not that I'm trying to brag, I'm just saying that if I can do it, others surely can). There are still a lot pieces of the project that I don't understand, but, given a little time staring at the code and wandering around in gdb, I could figure it out.

Paul Wicks
+2  A: 

My advice is that if you are going to be a professional programmer you will have to learn to deal with large, under-documented, and often "crufty" code bases. Now is as good a time to learn how to do this as any other!

Stephen C
+2  A: 

Find a project which you need for your current development needs, and submit documentation for it :)

Thorbjørn Ravn Andersen
A: 

I'm known for asserting that the deadliest phrase in Information Technology is "All You Have To Do Is...".

Unfortunately, any project that does anything swiftly becomes complicated. Computers are stupid. They don't understand "All you have to do" and must be told in excruciating detail. I'm convinced that one of the major reasons that software projects fail is that the users thought the solution was simple and so did the programmers. I know that the "simple" parts of my projects are generally where I end up doing all the suffering, while the "complex" parts are frequently much easier than I expected.

When measured in terms of Lines Of Code/day, I'm a negative programmer. I have an especial talent for taking something and making it simpler, faster, and more reliable. Thus my LOC output is often less than zero over short stretches. If that sounds like I'm bragging, rest assured that there are other aspects of programming where I don't get as much credit. It's just my particular talent.

Still, I'm heading up an open-source project of my own, and already it's probably more complex than you'd want to consider (although I can use all the help I can get!). Before it's done, it will be fairly substantial. Open-ended, in fact.

Bear in mind, however, that inside every large project, there are lots of smaller projects, and in fact, I'm presently looking at that very concern right now. It isn't necessary to become totally familiar with all parts of a project from the get-go. Just find an area of interest within a project you admire and start learning how it works.

Tim Holloway