Forgot your password?
typodupeerror
Programming IT Technology

Volunteer Programming For Dummies? 195

Posted by Soulskill
from the learning-the-ropes dept.
Tios writes "I've been studying programming languages (C++, Java, C, Visual Basic) on my own with the self-guided, basic textbooks and tutorials, and I'm starting to get tired of working with examples that are not put into real use. I'm motivated to utilize my programming potential, but I've not had any experience programming in a team environment with lead developers, mentors, or collaborators. If finding a programming job isn't an option, I wonder if I could volunteer for programming in an open-source community. If this is a good idea, how do I start? What resources are out there that could get me oriented in volunteering? What kind of basic projects are out there, with a supportive team/mentor for me to develop, practice, learn, and contribute?"
This discussion has been archived. No new comments can be posted.

Volunteer Programming For Dummies?

Comments Filter:
  • by sopssa (1498795) * <sopssa@email.com> on Tuesday July 07, 2009 @11:44AM (#28609041) Journal

    The best practice is just doing it. That's how me and probably many others have learned about programming. In 90's I did have some programming and game developing books, but I pretty much read about those out of curiousity and because they were interesting. Actual programming knowledge comes from making something you like and learning from it. Every time you will learn more and more and it just goes along the way. In my teenage years coding games made the most fun out of it and I always learned more. This was even before Internet started to be so widespread, and only help I had was Delphi's (great!) manual.

    Seems you only have experience in programming by examples. There's lots of times you need to be able to solve a specific problem, and programming by examples doesn't teach that really well. You will also be relying on someone's elses views and "best coding practices" thinking, instead of actually developing your own and seeing much further. You need to be comfortable programming and solving problems by yourself if you look to join a team.

    I suggest you take some topic that's interesting to you and develop program around it. If you later get a better idea, don't be afraid to move into it. That's what happens to lots of programmers, but when learning it also improves creatly how you look at the problems and you see what you could have done better in your previous projects.

    • Exactly (Score:5, Insightful)

      by Weaselmancer (533834) on Tuesday July 07, 2009 @11:49AM (#28609123)

      That was my first thought too - he's missing the *middle* step. In between examples and collaborating on a huge multi-programmer project he needs to make something for himself first.

      • Re: (Score:3, Insightful)

        Not necessarily. Submitter could take a game programming or, if available, software engineering class at a community college. Those classes almost always emphasize group projects.

        That would be a great way to jump right in to team programming experience to learn the skills of those better than yourself and you also learn the patience to work with idiots. In short, that's a great way to learn what kind of coder (team player, leader, lone wolf hacker etc. ) you are.
        • by uncqual (836337)
          While this can teach one to suffer fools kindly (or, end up on the news with neighbors and fellow students saying things like "I'm shocked. He was a quiet guy but he never seemed violent before."), the number of motivated and bright students you will find in a CC programming class is quite small. These people will mostly just "want to get the project over with and hope to get at least a 'B'" and will struggle at that. You may end up doing the entire project yourself to "get it done right". This may incorrec
          • "This may incorrectly lead you to conclude you're a 'lone wolf hacker' when in fact, you would be a good team player if you could pick a good team."

            if(you_could_pick_a_good_team) { printk(KERN_INFO "Congratulations! You get to pick your own team!); }

            Compiler Warning: Code unreachable!

            If he is any good he should get used to having people who do just enough to get by and aren't very good. It is a pretty common scenario. Of course, if he isn't very good, he is one of the 80% of Software Developers

    • by Foofoobar (318279) on Tuesday July 07, 2009 @11:49AM (#28609127)
      I second that emoticon. Alot of us learned how you learned; by just picking up books and putting it to practice. But we also went the extra mile by learning about coding practices, techniques, development practices, etc. The only way you learn about Eclipse is to start using it. The only way you learn about MySQL is to start using it. The only way you learn about MVC is to start using it. You really have to dive in and just keep your head above water.Sure you may get frustrated but if you were anything but a developer, you wouldn't have gotten this far in the first place.

      Anyone can sit in a classroom and be taught but a true developer goes out of their way and teaches themselves.
      • by Abcd1234 (188840)

        Alot of us learned how you learned

        Although, apparently "a lot" of us haven't put the same effort into our spelling and grammar skills... ;)

        • by Foofoobar (318279)
          Omigod, the lowest common denominator of trolling... spelling errors. Allow me to just say thenk ewe.
          • by Abcd1234 (188840)

            Trolling? Buh? It was a pointless comment, to be sure, but it certainly wasn't trolling. Hell, did you just choose to ignore the smilie, indicating it was meant to be a good-natured jest? Or perhaps your humour circuits are simply disabled?

            That said, oddly enough, my post does allude to an important point that's relevant to this article: writing code isn't all there is to being a developer. Effective spelling and compositional skills are vital when assembling proposals, writing requirements and design

            • by Foofoobar (318279)
              I find only three reasons to ever correct spelling: One is if you are losing an argument and can't find anything else to demean the person with, two is because you have an obsessive compulsive bent toward the english language and you can't control yourself anymore that someone with teurrettes can and third is if the person being demeaned is DELIBERATELY mispelling or mispeaking ("I axed you a question","u 6E pwn39")

              Regarding the smiley provided, I saw it as being contemptuous and chose to spit in his smi
    • Re: (Score:3, Insightful)

      by iamhigh (1252742)
      Also, what about developing a module to do something cool in a framework like Drupal or Joomla? It can be craptastic at first, but if it does what you want you are well on your way. Just clean it up a bit, make sure it conforms to their coding standards (get used to that), and submit it. Then you might be able to pull other developers in to work on *your* project, and you can learn by what they improve.
    • Re: (Score:3, Informative)

      by Tom9729 (1134127)

      Definitely agree. Also if you can't come up with your own ideas (it's hard) there are tons of inactive OSS projects that you could pickup; just search around on SourceForge for something that interests you.

      • by DriedClexler (814907) on Tuesday July 07, 2009 @12:27PM (#28609711)

        I'm in largely the same position as the submitter, and I think the problem is that jumping into existing programs like you suggest is not the simple step you make it out to be. Stuff that may same "duh!" to you, may not be obvious to others. Stupid as it sounds, what I really need is some step-by-step instruction set like:

        "If you want to contribute to [OSS project or class of OSS projects], download the source files [here], and compile them using [program], which you can download [here], by [following this compiling procedure] with [these settings]. If you're a beginner, check out the part of the code that [does simple task x] which is in [file], and see how it interacts with the rest of the program. This program depends on [other files], which you can get [here]. [Here] is an example of where it uses them."

        But I have yet to find some tutorial like this anywhere.

        Gee, it's almost like they don't want people to learn to how to contribute.

        • by Tom9729 (1134127)

          Gee, it's almost like they don't want people to learn to how to contribute.

          Most projects do have some kind of step-by-step guide to get a build environment setup. If you have trouble, post to the project's mailing list or forum.

        • by fishbowl (7759) on Tuesday July 07, 2009 @12:52PM (#28610075)

          I wish more projects were as well-organized as KDE.

          http://techbase.kde.org/Projects/PIM/KMail_Junior_Jobs#KMail_Junior_Jobs [kde.org]

        • by joss (1346)

          I don't really mean disrespect, but this isnt easy to say politely. It's a filter. The people running those projects are not looking to take on apprentices on the whole, they are looking for help. If you don't have necessary experience for that stuff to be understandable in the terse way that it is explained, you are likely to be a net loss in terms of time gained because you did something useful against time lost because you asked a lot of questions or did something stupid that needed to be fixed later.

          • Note that I said "project or class of projects". That means, your explanation is fine for any one specific project. But why isn't there a more general guide to bridge the gap between "I can write individual programs and scripts" to "I can understand real-world programs"?

            I don't see how such a guide would be a loss from the perspective of FOSS as a whole, since it would make it easier to tap already-existing programmers and increase the accessibility of projects in general.

        • (The subject was the title of a research assignment I was once given in Jr. High School).

          Gee, it's almost like they don't want people to learn to how to contribute.

          There is no royal road to learning. It's very much an individual thing. You will find that in most serious projects, there are instructions as to how to go about contributing.

          I can tell you how I did it ...

          First off, pick a project that interests you. You do not have to be any sort of an expert at first. Then, hang out where people are asking questions, user interface-wise, programming-wise, it doesn't particularly

        • Gee, it's almost like they don't want people to learn to how to contribute.

          Not necessarily, but if you can't work out how to compile a project by yourself then you are unlikely to be providing useful changes. I've helped a few new people through the build process, and the ones that have problems with steps that we don't document are usually the ones that aren't going to contribute anything useful. If you ask a question that is answered on the mailing list already then you're demonstrating that you can't use a search engine to find solutions and you can't work them out yourself,

    • There's really not much I can add to the great advice sopssa gave you, except to agree with him. If you want to learn to actually write software, then there is no substitute for just diving in and doing something. You'll learn as much from your mistakes as from your successes. You'll also learn a lot from reading other people's code.

      Think of something small that you want to accomplish, and then create a program to do it.

    • Re: (Score:3, Interesting)

      by WarlockD (623872)
      I complete agree. The best way to learn is to find a good problem you enjoy and solve it.

      I have been trying to learn practical Java even though I have a good C background. I found out the source code for The Ur-Quan Masters [sourceforge.net] was released for GPL and I thought, "Hey! I love that game, it has a special place in my heart. I also know it backward and forward, lets try to convert this C application to Java!"

      Trust me, its a miserable experience though. The code is organized haphazardly, even after its bee
      • by StikyPad (445176)

        I've worked with a lot of data files haphazardly created by some developer or another, which don't always work well or easily with the language I'm using.

        I've found that in most cases, especially if you're limited to read-only operations, it doesn't make sense to reinvent the wheel, no matter how far from a circle that wheel might be. The fact is that either way, you'll have to flesh out the data types, offsets, etc., and write code to handle it. Once you've done that, you're only creating even more code

    • Re: (Score:3, Insightful)

      by Chelloveck (14643)

      The best practice is just doing it.

      Amen. Find your personal itch and scratch it. In my case, many moons ago, I had spent all my money on a shiny new Apple //e computer -- but didn't have money for software. I needed to write papers for school (I was a senior in high school at the time), so I wrote an editor in the BASIC that came with the machine. It was a really lame editor, but it got the job done. After that I wrote a database manager, again because I needed one. Then I wrote a clone of the game Lunar La [wikipedia.org]

      • Re: (Score:3, Interesting)

        by ari_j (90255)
        Incidentally, I initially got started programming by hacking an existing Lunar Lander clone written in GW-BASIC and provided with the family computer. An EE uncle encouraged me to learn how to make it display more data on screen to aid in perfect landings. Hacking on existing code is a great place to start, because the total investment between sitting down and having code that does something is much lower than if you start a new program from scratch.

        Eventually I got a book on C++ and a copy of Turbo C+
        • Incidentally, I initially got started programming by hacking an existing Lunar Lander clone written in GW-BASIC and provided with the family computer.

          Yeah, that's a good idea. I was very, very lucky when I wanted to become a Unix expert in the mid 1980s. I had a System V-oid box at home and much of the code posted to the old Usenet source code newgroups (particularly games) were written for Berkeley Unix. Porting the stuff I was interested in to System V was as much fun as educational.

          • by ari_j (90255)
            Porting isn't nearly as much fun as it used to be. The closest I've found was porting Warzone 2100 to the Mac back in 2006, which taught me Xcode but was almost entirely an exercise in fixing endianness issues when reading and writing data files. It's more tedium than education anymore, it seems. But maybe it's in line for what other people need to learn. Want to learn a GUI toolkit? Find a program written for some other GUI and port it, you'll learn a lot and you'll learn the pros and cons of your sel
        • Really what you need to do is find something that you want to do. [...] Add a feature to a program you use regularly (an IM program, for instance), write a program that would make your life easier, or fix a random bug from some project's bug tracker.

          First you narrate how you created and adapted some really cool games, then you conclude how the question asker could adapt some boring software packages. I'd like to suggest to the question asker that he picks up your first advice. There are plenty of open source games and I would suggest the (relatively) straightforward and very addictive games of Parallel Realities [parallelrealities.co.uk], two brothers creating really cool arcade-like games. Some years ago I did a write-up on how to adjust their Starfighter game [vankuik.nl] to include an ad

          • by ari_j (90255)
            I certainly didn't mean to imply that messing with games is not an option. The whole point I was trying to drive at is to find something you think would be fun (to you), useful (to you), or both. Try different things until you find one that really gets you excited to work on, and then work on it for a while. It's a completely subjective thing and nobody can easily guess what would get another person's creative juices flowing.
            • Reading back my comment, it comes across as snide/snarky, sorry about that. I totally agree with your point -- the motivation is all important.

    • Re: (Score:2, Interesting)

      I have never found a more truthful, accurate, and informative response on Slashdot. Parent post

      The trick is simple, understand how programs "work" - once you've got the logic down its just a matter of putting that logic to a problem, then putting that solution into code. Examples only show you putting the solution into code, and don't tackle the bigger problem of really teaching you the logic.

      The biggest problem REALLY is finding the problem. Alot of people turn away when they think "Why would I take half a

      • Because of me, my school forced everyone to clear their calculators memory of programs before writing diplomas.

        Did you write the "memory cleared" program? It occurs to just about every student who can program their calculator at some point, when a school which enforces such a policy, to write a program which emulates the "on screen" look of a memory clear operation, but which in fact does nothing.

    • by al0ha (1262684)
      Well said sopssa.
    • I was on a message board for a while and had a strop and threw my rattle (long story, nobody comes out looking good).
      Anyway, decided I could do better myself.
      I use Oracle at work, so knocked up something in PL/SQL. Now nothing wrong with Oracle, but it's a slight over-kill for a message board and a little expensive should you choose to license.
      So I picked up an O'Reilly PHP/MySQL book and started reading.. then got bored and started coding.
      It is SO much more productive to have a goal and bang your head
  • Glad you asked... (Score:5, Informative)

    by dkegel (904729) on Tuesday July 07, 2009 @11:48AM (#28609081) Homepage

    Here are a few notes I wrote a while ago on the subject:
    http://kegel.com/academy/opensource.html [kegel.com]

    http://kegel.com/wine/sweng/ [kegel.com] might also be of some interest.

  • Sourceforge [sourceforge.net]
    Gna! [gna.org]
  • Thank you! (Score:2, Interesting)

    by Anonymous Coward

    I feel like I'm in the same boat as you. I like to read programming books and I feel that I'm pretty good at many of the higher-level languages; however, I'm not sure how to take that knowledge and apply it to an open-source community. I started by looking at Google Code and Sourceforge and the source code they provide for many programs. I feel like I'm capable of working on some of these projects, but it's intimidating when the program is stable and you don't know what to contribute. There are bug repo

  • Rent a coder (Score:4, Insightful)

    by qoncept (599709) on Tuesday July 07, 2009 @11:54AM (#28609195) Homepage
    Rentacoder.com. There are a number of requests out there for simple things, requested by people without any money. The strategy seems to be for people new to the site to do a few free or low paying jobs to get their rating up before tackling the high paying jobs, but a lot of these people just need something simple and don't have the time to do it and are (necessarily) understanding of people with little experience.

    My wife does odd jobs on there every now and then. Unless you work at it, it's not going to be a good way to make money, but you'll get practical experience (coding experience, if not so much development experience) from it.
    • Re:Rent a coder (Score:5, Informative)

      by Windrip (303053) on Tuesday July 07, 2009 @12:42PM (#28609929) Journal

      If you live in a 1st world economy, I wouldn't bother w/ RAC. Most buyers will only pay 3rd world wages to RAC sellers. It's quite frustrating and will probably be a complete waste of your time. The only Americans who make money at the RAC site are the owners.

    • Re: (Score:3, Informative)

      by SirLurksAlot (1169039)

      There are a number of requests out there for simple things, requested by people without any money.

      You mean like the multiple requests to do the poster's homework assignments? Or the "I need a clone of $_SITE_X" posts in which they want fully functional sites for the cost of a night at the movies? Or posts like this one [rentacoder.com] asking people to spam forums for them?

      Yes there are plenty of legitimate requests on rentacoder but the majority of them require you to leave any scruples you might have at the door. Renta

    • What I did, when I first started learning C and later when I first started learning Java, was to follow the newsgroup (comp.lang.c or comp.lang.java), and solve as many of the problems that were asked as I could (although in many cases, if it was obvious that this was somebody's homework assignment, I didn't necessarily post my solution back to the newsgroup). The "rentacoder" problems tend to be quite a bit more involved and poorly specified IMO.

  • While it might not be exactly what your looking for, I really have to give it up for the mind/life-suck that is MUDding for me, though you could just as easily apply it to the whole gaming universe as a whole, modding, etc.. It's something that brings both fun and function/al learning together, least it did for me.
    • Re: (Score:2, Insightful)

      by daid303 (843777)

      While it might not be exactly what your looking for, I really have to give it up for the mind/life-suck that is MUDding for me, though you could just as easily apply it to the whole gaming universe as a whole, modding, etc.. It's something that brings both fun and function/al learning together, least it did for me.

      If you like games, then this is the BEST advice you can get. Go get modding. I learned loads and loads of stuff while I made all kinds of silly mods for UnrealTournament. 90% of the stuff you produce is not worth releasing, but that doesn't mind. You'll just get the satisfaction of making something yourself. And with a mod you have a whole base to build on.

      Just be carefull not to jump into a mod team right away, as they fall fast, and are 99% of the time they aim to high. Just try to make simple things, a

  • :-) That was that the first one I did. Let's see, each CD has an Artist, and multiple Tracks, and each Track can have multiple Artists, each CD has a year, each track has a year, genre, cd has a name, bleh bleh bleh bleh.

    Write some program to keep track of your CDs. Then, realize what a dumb-ass you are, and get a job :-) rinse lather repeat

    • For me it used to be about creating character generators for various role-playing games. I had some pretty good ones back in the Commodore days. I especially liked my Star Frontiers generator. Good times, good times.

  • by Red Flayer (890720) on Tuesday July 07, 2009 @12:01PM (#28609299) Journal
    Emphasis mine:

    What kind of basic projects are out there, with a supportive team/mentor for me to develop, practice, learn, and contribute?

    I think you've identified that as being the key for you.

    Do you live near a Junior/Community College? They are often great resources for things like this. The computer club or whatever they call it these days is a great way to meet people you could collaborate with, and most of the professors at most of these schools (in my experience) definitely enjoy being mentors. You'd probably need to enroll in a class to be able to participate, but classes are relatively cheap and they might benefit you anyway.

    When I finished college and relocated for a job, but didn't have a family yet, I took classes at my local CC for fun and to meet people, and joined a couple of clubs. This was a great experience for me, and there were several non-traditional (read: older) students who also participated (you might fit into this group). The great thing about the computer club was that other groups would come to us for help... we wrote a lot of programs to help the other clubs (especially the engineering club, since there was so much crossover in membership).

    I'd imagine that the computer clubs now participate in open-source projects a lot, but it's been a while since I was involved... but it probably wouldn't hurt for you to start there.

    • by roscivs (923777)

      I've been interested for a while in setting up some sort of system for people to find a "supportive mentor" to help them learn a new programming language or a new software development skill, etc. If anyone's interested in collaborating on the project, leave me a comment or send me an email (username at domain name in my URL).

  • Non-Profits (Score:5, Interesting)

    by Snap E Tom (128447) on Tuesday July 07, 2009 @12:06PM (#28609403)

    I've had a lot of experience volunteering for non-profit organizations. Granted, it's not the same type of "volunteering" that you mention, but it is a very good path to gain not only coding experience, but leadership skills, business experience, and of course, contacts. On the resume, it is definitely a differentiator. In interviews, I am always asked about my volunteer work.

    That being said, there are several pitfalls:

    1) The vast majority of non-profits are inherently very conservative and risk adverse due to their unique cash flow situation. You cannot just go into a group and say, "I'll build you X,Y, and Z and it will be fabulous." You must spend time gaining their trust in a volunteer capacity they ask for. If they're advertising on a volunteer site for a programmer, great. You're in. If there is an organization you want to help, but they're not asking for IT help, you may have to spend a long time volunteering for them in whatever role they need, buddy up to the higher ups, then offer advice on how you can streamline things for them.

    2) Be careful of the organizations you list on the resume. They might not always help. The homeless, animals, and children are all very good causes that won't offend anyone. Sadly, though, gay and lesbian causes may turn off a born-again HR screener. I'm not saying don't volunteer for controversial causes, but I am saying be careful of what you put on the resume.

    3) Be sure you know what you're doing. Even though it is a learning experience for you, it isn't. You are not giving any long term help to a organization by selecting obscure tools and sloppy coding. You will not be there forever. This goes for paid work and non-profit work. You may be hit by a bus, you may have a falling out. However, the product you create will be used for a long, long time. Use best practices and common tools. Mod me down, RoRers, but I recently talked to a non-profit that couldn't find anyone with RoR experience willing to help modify an app that some fly-by-night volunteer developed. They spent months posting on Craigslist and the usual volunteer sites, and eventually had to agree on a complete rewrite in PHP from another volunteer.

    • Re:Non-Profits (Score:5, Insightful)

      by kbromer (1220380) on Tuesday July 07, 2009 @12:21PM (#28609635)
      Please, please, PLEASE be careful with this. Understand that working with non-profits is a commitment, and that they're going to be 100% reliant on your expertise and documentation. You'll need to be careful to put on your consulting hat as well, ask alot of "Why?" questions. Often times NPOs will tell you what they THINK they need, not what they ACTUALLY need in technology. Be the expert. I work with non-profits as a DB/CRM consultant, and I cannot tell you the number of well-meaning volunteers who have cost non-profits thousands of dollars (not a small sum in the NPO community) in lost time, productivity, and then additional service/IT hours to people like me to fix the mistakes, holes and general sloppiness of applications developed for them in good faith. That "volunteer" project can often turn into a massive money-pit for organizations who cannot afford it. If you do go this route, DOCUMENT EVERYTHING (EVERYTHING), and make sure the org has several copies of your documentation. I'm not suggesting you shouldn't do this, but just understand its not your personal sandbox, these are real people, doing some VERY important and impactful work (most of them at least...) Please don't treat these orgs as second-class citizens or test-beds for your corporate career or cutting-edge untested ideas.
    • Sadly, though, gay and lesbian causes may turn off a born-again HR screener.

      What about the reverse, would that be true as well? Or does it only work one way?

      • "What about the reverse, would that be true as well? Or does it only work one way?"

        I have it on good authority that the people in HR go both ways ;-)

  • I started at a general computer support/consulting company doing non-programming things. Made it known with my boss I was into that (my degree was CompSci), and we started doing inhouse things with Lotus Notes, which moved into web apps and SQL databases. Then clients started wanted work done and I was able to do that until now I'm basically doing web app/database development full-time with ASP.Net and SQL Server. The only drawback being I'm the only developer, so I don't get to interface with other devs
  • by Hognoxious (631665) on Tuesday July 07, 2009 @12:08PM (#28609429) Homepage Journal
    Drop the Visual Basic. Do it now. And never, ever, mention it again.
    • Re: (Score:2, Insightful)

      by daid303 (843777)

      Drop the Visual Basic. Do it now. And never, ever, mention it again.

      Why? Sure, no sane programmer would start a new project in VB. But next to other languages it does provide you with a bigger knowledge base. Just don't ever release something new in the wild build on VB. But don't forget, loads of corporate crap has been build on VB, and thus having some VB knowledge doesn't hurt you when trying to find a job.

      (I'm an embedded C programmer with VB6 experience)

      • by ADRA (37398)

        For what it was, VB6 was pretty good. I'd say it was excellent for the roll it was meant for, creating powerful GUI's that anyone could easily put together. It sucked when you wanted to do anything complex, but that was usually abstracted away to ActiveX land. I would say that the .NET reinvention of VB killed the platform. And as most have seen, you may as well learn C# instead, since that's the language VB.net was modelled off, not VB6.

        If a new programmer decided to learn VB.net, I'd say they're wasting t

  • Grind your way... (Score:5, Insightful)

    by Anne Honime (828246) on Tuesday July 07, 2009 @12:10PM (#28609467)

    I've been pondering over the same questions for some time, and appart from starting your own project (a good way, but not everybody has the creativity to make a successful new application, many skilled persons are best performers when putting into code someone's else ideas), I would advise you to pick a middle sized project (2 or 3 regular devs), and begin with ancillary tasks.

    Many small projects build badly for instance ; so why not clean things up there, providing a good configure script ? Submit this, do the package for your distro, and maintain it. That should give you some familiarity with the code.

    Do the code documentation if lacking, or write the user doc. Most projects lack this too. Read each line of the code in the process. At this step, you will certainly become part of the team in some way, and you will have expertise over the code.

    Clean bugs. Now, you begin to have a feeling where they might be lurking.

    Get involved in the roadmap. Code the new features you feel like you can.

    That would be my take on the process

  • scratch an itch (Score:4, Insightful)

    by richlv (778496) on Tuesday July 07, 2009 @12:10PM (#28609469)

    the best course ? find something that interests you, maybe something that you use every day - and find something you don't like about the product, or maybe think of how it could be improved.
    it's famously called scratching your own itch [catb.org].
    why is that an effective way ? because you are interested, of course ! you see the results of your work, you use them.

    what project to choose ? it's completely up to you. pick one, look at what they have on their web, wiki, join their irc channel, talk with people. see whether you like them - because that is important.

    you could look at major projects who have specific sections to help new contributors like http://contributing.openoffice.org/ [openoffice.org] or http://techbase.kde.org/Contribute [kde.org], or take a look at the many smaller projects in various categories like personal or system management software, games or... anything.

    but really, basic requirements :
    1. you are interested;
    2. you can work with the people on the project.

    everything else will come itself.
    also, you are in no way limited to a single project - actually, it is beneficial to participate in multiple projects because you'll get familiar with various organisational, code versioning, documentation and communication practices. contributing a few fixes here and there can be very eye-opening on how these things come together.

    good luck :)

  • Just do it (Score:2, Insightful)

    by Blixinator (1585261)
    Here's a few tips from my experiences. Try www.projecteuler.net Yes, they're problems with a well defined goal. But it's always up to you how to go about doing them. It's probably one of the best sites to help you develop problem solving skills using programming and forces you to delve into the often vast pool of predefined classes and methods that you will undoubtedly use again in your future if you're a dedicated programmer. I'd also suggest trying to recreate programs you've used before. One of the f
  • Sourceforge (Score:3, Insightful)

    by joshki (152061) on Tuesday July 07, 2009 @12:12PM (#28609509)

    Go to sourceforge, find a project that you have an interest in, and send a note to the developer to see if he could use the help.

    Be honest about your skill level and intentions...

  • by gjcamann (181834)

    Find a problem you have, and try to solve it by programming. Like make an address book, where you can enter in people's information and search by last name or something. Or make a program that organized your MP3 and finds duplicates. Or make a program that automatically solves Sokudo puzzles. It'll be something with utility you can use and play with, and improve over time as your skills increase. Good Luck!!

  • GiveCamp.org (Score:3, Interesting)

    by SirLurksAlot (1169039) on Tuesday July 07, 2009 @12:22PM (#28609647)

    It isn't open source but it is volunteering for non-profits. I'm actually volunteering as a developer next weekend. Student volunteers are accepted and they are partnered up with more experienced developers. The projects are scoped to be completed in a three day time frame, and it is a great opportunity to meet people in your field, not to mention being able to contribute to a worthy cause.

  • by hoover (3292)

    Programming has always been about "scratching your own itch", at least that's how I got started in the early 80s when computing classes were introduced at our school in the mid 80s. I wrote a simple basic program on a genie16+ to help us with our maths assignment (some linear algebra stuff) and we both promptly got an "A" for solving the problem in an intelligent manner and not just crunching the numbers, er equations by hand.

    I agree that in today's IT world, software is available out there in abundance tha

  • I wonder if I could volunteer for programming in an open-source community.
    There is an infinite supply of worthy projects. The hardest part is not the feature/bug you intend to do work on, it's getting a handle on the coding style of the project. One person's readable code is another person's spaghetti code.

    And then there's the social hurdle of contributing code. If the person maintaining the code base may not accept your patches. Don't take this the wrong way. If they are motivated to assist you in bec

  • What a great question. To my mind, the software that would have the most potential is a database forms and reports front end.

    The existing forms and reports development platform included in OpenOffice needs a ton of work. Take a look at M$Access. It's a very easy-to-use development platform but the back end is NOT a real database (like, say, PostgreSQL, MySQL).

  • Think of a problem that you would be interested in solving. (this is how most open source projects start) Once you've got an idea, look to see if a project exist. If you find one (or a few) see which one interest you the most and make contant with the project and see if you can offer help. Being inexperienced can be a road-block, but you have to keep at it. If you don't find a project you like or are unable to help out, start your own! Head on over to SourceForge and create a project!

    • by Whitemice (139408)

      If guidance is what the poster wants then joining an existing project is a much better idea than creating a new [lonely] one. And from experience, joining an existing project is just more fun.

  • Android, iPhone, WME: your choice.
    These gizos are loaded with more GUI devices than average computer which suggest creative uses. At the same time cell phones have less computing resources- almost as small as a 20th century computer [shudder]. Limited resources can teach you some programming economies.
  • by davecrusoe (861547) on Tuesday July 07, 2009 @12:58PM (#28610167) Homepage
    Hey there, We created Codekindness, http://www.codekindness.org/ [codekindness.org] a site that links volunteer programmers and other techs with nonprofit organizations. Interestingly, the project itself needs some support, and so if you (or anyone else) who reads this would like to take it over, please contact me (through the contact form on http://www.plml.org./ [www.plml.org] The site has been successful in the past, but there simply isn't a time to run it now - despite that the need is greater than ever. Want to make a difference? It's an open project! Cheers, --Dave
    • p.s. in response to a couple questions, yes, please, come one, come all - just send a note through the contact form on http://www.plml.org/ [plml.org] and I'll get back to you with some next steps. Thanks & cheers, --Dave
  • Depending where you live, (Me in Canada)...you at least need the certificate to open the doors, just doing it in your basement does not cut it anymore. If we lived in the old world based on skill and merit, maybe but, the new world is all about what's on paper.
    Although a certificate does not mean much, it can portray you at least respect you need some sort of formal training and
    this will let them believe that you might also respect their company's structure.

  • Find an Open Source project your interested in (I work on OpenGroupware) and ASK! If you demonstrate you are seriously interested I doubt you'll have any shortage guidance. In Open Source, and probably proprietary shops as well, aspirations also exceed available resources (time).

  • by bmajik (96670) <matt@mattevans.org> on Tuesday July 07, 2009 @02:00PM (#28611115) Homepage Journal

    Step 1: find a peice of F/OSS software that you are interested in, use, or would like to use
    Step 2: use it to do real work
    Step 3: notice something in the product that appears to be a bug or a limitation related to your real-world use or desired real-world use
    Step 4: grab the code and start looking through it. Determine where in the code the problem seems to exist. If this is a segfault or something, fire up GDB, get a stack trace, grab the correct variable state to show the data conditions leading to the problem
    Step 5: construct a repro case for the bug that shows it is a problem with the code and makes the problem portable out of your environment into the maintainers environment

    At this point, you can contact the maintainers of the project if you want to. They'll appreciate the detailed research you've done and usually it won't take them long to come up with a good fix.

    Or, you could keep going

    Step 6: construct a hypothesis about what the problem is. If you have a repro-scenario and know where in the code the problem is surfacing, work backwards to understand the data and instruction flow that gets you from reading the repro state to the code blowing up. Based on your understanding, form a hypothesis as to what the specific defect is.

    Step 7: begin working on a local fix (i.e. don't do a world-visible checkout to a version control repository) to the problem. Continue iterating on your fix until the repro-case you identified earlier appears to have been repaired. Now test the program on cases that used to work prior to your fix to do some sanity checking that you've not introduced regressions.

    Step 8: once you have a fix that appears to work, check your fix against any coding styles or other conventions that appear to be in use in the project. You may want to look at past respository commits and comments in the file(s) you've worked into infer as much as possible about this.

    Step 9: wrap it all up. Compose an email describing the problem, the repro case, your understanding of the the solution, your patch, and the tests you did on the patch. Email the maintainers of the project and ask them if your problem and solution make sense.

    Step 10: based on what the maintainers say, your work may be done or you may need to iterate on your patch to improve its quality or conformance to the projects expectations. Your goal is to get a developer to accept any part of your work -- ideally, they'd commit your patch as-is, but if nothing else, the investigation you've done thus far will be helpful to them if they want to do a "better" fix in the future. And the tests/repros you've documented will be helpful for you (and them) to try when evaluating future fixes.

    This is the easiest way to get your feet wet in _any_ F/OSS project. I've contributed small fixes to a few different projects, and all of them were because I was trying to do something with the software that didn't work for me and my scenarios, and I investigated the problem to resolution and then submitted my findings to the real maintainers. In no case have I asked to become "part of the project" or any other such thing. If you find yourself drawn to a particular project on a regular basis, doing what I've described on a frequent basis will show the existing maintainers that you are serious, you are committed, and that you do good quality work. They'll ask YOU to start looking at stuff above and beyond what you've already done, and the involvement and sense of inclusiveness will happen naturally.

    Most people love to get free work done on their projects. Most have open repositories, email lists, and IRC channels. Just get to work :)

  • by raw-sewage (679226) on Tuesday July 07, 2009 @02:26PM (#28611555)

    A lot of comments here are of the "scratch your own itch" or "just find a project and dive in" variety. I think those are great ideas.

    But what about finding a mentor or coach? I've been a professional developer for about eight years now, spanning two jobs. In my first job, I had a mentor. Not so much for coding, but just someone to show me the ropes around the company, explain why things are the way they are, etc. I learned a ton from him; maybe stuff I could have learned on my own (or at least via asking lots of different people questions), eventually, but the frustration level would have been significantly higher. My mentor ultimately moved on, but by then I had gained experience and responsibility in that group. I knew what I was doing.

    Another, experienced developer came into the group. I wouldn't call him so much a mentor, but a peer who was great just to bounce ideas off of. We could have easily worked in "silos", with a minimum of communication, and probably been reasonably successful. But, again, just having a willing cohort made things go a lot more smoothly.

    All the above regarding my previous job has been underscored by my second and current job: no mentoring, total "trial by fire". Yeah, I know what I'm doing now, and can get by well enough. But I was miserable for a long time, given that there were simple things that someone could have helped me with and saved me a lot of time and frustration. And the "team" I'm on consists of me and one other guy. The other guy could have been a mentor, as he has several more years of experience in this field than me. But his communication skills are awful. And even though his code works, everybody who has ever looked at it cringes in disgust. So, if anything, he's an anti-mentor.

    The point in all this: in coding, or even work in general, it's nice to have a mentor, or at least a teammate with whom you can have an intelligent conversation. I personally find myself learning more, at a faster pace, and less frustrated when working with someone who's at least in the same ballpark as me mentally. Especially with coding: I greatly lament my current lack of teammates with whom I can do "cardboard programming"---just talking through my work out-loud, or bouncing ideas off someone often results in better code or design, or in the worst case, a better understanding of the issue(s) at hand.

  • It's less important for you to read books on how to use specific programming languages, and more important for you to know how to code well. A book like Code Complete is a good start. Make sure you can write clean, efficient, well organized and sufficiently (but not overly) commented code. Once you are confident you won't be doing shoddy work, hop onto a site like Sourceforge and start browsing the open source projects on there. Pick an application that interests you or maybe one that you already use and en

  • I would agree with many of those saying start your own project first, or some simple stuff from places like Rent-A-Coder that another poster mentioned.

    The thing is, that being not very experienced you could well do more harm than good to start with. It's why it's so hard to find a job with a company just starting out, and also why you might have trouble integrating at first with a big open source project.

    So you need to build a bit of real world experience... your own project is good, as long as you publis

  • Here is why you are making this a difficult problem for yourself. Social and technical skills do not have to be acquired simultaneously. First and foremost, programming is best learned on your own, and programmers often aren't good teachers of teamwork to begin with. So I say, do something specifically for teamwork. Like, picking up a team sport.

    If you are making social skills into a technical problem for yourself, you are already starting off on the wrong foot.

    If you want to become the leader of a programm

  • congratulations for deciding you could use someone with experience to be around

    go to the most challenging and difficult shop you can possibly. not a community college or a university.
    someplace where they write compilers for toy languages over a weekend. can spend an hour talking about the
    first 100 instructions after hard reset. someplace where they actually code instead of whinging about patterns

  • If you are really just learning to "program," then practice alone first by working on a solo project. That's because working in a group requires lots of skills that aren't directly related to what is typically called "programming."

    For instance, lots of open source projects are concerned with portability, meaning they need to use something like Automake and Autoconf. Working with these systems requires some knowledge, and although it is "programming" it's probably not what you had in mind. When you write som

  • I've got a small project that will benefit allot of people moving to GNU/Linux. I could use some help on enhancing it if you are interested. It is a firefox plug-in that is finished to the degree it is ready for distribution. It lacks allot of desirable features you could work on. Nothing too complicated either. Send an email to jade -@- kglug do.t org.
  • You don't need to ask anyone permission, just show up and start helping out. If you check out the source code to the Apache HTTP Server [apache.org] (find out how at http://httpd.apache.org/dev/devnotes.html [apache.org]), you'll find 50 instances of the word "FIXME" in the source code (case insensitive search). Check out what the original author thought still needs fixing, and post a patch to dev@httpd.apache.org. Alternatively, you can look in the bug database [apache.org] and start picking low hanging fruit. Again, no permission needed.

One small step for man, one giant stumble for mankind.

Working...