Volunteer Programming For Dummies? 195
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?"
make your own stuff (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.
Exactly (Score:5, 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.
Re: (Score:3, Insightful)
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.
Re: (Score:2)
Re: (Score:2)
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
Re:make your own stuff (Score:5, Insightful)
Anyone can sit in a classroom and be taught but a true developer goes out of their way and teaches themselves.
Re: (Score:2)
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... ;)
Re: (Score:2)
Re: (Score:2)
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
Re: (Score:2)
Regarding the smiley provided, I saw it as being contemptuous and chose to spit in his smi
Re: (Score:2)
Re: (Score:3, Insightful)
Re: (Score:3, 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.
Re:make your own stuff (Score:5, 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.
Re: (Score:2)
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.
Re:make your own stuff (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 [kde.org]
Re: (Score:2)
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.
Re: (Score:2)
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.
Re: (Score:2)
This is true in corporate and business sense. But since it's open source, people can just come and go and the long-term teaching you went thru is useless.
become "the world's greatest expert" (Score:2)
(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
Re: (Score:2)
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,
Re: (Score:2)
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)
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
Re: (Score:2)
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)
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)
Eventually I got a book on C++ and a copy of Turbo C+
Port someone else's stuff (Score:2)
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.
Re: (Score:2)
Re: (Score:2)
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
Re: (Score:2)
Re: (Score:2)
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
Re: (Score:2)
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.
Re: (Score:2)
Precisely (Score:2)
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
Re: (Score:2)
You either did not read my message really well.
I'm starting to get tired of working with examples that are not put into real use.
This implies that he has only worked on examples provided by programming books or such. You don't need a team to work on your own ideas or programs, nor you need to "join" a team to work on open source projects. But before you do actually join a team, you should be pretty used to even create and publish stuff on your own. Be it a commercial product, freeware or open source project.
I'm an insightful interesting funny f'baitn troll (Score:2)
Actually, I believe everyone reads the links (ObCarAnalogy: you pretty much have to look; it is not entirely unlike an auto accident scene in this regard.) What is much more rare is for people to click on the link, read the article, give it careful consideration, augment that with some research, and post an intelligent well thought out post peppered with interesting, insightful observations and funny anecdotes. Oh yeah, I
Glad you asked... (Score:5, Informative)
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.
Re:Glad you asked... (Score:5, Funny)
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.
I'll be honest, I thought those links were to something else entirely.
Re: (Score:2)
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.
I'll be honest, I thought those links were to something else entirely.
And you clicked on them based on that rather than an interest in programming topics? Dude you're messed up... :P
Re: (Score:2)
http://www.mosnews.com/weird/2009/07/07/strongvagina/ [mosnews.com]
Start here (Score:2)
Gna! [gna.org]
Re:Start here (Score:5, 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.
Thank you! (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 repo
Re: (Score:3, 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 [thousandparsec.net] ), but you can find other idea pages here: http://socghop.appspot.com/program/accepted_orgs/google/gsoc2009 [appspot.com]
Re: (Score:2)
Re:Thank you! (Score:5, 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 [kde.org]
Rent a coder (Score:4, Insightful)
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)
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.
But when the point is experience over money... (Score:2)
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.
If I were wanting to break into programming though, it seems like a good approach - it's better than an unpaid internship in that you earn a little, and have some practical work experience you can point to (which is more than a number of college grads can say).
I see, you wnat inflanted payments. (Score:2)
Interesting concept.
Have you heard about competition?
Re: (Score:3, Informative)
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
Re: (Score:2)
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.
MUDding Community (Score:2, Insightful)
Re: (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, a
First, write a database to keep track of your CDs (Score:2)
:-) 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
Re: (Score:2)
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.
local community colleges (Score:5, Insightful)
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.
Re: (Score:2)
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)
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)
Re: (Score:2)
What about the reverse, would that be true as well? Or does it only work one way?
Re: (Score:2)
I have it on good authority that the people in HR go both ways ;-)
Re: (Score:2)
Many Options (Score:2)
Drop the Visual Basic. (Score:4, Insightful)
Re: (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)
Re: (Score:2)
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
Re: (Score:2)
Grind your way... (Score:5, 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
scratch an itch (Score:4, 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 [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)
Sourceforge (Score:3, 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...
Make your own problem (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!!
GiveCamp.org (Score:3, 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.
get mentor (Score:2)
http://www.kde.org/getinvolved/ [kde.org]
Scratching your own Itch (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 tha
Notes on Contributing to a Project (Score:2)
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
Database front end (Score:2)
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).
My suggestion (Score:2)
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!
Re: (Score:2)
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.
cell phone app - hotest platform around (Score:2)
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.
CodeKindness - Tech volunteers for nonprofits (Score:4, Informative)
Re: (Score:2)
Re: (Score:2)
I hate to say it... (Score:2)
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.
Just Ask! (Score:2)
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).
Try writing good bug reports (Score:3, 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 :)
But what about the mentoring aspect? (Score:3, 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.
Get a Good Start (Score:2)
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
first, do no harm (Score:2)
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
Pick up a basketball. (Score:2)
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
answered your own question (Score:2)
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
Do it alone first, because teams are different (Score:2)
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
Contact me- project for you (Score:2, Interesting)
Just show up and start helping out (Score:2)
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.
Re: (Score:2, Insightful)
Re: (Score:2)
Wow... I hate to break this to you, but it wasn't really that hard for us... I certainly didn't need or want any mentoring, beside the odd technical book or code samples (you know, like the ones that are freely available as open source).
Re: (Score:2)
"If you have to ask, you're no use" What a decidedly non-welcoming attitude.
KDE isn't a social club. They're there to get something done, and if you aren't at a professional level, then maybe you need to start somewhere else.
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.
It's not that hard, but you have to get to at least good before you're valuable on a large project.
we want mentors who will guide and teach us along the way, without being condescending or flippant.
My free time is in short supply - why do you expect that it's someone's job to help you get better? Find a mentor local to you and be thankful for whatever help you can get.
the field seems either intentionally structured to be difficult to break into
Buddy boy, you have got to be kidding - no certs, no official gatekeeper, hell no specific
Re: (Score:2)
It's a question of attitude. Good developers, by and large, try to figure things out themselves. Sometimes they fail. If you come and say 'solve this problem for me' then you will get less help than if you say 'I tried to solve this problem like this, but it didn't work and now I'm stuck. Please help.' We don't expect everyone new to a project to be a first-rate coder, but we know from experience that the people who will become assets to the project are the ones that try to solve problems themselves be