It's a question that pops up every few months on many of the developer mailing
lists: "What do I have to do to get started as a coder?" For those who love the
Open Source way of doing things, but have little or no experience writing
programs, the barriers to entrance appear high, especially because there are no
set courses to follow before gaining Open Source knighthood.Actually, the opposite is closer to the truth -- just about anyone with enough perseverance and desire can gain the skills needed to be taken seriously as developer. You just have to know where to start.
Choose your foil
First you have to learn a programming language. If you want to become established as a coder for GNOME or KDE, learn C (for GNOME) or C++ (for KDE). The two languages are not interchangeable. Programmer Bjarne Stroustrup, the man who designed and implemented C++, says that learning C is not a requirement for picking up C++, though it is a "direct descendent" of C. So pick one, get a book, and learn the basics.
Scott Johnston, the creator of ivtools and a special effects guru for Accom, spent a couple of years running the Vectaport project. He's worked with many development newbies and says that, at least for KDE, you need to have a solid foundation before jumping in. "I think if you surveyed all the significant KDE/QT developers, you would find mostly computer scientists with a background in both large-scale C-based applications, and some sort of interpretive object-oriented language."
Rick Stones, a C++ and Java programmer, is the co-author of Beginning Linux Programming, Professional Linux Programming, and an upcoming release dealing with PostgreSQL, all published by Wrox. He says wannabe developers should "pick a project that is live and interests you. Look for an area that needs improvement, that no one seems to be tackling, but is simple enough that one person can tackle it in a reasonable timeframe."
Fence a few dummies
After you have a basic knowledge of C or C++, learn to use the specialized programs designed for creating Linux desktops, and "play with a few example programs using a development tool," says Andreas Pour of the KDE project. If you're going for KDE-developer status, download KDevelop or KDE Studio, recommends Pour. GNOME applications are built using GTK+ (the Gimp Tool Kit).
"Once you feel like you can edit projects enough to change their behavior (like add a dialog), look around for a project under development that sounds interesting," says Pour. Usually, especially for KDE and GNOME, these projects are listed collectively on a special Web page, like apps.kde.com or www.gnome.org/applist/list.php3.
The first attack
When you find a project that meets your standards, there are a few things you can do to get involved. Study the project's home page. Often there will be a request for developers to get involved with the project. If not, you can always contact the project owner and offer your services. Says Pour, "Be aware that many developers have been stung -- someone has expressed an interest, the developer spent a lot of time explaining things, and then the other person is never heard from again."
While simply asking about a project is not a "till death do us part" proposition, Pour suggests that a better way to win friends in the developer's community is to submit a patch. A patch is an addition or enhancement to the application, like a bug fix, an additional dialog, or a driver. In other words, don't ask about helping, just do it.
Let me sit at your table, Arthur, and hand me Excalibur while you're at it
Entrance into the Open Source community of programmers is pretty much
do-it-yourself. That's not to say that there is no help -- on the contrary,
there are hundreds, maybe even thousands, with more experience who are willing
to help. But you do have to seek them out, treat them tenderly, and resist
abusing their good nature with your naive newbie questions.
Don't be afraid to seek out a programming mentor once you've mastered the basics. But be careful. "Things are definitely not as organized or evolved as, say, the field of martial arts," says Johnston. "You can't go to a master's [programming] gym and pay him money to train you. And even if you could, it is very hard for the novice to separate posers from masters, because they understand little about what really matters in software development," like the "ability to incrementally develop code, evolving from one working state to another, to another."
Pour likens today's Open Source mentorship, conducted mostly on the Internet, to a modified master-apprentice model. He says that the old standard of mentorship was almost akin to parenting, so close were the mentor and mentee, both relationally and with regard to physical location. Of the programming master-apprentice model he says, "Open Source has developed its own unique blend of relationships and methods for transmitting knowledge between generations of programmers."
For one thing, the source code is open and available to anyone for study. Newbies can look at the way an application was created and use it as the basis for what they do.
Then there's documentation, says Pour. "Whether it's an FAQ, a HOWTO, or even a README, the information is logged in such a manner that subsequent generations, with a little motivation, can learn how to use the tool." There are also a number of Web sites dedicated to helping new programmers learn to code.
Also important, says Pour, are newsgroups and mailing lists, as well as IRC, which provide quick help to apprentices when they need it. "In a way, this is the ideal master-apprentice relationship, because the same person can be the master on one channel and the apprentice on the other, and can even be acting in both roles at the same time."
Advogato.org is a community site for Free Software developers. It uses a peer certification system whereby the members certify each other, specifying one of three skill levels: apprentice, journeyer, and master. Just because someone is certified as a master, however, doesn't mean they're looking for mentorship stints, so if you're brave enough to approach one of the gurus there, don't be surprised if you get no response.
Johnston learned by using a modified mentorship approach when he was getting involved in Open Source development. "When I started, I searched out the best software at the time (from Mark Linton, John Vlissides, Dough Schmidt), and leapt into studying the source and evolving it. I was indirectly mentored by their written works."
Pour believes it is crucial for mentees who want direct tutelage to provide some benefit for their teachers. "There's no such thing as a free lunch; you can't expect a stranger on the Internet to spend valuable time away from friends, family, and coding to teach you stuff without any return commitment, simply because you put an email in their inbox. Make it interesting for your mentor. Let the person know you won't just abandon the project as soon as you don't need the help anymore, and that you will use the skills you learn to make the program better. In other words, make the relationship reciprocal."
Johnston has experienced the drop-out phenomenon Pour hints at. "I have been willing to assist any and all candidates for years. But I find an incredible gap between the necessary skills to be acquired, and the initial level of skill and patience. This usually means the person will quickly move on to another programming approach, one with a larger PR budget and more 'instant gratification' [like Perl, Tcl or other scripting languages]. Those with enough skills to successfulyy be trained usually have a need to earn a living at programming, and only use the software which they can convince their employers to allow them to use."
Knightly character builds
It is true that anyone can become a programmer. But certain types of people will succeed more often than others. It comes down to personality.
"You have to really like the activity of making computers do something. Some people program to get promoted so they can tell others how to program. Some people program so they can write textbooks about programming. But some people program to see the code run," says Johnston.
Pour adds, "As a gross generalization, I think you need to be intelligent in a rational, logical way to be a good coder. Code is kind of like a huge mathematical proof. You need to be able to think in different levels of abstraction and you need to make sure each step in your code logically leads you to the next goal.
"You probably also have to like coffee."