Usually, software developers never pushed a final version without releasing RC (Release Candidate) or Beta version, because software is getting more complex. With lots of configuration, options, and possibility of hardware combination, it's getting more difficult to have a perfect software running on every machine and devices available on the market.
In most cases, RC can be considered a snapshot of what will the final version be, with some bugs that are still around and need to get public attention so that testing will be done by people around the world as they try the that version.
It is somewhat quite different in the Linux kernel development. In Linux kernel development, RC1 is the time that marks the end of merge window, which is the time where Linus accept all the MAJOR changes to the kernel to be included in the next version. You can say that RC1 will be FULL of SURPRISES you will never know before as before RC1, the new features are mostly build separately outside the kernel mainline.
While some people have no problem working on RC1, not everybody has the same experience. Check this thread in LKML, where Gene Heskett, one of the kernel tester has just destroyed his MCP55 eth0 port on his US$275 ASUS M2N-SLI Deluxe motherboard when he tried to run 2.6.29-RC1 on his first attempt. While it's not yet concluded that the kernel who did this, this might be a lesson for us to be more carefull dealing with software.
Imagine if there are no RC releases, then it will ruin most people who has the same motherboard around the world. Public testing is very important as you alone can never overcome the result of people around the world. This is the power of collaboration. Even when the developers are still sleeping, people at the other side of the world are working, testing, and compiling the kernel and report it to the mailing list. It's just so great to see the harmony