Slashdot Mirror


How Can New Programmers Contribute to Open Source?

DanPeng asks: "I'm an inexperienced programmer who has been following the Open Source movement for a few years now, and recently I've been looking for opportunities to write some code and contribute to an Open Source project. As a a senior in high school, I've taught myself C, C++, Perl, and a few other languages. I have a basic understanding of algorithms from AP Computer Science, and I've toyed with GNOME/GTK+ and *NIX programming. I lack, however, any 'real' programming experience writing code for projects of any great size or importance. How should a new developer contribute to Open Source?"

"I've worked with no more than one or two other people on programs of no more than a few thousand lines of code each. The 80 MB sources of Linux and the 160 MB sources of Mozilla seem to me these enormous morasses of code far too deep and intricately interconnected to wade through at all. Surely there must be thousands of similar students with basic programmming skills who want to help but are intimidated by the sheer enormity of even finding their place in hundreds of megabytes of source code. I would think that after the experience of a few projects, one would get the hang of it, but how can a new programmer get a foothold for that first experience? What kind of project should he be looking for?"

17 of 135 comments (clear)

  1. OMG! I can't believe what I am reading! by Anonymous Coward · · Score: 5

    Look at you people, look at every single post, telling him to just dive into it, Just do it! Just scratch it! Hah, that is like telling a shy geek who wants to get laid to put on a pimp coat, carry a cane, find any lady, mack on her and just do it! It ain't easy! I repeat, It is not easy, It is much easier to start a project from scratch than to dive into an opensource project, It is very hard to read other people's code, especially when you are not involved from the beginning or when you come in late, only to find that there is no specs. I value Opensource, I appreciate opensource, and I dream and pray that it grows more and more, but one thing that the vast majority of opensource software out there are lacking are solid software engineering processes. Talk about processes, and you get frowned up, People who have never written past 1000 lines of code, jump on and such. Hacker mentality is the way, Just code! Just do it! We need a way to open up the door to newbies, We need a way to hold their hands and guide them to the proper path. opensource culture reminds me so much of the MIT hackers lab culture in the 60's, I ready Hackers by Steven Levy. ;) The hackers in the 60's had this idea of, you either got it or you dont', we ain't gonna hold ya hand, sit down, shut up and code or else get out! I see the same thing here today, not as brutal. The most exciting thing I have done in my life is teach others, I once taught a bunch of wannabe-script kiddies how to code C, via IRC around 4 years ago, they lot interest in hack/phreak and went coding, where they are today, I don't know. around 3 years ago, I met this kid via IRC, 13 years old, interested in C and asm, People made fun of him at this age and told him to go learn BASIC, just a few minutes here and there every other day for a few months, he was able to stand on his own. I myself need a hand holding! I don't wanna write another small blah blah project, I want to work on significant stuff, I am not out here to scratch my itch, pretty much most of my itches have beens cratched by someone, I want to contribute to softwares that can change the world for better, ah well, I dream.

    seggy

  2. Re:Get involved... by Bill+Currie · · Score: 5
    Yes, this sort of thing seems to work well. I'm with the QuakeForge project and we've helped a few newbies along and we're currently helping two at the moment (though one isn't really contributing at the moment, but that's ok:).

    Ways that newbies can contribute:

    • give bug reports (the more detailed, the better and this is good practice for debugging)
    • provide help testing (kinda goes with above)
    • find a small, simple thing (eg, displaying a clock) that you want to implement and don't be afraid to ask for help.
    • as you become more familiar with both the programming language and the project, work your way up in complexity.
    • providing documentation is always a benefit and a good way to become familiar with the project. ("Oh, what does this cvar do?" grep study "oh, ok":)
    • Just hang around with the crew in IRC. Just because we live in our basements in front of our computers doesn't mean we're hermits. A friendly smiley is always nice to see, especially when that heisenbug has been driving you crazy for a week :)

    There's probably all sorts of other things a newbie can do to contribute, and I was not being facetious with that last item: never underestimate the value of morale support.

    Bill - aka taniwha
    --

    --

    Bill - aka taniwha
    --
    Leave others their otherness. -- Aratak

  3. Source code by linuxci · · Score: 5
    I have to agree that the Mozilla and Linux source code can be very confusing to someone even a very experienced programmer. Mozilla.org have a lot of documentation on their website about getting started and have newsgroups and an IRC server where you can ask questions. There's a lot of small areas you may be able to help in with the Mozilla project, so have a read around the website and then when you feel confident ask for help on IRC or the newsgroups. The news server is news.mozilla.org and irc is irc.mozilla.org (channels #mozillazine and #mozilla are the recommended ones). Most people you find are more than willing to help, but sometimes if there's a lot of deadlines then you may not get a reply immediately.

    Perhaps if you want to work on a smaller Mozilla related project check out MozDev however most of these are projects that build on top of Mozilla using XUL and js.

    Alternatively why not look on a site such as sourceforge and look for a smaller open source project you can help out with.

  4. 3 things you can do to help by maggard · · Score: 5
    1. Document. Document document document. Use the whatever and write/elaborate on the FAQ, manuals, etc.
    2. Debug. Try out the features & discover what works & what doesn't work. Go through the code and attempt to fix the problems.
    3. Support. Lots of groups could use someone to help handle their administrivia, clean up their website, write some PR stuff, whatever.
    Of course out of this you get some real skills, lots of hands-on project experience, and are exposed to a wide variety of real-world code & coding styles.
    --
    I don't read ACs: If a post isn't worth so much as a nom de plume to its author then I wont bother either.
  5. Learn something! by John+Whitley · · Score: 5

    Others have rightly pointed out "find a bug and fix it". I'll weaken this a little: find a bug and identify it. To start, you needn't even find the "correct" fix -- for some problems this can be hard to do, especially if you are inexperienced and didn't architect the code in the first place.

    It is *VERY* important to your development as a programmer to get involved with sophisticated code that someone else has written. You'll see good code, bad code, ugly code, and learn to tell the difference between them. This will improve your own coding styles. You'll learn about various coding techniques, data structures, etc. in something resembling a real application.

    [rant about deluge of unmotivated "I just want a job" students in CS academia deleted for brevity.]

  6. It doesn't matter if you're not experienced by magic · · Score: 5
    For most projects, your changes will be reviewed, and you'll communicate with other authors. This means that you don't need to be overly worried about "screwing up" a project-- others will check your work and talk to you about it. Start out with a small project, where you can get to know the other developers and discuss things with them. Diving into Linux kernel development is a bit like being thrown to the wolves, but nibbling on a small piece of the Gimp or even a 2-3 developer project is a good way to learn. There are thousands of open source projects going, it's not too hard to find one that will be a good fit.

    Remember, you don't have to start as a coder. There is a lot of overhead in running a project. Documentation, code cleanup, test writing, and resource development (sound, graphics) are all areas where you can start, then move on to coding as you become more familiar with the project. Many great projects go unused because they aren't sufficiently documented or the distributions are too hard to install.

    Check out SourceForge to find a project appropriate to your skill level.

    -m

  7. geez.. dare to dream :) by Pengo · · Score: 5


    I suggest opposite. find a great book, pick a project.. and get in over your head. :) Open source is about writing bad code.. you do it because you love it.. not because you will loose a job.

    If it sucks, you will get peer review and get better.

    Sooner or later you will hit a point to where you are appreciated for your contributions and the pain will be worth it.

    Obviously the person that posted this article doesn't program, or at least doesn't understand the spirit of 'open' source.

    Almost a BSD attitude.




    --------------------

  8. Start small! by berteag00 · · Score: 5

    I feel your pain! (=

    I'm a freshman in college, with about as much experience and interest as you have...and the OpenSource world is very intimidating! My suggestion: start small. Really, really small. Eg, I have made exactly one contribution to the WINE project: if your Windows program calls GetDeviceCaps with capability "94", you get a fixme: unimplemented CAPS1 capability error. That's mine. (-; A couple of newly #defined constants, a few code comments...and an error message.

    But, seriously, look at what I learned from the experience. (I learned to hate MS's undocumented API features, for one.) I can now maintain a WINE CVS tree. I can diff changes I make against a current tree. I have some feeling for the organization of the project. (I got my name in WWN this week!) I feel a little more confident...next, I might try my hand at the EnumFontFamilies bug that keeps MINITAB from drawing graphs....and I'll probably fail miserably. But the people on the wine-dev list have seen my name a few times, and maybe they'll help.

    The other thing you can do is work on smaller projects. 160 Mb of Mozilla source is something I wouldn't even try to compile, much less try to contribute to. But look at littler, one- or two-man projects (like GtkTiLink)...they're riddled with bugs and usability problems...and the source code won't overwhelm you. When you see a problem, it's usually reasonably easy to track down the problem...even if you can't fix it.

    Let's face it. Neither you nor I have the expertise to help Linus and Alan Cox with the latest 2.4.0 show-stopper. Heck, just compiling the blasted thing scares me. But there are still little ones you can help with, little contributions you can make...and those will help you step up to the bigger challenges.

  9. For god's sake . . . by xant · · Score: 5

    Whatever you do, don't try to release another damn Linux distro. Like we need another one of those.
    --

    --
    It's rare that you're presented with a knob whose only two positions are Make History and Flee Your Glorious Destiny.
  10. Start small, gain experience by Shagg · · Score: 5
    Why not use an open source project to help you gain experience?. If you feel like you may be overwhelmed, then start small. Do what Kohath suggests:

    Find a project you care about, find a bug and fix it...

    I think the key here is to not think on the scale of participating with major contributions, but to try and fix the odd bug or two. Find something on SourceForge that interests you, but which is small enough that you feel you can handle.

    Once you've gained some experience working on minor fixes, you'll start to get the confidence you need to tackle larger projects. There's no need to try and jump right in over your head.

    Start small and use the experience you gain to work your way up to more significant contributions, there's no reason why a beginner can't use Open Source to get their feet wet.

    --
    Unix is user friendly, it's just selective about who its friends are.
  11. Re:no offense... by ChicagoFan · · Score: 5
    I wouldn't claim to "know" c/c++/perl and then in the same breath say "i have no real programming experience." code for a decade in one of the above, then come back and tell us you know it.

    Walt Parazadier, saxophonist for the band Chicago, once told a story about his dad, who is a 70 or 80 year old trumpet player who had played trumpet his entire life. His dad apparently was practicing one recent day, and turned to his son, who was visiting, and said of the trumpet, "Someday I'm going to learn this thing." The point, of course, being that you have never truly mastered the instrument and that there is always more to learn.

    I'd say it's the same with C++. You could program in it for 20 years, and you'll still look at your code one day and say, "Someday, I'm going to learn this language."

    ChicagoFan

  12. Get involved... by Ron+Harwood · · Score: 5

    Go to SourceForge - find a project that needs help in a language you are familliar in - and take on tasks...

    Once you are comfortable doing code to some-one elses specs - you could try your hand at adding in features you feel are needed, or even trying to manage a portion of a project.

    There are all sorts of 'job postings' on sourceforge for projects that need help.

  13. Don't worry, we weren't experts either... by MycroftXXX · · Score: 5
    As one of the people who was involved in the whole open source explosion, let me fill you in on a little secret people don't talk about much...

    We weren't experts either. In fact, many of the people who started the big name open source projects you see today were college and even high school students, who had never written a large piece of code before. (Some would say it shows, but I digress.)

    So how do you get started? Dive in. Find a bug you want to fix, or a feature you want to add, and do it. Ask questions if there's something you can't figure out. There's no pressure; you don't have to even tell anyone you're doing it until after the fact. You can take all the time in the world.

    And maybe, just maybe, if you're lucky, when you do publish your result, someone will thank you for it.

    Good luck.

  14. Ask for things that you want! by techmuse · · Score: 5

    Even if you aren't an expert on some code, you can surely find ways to improve it just by using it. So contact the maintainers of the source tree, and give them feedback and suggestions for fixes, features or other improvements. Then, as you become more familiar with the program, you can start to delve into the code itself and code your own fixes, features and improvements. :)

  15. It takes a bit of push ... by Decado · · Score: 5

    Just find a project you are interested in (theres several on practically everything out there) and email whoever is administering it offering your services. Explain that you are new and willing to learn and you will find something to do. A lot of the people working in open source are either hobbyists or self taught and to them the simple fact that you want to learn means a lot. However there will always be some who will deride and mock (see half the troll replys you'll get to this slashdot post for examples), so a bit of thick skin may be required.

    Finally if no one seems to care then download some early version of an open source project where you have some knowledge, check their bug lists and fix something. This should at least get you in the door with most projects and from there it is up to you how much you take from/give to the project

    --

    Slashdot: Proof that a million monkeys at a million typewriters can create a masterpiece

  16. start with something you like or need... by abdulwahid · · Score: 5
    There are two thing I always keep in mind when working on an Open Source project.
    1. Do something you like - One of the reasons that the Open Source development model works so well is that people are involved in coding things that they like. This is unlike the cathedral model where often programmers are working on things that, not only they don't like, but are meaningless to them. If you enjoy games...write one! If you like encryption....get involved with an encryption library. If you enjoy what you are doing you will eventually achieve something that is good.
    2. Do something you need - Even Linus started off with a selfish intention. He designed Linux for his own use. He wanted a UNIX compatible system that he could run on his cheap i386 architecture. He didn't start out by saying, "What can I design to benefit the world?" Likewise, the projects were I have a need for a finished program are the ones that I really throw myself into. If I am not interested it seems more like a peice of University course work or working for the Cathedral. For me to come home in the evening and think, "Right, let do some coding!" The project has to be good......Good for me.
    --
    perl -e 'print $i=pack(c5, (41*2), sqrt(7056), (unpack(c,H)-2), oct(115), 10);'
  17. Let them know that you aren't experienced by WindowsTroll · · Score: 5

    I concur with the previous poster in that you don't need to be concerned regarding screwing things up since your code will be reviewed, but I would point out to the authors that you are a newbie.

    There are good programmers, bad programmers and new programmers. A lot of "mistakes" are made by new programmers - that is how they learn the craft of programming, and a lot of mistakes are made by bad programmers who will never be any good at programming. If you qualify yourself as a newbie, then if you make mistakes, the authors will be willing to review with you the things that you did correctly and provide some insight into why some of the things that you did are wrong. If you don't qualify yourself as a newbie, they might just disregard changes that you send it, and you won't get any constructive feedback that will help you become a better programmer. One of the quickest ways to become a good programmer is to have a mentor who will help point you in the right direction.

    --
    "Microsoft has made computing accessible to a population who would otherwise not be able to use computers" - B. Kernigha