Not really. You'll need to know how to make useful things efficiently and relatively bug free. Check out some freelance websites such as http://www.vworker.com/ or http://www.elance.com/ to get an idea of what kind of jobs people need done.
It depends on the job. Most involve website development, which is more HTML/CSS... Others will require knowledge of networking, OpenGL/Direct3d, GUI frameworks etc. Just browse through the jobs and see what people want/need done. From there you can easily figure out what types of programming will be required.
Learning the language is only half the battle. The other half is learning how to apply it. That only comes with practice. I was programming in C++ for years before I felt I finally "got it". Only to find out 3 years later that I didn't really get it and was not just starting to get it.
So yeah... it takes a long time. People looking for freelancer are usually looking for someone with experience. Novice code is usually pretty easy to spot... and it's always hard to maintain. So there's not really high demand for it, even if it's cheap.
there is no real description. the ideal job is where you start doing stuff you know, to ground it in, then get a project that you have never had to build before, and apply those concepts to the current project. i used nothing more advanced than ummmm.... well nothing was advanced in that, but how i used them made the difference