Slashdot Mirror


Volunteer Programming For Dummies?

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

40 of 195 comments (clear)

  1. make your own stuff by sopssa · · Score: 5, Insightful

    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.

    1. Re:make your own stuff by Foofoobar · · Score: 4, Insightful

      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.

      --
      This is my sig. There are many like it but this one is mine.
    2. Re:make your own stuff by iamhigh · · Score: 2, Insightful

      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.

      --
      No comprende? Let me type that a little slower for you...
    3. Re:make your own stuff by Tom9729 · · Score: 2, Informative

      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.

    4. Re:make your own stuff by DriedClexler · · Score: 4, Interesting

      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.

      --
      Information theory is life. The rest is just the KL divergence.
    5. Re:make your own stuff by WarlockD · · Score: 2, Interesting

      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 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 been ported to the PC. I never dealt with SDL so I have to go back on a lot of API's to figure out how they are doing the graphics. Heck, all I got now is just a handful of objects that just handle some simple database operations. Did I mention I am also "learning" Java? I barely know how JFrame works let alone the Graphics object. (Or Graphics2D)

      However, but struggling with this I am learning, by leaps and bonds, more about Java than I would of ever done in a book. I have to make practical decisions on the conversion that may effect the rest of my coding (ie, should I keep the original uqm file and resource file, or construct one easier for Java to manipulate)

      If I was you, I would search the net for a project I was interested in, see if there is free code available, then attempt to finish it. At the very least your learning some basic programing skills. If you finish, you would also contribute to the coding community :)

      PS - Also, it teaches you to document your code. I can't wine about the quality of the C comments in this thing because I don't comment very well myself:P

    6. Re:make your own stuff by fishbowl · · Score: 5, Interesting

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

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

      --
      -fb Everything not expressly forbidden is now mandatory.
    7. Re:make your own stuff by Chelloveck · · Score: 2, Insightful

      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 Lander just for the hell of it.

      Find something you want done, and do it. Don't worry about whether or not anyone else will see it. Like web-comics? Write a screen-scraper that downloads your favorites and mails them to you. Like porn? Ditto. Play paper-and-pencil role-playing games? Write a character generation program, or a combat program. Reinvent the wheel -- write something to unpack zip files, for example. Just write something.

      --
      Chelloveck
      I give up on debugging. From now on, SIGSEGV is a feature.
    8. Re:make your own stuff by Monkeedude1212 · · 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 an hour to program a step that takes me 30 seconds to do?" In fact thats what I did. Which I now see as erroneous, because any step that will be done more then 100 times that can be coded in a short time is always worth it.

      To be honest, I found the way I started was trying to design a way to kill time in class. I had taken a VB module in Comp Tech, which was very "By example" and unapplicable. But anyways, so I popped up my TI-83 Calculator and decided to program a simple game: High or low. 5 Guesses to get the # between 1 and 100, and the Calculator would only tell me if I were too high or too low.
      After mastering that (and programming it on all of my friends Calculators, because none of us had those nifty link cables) - It wasn't long before I took up another project.

      By the end of that year, I had a small scale, rip off of space invaders, about 6 enemies approaching you on screen, and you at the bottom moving back and forth to try and hit them.

      By Finals, I had programmed dynamic solutions to series of equations (solving algebra), also an easy to read and use UI for calculating all the elements of a circle (radius, Diameter, circumference, even Arcs and stuff!). Also a program that did derivatives in calculus. Because of me, my school forced everyone to clear their calculators memory of programs before writing diplomas.

    9. Re:make your own stuff by ari_j · · Score: 2, Interesting

      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++ and learned the language. Around that time I discovered Minix and did a ton of programming on a 286 laptop running it, all in C. The big accomplishment was probably a set of several Tic Tac Toe playing programs with different AI strategies. Then I bought a used Sun workstation and learned more languages, probably Perl but it's hard to say anymore.

      But where I got the single largest segment of experience programming was hacking at PennMUSH, the online text-based role-playing game server software. It's good for this purpose because it is (even more so now than it was a decade ago) reasonably well-designed and well-documented, and because it is roughly the maximum size and complexity for single-programmer comprehension without investing years in the learning curve.

      Really what you need to do is find something that you want to do. Don't just try to join a project to learn - you and they will both end up frustrated. 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. If you get really desperate, watch the changelog for a program you use and try to implement equivalent changes without reading the code that was committed in the project's main repository first.

  2. Glad you asked... by dkegel · · Score: 4, Informative

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

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

    1. Re:Glad you asked... by Reason58 · · Score: 4, Funny

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

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

      I'll be honest, I thought those links were to something else entirely.

  3. Exactly by Weaselmancer · · Score: 4, Insightful

    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.

    --
    Weaselmancer
    rediculous.
    1. Re:Exactly by Ethanol-fueled · · 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.

  4. Thank you! by Anonymous Coward · · Score: 2, Interesting

    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 reports I can look at, but they are generally over my head.

    1. Re:Thank you! by Deltaspectre · · Score: 2, Interesting

      A good place to start is the IRC channel for a project. Especially during the summer, since the organizations in Summer of Code will have idea lists up with many many unclaimed ideas. The org I'm working for this summer is Thousand Parsec ( http://www.thousandparsec.net/wiki/Ideas_for_Programmers ), but you can find other idea pages here: http://socghop.appspot.com/program/accepted_orgs/google/gsoc2009

      --
      My UID is prime... is yours?
    2. Re:Thank you! by richlv · · Score: 4, Informative

      some projects have so called "junior jobs" - bugs or improvements that are easy enough so that a new contributor can tackle them - for example, http://techbase.kde.org/Contribute/Junior_Jobs

      --
      Rich
  5. Rent a coder by qoncept · · Score: 3, Insightful

    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.

    --
    Whale
    1. Re:Rent a coder by Windrip · · Score: 5, Informative

      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.

    2. Re:Rent a coder by SirLurksAlot · · Score: 2, Informative

      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 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. Rentacoder is a nice way to make a quick buck or two but he would be better off contributing to any number of other projects that actually deserve his time and effort.

      --
      God, schmod. I want my monkey man!
  6. MUDding Community by Cult+of+Creativity · · Score: 2, Insightful

    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.

    1. Re:MUDding Community by daid303 · · Score: 2, Insightful

      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, as they can be great fun. (See CrateDM)

      If you are not into games, then there are many other options. If you love websites then go make something with php, just look what you need and build it. Build your own blogging software for all we care, sure there are 100000 php blogging projects out there, but that doesn't learn you anything.

  7. local community colleges by Red+Flayer · · Score: 4, Insightful
    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.

    --
    "Trolls they were, but filled with the evil will of their master: a fell race..." -- J.R.R. Tolkien on Olog-hai
  8. Non-Profits by Snap+E+Tom · · Score: 4, Interesting

    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.

    1. Re:Non-Profits by kbromer · · Score: 5, Insightful

      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.

  9. Drop the Visual Basic. by Hognoxious · · Score: 4, Insightful

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

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    1. Re:Drop the Visual Basic. by daid303 · · Score: 2, Insightful

      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)

  10. Grind your way... by Anne+Honime · · Score: 4, Insightful

    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

  11. scratch an itch by richlv · · Score: 3, Insightful

    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.
    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/ or http://techbase.kde.org/Contribute, 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 :)

    --
    Rich
  12. Just do it by Blixinator · · Score: 2, Insightful

    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 first things I tried to recreate was minesweeper; a project that vastly improved my recursive function programming, frame organization, and event listening. The point I'm trying to make is, the best way to improve your skills and put the knowledge you already have to good use is to just program. Go out (Well, since we're talking programming, I guess we'll stay in) and just experiment. You don't even need to have a goal in mind. Experiment with the limits of a language. Go see how well arrays handle redefinition. Find instances where you prefer one method over another. Try to improve on your past work and examples that you've been given. Just do it.

    --
    "The Y chromosome is genetic. The odds are very good that if you are male then your father was too." -Internet Commenter
  13. Sourceforge by joshki · · Score: 2, Insightful

    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...

    --
    I do not read or respond to AC's. If you want a discussion, log in. Otherwise, don't waste your time.
  14. Make your own problem by gjcamann · · Score: 2, Insightful

    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!!

  15. GiveCamp.org by SirLurksAlot · · Score: 2, Interesting

    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.

    --
    God, schmod. I want my monkey man!
  16. Re:Start here by westlake · · Score: 4, Insightful

    Navigating Sourceforge is a voyage of the damned.

    There are only two types of projects here. Those going nowhere, and those already solidly anchored.

  17. Scratching your own Itch by hoover · · Score: 2, Insightful

    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 that probably solves 99% of the problems you might have tackled yourself 20 or even 30 years ago, but there's always something left that may seem interesting. Maybe it's not even outright programming, but "scripting together" some available tools to do a job not previously thought of by the original designers.

    The last pet project I worked on was a "remote control" for vdr because I got fed up with vdradmin-am's javascript based remote control that disappeared whenever I had to restart Minefield (so daily as I'm running 3.6a ;-). I needed a stand alone program for that, so I dabbled with Mono and its gui tools a bit, but ultimately ended up with coding something rather ugly in glade / Python.

    Of course any python guy worth his salt would ban me into the lower chambers of VB development if they saw the code, but even after 25 years of dealing with computers it's still a bit of a buzz to use your own stuff, something you wrote and that can be adapted quickly to scratch any new itch that might come up.

    In closing, you'll find something to work on without ever resorting to sourceforge if you think long and hard enough.

    --
    Ever wondered whats wrong with the world? http://www.ishmael.org/
  18. CodeKindness - Tech volunteers for nonprofits by davecrusoe · · Score: 3, Informative

    Hey there, We created Codekindness, http://www.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./ 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

  19. Re:If you have to ask, you're no use by jmnugent · · Score: 2, Insightful

    "If you have to ask, you're no use" What a decidedly non-welcoming attitude. I have the same problem as the OP, and its attitudes like this that really make me resent myself for wanting to learn to program. It's like some super double-secret club where all of the members have some attitude like "Well, it was hard for us, and we had to figure it out on our own (uphill, both ways, in the snow) and so therefor you should have to do the same before we will let you in. Sure, technology is better now, and we could improve the learning structure and lower the barriers to entry, but thats sissy girl talk." New and learning programmers don't want "constant reassurance or hand-holding"... we want mentors who will guide and teach us along the way, without being condescending or flippant. New and learning programmers have ideas and new ways of seeing things that should be equally valued for their potential. You'd think... existing programmers would understand that documentation and training efficacy are vitally important avenues to bring new programmers up to speed. The better you welcome and train new programmers, the better your field becomes. We're not asking for it to be easy.. I have no problem with "earning my place" ... but I completely agree with some other postings here that the field seems either intentionally structured to be difficult to break into... OR so chaotic and unstructured that no one gives a damn to improve those aspects of it.

  20. Try writing good bug reports by bmajik · · Score: 2, Interesting

    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 :)

    --
    My opinions are my own, and do not necessarily represent those of my employer.
  21. But what about the mentoring aspect? by raw-sewage · · Score: 2, Interesting

    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.

  22. Contact me- project for you by bootup · · Score: 2, Interesting

    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.