Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Education

How Can New Programmers Contribute to Open Source? 135

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?"

This discussion has been archived. No new comments can be posted.

How Should New Programmers Contribute to Open Source?

Comments Filter:
  • by Anonymous Coward
    I think you need to document your journeys. See what you yourself are lacking and as you learn, make sure you publish it: the journal of the lessons you learned while learning how to program in larger environments.
  • by Anonymous Coward
    Project leads like it when a person can submit a diff or patch that requires minimal effort to add to their project. Get familiar with writing a proper patch and you'll be able to do small-scale bugfixes and additions even on the big projects.
  • by Anonymous Coward
    With respect, the experience you have doesn't sound like it is going to be enough to help you produce anything for public consumption yet.

    That doesn't mean you shouldn't try though. It's a fact that the best (only) way to learn programming is by doing it. But you should start by absorbing a few decent books on software design.

    Assuming that your tuition so far has been mostly language specific rather than focussing on problem analysis and structural design techniques you will need to re-educate yourself from the beginning.

    While you are studying up, check out freshmeat.net and try to find a moderately-sized application which interests you from an engineering, problem-solving point of view (not everything is mozilla-sized! Many of these apps have been written by a single person in their spare time. Download the source and get some practise reading other people's code. Critique the structure according to what you have learned about software design. Then consider what changes you would make if you were going to write your own version from scratch.

    OK that's the practical. Now here's the theory part of the curriculum (skip any parts you are already *completely familiar* with but don't try to fool yourself about what *completely familiar* means):

    You should start with a solid primer on the older top-down, stepwise refinement method and do some of the end-of-chapter exercises.

    Then move on read a good college text on the technique which has become known as bottom-up design, i.e. data abstraction and functional programming (the latter does not not necessarily mean declarative languages like Lisp or Scheme though; it's more useful to use strongly typed languages with nested scope, like Pascal and Modula-2).

    It is worth learning how to design code bottom-up effectively before moving on to the next stage because that's the simplest and easiest (and therefore the quickest) way to learn how to think in the right terms about the most basic aspects of designing an implementation.

    Only when you have mastered that should you move on to object oriented design. Object Orientation is much more finicky and demanding and tends to hem you in to a smaller range of acceptable solutions - but only if you know what you are doing by this point!

    If you haven't already mastered the plain old bottom up thing then your attempts at object orientation are likely to be a horrible mess: only half object oriented with poor decoupling because of inappropriately public members and each class's fingers probing deeply into the guts of its neighbours.

    This defeats the whole point of OOP. And its sadly typical of what newbie programmers do because in the rush to get people skilled up, many programming courses nowadays are nothing more than an idiot's guide to some particular language's syntax. most usually C++. Unfortunately C++ is the worst possible language to learn first because, while it is incredibly powerful in the hands of a master, it provides so little to encourage neophytes to develop good habits. As a direct result of this most of the C++ code in the world is worthless crap; and a large and increasing proportion of "enterprise resource" object oriented software development is now being done in Java in an attempt to avoid similar problems.

    So for the same reasons when you do move onto OOP, you will go further faster if you begin with a relatively strict OO languate like Smalltalk, Java or Eiffel. Failing that go for some form of Object Pascal (like Delphi) or Objective C. Try to stay well away from C++ until everything you write comes out object oriented just because you can't help it. You will know that day has come when you are writing something in plain ANSI C and lo and behold you suddenly realise that what you just wrote was almost completely object oriented and the last several days of tweaking were spent in an instinctive struggle to simulate things like inheritance and polymorphism just to make it perfect.

    By this point you should have developed a rational style and learned to write code other professionals will find acceptable.

    Then, only then, a Jedi will you be :o)

    Of course in the real world (i.e. out of school) it's impossible to follow such a long term battle plan without at least some significant diversions. But if you do manage at least to keep the above in mind as an ideal progression, stay reasonably close to it and avoid rushing straight into C++ you'll wind up a better programmer than those who don't.
  • by Anonymous Coward
    Programming does not involve the higher mental faculties. It's a lot of drudgery. The reward of doing it is a feeling of satisfaction at completing a hard task. Mathematics and Physics give you a different kind of reward: one of finding or inventing something beautiful. Doing something good in Math or Physics requires giant leaps; programming requires lots of tiny steps. The result is that most programmers are not very smart people; they rely on hard work mostly. So, don't be intimidated by them. So, if you want to program, just give it a shot; you'll likely succeed; but if you're really smart do something else. -C
  • by Anonymous Coward
    I would start working with the Mozilla source code, here is your first assignment. Create a 3d UI for mozilla, you could take the Quake 1 source code and incorporate it into the browser for the 3d UI. This should be pretty easy if you know C++.
  • by Anonymous Coward on Thursday December 07, 2000 @02:43PM (#574398)
    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
  • by mfh ( 56 ) on Thursday December 07, 2000 @03:16PM (#574399) Homepage Journal
    A couple years ago (I'm a senior in high school right now as well), I had taught myself to program and was itching to write something. I was also eager to help others, but also realized that it would be great if I could start a couple of projects myself.

    I released some small Perl utilities first. Pilot2pine, my first creation, used the pilot-libs package to grab the address list from a palm pilot and converted it into a Pine e-mail addressbook. Very useful :)

    I also wrote a few more fairly interesting Perl scripts. I posted them to freshmeat, where they were received quite warmly. This was back when freshmeat wasn't swamped with 139485719834751984 different projects.

    After writing some Perl tidbits, I decided to get my feet wet with C (my feet are still pretty damn dry) and started work on GDict - perhaps you've heard of it. At the time, a friend of mine had a small console application that looked up user-specified words on the MIT dictionary server.

    I used this as a base to learn the GTK widget set. I wrote a front-end, gave it some buttons, etc, and released it, bugs and all, (it really was some pretty shitty code) to the world, where it received a fair amount of use.

    A few months later people started submitting patches. To me! The project got better and better, until someone eventually started working on the thing more than I did (as you can imagine, school got more and more time-consuming. Homework bites.)

    So I passed the project along to the new developers (http://gdict.dhs.org) and they extended it into an awesome little app with full GNOME functionality and stuff like that. It was eventually integrated into the GNOME desktop distribution and is bundled with every distribution that comes with GNOME. Pretty damn cool, huh? I still get positive feedback on the project today, even though I don't actively participate in it (school again!)

    A funny story: my coworkers (who didn't know I started the little project) were using GDict one day and they were telling me how great it is. Apparently they use it all the time! I clicked on the About... box and they were pretty shocked to see my name listed in the credits (in pretty big font, too!) :) Good water-cooler anecdotes.

    Writing GPL stuff is a pretty fun. And it gives some good stuff to put on your college applications!




    - Mike Hughes
  • integrate StarOffice, Apache, and Perl into Mozilla. Immagine the possibilities!
  • by Adam Wiggins ( 349 ) on Thursday December 07, 2000 @07:17PM (#574401) Homepage
    Rather than starting a new project (which, in most cases, is just going to duplicate other effort), find a small to medium size project with relatively uncomplicated functionality. For example: an ICQ client, a news reader, or a configuration editor. Use it for a while and see what it needs in terms of making it more useful and more pleasant to use. Then try to add that.

    Perhaps the simplest thing is bugfixes. Bang on an app with a 1.0 version for a while until you get something funny to happen. Duplicate it. Now do it from a debugger and start hacking.

    This kind of work is both easy to get into, and probably the most useful thing you can do for the open source community as a whole. We've got lots of very nice apps which need "just" a few more tweaks and improvements to be really slick. But of course, that last 5% is often the hardest part...
  • Where ever the project group hangs out:) The QuakeForge group hangs out in #quakeforge on irc.openprojects.net.

    Bill - aka taniwha
    --

  • by Bill Currie ( 487 ) on Thursday December 07, 2000 @02:17PM (#574403) Homepage
    Yes, this sort of thing seems to work well. I'm with the QuakeForge [quakeforge.net] 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
    --

  • Most folks don't use IDEs in Unixland because we don't call them IDEs. We call them "programmer's editors", and they fill the same task. Not that there aren't IDEs here, but they haven't really caught on.

    Check out emacs and vim. No, don't glance at them -- really look at them. Both use syntax highlighting, and emacs has click-on-the-error-to-go-it. Emacs has integrated GDB support (not 'just launching' it, but following through the code, etc). If that's not enough, there are several (I can think of three off the top of my head) graphical frontends to gdb available with the features you mention.

    As for the 'good error reference'... hrm? what kind of reference? A null pointer dereference is a null pointer dereference no matter what platform you're on. Would you mind being a tad more explicit about what kind of thing it is you need?
  • I would say go the other way. Write some assembly programs, write more C. Then write some ML or LISP, prolog, smalltalk or something truly high level

    > Try to stay well away from C++ until everything you write comes out object oriented just because you can't help it

    Fuck that. I can't think of worse advice. Stay away from C++ if you like - it *is* complicated, but OO is no panacea. In fact the main reason why there are still no good Java applications is that it forces everything to be OO.
  • Get involved by digging into the source code, then writing about what it does. Programmers desperately need detail about the tools they use, regardless of the platform they work on. Writing summaries of functions and data structures is an excellent way of contributing to both the community and an individual project.
  • by kdoherty ( 2232 ) on Thursday December 07, 2000 @03:00PM (#574407)
    As has been pointed out, contributing code immediately is probably not the best step. Support, documentation, etc. are all fine, but if you're interested in contributing code, I think your best bet is to really examine the existing codebase first.

    For instance, I gained a lot of understanding of UNIX systems programming through reading the CircleMUD codebase. That isn't to say I necessarily write code the same way, but that I learned a lot by examining the code and just evaluating the solutions to various problems and what other possible solutions there might be. It was a simple matter of just picking a file, and reading it. Understand the functions there, where they're called elsewhere, etc..

    While I haven't contributed back to it, beyond a third party feature patch, (and CircleMUD, being based off of DIKU, isn't open source), I found that I gained a much better understanding of the code and was far more capable of making my own modifications.

    By doing this, you'll become familiar with the style used in that codebase, and be better equipped to contribute when you see a bug that needs fixing or a feature that should be implemented.


    --
    Kevin Doherty
    kdoherty+slashdot@jurai.net
  • by linuxci ( 3530 ) on Thursday December 07, 2000 @01:42PM (#574408)
    I have to agree that the Mozilla [mozilla.org] 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 [mozdev.org] 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 [sourceforge.net] and look for a smaller open source project you can help out with.

  • The FreeBSD project is always looking for developers, depending on your interest/skill level you can be involved in many things dealing with the project.

    You can port applications to FreeBSD, this gives you a chance to collaborate with other open source projects.

    You could wind up working on the base system, a niche project (PicoBSD, TrustedBSD, etc) or the kernel.

    Or you could write and correct documentation in the system and the website.

    Best of luck,
  • 2. An IDE that uses both syntax highlighting and that will jump to errors by clicking on them.

    What's GNU/Emacs do? I suggest you review the tools more closely.

  • The main problem with IDEs in Windows is that once you create a project using one of them, you're pretty much limited to just using that IDE, or shifting the project wholesale to another IDE. In OSS land, that would never work, you would limit your target developer audience to the fans of that particular IDE. IMO, OSS projects need to be equally accessible to VI, EMACS, KDevelop, etc. users.
  • by maggard ( 5579 ) <michael@michaelmaggard.com> on Thursday December 07, 2000 @01:49PM (#574412) Homepage Journal
    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.
  • by John Whitley ( 6067 ) on Thursday December 07, 2000 @02:10PM (#574413) Homepage
    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.]
  • by MikeV ( 7307 ) on Thursday December 07, 2000 @01:51PM (#574414)
    Find a project that you like. Read the code. Use the app. Play with it and tinker. Find something in the application that YOU would like to use yourself. Write it. Improve it. If it works for you, submit a patch to the maintainer. Don't feel hurt if it doesn't make it into the distro. Write something else - use it, improve it, submit it. Don't feel hurt if it doesn't make it into the distro and so forth. While you're doing all this writing, you're getting experience even if it's never used in the official release. Additionally, take a poke at the TODO list and challenge yourself. When you finally do get something included in the distro of whatever OSS project you've selected, it'll be worth it - you'll have written a lot of code, gotten a lot of experience, learned how to work with a distributed team of writers and hopefully had a blast doing it...

    Mike
  • by kzinti ( 9651 ) on Thursday December 07, 2000 @02:47PM (#574415) Homepage Journal
    Find your itch and then scratch it.

    Is there some open-source program you use that you think could be better? Or it works well, but you'd like it better if it had this one new feature? Or it's got this one really annoying bug?

    Those are all opportunities to get involved. Improve the program, add the feature, or fix the bug. Start with small improvements, features, and bugs, and then work your way up. Before you know it, you'll be starting your own project and people will be coming to offering help.

    Look for these opportunities, they're everywhere.

    --Jim
  • IMHO The best way to get experience in writing software and in practicle programming is to write as much code as possible that you CARE about. Writing code for a project that you are not interested in will leave you bored and unwilling to finish. Think of a little utility that you are always saying "I wish I had a program that did X" and then write a program that does X. Maybe you want something that renames all your MP3s to their ID3 tags, or maybe you want a little program that reminds you when your girlfriends birthday is by sending you an e-mail. These things have all been done before, but by finding an "itch" and scratching it you gain experience and something new to add to the list on Freshmeat :)
    If you can't think of something that you really need, then go to Sourceforge and find something that you are interested in. Or, think of a program you currently use that is not longer being maintained or that doesn't have a feature you need. Maintain it, or add it!
    The massive amount of source for Linux can seem overwhelming, but if you can get it to compile you can start making small changes here and there and you are getting experience.
    Enjoy programming and you will excel at it!
  • I guess you haven't played with the quake1 sourcecode or opengl. If you wanted a 3d UI for mozilla, it would be best done via straight opengl. It would be pointless to tie it to quake, quake1 wasn't even written for opengl, which is it's major downfall. Mozilla is huge anyhow, I'd recommend playing with something really small.. I've done some development on Quakeforge, and although we have a lot of contributors... it isn't a bad idea to start even smaller if you don't think you can handle it.

    Recently to better aquaint myself with OSS (sound) I took libosd for onscreen displays and wrote a small programm that used it to change the sound volume. Programs that provide api's for plugins is a GREAT way to write from scratch solid programs that are also contributing to a larger goal. We could always use new XMMS plugins, etc..

    One of my earlier works was an importer for LW object files into a Slideshow presenter called Achtung!. We could always use more gimp filters too.

    Seriously consider plugins as a good way in, it will help you become familiar with the rest of the project. Once you are familiar with the rest of the project, you have now learned how to work with these larger opensource applicaitons.

  • Problem number one is figuring out how large projects are organized and compiled.

    If you are unexperienced, it is probably best to finish learning the language. If it's C++, make sure you fully understand how to use classes.. all the way up to templates, because then the source code for a program is actually going to make sense. I don't know any other language as well, but most large projects are going to take full advantage of all the abstraction available in the language.. you've got to know it backwards and forwards as well as whoever wrote the code.

    After that, find a project that suits your skill level and just spend a lot of time reading the code. When you come across something you don't understand, look it up. I've spent a few weeks just reading the source code for icewm and dfm, and I've learned quite a lot.
  • by Detritus ( 11846 ) on Thursday December 07, 2000 @08:29PM (#574419) Homepage
    I learned a lot about programming by porting other people's programs to currently unsupported machines and operating systems. If you are really ambitious, get yourself something unusual like an Alpha. It's a great way to learn how to write portable code (No, the world is not a VAX) and you can learn many things that aren't in textbooks by reading other people's source code.

  • wget ftp://ftp.envy.com/pub/mud/servers/Envy_22.tar.gz


    -dk
  • by ShinGouki ( 12500 ) on Thursday December 07, 2000 @02:27PM (#574421) Homepage
    it may sound silly, but try coding on a mud to start out. my personal experience was with the envy and merc types. the code is generally clear and modular and simple so it's fairly easy to drop in commands, new features, etc. (just about everyone either does work with the color code or messes with writing a bank their first time out...i did ;P)

    and it's fairly easy to see the immediate results of your code in the game state


    -dk
  • I feel your sentiment exactly. Opensource is both very rewarding, and intimidating at the same time. I am a converted NT admin/user. Got hooked on SGI machines :) My first thought when I looked at Open Source was 'what a fraggin mess!'. How could anybody even size up a few projects, let alone code something for them. Here is my progress so far.

    1. Got a Unix machine (indy) and installed Linux on an older PC.

    2. Set up the build environment on both machines, and started to compile stuff. Learned a lot on this, and have even helped a few people so far with IRIX binaries of xmame. This experience gave me the general structure and practices of a working project. BTW building xmame was an excellent start for me. There were just enough issues on IRIX that I learned a lot about the build process. The added advantage was that I got to play some nice games when I was done.

    3. Having made sure that the development environment was set up properly, I began to code small things. Literally went to the net and typed into google 'c programming language tutorial'. This worked very well. Since I can build most things, debugging my own small pieces of code was pretty painless as I understood the difference between a build problem, and a coding problem.

    4. Now I am working on something that I like. It fits many of the criteria mentioned above. (ie. scratches an itch, is small, is fun.) My first project was to build an STL (cad design) file viewer using opengl. This I completed on the SGI as that is where I started learning things. Learning OpenGL worked the same as learning C. Typed in the need for tutorials into google, and followed the links from there.

    5. Project is basically done. Now comes more learning. Building it on different platforms. This is where the real value is in this process. You get to see how people write things, and what they link against. Some structures and methods are portable, and some are not. My next build of the project was for win32. I was pleasntly surprised to find that my code only had two issues. Changed the code to work on both platforms, and moved on. I am working through Linux now as I have a machine that can do 3D.

    To sum this up I am doing what I like, and learning way more than I would by trudging through books and tutorials without any goals. Just to cite one more example. I like Nedit. It has some nice features on the Linux distribution, and one of those is syntax highlighting. Well the guys at SGI disabled those features when they included it as part of IRIX. Learning to build things got those back. Seems like a small thing, but there is a *lot* of power in that. Worth doing, good luck.

  • I'd be glad to discuss this at greater length offline (mike.chermside@destiny.com), but I think I can defend chazR's position.

    Here are a few quick points:

    • C is a language which was designed for building an operating system. It is highly specialized for that job. Here are some resulting oddities:
      • Numeric types of different sizes.
      • The sizes of the numeric types vary from machine to machine.
      • operators like >> and <<<
    • C is a very old language. Language design has improved ENORMOUSLY since it was invented. Here are a few features that more modern languages have:
      • Constants.
      • Strings.
      • Lists, Maps, and other super-common data structures built in.
      • Object orientation.
      • Units, aka packages.
      • Garbage collection.
      • Exceptions.
      • Built-in threading primatives.
    • C is a risky language. It it easy to make mistakes, and it encourages bad programming style. Here are some examples:
      • = vs == (nuff said)
      • Functions that return a "special code" to indicate errors (eg: -1 => EOF)
      • Use of global variables.
      • Use of global functions.
      • Separation of data structures and code.

    I should also mention some of C's good points:

    • Simple, straightforward language.
    • Possible to write very efficient code.
    • Vast librarys of existing code.
    • Widely known and used.
    • World's Most Portable Language!

    Please don't read this wrong... LOTS of EXCELLENT code is written in C. And I wouldn't dream of getting rid of C... it is, for instance, a great language for compilers to OUTPUT. But if I had a choice, I'd rather not program in it.

    -- Michael Chermside

  • when you're good enough, you'll just write the stuf.. as long as you don't join the dark side, you'll be fine. In the mean time, learn at your own rate. A few tips about open source :

    1) it's almost all object-orientated C. The best way to learn this is to get half-good at C++, then drop back down to C (C++ teaches proper classes.. once you understand it, you can just "pretend" with structs and intelligent naming of functions (and void*)). You may just prefer to stay with C++.. no problem, but appreciate that you'll piss off the purists :-)

    2) ALWAYS be ready to change what you don't like. The whole point of open source is that you can scratch that itch. Don't be afraid to search for that itch in several million lines of code. If the code is so badly written that you can't find that itch, then it's the fault of the programmers, not you.

    3) Never give up.

    4) Stay cool :-)
  • can't moderate above 5, but it's a great point.
    One more thing - don't feel you HAVE to get involved.. open source is for free, from the developers to you lot. We're not saying "here's some code, so give us something back". We're just saying "here's some code". (full stop) I used to feel guilty about using linux but not writing much code. Now I write loads of code and don't care what my users give back! As long as I've made a few people happy, my project has done well, and that's why I did it!

  • Speaking as the leader on an open source project of my own (ColdSync [ooblick.com]), one of the things you might want to do after you submit a change to a project is to take a look at the next release and see what happened to your submission.

    While I accept patches from all sorts of people, they rarely make it into the source as-is: I do exercise editorial control. A lot of times, the patch I receive will omit something like error-checking, or else it doesn't quite fit in with what I'm planning to do with the code.

    Sometimes I get submissions from newbies with good ideas, bot who make some mistakes. When I find these, I either try to fix them, or at least add an XXX comment to the code.

    In any case, of course, the submitter gets full credit for the patch.

  • Anyone who claims that the source code is enough documentation for any programmer is really fooling himself and doing more harm than good. If I had a choice between source code and documentation, I would pick source code, because at least it's possible to glean the documentaion from the source, but not the other way around.
    I heartily agree with the first part. I'm not sure about the second: given a good description of what the code is supposed to do, it's usually fairly easy to write the actual code.

    One problem with programming classes is that they teach you to write code that compiles, but they don't teach you how to comment. Here are some of the habits I've picked up regarding comments:

    • Start by writing the comments. Say what the code is going to do. Read your comments. Make sure you're doing the right thing.
    • If there's something that needs to be done to the code, but not just yet, or you're not sure how to do it, add an XXX or FIXME comment, e.g.:
      mybuf = malloc(1024);

      /* XXX - Add error-checking */

      You can find the "XXX" or "FIXME" comments with grep. If you don't put them in now, you'll never remember to fix the problem later.

    • When you're adding a new function, add a descriptive comment at the top, even if you're in a hurry. This comment should list, at least:
      • The range of acceptable inputs (if the function takes a char *, is it okay to give it a NULL? What about a non-NULL, but empty, string?)
      • What the function does when all goes well.
      • What the function does when there's an error.
      • What assumptions the function makes.
      It's amazing how many problems you can avoid this way.
    • Perhaps most importantly: we can all read your source and see what the code does. Your comments should say what it should do. This also serves as an error-correction mechanism: if the code and the comments don't agree, then there's obviously a problem.
    • Finally, write the sorts of comments you wish the code had. You'll make the next person to read the code happy. As likely as not, that person will be you.
  • You can write something new.

    I think 1010011010's point was that plugins are new code, but NOT a new PROJECT. A newbie can create something new without the huge investment of creating a new project (such as makefiles, docs, mailing lists). Someone writing a plugin (such as an Apache or Linux module) has lots of example code and an existing community with which to learn and share.

    Open source projects like Apache and Linux have blossomed specifically because they have a plugin architecture. I like to call this a "Christmas tree" architecture because new features the original designers never dreamt of can be added to the project, like hanging ornaments on a Christmas tree. ;-)


  • You can always contribute to what is missing. So what's missing? Lots of stuff in the average OSS/FS project. That stuff may not be coding, however, but so what? Get your name known to the developers by doing some of the unglamorous stuff while you learn the code base better.

    Documentation. If you have decent language skills and half a brain, write handbooks, reference manuals, tutorials, etc. Follow the guidelines of the LDP (or the appropriate project) to ensure consistency. And don't ignore API documentation.

    Testing. It's absolutely asinine that the majority of projects dump untested code onto the end user. You, as an individual, can put a stop to this insidious practice. Start testing the code while it's in a prerelease state. Go over the bug logs and verify that old bugs are still gone in newer builds. If there's any sort of design/req/spec documents, test against those. And submit full, clear and complete defect reports.

    Process. All too often the hacker leaves the principles of proper software engineering at work. If you see a project without any formal design or architecture, create some. Ditto for requirements and specifications. You will have to be very tactful with the project members on this issue though. But most developers worthy of the name will welcome your help in this area. You will have to know the code pretty well to do this.

    Example code. All libraries and a few applications need example code. All to often they are missing or what they have is cheesy. Write some decent sample code for the project. And write a decent template while you're at it.

    The ideas abound. Just use your brain and you'll think of something.
  • by magic ( 19621 ) on Thursday December 07, 2000 @01:47PM (#574430) Homepage
    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 [sourceforge.net] to find a project appropriate to your skill level.

    -m

  • Or how about another IRC client? The world desperately needs more ICQ clients, too. Maybe you should work on a MUD? Also, there is a desperate lack of alpha release "slashdot style" web board engines on sourceforge...

    I spent some time flipping around sourceforge looking for a project to help me get some practice with PHP, and my query came back with 600+ hits for projects implemented in PHP. There are a *lot* of projects covering the same ground. How many PHP-based online scheduler/calendars are there on sourceforge? I guess that's not totally a bad thing, but it does make it harder for me to pick which one to work on.

    Hey, anyone working on something nifty on PHP and looking for some not very expert help?
  • by pbkg ( 24307 ) on Thursday December 07, 2000 @02:19PM (#574432)
    Advogato has a good discussion [advogato.org] on this. One of the good links from this was Bazaar [csustan.edu], in the sense of the cathedral and the bazaar, where there is a list of other peoples itches.

    I guess the one major hurdle is getting a understanding of the code, because one program where I found an annoying bug, I downloaded the source, and there wasn't a single comment in the code relating to what was being done. I couldn't for the life of me figure out where to look for this bug, so I couldn't do anything about it. It doesn't matter it bugs are shallow if the water is muddy. See ESR's cathedral and the bazaar to put the last comment in context (yes, I just read it fully again).
  • by dmorin ( 25609 ) <dmorin@@@gmail...com> on Thursday December 07, 2000 @03:56PM (#574433) Homepage Journal
    This question comes up alot. The steps seem simple enough:
    1. Find a project you're interested in.
    2. Download the source.
    3. Compile and run it.
    4. Find something that needs changing, be it a bug or feature.
    5. Change/fix it.
    6. Email the maintainers saying "Hi, I'm new at this, but I downloaded your project and saw a bug, so I fixed it. Here's the source."
    7. Be amazed as maintainers write back to you saying "Wow! Thanks!"
    Presto, you're an open source programmer.

    That last bit will likely fail in one of three cases. Either you decide right off the bat to tackle one of the biggest projects out there (like Wine or Gnome or something) and you simply get lost in the shuffle, OR you pick a dead project whose maintainers are bored with it, or else the people running the project don't really have the spirit and don't want your help, they want all the glory for themselves.

    Kindly do NOT fall into the trap of "Hmm, I want glory and fame right away, so I'll start my own project and then whine when nobody helps me." Not everybody can be the chief, somebody has to be the indians. Show that you're a real team player with some real integrity and desire to see the goals of open source succeed -- join a team. If it's the right kind of team you'll be welcomed right away. There's really nothing that magic about it.

  • by Pengo ( 28814 ) on Thursday December 07, 2000 @02:25PM (#574434) Journal

    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.




    --------------------
  • Don't put words in his mouth. He claimed only to have taught himself these languages, and openly admits to being inexperienced.

    Because these statements come so closely together, if you manage to misconstrue them you either have a chip on your shoulder or a sack of shit on your neck.
  • I was like Daniel coming out of High school. I taught myself several languages, but had almost zero experience. I tried to get into driver programming for some amateur radio equipment and had little success in actually writing the code. What I did get out of that experience was a better understanding of how drivers worked. The documentation for the drivers that somebody else eventually wrote were lacking beyond belief, and I found a void that I understood well enough to put into text. Mind you, I am no English major... While I can generally put the technical stuff onto paper, I have to rely on somebody to proof read for me... (read; my wife). The whole idea here is that there is more to the open source project than just the code. The Documentation is just as needed, and maybe what you are good at.
  • With respect, /SNIP/

    Good God... What is this, a college Dissertation?

    1. Program
    2. Have fun!

    If you happen to write something someone can use, then it is a bonus, and you feel good!

  • by Kohath ( 38547 ) on Thursday December 07, 2000 @01:35PM (#574438)
    Find a project you care about, find a bug to fix and fix it, or find a feature to add and add it.

    Just do it. There's no substitute.

  • by chazR ( 41002 ) on Thursday December 07, 2000 @03:08PM (#574439) Homepage
    A few of us (me, thoric, kraken) on irc.openprojects.net/#slashdot decided (in a moment of drunken stupidity) it would be fun to give SameGnome two-player network functionality. So, we nearly did it. (It works, but has some ugly bits. And making sockets stuff cross-platform is a nightmare.).

    I learnt three things:

    I *still* really hate C as a GUI application language

    Miguel de Icaza is a *really* nice bloke (he answered an email - I was *so* happy)

    If you unfamiliar with a platform/language/API, read the code of the masters. SameGnome was written by people who *think* gtk+. Best practice examples were there for the stealing.

    Summary:

    Read code by Linus, Alan, Miguel, David Faure[I used to work with David - he coded an XML parser in PL/SQL - 'nuff respect], Ted T'so. And weep until you can at least aspire to that level of purity.

    Hack on the code for fun. Get friends to join in. That's why you were given the source.

    Never code in C. [I feel strongly about this ;-)]

    We achieved a lot. We added several dialogs, a neatly encapsulated network layer, completely re-engineered the 'player' logic (we moved an inherently one-player game to two players - adding more would now be trivial). We had some fun. Do it.

    Share and enjoy.

  • One of the things a good C/S education (from college, usually) can do is help you side-step /many/ of the common newbie errors, and expose you to about many of the elegant ideas that Very Smart People have come up with over the last fifty or so years. Writing code is an artistic endevaour, but whether you use photoshop (vb) or mix your own paints (assembler) knowing about perspective (efficient algorithms) is going to help you.

    -_Quinn
  • I'd like to point something out to you that you may not realize, and I'll use me as an example. People can know a language inside and out, and have no 'real' experience useful for getting a job.


    For instance, I recently had a code challenge handed to me. It was to read a bit of C code with quadruply indirected pointers. I did it. what's more, I did it without a debugger or even pencil and paper. But I can't get a job programming. Why? No real experience. In other words, since nobody has paid me to code for them, I don't have experience in coding.


    Without speaking for the requester, he may very well be in the same boat. He might be able to code circles around other people. But without having been paid for it, it's very difficult to find a job doing.

  • by devphil ( 51341 ) on Thursday December 07, 2000 @02:44PM (#574442) Homepage


    Offering to help document a project is one of the best thing you can do. Correcting comments, or writing a small web page (basic HTML takes about as much effort and intelligence as personal hygiene), even if that web page won't be viewed over the web but shipped as local documentation instead -- it's all helpful.

    And, in the process of reading the code or observing the behavior or seeing what bug reports come in, you'll learn a huge amount about the project, and probably discover bugs at the same time. (Nothing gets outdated faster than code comments.)

    Keep in mind that documentation doesn't always have to be for the end user. You could just start keeping some notes, and offer them as docs for developers for that project. Those can easily be of more use than docs for the end user, because it makes joining the project easier for future newbies like yourself.

    As somebody who writes such documentation, lemme tell ya, it's a good way to get involved in coding. (Now I have no time to write documentation...)

  • You could always find a project of some interest to you that takes plugins, and write a plugin.

    You can document something.

    You can write something new.



    ________________________________________
  • You remind me a lot of myself a year or two ago. I'm in college now studying cs, but I got a headstart because I've been coding for awhile. I found myself in the position you were in awhile back.

    The best suggestion I can make is this: You need experience in how one goes about creating and working with a large project. You need to know how one develops something so that it fulfills the multitude of functions that make it a large project, yet does it elegantly and efficiently enough that it's modifiable and understandable to new users. At the time when I wanted to get into larger things than yet another tic-tac-toe clone, I was playing around with MUSH (multi-user shared hallucination, a derivative of MUD). I knew the functionality and use of the system intimately, which is a definite plus. It's important to really understand everything that a system does before you dive in and read its code. From there, you can go on a "this is how they did this part" basis, and learn your way through the code. I suggest keeping notes so you remember what parts do what. The important part here is to read all the code you can get your hands on, modify it if you want so that you can see if you really understand what does what, but most importantly, read read read. It'll make you develop your own opinions and theories on large project management, at which point you should feel ready to get into larger projects.

    At this point, however, I'm nowhere near ready to tackle the linux kernel or mozilla ;)

    And another sidenote: don't learn on MUSH. The codebase has forked so many times and remerged and reforked and I think even spooned a few times. *shudders*
  • The newbe has something in common with the burnt out oldie:

    Overcomming programmers block (slashdot article) [slashdot.org]

    Speaking as a burnt out oldie, I have tried to get my skills up to speed by getting involved in a startup (which has open sourced its main project so far) in my spare time. Maybe I just do not have the energy, time and comitment anymore.

    My main job just seems like a huge rut with no mentors, or peers in my own small area. My problems are complicated by being manic depressive, but I probably dwell/whinge about that too much. Ok so maybe I should get out more into the local linux or unix user group, (or help some newbies) to find people to sap their enthusiasm like a modern day vampire.

  • 1) Go to sourceforge.net
    2) Find a project that looks interesting, that isn't too hot, isn't too cold, isn't too hard, isn't too soft, isn't too tall, isn't too short, but juuuuuust right.
    3) See if they need help coding or would be willing to take comments.
    4) Look at the code and add your contributions.
    5) Grow young Skywalker, Grow.

    --
    In any sufficiently large group of people most are idiots.

  • This is a GOOD point! The most valuable thing that you may learn is how to work well with others on a project. Working on a medium-to-large size project with 30+ programmers is VERY different than what you're probably used to. There are many factors which you probably haven't been exposed to that are of paramount importance in the "Real World." You should try to get as much of this experience as possible before you hit the job market. Employers look for this sort of thing!

    In short: Don't be afraid to work with larger teams on bigger projects; this is good experience for the future!
  • SourceForge currently has a Help Wanted page [sourceforge.net] with 61 projects looking for developers of all skill levels. Skill requirements include PHP, Perl, C, Java, C++, MySQL, etc.

    Check it out!
  • by DanMcS ( 68838 ) on Thursday December 07, 2000 @02:01PM (#574449)
    Having learned enough C, C++, and perl to at least read most code (and thus be dangerous), I went through the software I was actually using, and whose code looked comprehendable to me. Psh [focusresearch.com] for one, Xfce [xfce.org] for another. Signed up for the dev lists, looked at what they were working on. Downloaded the source to xfce, fiddled with it, broke it, downloaded it again & backed it up this time, messed with some of the smaller features until I found one I thought I could improve. Emailed the project guy, who was very nice, and told me how to get code to him. Borrowed my roommate's GTK book, hacked on it until it worked, and sent the modified source in. My name is in the changelog now :)

    So basically, look at the stuff you use, on your system, and see which parts you might want to change. Then do it, and if your changes work out, see if the maintainers are interested in them. My change was probably under 50 lines of code, and there was a bug in it when I submitted it, but it's how you get started.
    --
  • If there is a project you like, but the code is to large and complex, chances are there is whole bunch of people in the same situation. So it may be useful to document the code, api, internals or whatever. Pick a small piece of the code, go through it, figure out what is going on and document it. Then continue with another piece. This way you will produce something very valuable, and chances are that somewhere in the middle, you may find a bug or a way to do things better.
  • I was about in your situation a few months ago (except probably younger, I'm still 15 :)). Anyway, you described me pretty well - self-taught, no formal training or experence, PERL/C/C++. All that. It's me.

    Anyway, once I got DSL KPPP wouldn't excactly work for bandwidth monitoring, so I went searching on Freshmeat and came across a nice little PERL script that took info from /proc/net/dev and printed it up. But the UI sucked. Anyway, I wanted to be able to just look over and understand it, so guess what I did? I wrote a new UI! I submitted it to the guy running the project, it was accepted, now I'm even mentioned in the credits.

    Anyway, that's my story of getting involved... may you have luck too.


    Grades, Social Life, Sleep... pick two.
  • by rkent ( 73434 ) <rkent@post.ha r v a r d . edu> on Thursday December 07, 2000 @01:49PM (#574452)
    You can write something new.

    Okay, I'm going to play the devil's advocate and say this probably isn't the best way to get started.

    However, that depends on your definition of "best." There's a lot you can learn from starting your own open source program from scratch, but the problem is, that's about the limit: there's a lot you will learn. In terms of contributing to open source as a whole, you might or might not get anything done.

    If you do have a great idea for something that just NEEDS to be written, at least check out Sourceforge first and try to make sure someone else hasn't started it yet. If there is someone else out there, great! Consider it a head start on the app of your dreams.

    On the other hand, if there's nothing in particular that "itches," then certainly don't start anything new. Flex your newfound programming muscle by finding an interesting program and add a feature (I would say "fix a bug," but I don't want to scare you away). I think my next thing, after I recompile my own kernel on my new machine, is going to be installing KDE2 and contributing to the mail client. I use the KDE1.1 kmail, and kind of hate some things about it.

    [ That said, I wouldn't really want to discourage someone from starting their own new project. Just be realistic about expecting it to make a difference in the community. Chances are your pet project is just that - yours. ]

  • by Zach Garner ( 74342 ) on Thursday December 07, 2000 @01:52PM (#574453)
    Dont go after high profile projects like Mozilla and the linux kernel for your first project. Those type of projects attract a large number of the best programmers, leaving few interesting jobs for the less experienced. If you do want to work on Mozilla, etc, it will be appreciated, i'm sure, but it will not be nearly as satisfying to you (well, thats my experience, at least)

    You should decided what you're interests really are. If you are more interested in games, there are plenty of games being developed that could use any help that can be gotten. If you are interested in AI, check sourceforge or Generation 5 [generation5.org] there's always something going on.

    You'll benifit from a smaller, less important project because the project leaders will be more willing to take you under their wing and help you smooth out your programming skills. There's also the equivalent of a small fish in a big pond, or a big fish in a small pond... you'll be more vital to a smaller project than say Crystal Space or, especially, kernel work.
  • by berteag00 ( 78331 ) on Thursday December 07, 2000 @01:59PM (#574454)
    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.
  • If a program requires that the NEW user refer to the manual constantly, it might be because it is very easy for the experienced user.

    The GIMP would need no manual for NEW users if it just brought up a dialogue asking what file they want to apply the whirl filter to, and then took them to the whirl filter with pinch disabled, then saved it as a BMP and a GIF.

    Diablo II doesn't need much of a manual, because there is only one goal, and the game knows in advance what the goal is. It is much more difficult to provide "feedback" or an "intuitive interface" for, say, the GIMP. Making it too easy to use would intrude on the experienced user.

    Don't believe me? Feel free to implement your changes. I'd love to try them out.
  • It's definitely a good idea to look for a small project to get involved in.

    Personall, I think the free software community is very elitist. So, probably the only way to get in on something is to get in on something small. Also, realize that at first, you'll probably be fixing bugs for a long time. That's how I got statted at my first proramming job and its a good way to familiarize yourself with the code and catch on to the other programmer's coding styles.

    When I was working on Canvas for linux, we tried numerous times to contribute our source back to the WINE community and were rejected numerous times. And I was contributing not only my changes, but changes for my co-workers who have 10 years of coding experience. We submitted our patches as diffs, to the mailing list, and directly to the WINE programmers, but they were never merged into the main branch. And our changes definitely worked, we tested them, we have an entire testing department. Basically, we sent patches in for months that were never accepted.

    So, if I were you, I'd lok for a project that only has a few people working on it, who will really appreciate the help.

    I think this is really a problem for the free software movement. People need to have more of an activist attitude in trying to get the word out and trying to bring new programmers up to speed.

    I'm not looking for flames here, I just passionately care about free software and I've dedicated a lot of time and energy to making it work. I know of course lots and lots of people have, by creating all these wonderful pieces of free software we have. But I think that bringing new programmers onboard should be a high priority.

    ___________________________
    http://www.hyperpoem.net [hyperpoem.net]
  • New programmers can jump right in and help, that is not the problem. The real question MUST be: How can open source help those of us who are not at all interested in learning how to program, or even learning computer technology. We are totally lost in the computer language and must even resort to WYSIWYG HTML. Some, even, must let other do that for them, such as a legally blind friend who is a published poet, but who's eyesite is too poor to do the HTML.

    The question is: How can open source and programmers help bring the interent to all the citizans. Please note that the fastest growing segment of the internet is people OVER 50 years old, i.e., your parents and grandparents. Look to them for guidence, they will show you how you can best help. We old geezers did not have to learn how to be mechanics to drive our autos (except way back in the very beginning). We did not have to be radio/television engineers to listen to the radio or watch television. HEHE, for a while, we did have to be engineers for the VCR, though. No, don't ask how one can contribute to the open source, ask how open source can contribute to us. For us, the computer is a major investment, and for now, Microsoft Windows and MAC are the only viable operating systems. I am very sorry to say that the best is yet to come, for until we old, warn out grandma's and grandpa's from yesterday can use Linux INTUITIVELY, then open source will remain a toy of the programmers.
  • by LordNimon ( 85072 ) on Thursday December 07, 2000 @02:07PM (#574458)
    Others here have said it, but I want to echo the sentiment. The #1 problem with most open source projects is the lack of documentation of the source code itself!

    This is especially true for projects that export an API, like the Linux kernel. Practically every other OS comes with documentation (in many cases, in print) that describes all the APIs, structures, constants, and so on, so that the programmer can know what's available to him and how it's supposed to work.

    Anyone who claims that the source code is enough documentation for any programmer is really fooling himself and doing more harm than good. If I had a choice between source code and documentation, I would pick source code, because at least it's possible to glean the documentaion from the source, but not the other way around. However, why should I have to choose?

    By providing documenation, you do the following:

    • Learn about the project without inadvertently adding "bad code".
    • Improve your own skills by carefully studying what more experienced programmers have done.
    • Provide a valuable service that other programmers are either unable or unwilling to provide

    One caveat, though: check your English! Most programmers have horrible language abilities (which I think is really ironic). Bad spelling, bad grammar, and just plain poor writing skills are a serious problem in the tech community. However, good writing skills can be incredibly useful for an engineer. You'd be surprised how much good it can do to be able to write something that other people want to read. I've heard plenty of stories of engineers who have taken writing classes, and then find out that their reports are the only ones that management bothers to read because the other engineers just can't write well! So perhaps we should add a fourth benefit:

    • You'll learn how to write better

    Frankly, I think it's a win-win situation for everyone.
    --

  • Really! Open source projects always need cash. Lots of cash. Preferably unmarked tens and twenties. You can send them to me and I'll be sure they get into the right hands.

    :^)
  • [ ( how much time you have to comit / how quickly you learn ) * how well you work with others ]

    That makes no sense - if that was the true, the faster you learn, the less you will get done. Something like this would be more accurate:

    [(time available * speed of learning) / ('barrier to entry': skills required to be useful)] * ability to work with others

  • Also check out kdevelop--you can tell it to use an external debugger if you want--I would also recommend DDD. (You can find both on freshmeat).
  • by xant ( 99438 ) on Thursday December 07, 2000 @01:55PM (#574462) Homepage
    Whatever you do, don't try to release another damn Linux distro. Like we need [sourceforge.net] another [sourceforge.net] one [sourceforge.net] of those [sourceforge.net].
    --
  • by Shagg ( 99693 ) on Thursday December 07, 2000 @01:43PM (#574463)
    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 [sourceforge.net] 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.

  • by OmegaDan ( 101255 ) on Thursday December 07, 2000 @01:46PM (#574464) Homepage
    I think before you can expect to make a signifigant contribution you might gain some experience by writing a few apps yourself? ... Pick something you think linux needs and code it

    I worked on a the "gentoo" distribution for awhile (www.gentoo.org), back when it was called "enoch", ... it was quite an experience to say the least ...

    ultimatley, your contribution will come down to this equation:

    [ ( how much time you have to comit / how quickly you learn ) * how well you work with others ]

  • by steveha ( 103154 ) on Thursday December 07, 2000 @02:06PM (#574465) Homepage
    In my experience, a software engineer will spend a lot more time modifying existing code than writing new code. And, if you are looking for experience, looking at other peoples' code will be helpful.

    Therefore I suggest you find some existing project and add some kind of new features to it. Don't pick a huge, complicated project like Mozilla; start small.

    As a concrete, specific suggestion: the Gnome version of Freecell [gnome.org] has, IMHO, ugly playing cards. There is no way to change them. On the other hand, the Same Gnome [gnome.org] game allows the user to load different images for the playing pieces. It might be a good project for you to study Freecell, study the Same Gnome code for loading images, and then modify Freecell to allow the user to load different playing card images.

    This is a project that will take a certain amount of studying, but it shouldn't take months of work. To some extent you would be able to cut-and-paste code from Same Gnome, but you would also have to modify it. When it is done you will have something you can show to even your non-techie friends! I'm not trying to tell you what to do, so if you don't like this suggestion do something else.

    By the way, if you look at the TODO [gnome.org] file in the Gnome Freecell sources, you will notice an item that says "Make card bitmaps library." In other words, my suggestion was already thought up by the people working on Freecell. You might want to look at the various projects and read the notes in each, and perhaps you will see something you really want to work on.

    By the way, I have to say I like your attitude. I hope you have lots of fun with this project.

    steveha

  • Find a job at www.dice.com, etc., that involves working on an open source project. Lie your way past the headhunters and say that of course you have X number of years working on "linux kernel" (just another tech buzzword they don't understand). In your interview concede that you know little or nothing, but show what a sharp youngster you are, and how very much you want to work on the Linux kernel. Say you're willing to be very flexible about pay.

    That's how I just got a job doing linux kernel development with a big linux vendor (in top 5 by boxes shipped). I start on Monday--I must say I'm a bit nervous, but very happy, too!
  • Heisenbug? ROFLMAO Thanks for that little gem. People will be hearing it around my office for sure.
  • Most of all stay away from jerks like the guy who posted this message.
  • by ChicagoFan ( 125489 ) on Thursday December 07, 2000 @02:27PM (#574470)
    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

  • by ostrich2 ( 128240 ) on Thursday December 07, 2000 @03:01PM (#574472)
    I've only been reading for a few minutes, but it looks like the overwhelming majority of people are saying to find a project you like and try to fix something. Or add a feature.

    I have a slightly different take: find yourself a project you like and make any change you like. Download the source, and read through it. Start by trying to add a button in a particular location that prints something on the command line, or something. Or make something display differently. The point here is just to become comfortable with how the particular program works. You'll begin to understand the code a little, and when you feel like it, you'll be ready to fix bugs or add features. But it seems to me that can't be the very first step, especially if you're new to open-source, and likely not very confident of your coding skills be begin with.

    I say to start, just break stuff and then try to fix it. Do that for a couple weeks or until you've delved into the code sufficiently to understand what it is you're breaking. Then, I think you'll be ready to take on some bugs and add some features.

    Just make sure you announce that you're still a novice. People are usually very willing to help beginnger.

  • by _underSCORE ( 128392 ) on Thursday December 07, 2000 @02:03PM (#574473) Homepage Journal
    I have to disagree.
    The maintainers of the project are most likely experienced coders, and will not accept a poor patch. The only way to get better at coding is practice, and documentation, while essential doesn't help one code better.
    I think it is better to submit code, and have it rejected then to only write documentation.
    Once your code is rejected, you can patch that, and after a while it will get accepted.
    just my 2 cents.
  • I was looking (anno 1996) for a 32 bit successor to Turbo Pascal. I downloaded the Free Pascal Compiler [freepascal.org] from a BBS (didn't have web access yet back then). The first time I did so, I didn't think it was very usable (it crashed more then compiling).

    The next time (in 1997), it was already a lot more usable, but the optimizer was basically non-existent. Since I liked tinkering with assembler, I started on the peephole optimizer, submitted some patches (by email) and after half a year or so I got CVS access. I've never regretted starting on it.

    BTW: this story also contains a quite valuable tip (imho) for people who want to start a (successful) open source project: make sure you are prepared to work on it alone for quite a while until it becomes usable. Only then most people will join in to help.

    --

  • by Ron Harwood ( 136613 ) <harwoodr@nOspaM.linux.ca> on Thursday December 07, 2000 @01:35PM (#574479) Homepage Journal
    Go to SourceForge [sourceforge.net] - 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.
  • Debug code. I had an English Professor tell me that you learn to write by reading.

    At least they would see working code and have to learn how it works.

  • improve the slashdot moderating system: this clearly insightful post has 4 "insightful" ratings and 1 "funny" rating and it gets score (4, Funny).

    a bug we need to fix?
  • by MattLesko ( 155081 ) on Thursday December 07, 2000 @01:53PM (#574487)
    I suggest that you don't start coding for a project right away. Despite what can be taught in books, you still won't write great code since you have so little real world experience. My suggestion? Find a project (should be tons of other sites mentions in comments) and try doing a non-coding aspect, such as documenting for a few months. You can gain an incredible amount of experience this way, and in all honesty, writing free software with bad code can be a very terrible thing. This isn't trying to be insulting, just suggesting that you not get too high and mighty simply because you've spent a lot of time ordering from FatBrain.

    You are more than the sum of what you consume.
  • On the other hand, you might consider that the implied attitude of "you have to learn everything before you can start by reading all these manuals" is somewhat akin to learning how to drive without ever having been behind a steering wheel. The actual process of writing code (new code, especially in an area nobody has explored before) is a creative process akin to art. It's not something you can learn solely from books and HOWTOs.

    That said, at least some basic engineering and testing standards would certainly help. Some of the big projects today are as bloated and buggy as anything Microsoft has ever put out, and it bothers me.

  • by MycroftXXX ( 156314 ) on Thursday December 07, 2000 @01:50PM (#574490)
    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.

  • I would only add one caveat. Everybody hates to see messages with subject lines of "Please help a newbie!".
  • by Spider-X ( 159360 ) on Thursday December 07, 2000 @01:39PM (#574493) Homepage
    I've had success in contributing to open source. Just find a small project, and look at the source. Use the product. Figure out what would make it better, look over the source again, and add in that feature, or fix that bug. Pat yourself on the back. Move on to bigger things.
  • by techmuse ( 160085 ) on Thursday December 07, 2000 @01:43PM (#574495)
    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. :)
  • (just the original questionner was). This is only speaking for myself (and I've had limited experience with open source projects) but I would expect that many people are willing and open to working with inexperienced programmers, as long as they know that's what they (the experienced ones) are getting into. It is extremely gratifying to know that you've helped someone learn more about a language or programming technique, or even about life in general, but just as frustrating when you expect someone is capable of performing some task (as he claims) but is not up to the job and you get back shoddy work.
  • The best thing to do IMHO is pick which language you are most confident with, find a small app written in that language which interests you, and see if you can understand the code. If you can, see if there are any features you could add on. If you can't understand the code, look for something else, or try a different language.

    And yes, the best way is to just jump in, heck this is the Internet, it's not like you have to walk up to a crowded room where the average IQ is over 200 and introduce yourself..
  • by Moderation abuser ( 184013 ) on Thursday December 07, 2000 @02:21PM (#574503)
    Open source doesn't work well with a 'what should I do/How should I contribute?' type situation.

    It works much better if *you* have a need for something. You need an IDE for development? Grab an OS one and add the features that *you* need, fix the bugs that it contains. You need a share dealing system? Grab one, add the features you need, fix the bugs.

    If you just try to 'contribute' random features to a random project, your contribution will not be as good as if you *need* those features.

  • by Decado ( 207907 ) on Thursday December 07, 2000 @01:44PM (#574507)

    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

  • If you are inexperienced then the best way you can contribute is by building your skill set and following some open source projects without contributing code. Wait until you're a little more seasoned before you jump onto someone elses project. The open source community needs good experienced coders more than anything else.

    Alternatively you could find or start a small open source project that has other inexperienced programmers.

    I'm now a well respected project leader but i dread to think of the contributions i would have made to a project when i was a high school hacker. Writing code is easy, writing good code is hard but writing maintainable code seems to only come with experience.
  • by abdulwahid ( 214915 ) on Thursday December 07, 2000 @02:03PM (#574510) Homepage
    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.
  • If you take the premise that good open source software starts with scratching an itch, then the first thing you have to do is figure out where you're itching.

    So:

    1) sit down, make a list of your itches
    2) find out if there's any open source projects out there that fit (freshmeat, sourceforge).
    3) pick one. Start _using_ it. Chances are you'll find an issue that you'll want to do something about, eventually. Chances are that before you're even done INSTALLING it, you'll find something you think could be done better. If nothing else, you can document it. With some research and some help, you may even be able come up with a fix yourself.

    I'll give you an example. LinuxPPC. I've installed it on some older model macintoshes, but I've had an iBook for 6 weeks and haven't got it to run on the iBook yet. This despite the documentation out there and the patient help of several people from comp.os.linux.ppc. It will take patience, but I'm going to get this, and by the time I'm done with this, I expect that I'll be able to write a half-decent HowTo that will be a contribution to the community. I'll also have some familiarity with kernel issues and open firmware and other stuff that may help me if I ever get an itch to contribute code.

    And if there is no project for your itch, well, then you get to strike out on your own. :) Good luck.

    --
  • by WindowsTroll ( 243509 ) on Thursday December 07, 2000 @02:20PM (#574515) Homepage
    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.
  • this is all very nice, but I feel much like the author of this question. I've actually worked on some fairly large projects (Robocup) and yet I feel it is not the easiest thing breaking into new realms like programming for xwindows and such. In my situation, I know quite a bit about C++ and C, but have no GUI experience. I'm currently creating an open source battle ship game that is highly scalable and configurable, but my biggest stumbling block is the GUI. I frankly don't know how to start looking and planning out the GUI, and while I have many questions, I'm not sure where I can ask them. Are there any good IRC channels or mailinglists people around here can recommend, for a programmer with a number of questions regarding GUI programming can post them? If it helps at all, I'm interested in using QT...
  • by flynt ( 248848 )
    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 someone who's worked on numerous open source projects and reviewed some too, I can say if they need anything, it is definitely more inexperienced programmers. It's just too hard to find them these days!

    On a serious note, think of something YOU want to do, and start out on it. Even if no one joins up to help you, you will then have this to your credit. The inspiration for a program needs to come from you though, good luck.
  • by slashbaby ( 261784 ) on Thursday December 07, 2000 @01:59PM (#574526)
    If you really want to help the open-source community grow, code winmodem support for linux

"And remember: Evil will always prevail, because Good is dumb." -- Spaceballs

Working...